diff options
author | Sinan Nalkaya <sardok@gmail.com> | 2025-08-27 15:04:18 -0700 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2025-09-10 14:23:30 +0200 |
commit | 35fae10aaf080c2de06a80463e1129e588600db8 (patch) | |
tree | 23b5ca6ecf3ecacd86eb7f2fb33577ac41589135 | |
parent | 76eeb9b8de9880ca38696b2fb56ac45ac0a25c6c (diff) |
um: Support SPARSE_IRQ
Motivation: IRQ KUnit tests are going to require CONFIG_SPARSE_IRQ [1] in
order to:
(a) reliably allocate additional (fake) IRQs and
(b) ensure we can test managed affinity, which is only supported with
SPARSE_IRQ.
It seems that the only thing necessary for ARCH=um is to tell the genirq
core to skip over our preallocated NR_IRQS.
Tested with:
$ ./tools/testing/kunit/kunit.py run
[...]
[13:55:58] Testing complete. Ran 676 tests: passed: 646, skipped: 30
[...]
This compares with pre-patch results:
Ran 672 tests: passed: 644, skipped: 28
i.e., we no longer skip tests that 'depend on SPARSE_IRQ', and existing
tests all pass.
[1]
[PATCH v2 4/6] genirq/test: Depend on SPARSE_IRQ
https://lore.kernel.org/all/CABVgOSngoD0fh1WEkUCEwSdk0Joypo3dA_Y_SjW+K=nVDnZs3Q@mail.gmail.com/
Signed-off-by: Sinan Nalkaya <sardok@gmail.com>
[Brian: Adapted Sinan's patch; rewrote commit message]
Signed-off-by: Brian Norris <briannorris@chromium.org>
Tested-by: David Gow <davidgow@google.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
-rw-r--r-- | arch/um/Kconfig | 1 | ||||
-rw-r--r-- | arch/um/kernel/irq.c | 5 |
2 files changed, 6 insertions, 0 deletions
diff --git a/arch/um/Kconfig b/arch/um/Kconfig index 9083bfdb7735..8161cc5ae6f7 100644 --- a/arch/um/Kconfig +++ b/arch/um/Kconfig @@ -38,6 +38,7 @@ config UML select HAVE_ARCH_TRACEHOOK select HAVE_SYSCALL_TRACEPOINTS select THREAD_INFO_IN_TASK + select SPARSE_IRQ config MMU bool diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c index 0dfaf96bb7da..d69d137a0334 100644 --- a/arch/um/kernel/irq.c +++ b/arch/um/kernel/irq.c @@ -691,6 +691,11 @@ void __init init_IRQ(void) os_setup_epoll(); } +int __init arch_probe_nr_irqs(void) +{ + return NR_IRQS; +} + void sigchld_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs, void *mc) { |