It is sometimes benefitial to ignore IO size, and only match on address. In hindsight this would have been a better default than matching length when KVM_IOEVENTFD_FLAG_DATAMATCH is not set, In particular, this kind of access can be optimized on VMX: there no need to do page lookups. This can currently be done with many ioeventfds but in a suboptimal way. However we can't change kernel/userspace ABI without risk of breaking some applications. Use len = 0 to mean "ignore length for matching" in a more optimal way.
Showing the changes to include/uapi/linux (1 of 3 files). Show all
Unified · Split
| @@ -529,7 +529,7 @@ enum { · 528 unmodified lines | |||
| 529 | struct kvm_ioeventfd { | 529 | struct kvm_ioeventfd { |
| 530 | __u64 datamatch; | 530 | __u64 datamatch; |
| 531 | __u64 addr; /* legal pio/mmio address */ | 531 | __u64 addr; /* legal pio/mmio address */ |
| 532 | __u32 len; /* 1, 2, 4, or 8 bytes */ | 532 | __u32 len; /* 1, 2, 4, or 8 bytes; or 0 to ignore length */ |
| 533 | __s32 fd; | 533 | __s32 fd; |
| 534 | __u32 flags; | 534 | __u32 flags; |
| 535 | __u8 pad[36]; | 535 | __u8 pad[36]; |
| @@ -743,6 +743,7 @@ struct kvm_ppc_smmu_info { · 207 unmodified lines | |||
| 743 | #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 | 743 | #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 |
| 744 | #define KVM_CAP_ENABLE_CAP_VM 98 | 744 | #define KVM_CAP_ENABLE_CAP_VM 98 |
| 745 | #define KVM_CAP_S390_IRQCHIP 99 | 745 | #define KVM_CAP_S390_IRQCHIP 99 |
| 746 | #define KVM_CAP_IOEVENTFD_NO_LENGTH 100 | ||
| 746 | 747 | ||
| 747 | #ifdef KVM_CAP_IRQ_ROUTING | 748 | #ifdef KVM_CAP_IRQ_ROUTING |
| 748 | 749 | ||