mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
Merge branch kvm-arm64/misc-5.18 into kvmarm-master/next
* kvm-arm64/misc-5.18: : . : Misc fixes for KVM/arm64 5.18: : : - Drop unused kvm parameter to kvm_psci_version() : : - Implement CONFIG_DEBUG_LIST at EL2 : : - Make CONFIG_ARM64_ERRATUM_2077057 default y : : - Only do the interrupt dance if we have exited because of an interrupt : : - Remove traces of 32bit ARM host support from the documentation : . Documentation: KVM: Update documentation to indicate KVM is arm64-only KVM: arm64: Only open the interrupt window on exit due to an interrupt KVM: arm64: Enable Cortex-A510 erratum 2077057 by default Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
commit
7297a8bcc0
@ -417,7 +417,7 @@ kvm_run' (see below).
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
:Capability: basic
|
:Capability: basic
|
||||||
:Architectures: all except ARM, arm64
|
:Architectures: all except arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_regs (out)
|
:Parameters: struct kvm_regs (out)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -450,7 +450,7 @@ Reads the general purpose registers from the vcpu.
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
:Capability: basic
|
:Capability: basic
|
||||||
:Architectures: all except ARM, arm64
|
:Architectures: all except arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_regs (in)
|
:Parameters: struct kvm_regs (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -824,7 +824,7 @@ Writes the floating point state to the vcpu.
|
|||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_IRQCHIP, KVM_CAP_S390_IRQCHIP (s390)
|
:Capability: KVM_CAP_IRQCHIP, KVM_CAP_S390_IRQCHIP (s390)
|
||||||
:Architectures: x86, ARM, arm64, s390
|
:Architectures: x86, arm64, s390
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: none
|
:Parameters: none
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -833,7 +833,7 @@ Creates an interrupt controller model in the kernel.
|
|||||||
On x86, creates a virtual ioapic, a virtual PIC (two PICs, nested), and sets up
|
On x86, creates a virtual ioapic, a virtual PIC (two PICs, nested), and sets up
|
||||||
future vcpus to have a local APIC. IRQ routing for GSIs 0-15 is set to both
|
future vcpus to have a local APIC. IRQ routing for GSIs 0-15 is set to both
|
||||||
PIC and IOAPIC; GSI 16-23 only go to the IOAPIC.
|
PIC and IOAPIC; GSI 16-23 only go to the IOAPIC.
|
||||||
On ARM/arm64, a GICv2 is created. Any other GIC versions require the usage of
|
On arm64, a GICv2 is created. Any other GIC versions require the usage of
|
||||||
KVM_CREATE_DEVICE, which also supports creating a GICv2. Using
|
KVM_CREATE_DEVICE, which also supports creating a GICv2. Using
|
||||||
KVM_CREATE_DEVICE is preferred over KVM_CREATE_IRQCHIP for GICv2.
|
KVM_CREATE_DEVICE is preferred over KVM_CREATE_IRQCHIP for GICv2.
|
||||||
On s390, a dummy irq routing table is created.
|
On s390, a dummy irq routing table is created.
|
||||||
@ -846,7 +846,7 @@ before KVM_CREATE_IRQCHIP can be used.
|
|||||||
-----------------
|
-----------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_IRQCHIP
|
:Capability: KVM_CAP_IRQCHIP
|
||||||
:Architectures: x86, arm, arm64
|
:Architectures: x86, arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_irq_level
|
:Parameters: struct kvm_irq_level
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -870,7 +870,7 @@ capability is present (or unless it is not using the in-kernel irqchip,
|
|||||||
of course).
|
of course).
|
||||||
|
|
||||||
|
|
||||||
ARM/arm64 can signal an interrupt either at the CPU level, or at the
|
arm64 can signal an interrupt either at the CPU level, or at the
|
||||||
in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
|
in-kernel irqchip (GIC), and for in-kernel irqchip can tell the GIC to
|
||||||
use PPIs designated for specific cpus. The irq field is interpreted
|
use PPIs designated for specific cpus. The irq field is interpreted
|
||||||
like this::
|
like this::
|
||||||
@ -896,7 +896,7 @@ When KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 is supported, the target vcpu is
|
|||||||
identified as (256 * vcpu2_index + vcpu_index). Otherwise, vcpu2_index
|
identified as (256 * vcpu2_index + vcpu_index). Otherwise, vcpu2_index
|
||||||
must be zero.
|
must be zero.
|
||||||
|
|
||||||
Note that on arm/arm64, the KVM_CAP_IRQCHIP capability only conditions
|
Note that on arm64, the KVM_CAP_IRQCHIP capability only conditions
|
||||||
injection of interrupts for the in-kernel irqchip. KVM_IRQ_LINE can always
|
injection of interrupts for the in-kernel irqchip. KVM_IRQ_LINE can always
|
||||||
be used for a userspace interrupt controller.
|
be used for a userspace interrupt controller.
|
||||||
|
|
||||||
@ -1087,7 +1087,7 @@ Other flags returned by ``KVM_GET_CLOCK`` are accepted but ignored.
|
|||||||
|
|
||||||
:Capability: KVM_CAP_VCPU_EVENTS
|
:Capability: KVM_CAP_VCPU_EVENTS
|
||||||
:Extended by: KVM_CAP_INTR_SHADOW
|
:Extended by: KVM_CAP_INTR_SHADOW
|
||||||
:Architectures: x86, arm, arm64
|
:Architectures: x86, arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_vcpu_event (out)
|
:Parameters: struct kvm_vcpu_event (out)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -1146,8 +1146,8 @@ The following bits are defined in the flags field:
|
|||||||
fields contain a valid state. This bit will be set whenever
|
fields contain a valid state. This bit will be set whenever
|
||||||
KVM_CAP_EXCEPTION_PAYLOAD is enabled.
|
KVM_CAP_EXCEPTION_PAYLOAD is enabled.
|
||||||
|
|
||||||
ARM/ARM64:
|
ARM64:
|
||||||
^^^^^^^^^^
|
^^^^^^
|
||||||
|
|
||||||
If the guest accesses a device that is being emulated by the host kernel in
|
If the guest accesses a device that is being emulated by the host kernel in
|
||||||
such a way that a real device would generate a physical SError, KVM may make
|
such a way that a real device would generate a physical SError, KVM may make
|
||||||
@ -1206,7 +1206,7 @@ directly to the virtual CPU).
|
|||||||
|
|
||||||
:Capability: KVM_CAP_VCPU_EVENTS
|
:Capability: KVM_CAP_VCPU_EVENTS
|
||||||
:Extended by: KVM_CAP_INTR_SHADOW
|
:Extended by: KVM_CAP_INTR_SHADOW
|
||||||
:Architectures: x86, arm, arm64
|
:Architectures: x86, arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_vcpu_event (in)
|
:Parameters: struct kvm_vcpu_event (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -1241,8 +1241,8 @@ can be set in the flags field to signal that the
|
|||||||
exception_has_payload, exception_payload, and exception.pending fields
|
exception_has_payload, exception_payload, and exception.pending fields
|
||||||
contain a valid state and shall be written into the VCPU.
|
contain a valid state and shall be written into the VCPU.
|
||||||
|
|
||||||
ARM/ARM64:
|
ARM64:
|
||||||
^^^^^^^^^^
|
^^^^^^
|
||||||
|
|
||||||
User space may need to inject several types of events to the guest.
|
User space may need to inject several types of events to the guest.
|
||||||
|
|
||||||
@ -1449,7 +1449,7 @@ for vm-wide capabilities.
|
|||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_MP_STATE
|
:Capability: KVM_CAP_MP_STATE
|
||||||
:Architectures: x86, s390, arm, arm64, riscv
|
:Architectures: x86, s390, arm64, riscv
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_mp_state (out)
|
:Parameters: struct kvm_mp_state (out)
|
||||||
:Returns: 0 on success; -1 on error
|
:Returns: 0 on success; -1 on error
|
||||||
@ -1467,7 +1467,7 @@ Possible values are:
|
|||||||
|
|
||||||
========================== ===============================================
|
========================== ===============================================
|
||||||
KVM_MP_STATE_RUNNABLE the vcpu is currently running
|
KVM_MP_STATE_RUNNABLE the vcpu is currently running
|
||||||
[x86,arm/arm64,riscv]
|
[x86,arm64,riscv]
|
||||||
KVM_MP_STATE_UNINITIALIZED the vcpu is an application processor (AP)
|
KVM_MP_STATE_UNINITIALIZED the vcpu is an application processor (AP)
|
||||||
which has not yet received an INIT signal [x86]
|
which has not yet received an INIT signal [x86]
|
||||||
KVM_MP_STATE_INIT_RECEIVED the vcpu has received an INIT signal, and is
|
KVM_MP_STATE_INIT_RECEIVED the vcpu has received an INIT signal, and is
|
||||||
@ -1476,7 +1476,7 @@ Possible values are:
|
|||||||
is waiting for an interrupt [x86]
|
is waiting for an interrupt [x86]
|
||||||
KVM_MP_STATE_SIPI_RECEIVED the vcpu has just received a SIPI (vector
|
KVM_MP_STATE_SIPI_RECEIVED the vcpu has just received a SIPI (vector
|
||||||
accessible via KVM_GET_VCPU_EVENTS) [x86]
|
accessible via KVM_GET_VCPU_EVENTS) [x86]
|
||||||
KVM_MP_STATE_STOPPED the vcpu is stopped [s390,arm/arm64,riscv]
|
KVM_MP_STATE_STOPPED the vcpu is stopped [s390,arm64,riscv]
|
||||||
KVM_MP_STATE_CHECK_STOP the vcpu is in a special error state [s390]
|
KVM_MP_STATE_CHECK_STOP the vcpu is in a special error state [s390]
|
||||||
KVM_MP_STATE_OPERATING the vcpu is operating (running or halted)
|
KVM_MP_STATE_OPERATING the vcpu is operating (running or halted)
|
||||||
[s390]
|
[s390]
|
||||||
@ -1488,8 +1488,8 @@ On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an
|
|||||||
in-kernel irqchip, the multiprocessing state must be maintained by userspace on
|
in-kernel irqchip, the multiprocessing state must be maintained by userspace on
|
||||||
these architectures.
|
these architectures.
|
||||||
|
|
||||||
For arm/arm64/riscv:
|
For arm64/riscv:
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The only states that are valid are KVM_MP_STATE_STOPPED and
|
The only states that are valid are KVM_MP_STATE_STOPPED and
|
||||||
KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not.
|
KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not.
|
||||||
@ -1498,7 +1498,7 @@ KVM_MP_STATE_RUNNABLE which reflect if the vcpu is paused or not.
|
|||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_MP_STATE
|
:Capability: KVM_CAP_MP_STATE
|
||||||
:Architectures: x86, s390, arm, arm64, riscv
|
:Architectures: x86, s390, arm64, riscv
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_mp_state (in)
|
:Parameters: struct kvm_mp_state (in)
|
||||||
:Returns: 0 on success; -1 on error
|
:Returns: 0 on success; -1 on error
|
||||||
@ -1510,8 +1510,8 @@ On x86, this ioctl is only useful after KVM_CREATE_IRQCHIP. Without an
|
|||||||
in-kernel irqchip, the multiprocessing state must be maintained by userspace on
|
in-kernel irqchip, the multiprocessing state must be maintained by userspace on
|
||||||
these architectures.
|
these architectures.
|
||||||
|
|
||||||
For arm/arm64/riscv:
|
For arm64/riscv:
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The only states that are valid are KVM_MP_STATE_STOPPED and
|
The only states that are valid are KVM_MP_STATE_STOPPED and
|
||||||
KVM_MP_STATE_RUNNABLE which reflect if the vcpu should be paused or not.
|
KVM_MP_STATE_RUNNABLE which reflect if the vcpu should be paused or not.
|
||||||
@ -1780,14 +1780,14 @@ The flags bitmap is defined as::
|
|||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_IRQ_ROUTING
|
:Capability: KVM_CAP_IRQ_ROUTING
|
||||||
:Architectures: x86 s390 arm arm64
|
:Architectures: x86 s390 arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_irq_routing (in)
|
:Parameters: struct kvm_irq_routing (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
|
|
||||||
Sets the GSI routing table entries, overwriting any previously set entries.
|
Sets the GSI routing table entries, overwriting any previously set entries.
|
||||||
|
|
||||||
On arm/arm64, GSI routing has the following limitation:
|
On arm64, GSI routing has the following limitation:
|
||||||
|
|
||||||
- GSI routing does not apply to KVM_IRQ_LINE but only to KVM_IRQFD.
|
- GSI routing does not apply to KVM_IRQ_LINE but only to KVM_IRQFD.
|
||||||
|
|
||||||
@ -2855,7 +2855,7 @@ after pausing the vcpu, but before it is resumed.
|
|||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_SIGNAL_MSI
|
:Capability: KVM_CAP_SIGNAL_MSI
|
||||||
:Architectures: x86 arm arm64
|
:Architectures: x86 arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_msi (in)
|
:Parameters: struct kvm_msi (in)
|
||||||
:Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error
|
:Returns: >0 on delivery, 0 if guest blocked the MSI, and -1 on error
|
||||||
@ -3043,7 +3043,7 @@ into the hash PTE second double word).
|
|||||||
--------------
|
--------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_IRQFD
|
:Capability: KVM_CAP_IRQFD
|
||||||
:Architectures: x86 s390 arm arm64
|
:Architectures: x86 s390 arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_irqfd (in)
|
:Parameters: struct kvm_irqfd (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -3069,7 +3069,7 @@ Note that closing the resamplefd is not sufficient to disable the
|
|||||||
irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment
|
irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment
|
||||||
and need not be specified with KVM_IRQFD_FLAG_DEASSIGN.
|
and need not be specified with KVM_IRQFD_FLAG_DEASSIGN.
|
||||||
|
|
||||||
On arm/arm64, gsi routing being supported, the following can happen:
|
On arm64, gsi routing being supported, the following can happen:
|
||||||
|
|
||||||
- in case no routing entry is associated to this gsi, injection fails
|
- in case no routing entry is associated to this gsi, injection fails
|
||||||
- in case the gsi is associated to an irqchip routing entry,
|
- in case the gsi is associated to an irqchip routing entry,
|
||||||
@ -3325,7 +3325,7 @@ current state. "addr" is ignored.
|
|||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
:Capability: basic
|
:Capability: basic
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_vcpu_init (in)
|
:Parameters: struct kvm_vcpu_init (in)
|
||||||
:Returns: 0 on success; -1 on error
|
:Returns: 0 on success; -1 on error
|
||||||
@ -3423,7 +3423,7 @@ Possible features:
|
|||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
:Capability: basic
|
:Capability: basic
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_vcpu_init (out)
|
:Parameters: struct kvm_vcpu_init (out)
|
||||||
:Returns: 0 on success; -1 on error
|
:Returns: 0 on success; -1 on error
|
||||||
@ -3452,7 +3452,7 @@ VCPU matching underlying host.
|
|||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
:Capability: basic
|
:Capability: basic
|
||||||
:Architectures: arm, arm64, mips
|
:Architectures: arm64, mips
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: struct kvm_reg_list (in/out)
|
:Parameters: struct kvm_reg_list (in/out)
|
||||||
:Returns: 0 on success; -1 on error
|
:Returns: 0 on success; -1 on error
|
||||||
@ -3479,7 +3479,7 @@ KVM_GET_ONE_REG/KVM_SET_ONE_REG calls.
|
|||||||
-----------------------------------------
|
-----------------------------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_ARM_SET_DEVICE_ADDR
|
:Capability: KVM_CAP_ARM_SET_DEVICE_ADDR
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_arm_device_address (in)
|
:Parameters: struct kvm_arm_device_address (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -3506,13 +3506,13 @@ can access emulated or directly exposed devices, which the host kernel needs
|
|||||||
to know about. The id field is an architecture specific identifier for a
|
to know about. The id field is an architecture specific identifier for a
|
||||||
specific device.
|
specific device.
|
||||||
|
|
||||||
ARM/arm64 divides the id field into two parts, a device id and an
|
arm64 divides the id field into two parts, a device id and an
|
||||||
address type id specific to the individual device::
|
address type id specific to the individual device::
|
||||||
|
|
||||||
bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
|
bits: | 63 ... 32 | 31 ... 16 | 15 ... 0 |
|
||||||
field: | 0x00000000 | device id | addr type id |
|
field: | 0x00000000 | device id | addr type id |
|
||||||
|
|
||||||
ARM/arm64 currently only require this when using the in-kernel GIC
|
arm64 currently only require this when using the in-kernel GIC
|
||||||
support for the hardware VGIC features, using KVM_ARM_DEVICE_VGIC_V2
|
support for the hardware VGIC features, using KVM_ARM_DEVICE_VGIC_V2
|
||||||
as the device id. When setting the base address for the guest's
|
as the device id. When setting the base address for the guest's
|
||||||
mapping of the VGIC virtual CPU and distributor interface, the ioctl
|
mapping of the VGIC virtual CPU and distributor interface, the ioctl
|
||||||
@ -4726,7 +4726,7 @@ to I/O ports.
|
|||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
:Capability: KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2
|
:Capability: KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2
|
||||||
:Architectures: x86, arm, arm64, mips
|
:Architectures: x86, arm64, mips
|
||||||
:Type: vm ioctl
|
:Type: vm ioctl
|
||||||
:Parameters: struct kvm_clear_dirty_log (in)
|
:Parameters: struct kvm_clear_dirty_log (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -4838,7 +4838,7 @@ version has the following quirks:
|
|||||||
4.119 KVM_ARM_VCPU_FINALIZE
|
4.119 KVM_ARM_VCPU_FINALIZE
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
:Type: vcpu ioctl
|
:Type: vcpu ioctl
|
||||||
:Parameters: int feature (in)
|
:Parameters: int feature (in)
|
||||||
:Returns: 0 on success, -1 on error
|
:Returns: 0 on success, -1 on error
|
||||||
@ -5920,7 +5920,7 @@ should put the acknowledged interrupt vector into the 'epr' field.
|
|||||||
|
|
||||||
If exit_reason is KVM_EXIT_SYSTEM_EVENT then the vcpu has triggered
|
If exit_reason is KVM_EXIT_SYSTEM_EVENT then the vcpu has triggered
|
||||||
a system-level event using some architecture specific mechanism (hypercall
|
a system-level event using some architecture specific mechanism (hypercall
|
||||||
or some special instruction). In case of ARM/ARM64, this is triggered using
|
or some special instruction). In case of ARM64, this is triggered using
|
||||||
HVC instruction based PSCI call from the vcpu. The 'type' field describes
|
HVC instruction based PSCI call from the vcpu. The 'type' field describes
|
||||||
the system-level event type. The 'flags' field describes architecture
|
the system-level event type. The 'flags' field describes architecture
|
||||||
specific flags for the system-level event.
|
specific flags for the system-level event.
|
||||||
@ -6018,7 +6018,7 @@ in send_page or recv a buffer to recv_page).
|
|||||||
__u64 fault_ipa;
|
__u64 fault_ipa;
|
||||||
} arm_nisv;
|
} arm_nisv;
|
||||||
|
|
||||||
Used on arm and arm64 systems. If a guest accesses memory not in a memslot,
|
Used on arm64 systems. If a guest accesses memory not in a memslot,
|
||||||
KVM will typically return to userspace and ask it to do MMIO emulation on its
|
KVM will typically return to userspace and ask it to do MMIO emulation on its
|
||||||
behalf. However, for certain classes of instructions, no instruction decode
|
behalf. However, for certain classes of instructions, no instruction decode
|
||||||
(direction, length of memory access) is provided, and fetching and decoding
|
(direction, length of memory access) is provided, and fetching and decoding
|
||||||
@ -6035,11 +6035,10 @@ did not fall within an I/O window.
|
|||||||
Userspace implementations can query for KVM_CAP_ARM_NISV_TO_USER, and enable
|
Userspace implementations can query for KVM_CAP_ARM_NISV_TO_USER, and enable
|
||||||
this capability at VM creation. Once this is done, these types of errors will
|
this capability at VM creation. Once this is done, these types of errors will
|
||||||
instead return to userspace with KVM_EXIT_ARM_NISV, with the valid bits from
|
instead return to userspace with KVM_EXIT_ARM_NISV, with the valid bits from
|
||||||
the HSR (arm) and ESR_EL2 (arm64) in the esr_iss field, and the faulting IPA
|
the ESR_EL2 in the esr_iss field, and the faulting IPA in the fault_ipa field.
|
||||||
in the fault_ipa field. Userspace can either fix up the access if it's
|
Userspace can either fix up the access if it's actually an I/O access by
|
||||||
actually an I/O access by decoding the instruction from guest memory (if it's
|
decoding the instruction from guest memory (if it's very brave) and continue
|
||||||
very brave) and continue executing the guest, or it can decide to suspend,
|
executing the guest, or it can decide to suspend, dump, or restart the guest.
|
||||||
dump, or restart the guest.
|
|
||||||
|
|
||||||
Note that KVM does not skip the faulting instruction as it does for
|
Note that KVM does not skip the faulting instruction as it does for
|
||||||
KVM_EXIT_MMIO, but userspace has to emulate any change to the processing state
|
KVM_EXIT_MMIO, but userspace has to emulate any change to the processing state
|
||||||
@ -6746,7 +6745,7 @@ and injected exceptions.
|
|||||||
|
|
||||||
7.18 KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2
|
7.18 KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2
|
||||||
|
|
||||||
:Architectures: x86, arm, arm64, mips
|
:Architectures: x86, arm64, mips
|
||||||
:Parameters: args[0] whether feature should be enabled or not
|
:Parameters: args[0] whether feature should be enabled or not
|
||||||
|
|
||||||
Valid flags are::
|
Valid flags are::
|
||||||
@ -7129,7 +7128,7 @@ reserved.
|
|||||||
8.9 KVM_CAP_ARM_USER_IRQ
|
8.9 KVM_CAP_ARM_USER_IRQ
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
|
|
||||||
This capability, if KVM_CHECK_EXTENSION indicates that it is available, means
|
This capability, if KVM_CHECK_EXTENSION indicates that it is available, means
|
||||||
that if userspace creates a VM without an in-kernel interrupt controller, it
|
that if userspace creates a VM without an in-kernel interrupt controller, it
|
||||||
@ -7256,7 +7255,7 @@ HvFlushVirtualAddressList, HvFlushVirtualAddressListEx.
|
|||||||
8.19 KVM_CAP_ARM_INJECT_SERROR_ESR
|
8.19 KVM_CAP_ARM_INJECT_SERROR_ESR
|
||||||
----------------------------------
|
----------------------------------
|
||||||
|
|
||||||
:Architectures: arm, arm64
|
:Architectures: arm64
|
||||||
|
|
||||||
This capability indicates that userspace can specify (via the
|
This capability indicates that userspace can specify (via the
|
||||||
KVM_SET_VCPU_EVENTS ioctl) the syndrome value reported to the guest when it
|
KVM_SET_VCPU_EVENTS ioctl) the syndrome value reported to the guest when it
|
||||||
|
@ -140,7 +140,7 @@ the cpu field to the processor id.
|
|||||||
2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
|
2. GROUP: KVM_ARM_VCPU_TIMER_CTRL
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
:Architectures: ARM, ARM64
|
:Architectures: ARM64
|
||||||
|
|
||||||
2.1. ATTRIBUTES: KVM_ARM_VCPU_TIMER_IRQ_VTIMER, KVM_ARM_VCPU_TIMER_IRQ_PTIMER
|
2.1. ATTRIBUTES: KVM_ARM_VCPU_TIMER_IRQ_VTIMER, KVM_ARM_VCPU_TIMER_IRQ_PTIMER
|
||||||
-----------------------------------------------------------------------------
|
-----------------------------------------------------------------------------
|
||||||
|
@ -682,6 +682,7 @@ config ARM64_ERRATUM_2051678
|
|||||||
|
|
||||||
config ARM64_ERRATUM_2077057
|
config ARM64_ERRATUM_2077057
|
||||||
bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2"
|
bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2"
|
||||||
|
default y
|
||||||
help
|
help
|
||||||
This option adds the workaround for ARM Cortex-A510 erratum 2077057.
|
This option adds the workaround for ARM Cortex-A510 erratum 2077057.
|
||||||
Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is
|
Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is
|
||||||
|
@ -887,9 +887,11 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu)
|
|||||||
* context synchronization event) is necessary to ensure that
|
* context synchronization event) is necessary to ensure that
|
||||||
* pending interrupts are taken.
|
* pending interrupts are taken.
|
||||||
*/
|
*/
|
||||||
local_irq_enable();
|
if (ARM_EXCEPTION_CODE(ret) == ARM_EXCEPTION_IRQ) {
|
||||||
isb();
|
local_irq_enable();
|
||||||
local_irq_disable();
|
isb();
|
||||||
|
local_irq_disable();
|
||||||
|
}
|
||||||
|
|
||||||
guest_timing_exit_irqoff();
|
guest_timing_exit_irqoff();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user