aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-22 23:04:09 -0400
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2009-04-22 23:04:09 -0400
commit042043c14a2fe0d3f78682d8f149e038926d5869 (patch)
treee00999c6d52ea9ed1e034beb8cf2f4fe5a9515f6 /arch/x86
parentb5c4ababa76ce94cfa276f620b81d7d0f1d8ebf1 (diff)
x86-32: add support for smp_send_pull_timers()
This establishes the architectures dependent bits for hrtimer_start_on() on x86-32.
Diffstat (limited to 'arch/x86')
-rw-r--r--arch/x86/kernel/smp_32.c17
-rw-r--r--arch/x86/kernel/smpboot_32.c2
2 files changed, 19 insertions, 0 deletions
diff --git a/arch/x86/kernel/smp_32.c b/arch/x86/kernel/smp_32.c
index 1063dfc498..e1c5aa316f 100644
--- a/arch/x86/kernel/smp_32.c
+++ b/arch/x86/kernel/smp_32.c
@@ -25,6 +25,8 @@
25#include <asm/mmu_context.h> 25#include <asm/mmu_context.h>
26#include <mach_apic.h> 26#include <mach_apic.h>
27 27
28#include <litmus/litmus.h>
29
28/* 30/*
29 * Some notes on x86 processor bugs affecting SMP operation: 31 * Some notes on x86 processor bugs affecting SMP operation:
30 * 32 *
@@ -475,6 +477,12 @@ static void native_smp_send_reschedule(int cpu)
475 send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR); 477 send_IPI_mask(cpumask_of_cpu(cpu), RESCHEDULE_VECTOR);
476} 478}
477 479
480void smp_send_pull_timers(int cpu)
481{
482 WARN_ON(cpu_is_offline(cpu));
483 send_IPI_mask(cpumask_of_cpu(cpu), PULL_TIMERS_VECTOR);
484}
485
478/* 486/*
479 * Structure and data for smp_call_function(). This is designed to minimise 487 * Structure and data for smp_call_function(). This is designed to minimise
480 * static memory requirements. It also looks cleaner. 488 * static memory requirements. It also looks cleaner.
@@ -645,6 +653,15 @@ fastcall void smp_reschedule_interrupt(struct pt_regs *regs)
645 __get_cpu_var(irq_stat).irq_resched_count++; 653 __get_cpu_var(irq_stat).irq_resched_count++;
646} 654}
647 655
656extern void hrtimer_pull(void);
657
658fastcall void smp_pull_timers_interrupt(struct pt_regs *regs)
659{
660 ack_APIC_irq();
661 TRACE("pull timers interrupt\n");
662 hrtimer_pull();
663}
664
648fastcall void smp_call_function_interrupt(struct pt_regs *regs) 665fastcall void smp_call_function_interrupt(struct pt_regs *regs)
649{ 666{
650 void (*func) (void *info) = call_data->func; 667 void (*func) (void *info) = call_data->func;
diff --git a/arch/x86/kernel/smpboot_32.c b/arch/x86/kernel/smpboot_32.c
index 4ea80cbe52..133cbb6118 100644
--- a/arch/x86/kernel/smpboot_32.c
+++ b/arch/x86/kernel/smpboot_32.c
@@ -1323,6 +1323,8 @@ void __init smp_intr_init(void)
1323 1323
1324 /* IPI for generic function call */ 1324 /* IPI for generic function call */
1325 set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt); 1325 set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt);
1326
1327 set_intr_gate(PULL_TIMERS_VECTOR, pull_timers_interrupt);
1326} 1328}
1327 1329
1328/* 1330/*