diff options
Diffstat (limited to 'arch/i386/xen/time.c')
-rw-r--r-- | arch/i386/xen/time.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/arch/i386/xen/time.c b/arch/i386/xen/time.c index 2aab44bec2a5..aeb04cf5dbf1 100644 --- a/arch/i386/xen/time.c +++ b/arch/i386/xen/time.c | |||
@@ -519,7 +519,7 @@ static irqreturn_t xen_timer_interrupt(int irq, void *dev_id) | |||
519 | return ret; | 519 | return ret; |
520 | } | 520 | } |
521 | 521 | ||
522 | static void xen_setup_timer(int cpu) | 522 | void xen_setup_timer(int cpu) |
523 | { | 523 | { |
524 | const char *name; | 524 | const char *name; |
525 | struct clock_event_device *evt; | 525 | struct clock_event_device *evt; |
@@ -535,16 +535,20 @@ static void xen_setup_timer(int cpu) | |||
535 | IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING, | 535 | IRQF_DISABLED|IRQF_PERCPU|IRQF_NOBALANCING, |
536 | name, NULL); | 536 | name, NULL); |
537 | 537 | ||
538 | evt = &get_cpu_var(xen_clock_events); | 538 | evt = &per_cpu(xen_clock_events, cpu); |
539 | memcpy(evt, xen_clockevent, sizeof(*evt)); | 539 | memcpy(evt, xen_clockevent, sizeof(*evt)); |
540 | 540 | ||
541 | evt->cpumask = cpumask_of_cpu(cpu); | 541 | evt->cpumask = cpumask_of_cpu(cpu); |
542 | evt->irq = irq; | 542 | evt->irq = irq; |
543 | clockevents_register_device(evt); | ||
544 | 543 | ||
545 | setup_runstate_info(cpu); | 544 | setup_runstate_info(cpu); |
545 | } | ||
546 | |||
547 | void xen_setup_cpu_clockevents(void) | ||
548 | { | ||
549 | BUG_ON(preemptible()); | ||
546 | 550 | ||
547 | put_cpu_var(xen_clock_events); | 551 | clockevents_register_device(&__get_cpu_var(xen_clock_events)); |
548 | } | 552 | } |
549 | 553 | ||
550 | __init void xen_time_init(void) | 554 | __init void xen_time_init(void) |
@@ -570,4 +574,5 @@ __init void xen_time_init(void) | |||
570 | tsc_disable = 0; | 574 | tsc_disable = 0; |
571 | 575 | ||
572 | xen_setup_timer(cpu); | 576 | xen_setup_timer(cpu); |
577 | xen_setup_cpu_clockevents(); | ||
573 | } | 578 | } |