keyhandler: rework process of nonirq keyhandler
authorLan Tianyu <tianyu.lan@intel.com>
Thu, 13 Oct 2016 11:06:28 +0000 (13:06 +0200)
committerJan Beulich <jbeulich@suse.com>
Thu, 13 Oct 2016 11:06:28 +0000 (13:06 +0200)
commit610b4eda2ce2b87cccbc8f61bdec01052e54fc66
tree32ef1ea9176eaf94c58c7b9b373f079bf903b1cd
parent38ab99b26bf4298a33105ec66f3f6a3f7e05a326
keyhandler: rework process of nonirq keyhandler

Keyhandler may run for a long time in serial port driver's
timer handler on the large machine with a lot of physical
cpus(e,g dump_timerq()) when serial port driver works in
the poll mode(via the exception mechanism).

If a timer handler runs a long time, it will block nmi_timer_fn()
to feed NMI watchdog and cause Xen hypervisor panic. Inserting
process_pending_softirqs() in timer handler will not help. when timer
interrupt arrives, timer subsystem calls all expired timer handlers
before programming next timer interrupt. There is no timer interrupt
arriving to trigger timer softirq during run a timer handler.

This patch is to fix the issue to make nonirq keyhandler run in
tasklet when receive debug key from serial port.

Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/common/keyhandler.c
xen/common/sysctl.c
xen/drivers/char/console.c
xen/include/xen/keyhandler.h