aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/smp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/smp.c')
-rw-r--r--arch/x86/kernel/smp.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index ec1de97600e7..337ce0c44f92 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -22,6 +22,9 @@
22#include <linux/interrupt.h> 22#include <linux/interrupt.h>
23#include <linux/cpu.h> 23#include <linux/cpu.h>
24 24
25#include <litmus/litmus.h>
26#include <litmus/trace.h>
27
25#include <asm/mtrr.h> 28#include <asm/mtrr.h>
26#include <asm/tlbflush.h> 29#include <asm/tlbflush.h>
27#include <asm/mmu_context.h> 30#include <asm/mmu_context.h>
@@ -117,6 +120,7 @@ static void native_smp_send_reschedule(int cpu)
117 WARN_ON(1); 120 WARN_ON(1);
118 return; 121 return;
119 } 122 }
123 TS_SEND_RESCHED_START(cpu);
120 apic->send_IPI_mask(cpumask_of(cpu), RESCHEDULE_VECTOR); 124 apic->send_IPI_mask(cpumask_of(cpu), RESCHEDULE_VECTOR);
121} 125}
122 126
@@ -197,7 +201,12 @@ static void native_smp_send_stop(void)
197void smp_reschedule_interrupt(struct pt_regs *regs) 201void smp_reschedule_interrupt(struct pt_regs *regs)
198{ 202{
199 ack_APIC_irq(); 203 ack_APIC_irq();
204 /* LITMUS^RT needs this interrupt to proper reschedule
205 * on this cpu
206 */
207 set_tsk_need_resched(current);
200 inc_irq_stat(irq_resched_count); 208 inc_irq_stat(irq_resched_count);
209 TS_SEND_RESCHED_END;
201 /* 210 /*
202 * KVM uses this interrupt to force a cpu out of guest mode 211 * KVM uses this interrupt to force a cpu out of guest mode
203 */ 212 */