From: Linus Walleij <redacted>
Use the new clockevents_config_and_register() function to register
the U300 clockevent, since that code requires ->cpumask to be set
we set this even on this UP system to please the framework.
Cc: Thomas Gleixner <redacted>
Signed-off-by: Linus Walleij <redacted>
---
arch/arm/mach-u300/timer.c | 32 ++++++++++++--------------------
1 files changed, 12 insertions(+), 20 deletions(-)
@@ -27,9 +27,6 @@#include<asm/mach/time.h>#include<asm/mach/irq.h>-/* Be able to sleep for atleast 4 seconds (usually more) */-#define APPTIMER_MIN_RANGE 4-/**APPsidespecialtimerregisters*Thistimercontainsfourtimerswhichcanfireaninterrupteach.
@@ -309,11 +306,11 @@ static int u300_set_next_event(unsigned long cycles,/* Use general purpose timer 1 as clock event */staticstructclock_event_deviceclockevent_u300_1mhz={-.name="GPT1",-.rating=300,/* Reasonably fast and accurate clock event */-.features=CLOCK_EVT_FEAT_PERIODIC|CLOCK_EVT_FEAT_ONESHOT,-.set_next_event=u300_set_next_event,-.set_mode=u300_set_mode,+.name="GPT1",+.rating=300,/* Reasonably fast and accurate clock event */+.features=CLOCK_EVT_FEAT_PERIODIC|CLOCK_EVT_FEAT_ONESHOT,+.set_next_event=u300_set_next_event,+.set_mode=u300_set_mode,};/* Clock event timer interrupt handler */
@@ -413,16 +410,11 @@ static void __init u300_timer_init(void)"GPT2",rate,300,32,clocksource_mmio_readl_up))pr_err("timer: failed to initialize U300 clock source\n");-clockevents_calc_mult_shift(&clockevent_u300_1mhz,-rate,APPTIMER_MIN_RANGE);-/* 32bit counter, so 32bits delta is max */-clockevent_u300_1mhz.max_delta_ns=-clockevent_delta2ns(0xffffffff,&clockevent_u300_1mhz);-/* This timer is slow enough to set for 1 cycle == 1 MHz */-clockevent_u300_1mhz.min_delta_ns=-clockevent_delta2ns(1,&clockevent_u300_1mhz);+/* Configure and register the clockevent */clockevent_u300_1mhz.cpumask=cpumask_of(0);-clockevents_register_device(&clockevent_u300_1mhz);+clockevents_config_and_register(&clockevent_u300_1mhz,rate,+1,0xffffffff);+/**TODO:initandregistertherestofthetimerstoo,theycanbe*usedbyhrtimers!
From: Thomas Gleixner <hidden> Date: 2011-05-31 21:23:06
On Tue, 31 May 2011, Linus Walleij wrote:
From: Linus Walleij <redacted>
Use the new clockevents_config_and_register() function to register
the U300 clockevent, since that code requires ->cpumask to be set
we set this even on this UP system to please the framework.
Hmm, how about whacking the framework maintainer on the head for that
requirement?
On UP this should be simply ignored and on SMP we can optimize that
for all those architectures which come up with CPU0 in the first
place.
Thanks,
tglx
From: Linus Walleij <redacted>
Use the new clockevents_config_and_register() function to register
the U300 clockevent, since that code requires ->cpumask to be set
we set this even on this UP system to please the framework.
Hmm, how about whacking the framework maintainer on the head for that
requirement?
Yeah hm, I sort of figured it might be desirable to have this warning
on SMP. This:
BUG_ON(!dev->cpumask);
from clockevents.c is the culprit anyway. I dunno if it's best to
#ifdef CONFIG_SMP that thing (technically I guess it shouldn't
even be in the struct on UP but who cares) or if there is some
more clever way to do it runtime, so whatever you prefer, I can
patch it if you know what you want.
Thanks,
Linus Walleij
From: Thomas Gleixner <hidden> Date: 2011-06-01 08:34:46
On Wed, 1 Jun 2011, Linus Walleij wrote:
2011/5/31 Thomas Gleixner [off-list ref]:
quoted
On Tue, 31 May 2011, Linus Walleij wrote:
quoted
From: Linus Walleij <redacted>
Use the new clockevents_config_and_register() function to register
the U300 clockevent, since that code requires ->cpumask to be set
we set this even on this UP system to please the framework.
Hmm, how about whacking the framework maintainer on the head for that
requirement?
Yeah hm, I sort of figured it might be desirable to have this warning
on SMP. This:
BUG_ON(!dev->cpumask);
from clockevents.c is the culprit anyway. I dunno if it's best to
#ifdef CONFIG_SMP that thing (technically I guess it shouldn't
even be in the struct on UP but who cares) or if there is some
more clever way to do it runtime, so whatever you prefer, I can
patch it if you know what you want.
We need it even on UP for the &!^%$@ broadcast mechanism to avoid a
massive ifdef mess there :(
But yeah, we can make it conditional for SMP and simply set
cpumask_of(0) in the UP case.
Thanks,
tglx
We need it even on UP for the &!^%$@ broadcast mechanism to avoid a
massive ifdef mess there :(
But yeah, we can make it conditional for SMP and simply set
cpumask_of(0) in the UP case.
Won't this print a big WARNING on SMP_ON_UP=y and is_smp() == false
kernels? Is there a generic cross-architecture way to check for SMP at
runtime?
Also, I don't understand the original motivation for this change. The
assignment to cpumask was there in the u300 timer code already so the
commit text from Linus is a bit misleading/confusing.
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
Won't this print a big WARNING on SMP_ON_UP=y and is_smp() == false
kernels? Is there a generic cross-architecture way to check for SMP at
Need to check that.
runtime?
Also, I don't understand the original motivation for this change. The
assignment to cpumask was there in the u300 timer code already so the
commit text from Linus is a bit misleading/confusing.
The point is that we can remove these assignements for UP all over the
place and just do it in the core code.