KVM: api: Pass the devid in the msi routing entry
On ARM, the MSI msg (address and data) comes along with out-of-band device ID information. The device ID encodes the device that writes the MSI msg. Let's convey the device id in kvm_irq_routing_msi and use KVM_MSI_VALID_DEVID flag value in kvm_irq_routing_entry to indicate the msi devid is populated. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Andre Przywara <andre.przywara@arm.com> Acked-by: Radim Krčmář <rkrcmar@redhat.com> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
This commit is contained in:
Родитель
3a88bded20
Коммит
76a10b8678
|
@ -1468,7 +1468,11 @@ struct kvm_irq_routing_entry {
|
||||||
#define KVM_IRQ_ROUTING_S390_ADAPTER 3
|
#define KVM_IRQ_ROUTING_S390_ADAPTER 3
|
||||||
#define KVM_IRQ_ROUTING_HV_SINT 4
|
#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.
|
||||||
|
- zero otherwise
|
||||||
|
|
||||||
struct kvm_irq_routing_irqchip {
|
struct kvm_irq_routing_irqchip {
|
||||||
__u32 irqchip;
|
__u32 irqchip;
|
||||||
|
@ -1479,8 +1483,19 @@ struct kvm_irq_routing_msi {
|
||||||
__u32 address_lo;
|
__u32 address_lo;
|
||||||
__u32 address_hi;
|
__u32 address_hi;
|
||||||
__u32 data;
|
__u32 data;
|
||||||
|
union {
|
||||||
__u32 pad;
|
__u32 pad;
|
||||||
|
__u32 devid;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
The per-VM KVM_CAP_MSI_DEVID capability advertises the requirement 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.
|
||||||
|
|
||||||
struct kvm_irq_routing_s390_adapter {
|
struct kvm_irq_routing_s390_adapter {
|
||||||
__u64 ind_addr;
|
__u64 ind_addr;
|
||||||
|
|
|
@ -879,7 +879,10 @@ struct kvm_irq_routing_msi {
|
||||||
__u32 address_lo;
|
__u32 address_lo;
|
||||||
__u32 address_hi;
|
__u32 address_hi;
|
||||||
__u32 data;
|
__u32 data;
|
||||||
|
union {
|
||||||
__u32 pad;
|
__u32 pad;
|
||||||
|
__u32 devid;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct kvm_irq_routing_s390_adapter {
|
struct kvm_irq_routing_s390_adapter {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче