From 12f6d91cef2d9612a56d67b88dcd363b3b052d3b Mon Sep 17 00:00:00 2001 From: Grant Grundler Date: Sun, 3 Sep 2006 00:02:16 -0700 Subject: [PATCH] --- yaml --- r: 38527 b: refs/heads/master c: 56f335c89e28c488b1bfea3e5e697fce805c784d h: refs/heads/master i: 38525: 81116c87c7a29852ddef00c748d23da45784ef95 38523: 58abe8f5cf9742bfe74e08381b400eec3e458cc1 38519: 03c2f5fa15c8fbe686bf00d4904c776f671cf438 38511: 3ccad67f7a8997dd3cedbc9296c24d3b94be4186 38495: 9315f0fca108852acf41bd542509876dbb9fddd2 38463: 4ff9650c62b45738f7b3e8969b32de83671106b9 38399: b5908293028896088806b8cbeeba23c4969d9ece v: v3 --- [refs] | 2 +- trunk/arch/parisc/kernel/smp.c | 4 +++- trunk/arch/parisc/kernel/time.c | 20 +++++++++++--------- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/[refs] b/[refs] index d61d42a4e358..995c9bf7707a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7908a0c72ee78ba5476c2a773d808c77593719c6 +refs/heads/master: 56f335c89e28c488b1bfea3e5e697fce805c784d diff --git a/trunk/arch/parisc/kernel/smp.c b/trunk/arch/parisc/kernel/smp.c index 98e40959a564..f33e8de438dc 100644 --- a/trunk/arch/parisc/kernel/smp.c +++ b/trunk/arch/parisc/kernel/smp.c @@ -430,8 +430,9 @@ smp_do_timer(struct pt_regs *regs) static void __init smp_cpu_init(int cpunum) { - extern int init_per_cpu(int); /* arch/parisc/kernel/setup.c */ + extern int init_per_cpu(int); /* arch/parisc/kernel/processor.c */ extern void init_IRQ(void); /* arch/parisc/kernel/irq.c */ + extern void start_cpu_itimer(void); /* arch/parisc/kernel/time.c */ /* Set modes and Enable floating point coprocessor */ (void) init_per_cpu(cpunum); @@ -457,6 +458,7 @@ smp_cpu_init(int cpunum) enter_lazy_tlb(&init_mm, current); init_IRQ(); /* make sure no IRQ's are enabled or pending */ + start_cpu_itimer(); } diff --git a/trunk/arch/parisc/kernel/time.c b/trunk/arch/parisc/kernel/time.c index ab641d67f551..47831c2cd093 100644 --- a/trunk/arch/parisc/kernel/time.c +++ b/trunk/arch/parisc/kernel/time.c @@ -223,22 +223,24 @@ unsigned long long sched_clock(void) } +void __init start_cpu_itimer(void) +{ + unsigned int cpu = smp_processor_id(); + unsigned long next_tick = mfctl(16) + clocktick; + + mtctl(next_tick, 16); /* kick off Interval Timer (CR16) */ + + cpu_data[cpu].it_value = next_tick; +} + void __init time_init(void) { - unsigned long next_tick; static struct pdc_tod tod_data; clocktick = (100 * PAGE0->mem_10msec) / HZ; halftick = clocktick / 2; - /* Setup clock interrupt timing */ - - next_tick = mfctl(16); - next_tick += clocktick; - cpu_data[smp_processor_id()].it_value = next_tick; - - /* kick off Itimer (CR16) */ - mtctl(next_tick, 16); + start_cpu_itimer(); /* get CPU 0 started */ if(pdc_tod_read(&tod_data) == 0) { write_seqlock_irq(&xtime_lock);