genirq: Use a maple tree for interrupt descriptor management
authorShanker Donthineni <sdonthineni@nvidia.com>
Fri, 19 May 2023 13:49:02 +0000 (08:49 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 24 May 2023 09:39:44 +0000 (11:39 +0200)
commit721255b9826bd11c7a38b585905fc2dd0fb94e52
tree2c266db0d16e3708c17e86e3adb6cc644a0d9e4b
parent5e630aa8d9fcd4c0cb6d5d09422009533aba979a
genirq: Use a maple tree for interrupt descriptor management

The current implementation uses a static bitmap for interrupt descriptor
allocation and a radix tree to pointer store the pointer for lookup.

However, the size of the bitmap is constrained by the build time macro
MAX_SPARSE_IRQS, which may not be sufficient to support high-end servers,
particularly those with GICv4.1 hardware, which require a large interrupt
space to cover LPIs and vSGIs.

Replace the bitmap and the radix tree with a maple tree, which not only
stores pointers for lookup, but also provides a mechanism to find free
ranges. That removes the build time hardcoded upper limit.

Signed-off-by: Shanker Donthineni <sdonthineni@nvidia.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/r/20230519134902.1495562-4-sdonthineni@nvidia.com
kernel/irq/internals.h
kernel/irq/irqdesc.c