diff options
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-timer-fix.patch')
-rw-r--r-- | meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-timer-fix.patch | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-timer-fix.patch b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-timer-fix.patch deleted file mode 100644 index a6f5079fc3..0000000000 --- a/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.32-timer-fix.patch +++ /dev/null | |||
@@ -1,64 +0,0 @@ | |||
1 | From 33725d4939f457b12d7bc1bcbcc0dfb8b2f5bd48 Mon Sep 17 00:00:00 2001 | ||
2 | From: Arjan van de Ven <arjan@linux.intel.com> | ||
3 | Date: Thu, 24 Sep 2009 13:24:16 +0200 | ||
4 | Subject: [PATCH] x86, timers: check for pending timers after (device) interrupts | ||
5 | |||
6 | Now that range timers and deferred timers are common, I found a | ||
7 | problem with these using the "perf timechart" tool. | ||
8 | |||
9 | It turns out that on x86, these two 'opportunistic' timers only | ||
10 | get checked when another "real" timer happens. | ||
11 | These opportunistic timers have the objective to save power by | ||
12 | hitchhiking on other wakeups, as to avoid CPU wakeups by themselves | ||
13 | as much as possible. | ||
14 | |||
15 | The change in this patch runs this check not only at timer interrupts, | ||
16 | but at all (device) interrupts. The effect is that | ||
17 | 1) the deferred timers/range timers get delayed less | ||
18 | 2) the range timers cause less wakeups by themselves because | ||
19 | the percentage of hitchhiking on existing wakeup events goes up. | ||
20 | |||
21 | I've verified the working of the patch using "perf timechart", | ||
22 | the original exposed bug is gone with this patch. | ||
23 | |||
24 | Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> | ||
25 | --- | ||
26 | arch/x86/kernel/irq.c | 2 ++ | ||
27 | arch/x86/kernel/smp.c | 1 + | ||
28 | 2 files changed, 3 insertions(+), 0 deletions(-) | ||
29 | |||
30 | diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c | ||
31 | index 74656d1..3912061 100644 | ||
32 | --- a/arch/x86/kernel/irq.c | ||
33 | +++ b/arch/x86/kernel/irq.c | ||
34 | @@ -244,6 +244,7 @@ unsigned int __irq_entry do_IRQ(struct pt_regs *regs) | ||
35 | __func__, smp_processor_id(), vector, irq); | ||
36 | } | ||
37 | |||
38 | + run_local_timers(); | ||
39 | irq_exit(); | ||
40 | |||
41 | set_irq_regs(old_regs); | ||
42 | @@ -268,6 +269,7 @@ void smp_generic_interrupt(struct pt_regs *regs) | ||
43 | if (generic_interrupt_extension) | ||
44 | generic_interrupt_extension(); | ||
45 | |||
46 | + run_local_timers(); | ||
47 | irq_exit(); | ||
48 | |||
49 | set_irq_regs(old_regs); | ||
50 | diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c | ||
51 | index ec1de97..d915d95 100644 | ||
52 | --- a/arch/x86/kernel/smp.c | ||
53 | +++ b/arch/x86/kernel/smp.c | ||
54 | @@ -198,6 +198,7 @@ void smp_reschedule_interrupt(struct pt_regs *regs) | ||
55 | { | ||
56 | ack_APIC_irq(); | ||
57 | inc_irq_stat(irq_resched_count); | ||
58 | + run_local_timers(); | ||
59 | /* | ||
60 | * KVM uses this interrupt to force a cpu out of guest mode | ||
61 | */ | ||
62 | -- | ||
63 | 1.6.0.6 | ||
64 | |||