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 | 529 | struct kvm_ioeventfd { |
| 530 | 530 | __u64 datamatch; |
| 531 | 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 | 533 | __s32 fd; |
| 534 | 534 | __u32 flags; |
| 535 | 535 | __u8 pad[36]; |
| @@ -743,6 +743,7 @@ struct kvm_ppc_smmu_info { · 207 unmodified lines | ||
| 743 | 743 | #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97 |
| 744 | 744 | #define KVM_CAP_ENABLE_CAP_VM 98 |
| 745 | 745 | #define KVM_CAP_S390_IRQCHIP 99 |
| 746 | +#define KVM_CAP_IOEVENTFD_NO_LENGTH 100 | |
| 746 | 747 | |
| 747 | 748 | #ifdef KVM_CAP_IRQ_ROUTING |
| 748 | 749 | |