Jean-Philippe Brucker
2014-08-08 12:02:43 UTC
Hello,
This patch series is a proposal of the initial 32bit ARM support for
Jailhouse.
I based this port on the Versatile Express platform, allowing it to run
on ARM's system models. Since there is as many different memory maps in
the ARM ecosystem as implementations, some discussions will be needed to
add support for device trees before adding new platform.
For the moment, I did not add any major change to the core or the driver.
I also tested it on an Odroid-XU, but I am not comfortable adding it to
this series, since I used the non-mainline hardkernel tree with some
patches of my own to fix virtualisation support.
This series is NOT an official support from ARM ltd., but the result of
my summer placement, which ends this week. I will continue discussing and
working on it on my own time, using my home address.
A few forewords about virtualisation on ARM:
Since ARMv7 (Cortex-A15), ARM provides hardware virtualisation
extensions in the form of an additional Exception Level. This level uses
a stage-2 level of page tables to partition the guest and allows to trap
sensitive instructions.
It also disposes of its own stage-1 page tables, allowing to use
cacheable and shareable memory types. In addition, the Generic Interrupt
Controller (GIC) provides a way to virtualise all interrupts.
The kernel runs at Exception Level 1 (EL1) and the hypervisor at EL2.
A trap is taken to the EL2 vectors and a single syndrome register (HSR)
allows the hypervisor to dispatch the trap and emulate the trapped
instruction, or inject an interrupt for example.
Implemented features
====================
* Hypervisor enabling and disabling
When it is started at EL2, Linux installs a small vector stub, allowing
an hypervisor to override them and install its own vectors.
This installation is a bit delicate, since the initial jump is done from
the kernel context, that uses an MMU and caches, to a completely bare
environment. Here, the EL2 MMU is immediately configured while inside an
identity-mapped region, and the hypervisor installation may safely
continue.
* Cell creation and destruction
The core does most of the work when partitioning the machine, by using
the paging callbacks for the cell's stage-2 pages.
Parking CPUs is done using a small PSCI implementation: suspended or
stopped cells spin in the hypervisor, waiting for a mailbox to be updated.
When destroying a cell or shutting down Jailhouse, it must use the
platform-specific hotplug features.
All platform features are currently detected using the CONFIG options of
the host kernel.
* Virtual interrupts (GICv2 and GICv3)
All physical interrupts are taken to the hypervisor, and then directly
injected into the cell, using a series of List Registers belonging to the
GIC's interface. Software must also maintain a structure of postponed
interrupts, in case all list registers are in use or for the purpose of
injecting SGIs into another CPU.
Software-generated interrupts (SGIs) are trapped and moderated by the
hypervisor. GICv2 uses memory-mapped accesses to the distributor, whilst
GICv3 uses system registers. After checking the SGI's targets, they are
stored in the CPUs pending structures, and injected using a
synchronisation SGI across the cores.
Private-Peripheral interrupts (PPIs) are dedicated to each core and
don't need moderation. A first attempt is made to directly write the list
registers, and are stored in the per-cpu data if it fails.
Shared-Peripheral interrupts (SPIs) are also directly injected, but are
configured in the global GIC distributor to target specific CPUs.
In this port, they are configured from the cell's bitmap: initially
assigned to the root's first CPU, they are re-routed when a cell is
created or destroyed.
All accesses to the distributor are filtered, to only allow the guests to
configure SPIs belonging them.
Missing features
================
* 64bit support, although this series aims to be abstract enough to ease
the 64bit port.
* Thumb2 host: this was not a priority on my TODO list, but should not be
too difficult to add.
* Hosts using PSCI: I did not have access to a boot-monitor with PSCI.
* Clusters: since the setup code currently uses a simple addition of the
MPIDR to deduce the per-cpu datas location and size, clusters are not
supported yet. entry.S will need to fetch the hypervisor's header to
find out the total number of online CPUs and generate those base
addresses, maybe by filling a hashmap.
* Exhaustive reset of the EL1 environment when starting a cell (Perf,
debug features, float...)
* IRQs greater than 64, because of the current bitmap limitation in the
cells configs. More than one irqchip could be used, but it would be
semantically confusing.
* IRQ remapping, although I understood that support may be added in the
core very soon.
* Clean platform handling, see below.
Points that need more discussions
=================================
* Linux on ARM heavily relies on Device Trees to describe the different
devices available and their features. The best way to provide a clean
device support in Jailhouse would be for the driver to pass the kernel
device tree in the root cell's configuration.
It would allow to find out the GIC and UART addresses, as well as the
platform-dependant hotplug method and mailbox address, if any.
* The debug functions are quite problematic: the hypervisor is entered at
EL1 and cannot guess which IO mapping is used by the kernel for the
serial console. As a result, there is no reliable way to print the first
few messages that happen before EL2 initialisation.
Currently, a wild guess assumes that this remapping is the same as the
one used for earlyprintk.
One solution would be to retain all the messages printed at EL1 in a
buffer, but this goes against the 'debug' nature of this printk.
Another would be to communicate, one way or another, the virtual address
of the UART allocated by the kernel from the driver.
All comments and reviews are welcome.
Thanks,
Jean-Philippe
Jean-Philippe Brucker (50):
arm: build with virtualisation support
arm: hypervisor entry point
arm: provide an interface for accessing system registers
arm: implement some base functions
arm: add SMP barriers and utilities
arm: add IO helpers
arm: spinlock implementation
arm: implement atomic bitops
arm: implement the debug routines for the pl011 UART
arm: hyp vectors installation
arm: implement the paging callbacks
core: add the ability to use arch-specific linker scripts
arm: initialise hypervisor stage 1 MMU
arm: setup stage 2 MMU for the cells
arm: check architecture features
arm: dispatch hypercalls
arm: pass through init_late
arm: GIC initialisation skeleton
arm: GICv3 initialisation
arm: IRQ handling skeleton
arm: store the pending virtual interrupts
arm: GICv3: handle IRQs
arm: read/write the banked registers
arm: skip instructions that fail their condition check
arm: GICv3: filter the guests' SGIs
arm: minimal PSCI implementation
arm: implement the cell creation
arm: GIC: reset the CPU interface before running a new guest
arm: implement the cell destruction
arm: clear the banked and system registers on reset
arm: flush and enable the caches at initialisation
arm: disable caches on cell reset
arm: complete paging invalidations
arm: better error reporting and panic dump
arm: mmio emulation skeleton
arm: attribute virtual IDs to the cell cpus
arm: GIC: filter redistributor accesses
arm: irqchip: add SPI configuration in cell_init and cell_exit
arm: GIC: handle distributor accesses
arm: PSCI emulation
arm: add platform-dependent SMP operations
arm: ignore writes to the ACTLR register
arm: save the linux hyp-stub vectors
arm: irqchip: add hypervisor shutdown
arm: implement hypervisor shutdown
arm: restore kernel on setup failure
arm: GIC: factor some GICv3 functions into gic_common
arm: add support for GICv2
arm: GICv2: handle SPI routing
arm: exit statistics
driver.c | 8 +
hypervisor/Makefile | 5 +
hypervisor/arch/arm/Makefile | 15 +-
hypervisor/arch/arm/caches.S | 88 ++++
hypervisor/arch/arm/control.c | 391 +++++++++++++++++
hypervisor/arch/arm/dbg-write-pl011.c | 24 ++
hypervisor/arch/arm/dbg-write.c | 46 ++
hypervisor/arch/arm/entry.S | 70 +++-
hypervisor/arch/arm/exception.S | 81 ++++
hypervisor/arch/arm/gic-common.c | 440 ++++++++++++++++++++
hypervisor/arch/arm/gic-v2.c | 284 +++++++++++++
hypervisor/arch/arm/gic-v3.c | 412 ++++++++++++++++++
hypervisor/arch/arm/include/asm/bitops.h | 102 ++++-
hypervisor/arch/arm/include/asm/cell.h | 21 +-
hypervisor/arch/arm/include/asm/control.h | 47 +++
hypervisor/arch/arm/include/asm/debug.h | 35 ++
hypervisor/arch/arm/include/asm/gic_common.h | 59 +++
hypervisor/arch/arm/include/asm/gic_v2.h | 121 ++++++
hypervisor/arch/arm/include/asm/gic_v3.h | 267 ++++++++++++
hypervisor/arch/arm/include/asm/head.h | 24 ++
hypervisor/arch/arm/include/asm/io.h | 66 +++
hypervisor/arch/arm/include/asm/irqchip.h | 116 ++++++
.../arch/arm/include/asm/jailhouse_hypercall.h | 5 +-
hypervisor/arch/arm/include/asm/paging.h | 167 +++++++-
hypervisor/arch/arm/include/asm/paging_modes.h | 5 +
hypervisor/arch/arm/include/asm/percpu.h | 60 ++-
hypervisor/arch/arm/include/asm/platform.h | 66 +++
hypervisor/arch/arm/include/asm/processor.h | 167 ++++++++
hypervisor/arch/arm/include/asm/psci.h | 71 ++++
hypervisor/arch/arm/include/asm/sections.lds | 7 +
hypervisor/arch/arm/include/asm/setup.h | 69 +++
hypervisor/arch/arm/include/asm/setup_mmu.h | 78 ++++
hypervisor/arch/arm/include/asm/smp.h | 52 +++
hypervisor/arch/arm/include/asm/spinlock.h | 61 ++-
hypervisor/arch/arm/include/asm/sysregs.h | 170 ++++++++
hypervisor/arch/arm/include/asm/traps.h | 105 +++++
hypervisor/arch/arm/include/asm/uart_pl011.h | 113 +++++
hypervisor/arch/arm/irqchip.c | 331 +++++++++++++++
hypervisor/arch/arm/lib.c | 36 ++
hypervisor/arch/arm/mmio.c | 167 ++++++++
hypervisor/arch/arm/mmu_cell.c | 145 +++++++
hypervisor/arch/arm/mmu_hyp.c | 333 +++++++++++++++
hypervisor/arch/arm/paging.c | 148 +++++++
hypervisor/arch/arm/psci.c | 148 +++++++
hypervisor/arch/arm/psci_low.S | 82 ++++
hypervisor/arch/arm/setup.c | 200 +++++++--
hypervisor/arch/arm/smp-vexpress.c | 73 ++++
hypervisor/arch/arm/smp.c | 84 ++++
hypervisor/arch/arm/traps.c | 334 +++++++++++++++
hypervisor/hypervisor.lds.S | 4 +
50 files changed, 5917 insertions(+), 86 deletions(-)
create mode 100644 hypervisor/arch/arm/caches.S
create mode 100644 hypervisor/arch/arm/control.c
create mode 100644 hypervisor/arch/arm/dbg-write-pl011.c
create mode 100644 hypervisor/arch/arm/dbg-write.c
create mode 100644 hypervisor/arch/arm/exception.S
create mode 100644 hypervisor/arch/arm/gic-common.c
create mode 100644 hypervisor/arch/arm/gic-v2.c
create mode 100644 hypervisor/arch/arm/gic-v3.c
create mode 100644 hypervisor/arch/arm/include/asm/control.h
create mode 100644 hypervisor/arch/arm/include/asm/debug.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_common.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_v2.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_v3.h
create mode 100644 hypervisor/arch/arm/include/asm/head.h
create mode 100644 hypervisor/arch/arm/include/asm/io.h
create mode 100644 hypervisor/arch/arm/include/asm/irqchip.h
create mode 100644 hypervisor/arch/arm/include/asm/platform.h
create mode 100644 hypervisor/arch/arm/include/asm/psci.h
create mode 100644 hypervisor/arch/arm/include/asm/sections.lds
create mode 100644 hypervisor/arch/arm/include/asm/setup.h
create mode 100644 hypervisor/arch/arm/include/asm/setup_mmu.h
create mode 100644 hypervisor/arch/arm/include/asm/smp.h
create mode 100644 hypervisor/arch/arm/include/asm/sysregs.h
create mode 100644 hypervisor/arch/arm/include/asm/traps.h
create mode 100644 hypervisor/arch/arm/include/asm/uart_pl011.h
create mode 100644 hypervisor/arch/arm/irqchip.c
create mode 100644 hypervisor/arch/arm/lib.c
create mode 100644 hypervisor/arch/arm/mmio.c
create mode 100644 hypervisor/arch/arm/mmu_cell.c
create mode 100644 hypervisor/arch/arm/mmu_hyp.c
create mode 100644 hypervisor/arch/arm/paging.c
create mode 100644 hypervisor/arch/arm/psci.c
create mode 100644 hypervisor/arch/arm/psci_low.S
create mode 100644 hypervisor/arch/arm/smp-vexpress.c
create mode 100644 hypervisor/arch/arm/smp.c
create mode 100644 hypervisor/arch/arm/traps.c
This patch series is a proposal of the initial 32bit ARM support for
Jailhouse.
I based this port on the Versatile Express platform, allowing it to run
on ARM's system models. Since there is as many different memory maps in
the ARM ecosystem as implementations, some discussions will be needed to
add support for device trees before adding new platform.
For the moment, I did not add any major change to the core or the driver.
I also tested it on an Odroid-XU, but I am not comfortable adding it to
this series, since I used the non-mainline hardkernel tree with some
patches of my own to fix virtualisation support.
This series is NOT an official support from ARM ltd., but the result of
my summer placement, which ends this week. I will continue discussing and
working on it on my own time, using my home address.
A few forewords about virtualisation on ARM:
Since ARMv7 (Cortex-A15), ARM provides hardware virtualisation
extensions in the form of an additional Exception Level. This level uses
a stage-2 level of page tables to partition the guest and allows to trap
sensitive instructions.
It also disposes of its own stage-1 page tables, allowing to use
cacheable and shareable memory types. In addition, the Generic Interrupt
Controller (GIC) provides a way to virtualise all interrupts.
The kernel runs at Exception Level 1 (EL1) and the hypervisor at EL2.
A trap is taken to the EL2 vectors and a single syndrome register (HSR)
allows the hypervisor to dispatch the trap and emulate the trapped
instruction, or inject an interrupt for example.
Implemented features
====================
* Hypervisor enabling and disabling
When it is started at EL2, Linux installs a small vector stub, allowing
an hypervisor to override them and install its own vectors.
This installation is a bit delicate, since the initial jump is done from
the kernel context, that uses an MMU and caches, to a completely bare
environment. Here, the EL2 MMU is immediately configured while inside an
identity-mapped region, and the hypervisor installation may safely
continue.
* Cell creation and destruction
The core does most of the work when partitioning the machine, by using
the paging callbacks for the cell's stage-2 pages.
Parking CPUs is done using a small PSCI implementation: suspended or
stopped cells spin in the hypervisor, waiting for a mailbox to be updated.
When destroying a cell or shutting down Jailhouse, it must use the
platform-specific hotplug features.
All platform features are currently detected using the CONFIG options of
the host kernel.
* Virtual interrupts (GICv2 and GICv3)
All physical interrupts are taken to the hypervisor, and then directly
injected into the cell, using a series of List Registers belonging to the
GIC's interface. Software must also maintain a structure of postponed
interrupts, in case all list registers are in use or for the purpose of
injecting SGIs into another CPU.
Software-generated interrupts (SGIs) are trapped and moderated by the
hypervisor. GICv2 uses memory-mapped accesses to the distributor, whilst
GICv3 uses system registers. After checking the SGI's targets, they are
stored in the CPUs pending structures, and injected using a
synchronisation SGI across the cores.
Private-Peripheral interrupts (PPIs) are dedicated to each core and
don't need moderation. A first attempt is made to directly write the list
registers, and are stored in the per-cpu data if it fails.
Shared-Peripheral interrupts (SPIs) are also directly injected, but are
configured in the global GIC distributor to target specific CPUs.
In this port, they are configured from the cell's bitmap: initially
assigned to the root's first CPU, they are re-routed when a cell is
created or destroyed.
All accesses to the distributor are filtered, to only allow the guests to
configure SPIs belonging them.
Missing features
================
* 64bit support, although this series aims to be abstract enough to ease
the 64bit port.
* Thumb2 host: this was not a priority on my TODO list, but should not be
too difficult to add.
* Hosts using PSCI: I did not have access to a boot-monitor with PSCI.
* Clusters: since the setup code currently uses a simple addition of the
MPIDR to deduce the per-cpu datas location and size, clusters are not
supported yet. entry.S will need to fetch the hypervisor's header to
find out the total number of online CPUs and generate those base
addresses, maybe by filling a hashmap.
* Exhaustive reset of the EL1 environment when starting a cell (Perf,
debug features, float...)
* IRQs greater than 64, because of the current bitmap limitation in the
cells configs. More than one irqchip could be used, but it would be
semantically confusing.
* IRQ remapping, although I understood that support may be added in the
core very soon.
* Clean platform handling, see below.
Points that need more discussions
=================================
* Linux on ARM heavily relies on Device Trees to describe the different
devices available and their features. The best way to provide a clean
device support in Jailhouse would be for the driver to pass the kernel
device tree in the root cell's configuration.
It would allow to find out the GIC and UART addresses, as well as the
platform-dependant hotplug method and mailbox address, if any.
* The debug functions are quite problematic: the hypervisor is entered at
EL1 and cannot guess which IO mapping is used by the kernel for the
serial console. As a result, there is no reliable way to print the first
few messages that happen before EL2 initialisation.
Currently, a wild guess assumes that this remapping is the same as the
one used for earlyprintk.
One solution would be to retain all the messages printed at EL1 in a
buffer, but this goes against the 'debug' nature of this printk.
Another would be to communicate, one way or another, the virtual address
of the UART allocated by the kernel from the driver.
All comments and reviews are welcome.
Thanks,
Jean-Philippe
Jean-Philippe Brucker (50):
arm: build with virtualisation support
arm: hypervisor entry point
arm: provide an interface for accessing system registers
arm: implement some base functions
arm: add SMP barriers and utilities
arm: add IO helpers
arm: spinlock implementation
arm: implement atomic bitops
arm: implement the debug routines for the pl011 UART
arm: hyp vectors installation
arm: implement the paging callbacks
core: add the ability to use arch-specific linker scripts
arm: initialise hypervisor stage 1 MMU
arm: setup stage 2 MMU for the cells
arm: check architecture features
arm: dispatch hypercalls
arm: pass through init_late
arm: GIC initialisation skeleton
arm: GICv3 initialisation
arm: IRQ handling skeleton
arm: store the pending virtual interrupts
arm: GICv3: handle IRQs
arm: read/write the banked registers
arm: skip instructions that fail their condition check
arm: GICv3: filter the guests' SGIs
arm: minimal PSCI implementation
arm: implement the cell creation
arm: GIC: reset the CPU interface before running a new guest
arm: implement the cell destruction
arm: clear the banked and system registers on reset
arm: flush and enable the caches at initialisation
arm: disable caches on cell reset
arm: complete paging invalidations
arm: better error reporting and panic dump
arm: mmio emulation skeleton
arm: attribute virtual IDs to the cell cpus
arm: GIC: filter redistributor accesses
arm: irqchip: add SPI configuration in cell_init and cell_exit
arm: GIC: handle distributor accesses
arm: PSCI emulation
arm: add platform-dependent SMP operations
arm: ignore writes to the ACTLR register
arm: save the linux hyp-stub vectors
arm: irqchip: add hypervisor shutdown
arm: implement hypervisor shutdown
arm: restore kernel on setup failure
arm: GIC: factor some GICv3 functions into gic_common
arm: add support for GICv2
arm: GICv2: handle SPI routing
arm: exit statistics
driver.c | 8 +
hypervisor/Makefile | 5 +
hypervisor/arch/arm/Makefile | 15 +-
hypervisor/arch/arm/caches.S | 88 ++++
hypervisor/arch/arm/control.c | 391 +++++++++++++++++
hypervisor/arch/arm/dbg-write-pl011.c | 24 ++
hypervisor/arch/arm/dbg-write.c | 46 ++
hypervisor/arch/arm/entry.S | 70 +++-
hypervisor/arch/arm/exception.S | 81 ++++
hypervisor/arch/arm/gic-common.c | 440 ++++++++++++++++++++
hypervisor/arch/arm/gic-v2.c | 284 +++++++++++++
hypervisor/arch/arm/gic-v3.c | 412 ++++++++++++++++++
hypervisor/arch/arm/include/asm/bitops.h | 102 ++++-
hypervisor/arch/arm/include/asm/cell.h | 21 +-
hypervisor/arch/arm/include/asm/control.h | 47 +++
hypervisor/arch/arm/include/asm/debug.h | 35 ++
hypervisor/arch/arm/include/asm/gic_common.h | 59 +++
hypervisor/arch/arm/include/asm/gic_v2.h | 121 ++++++
hypervisor/arch/arm/include/asm/gic_v3.h | 267 ++++++++++++
hypervisor/arch/arm/include/asm/head.h | 24 ++
hypervisor/arch/arm/include/asm/io.h | 66 +++
hypervisor/arch/arm/include/asm/irqchip.h | 116 ++++++
.../arch/arm/include/asm/jailhouse_hypercall.h | 5 +-
hypervisor/arch/arm/include/asm/paging.h | 167 +++++++-
hypervisor/arch/arm/include/asm/paging_modes.h | 5 +
hypervisor/arch/arm/include/asm/percpu.h | 60 ++-
hypervisor/arch/arm/include/asm/platform.h | 66 +++
hypervisor/arch/arm/include/asm/processor.h | 167 ++++++++
hypervisor/arch/arm/include/asm/psci.h | 71 ++++
hypervisor/arch/arm/include/asm/sections.lds | 7 +
hypervisor/arch/arm/include/asm/setup.h | 69 +++
hypervisor/arch/arm/include/asm/setup_mmu.h | 78 ++++
hypervisor/arch/arm/include/asm/smp.h | 52 +++
hypervisor/arch/arm/include/asm/spinlock.h | 61 ++-
hypervisor/arch/arm/include/asm/sysregs.h | 170 ++++++++
hypervisor/arch/arm/include/asm/traps.h | 105 +++++
hypervisor/arch/arm/include/asm/uart_pl011.h | 113 +++++
hypervisor/arch/arm/irqchip.c | 331 +++++++++++++++
hypervisor/arch/arm/lib.c | 36 ++
hypervisor/arch/arm/mmio.c | 167 ++++++++
hypervisor/arch/arm/mmu_cell.c | 145 +++++++
hypervisor/arch/arm/mmu_hyp.c | 333 +++++++++++++++
hypervisor/arch/arm/paging.c | 148 +++++++
hypervisor/arch/arm/psci.c | 148 +++++++
hypervisor/arch/arm/psci_low.S | 82 ++++
hypervisor/arch/arm/setup.c | 200 +++++++--
hypervisor/arch/arm/smp-vexpress.c | 73 ++++
hypervisor/arch/arm/smp.c | 84 ++++
hypervisor/arch/arm/traps.c | 334 +++++++++++++++
hypervisor/hypervisor.lds.S | 4 +
50 files changed, 5917 insertions(+), 86 deletions(-)
create mode 100644 hypervisor/arch/arm/caches.S
create mode 100644 hypervisor/arch/arm/control.c
create mode 100644 hypervisor/arch/arm/dbg-write-pl011.c
create mode 100644 hypervisor/arch/arm/dbg-write.c
create mode 100644 hypervisor/arch/arm/exception.S
create mode 100644 hypervisor/arch/arm/gic-common.c
create mode 100644 hypervisor/arch/arm/gic-v2.c
create mode 100644 hypervisor/arch/arm/gic-v3.c
create mode 100644 hypervisor/arch/arm/include/asm/control.h
create mode 100644 hypervisor/arch/arm/include/asm/debug.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_common.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_v2.h
create mode 100644 hypervisor/arch/arm/include/asm/gic_v3.h
create mode 100644 hypervisor/arch/arm/include/asm/head.h
create mode 100644 hypervisor/arch/arm/include/asm/io.h
create mode 100644 hypervisor/arch/arm/include/asm/irqchip.h
create mode 100644 hypervisor/arch/arm/include/asm/platform.h
create mode 100644 hypervisor/arch/arm/include/asm/psci.h
create mode 100644 hypervisor/arch/arm/include/asm/sections.lds
create mode 100644 hypervisor/arch/arm/include/asm/setup.h
create mode 100644 hypervisor/arch/arm/include/asm/setup_mmu.h
create mode 100644 hypervisor/arch/arm/include/asm/smp.h
create mode 100644 hypervisor/arch/arm/include/asm/sysregs.h
create mode 100644 hypervisor/arch/arm/include/asm/traps.h
create mode 100644 hypervisor/arch/arm/include/asm/uart_pl011.h
create mode 100644 hypervisor/arch/arm/irqchip.c
create mode 100644 hypervisor/arch/arm/lib.c
create mode 100644 hypervisor/arch/arm/mmio.c
create mode 100644 hypervisor/arch/arm/mmu_cell.c
create mode 100644 hypervisor/arch/arm/mmu_hyp.c
create mode 100644 hypervisor/arch/arm/paging.c
create mode 100644 hypervisor/arch/arm/psci.c
create mode 100644 hypervisor/arch/arm/psci_low.S
create mode 100644 hypervisor/arch/arm/smp-vexpress.c
create mode 100644 hypervisor/arch/arm/smp.c
create mode 100644 hypervisor/arch/arm/traps.c
--
1.7.9.5
--
You received this message because you are subscribed to the Google Groups "Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jailhouse-dev+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
1.7.9.5
--
You received this message because you are subscribed to the Google Groups "Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email to jailhouse-dev+***@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.