mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
8d32a307e4
Add a commandline parameter "threadirqs" which forces all interrupts except those marked IRQF_NO_THREAD to run threaded. That's mostly a debug option to allow retrieving better debug data from crashing interrupt handlers. If "threadirqs" is not enabled on the kernel command line, then there is no impact in the interrupt hotpath. Architecture code needs to select CONFIG_IRQ_FORCED_THREADING after marking the interrupts which cant be threaded IRQF_NO_THREAD. All interrupts which have IRQF_TIMER set are implict marked IRQF_NO_THREAD. Also all PER_CPU interrupts are excluded. Forced threading hard interrupts also forces all soft interrupt handling into thread context. When enabled it might slow down things a bit, but for debugging problems in interrupt code it's a reasonable penalty as it does not immediately crash and burn the machine when an interrupt handler is buggy. Some test results on a Core2Duo machine: Cache cold run of: # time git grep irq_desc non-threaded threaded real 1m18.741s 1m19.061s user 0m1.874s 0m1.757s sys 0m5.843s 0m5.427s # iperf -c server non-threaded [ 3] 0.0-10.0 sec 1.09 GBytes 933 Mbits/sec [ 3] 0.0-10.0 sec 1.09 GBytes 934 Mbits/sec [ 3] 0.0-10.0 sec 1.09 GBytes 933 Mbits/sec threaded [ 3] 0.0-10.0 sec 1.09 GBytes 939 Mbits/sec [ 3] 0.0-10.0 sec 1.09 GBytes 934 Mbits/sec [ 3] 0.0-10.0 sec 1.09 GBytes 937 Mbits/sec Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> LKML-Reference: <20110223234956.772668648@linutronix.de>
60 lines
1.1 KiB
Plaintext
60 lines
1.1 KiB
Plaintext
config HAVE_GENERIC_HARDIRQS
|
|
bool
|
|
|
|
if HAVE_GENERIC_HARDIRQS
|
|
menu "IRQ subsystem"
|
|
#
|
|
# Interrupt subsystem related configuration options
|
|
#
|
|
config GENERIC_HARDIRQS
|
|
def_bool y
|
|
|
|
# Select this to disable the deprecated stuff
|
|
config GENERIC_HARDIRQS_NO_DEPRECATED
|
|
bool
|
|
|
|
config GENERIC_HARDIRQS_NO_COMPAT
|
|
bool
|
|
|
|
# Options selectable by the architecture code
|
|
config HAVE_SPARSE_IRQ
|
|
bool
|
|
|
|
config GENERIC_IRQ_PROBE
|
|
bool
|
|
|
|
config GENERIC_IRQ_SHOW
|
|
bool
|
|
|
|
config GENERIC_PENDING_IRQ
|
|
bool
|
|
|
|
config AUTO_IRQ_AFFINITY
|
|
bool
|
|
|
|
config HARDIRQS_SW_RESEND
|
|
bool
|
|
|
|
config IRQ_PREFLOW_FASTEOI
|
|
bool
|
|
|
|
config IRQ_FORCED_THREADING
|
|
bool
|
|
|
|
config SPARSE_IRQ
|
|
bool "Support sparse irq numbering"
|
|
depends on HAVE_SPARSE_IRQ
|
|
---help---
|
|
|
|
Sparse irq numbering is useful for distro kernels that want
|
|
to define a high CONFIG_NR_CPUS value but still want to have
|
|
low kernel memory footprint on smaller machines.
|
|
|
|
( Sparse irqs can also be beneficial on NUMA boxes, as they spread
|
|
out the interrupt descriptors in a more NUMA-friendly way. )
|
|
|
|
If you don't know what to do here, say N.
|
|
|
|
endmenu
|
|
endif
|