irqbypass: Use xarray to track producers and consumers
authorSean Christopherson <seanjc@google.com>
Fri, 16 May 2025 23:07:33 +0000 (16:07 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:52:40 +0000 (13:52 -0700)
commit8394b32faecd9c63b3c436e78e62519e9548e530
tree99916a243538f029d3c51c22735e706d7019448e
parent46a4bfd0ae480cabbacc56fe0d8f91cbe229c7ce
irqbypass: Use xarray to track producers and consumers

Track IRQ bypass producers and consumers using an xarray to avoid the O(2n)
insertion time associated with walking a list to check for duplicate
entries, and to search for an partner.

At low (tens or few hundreds) total producer/consumer counts, using a list
is faster due to the need to allocate backing storage for xarray.  But as
count creeps into the thousands, xarray wins easily, and can provide
several orders of magnitude better latency at high counts.  E.g. hundreds
of nanoseconds vs. hundreds of milliseconds.

Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: David Matlack <dmatlack@google.com>
Cc: Like Xu <like.xu.linux@gmail.com>
Cc: Binbin Wu <binbin.wu@linux.intel.com>
Reported-by: Yong He <alexyonghe@tencent.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=217379
Link: https://lore.kernel.org/all/20230801115646.33990-1-likexu@tencent.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Alex Williamson <alex.williamson@redhat.com>
Link: https://lore.kernel.org/r/20250516230734.2564775-8-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
include/linux/irqbypass.h
virt/lib/irqbypass.c