Please backport bee980d9e9642e96351fa3ca9077b853ecf62f57 (xen/events: Handle VIRQ_TIMER before any other hardirq in event loop.) to earlier kernels v3.8...and so on
Subsystems (2)
Hey Greg,
I hadn't (by mistake) put the CC: [email protected] on said patch (Which is in the Linux kernel).
If possible please back-port said patch to the existing stable trees. Attached is a version that applies to some of the earlier trees easily.
Quoted 1 line
From
e525951e780c533209b0102ad91de6acc46db6b2Mon Sep 17 00:00:00 2001
From: Keir Fraser <[email protected]>
Date: Thu, 28 Mar 2013 10:03:36 -0400
Subject: [PATCH] xen/events: Handle VIRQ_TIMER before any other hardirq in
event loop.
This avoids any other hardirq handler seeing a very stale jiffies value immediately after wakeup from a long idle period. The one observable symptom of this was a USB keyboard, with software keyboard repeat, which would always repeat a key immediately that it was pressed. This is due to the key press waking the guest, the key handler immediately runs, sees an old jiffies value, and then that jiffies value significantly updated, before the key is unpressed.
--- drivers/xen/events.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
drivers/xen/events.c +15 -4
@@ -1288,7 +1288,7 @@ static void __xen_evtchn_do_upcall(void) {int start_word_idx, start_bit_idx;int word_idx, bit_idx; -int i; +int i, irq;int cpu =get_cpu ();struct shared_info *s = HYPERVISOR_shared_info;struct vcpu_info *vcpu_info =__this_cpu_read (xen_vcpu);
@@ -1296,6 +1296,8 @@ static void __xen_evtchn_do_upcall(void) do { unsigned long pending_words; + unsigned long pending_bits; + struct irq_desc *desc; vcpu_info->evtchn_upcall_pending = 0;
@@ -1306,6 +1308,17 @@ static void __xen_evtchn_do_upcall(void)/* Clear master flag /before/ clearing selector flag. */ wmb ();#endif +if ((irq =per_cpu (virq_to_irq, cpu)[VIRQ_TIMER ]) !=-1 ) { +int evtchn =evtchn_from_irq (irq); + word_idx = evtchn /BITS_PER_LONG ; + pending_bits = evtchn %BITS_PER_LONG ; +if (active_evtchns (cpu, s, word_idx) & (1ULL << pending_bits)) { + desc =irq_to_desc (irq); +if (desc) +generic_handle_irq_desc (irq, desc); + } + } + pending_words =xchg (&vcpu_info->evtchn_pending_sel,0 ); start_word_idx =__this_cpu_read (current_word_idx);
@@ -1314,7 +1327,6 @@ static void __xen_evtchn_do_upcall(void) word_idx = start_word_idx;for (i =0 ; pending_words !=0 ; i++) { -unsigned long pending_bits;unsigned long words; words =MASK_LSBS (pending_words, word_idx);
@@ -1343,8 +1355,7 @@ static void __xen_evtchn_do_upcall(void) do { unsigned long bits; - int port, irq; - struct irq_desc *desc; + int port; bits = MASK_LSBS(pending_bits, bit_idx);
Signature · 1 line
1.8.1.4
Greg KH
maintainerQuoted 7 lines · Konrad Rzeszutek Wilk
Hey Greg,
I hadn't (by mistake) put the CC: [email protected] on said patch (Which is in the Linux kernel).
If possible please back-port said patch to the existing stable trees. Attached is a version that applies to some of the earlier trees easily.
Now applied to 3.0 and 3.4-stable trees.
greg k-h
Quoted 10 lines · Greg KH
Quoted 7 lines · Konrad Rzeszutek Wilk
Hey Greg,
I hadn't (by mistake) put the CC: [email protected] on said patch (Which is in the Linux kernel).
If possible please back-port said patch to the existing stable trees. Attached is a version that applies to some of the earlier trees easily.
Now applied to 3.0 and 3.4-stable trees.
Much appreciated!
Quoted 2 lines
greg k-h
Quoted 9 lines · Konrad Rzeszutek Wilk
Hey Greg,
I hadn't (by mistake) put the CC: [email protected] on said patch (Which is in the Linux kernel).
If possible please back-port said patch to the existing stable trees. Attached is a version that applies to some of the earlier trees easily.
Thanks, I'm queuing it to the 3.5 kernel as well.
Cheers,
Signature · 1 line
Luis
Ben Hutchings
AppliedQuoted 7 lines · Konrad Rzeszutek Wilk
Hey Greg,
I hadn't (by mistake) put the CC: [email protected] on said patch (Which is in the Linux kernel).
If possible please back-port said patch to the existing stable trees. Attached is a version that applies to some of the earlier trees easily.
Queued up for 3.2, thanks.
Ben.
Signature · 2 lines
Ben Hutchings friends: People who know you well, but like you anyway.