Merge tag 'kvm-arm-for-4.8-take2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm into HEAD
KVM/ARM Changes for v4.8 - Take 2 Includes GSI routing support to go along with the new VGIC and a small fix that has been cooking in -next for a while.
This commit is contained in:
@@ -1433,13 +1433,16 @@ KVM_ASSIGN_DEV_IRQ. Partial deassignment of host or guest IRQ is allowed.
|
||||
4.52 KVM_SET_GSI_ROUTING
|
||||
|
||||
Capability: KVM_CAP_IRQ_ROUTING
|
||||
Architectures: x86 s390
|
||||
Architectures: x86 s390 arm arm64
|
||||
Type: vm ioctl
|
||||
Parameters: struct kvm_irq_routing (in)
|
||||
Returns: 0 on success, -1 on error
|
||||
|
||||
Sets the GSI routing table entries, overwriting any previously set entries.
|
||||
|
||||
On arm/arm64, GSI routing has the following limitation:
|
||||
- GSI routing does not apply to KVM_IRQ_LINE but only to KVM_IRQFD.
|
||||
|
||||
struct kvm_irq_routing {
|
||||
__u32 nr;
|
||||
__u32 flags;
|
||||
@@ -1468,7 +1471,13 @@ struct kvm_irq_routing_entry {
|
||||
#define KVM_IRQ_ROUTING_S390_ADAPTER 3
|
||||
#define KVM_IRQ_ROUTING_HV_SINT 4
|
||||
|
||||
No flags are specified so far, the corresponding field must be set to zero.
|
||||
flags:
|
||||
- KVM_MSI_VALID_DEVID: used along with KVM_IRQ_ROUTING_MSI routing entry
|
||||
type, specifies that the devid field contains a valid value. The per-VM
|
||||
KVM_CAP_MSI_DEVID capability advertises the requirement to provide
|
||||
the device ID. If this capability is not available, userspace should
|
||||
never set the KVM_MSI_VALID_DEVID flag as the ioctl might fail.
|
||||
- zero otherwise
|
||||
|
||||
struct kvm_irq_routing_irqchip {
|
||||
__u32 irqchip;
|
||||
@@ -1479,9 +1488,16 @@ struct kvm_irq_routing_msi {
|
||||
__u32 address_lo;
|
||||
__u32 address_hi;
|
||||
__u32 data;
|
||||
__u32 pad;
|
||||
union {
|
||||
__u32 pad;
|
||||
__u32 devid;
|
||||
};
|
||||
};
|
||||
|
||||
If KVM_MSI_VALID_DEVID is set, devid contains a unique device identifier
|
||||
for the device that wrote the MSI message. For PCI, this is usually a
|
||||
BFD identifier in the lower 16 bits.
|
||||
|
||||
On x86, address_hi is ignored unless the KVM_X2APIC_API_USE_32BIT_IDS
|
||||
feature of KVM_CAP_X2APIC_API capability is enabled. If it is enabled,
|
||||
address_hi bits 31-8 provide bits 31-8 of the destination id. Bits 7-0 of
|
||||
@@ -2199,14 +2215,14 @@ struct kvm_msi {
|
||||
__u8 pad[12];
|
||||
};
|
||||
|
||||
flags: KVM_MSI_VALID_DEVID: devid contains a valid value
|
||||
devid: If KVM_MSI_VALID_DEVID is set, contains a unique device identifier
|
||||
for the device that wrote the MSI message.
|
||||
For PCI, this is usually a BFD identifier in the lower 16 bits.
|
||||
flags: KVM_MSI_VALID_DEVID: devid contains a valid value. The per-VM
|
||||
KVM_CAP_MSI_DEVID capability advertises the requirement to provide
|
||||
the device ID. If this capability is not available, userspace
|
||||
should never set the KVM_MSI_VALID_DEVID flag as the ioctl might fail.
|
||||
|
||||
The per-VM KVM_CAP_MSI_DEVID capability advertises the need to provide
|
||||
the device ID. If this capability is not set, userland cannot rely on
|
||||
the kernel to allow the KVM_MSI_VALID_DEVID flag being set.
|
||||
If KVM_MSI_VALID_DEVID is set, devid contains a unique device identifier
|
||||
for the device that wrote the MSI message. For PCI, this is usually a
|
||||
BFD identifier in the lower 16 bits.
|
||||
|
||||
On x86, address_hi is ignored unless the KVM_CAP_X2APIC_API capability is
|
||||
enabled. If it is enabled, address_hi bits 31-8 provide bits 31-8 of the
|
||||
@@ -2383,9 +2399,13 @@ Note that closing the resamplefd is not sufficient to disable the
|
||||
irqfd. The KVM_IRQFD_FLAG_RESAMPLE is only necessary on assignment
|
||||
and need not be specified with KVM_IRQFD_FLAG_DEASSIGN.
|
||||
|
||||
On ARM/ARM64, the gsi field in the kvm_irqfd struct specifies the Shared
|
||||
Peripheral Interrupt (SPI) index, such that the GIC interrupt ID is
|
||||
given by gsi + 32.
|
||||
On arm/arm64, gsi routing being supported, the following can happen:
|
||||
- in case no routing entry is associated to this gsi, injection fails
|
||||
- in case the gsi is associated to an irqchip routing entry,
|
||||
irqchip.pin + 32 corresponds to the injected SPI ID.
|
||||
- in case the gsi is associated to an MSI routing entry, the MSI
|
||||
message and device ID are translated into an LPI (support restricted
|
||||
to GICv3 ITS in-kernel emulation).
|
||||
|
||||
4.76 KVM_PPC_ALLOCATE_HTAB
|
||||
|
||||
|
Reference in New Issue
Block a user