Message ID | 50463657.1070109@codeaurora.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Sep 04, 2012 at 06:11:51PM +0100, Stephen Boyd wrote: > On 09/04/12 03:44, Will Deacon wrote: > > On Tue, Sep 04, 2012 at 11:07:50AM +0100, Will Deacon wrote: > >> On Fri, Aug 31, 2012 at 12:51:25AM +0100, Stephen Boyd wrote: > >>>> +void __init register_current_timer_delay(struct delay_timer *timer) > >>> const? > >> Sure. I'll send an updated patch. > > Gah, spoke too soon. This isn't going to work, as the frequency may not be > > known until probe time (for example, it could be obtained by the device > > tree) so const data isn't going to cut it. > > > > That's fine. We can still do const can't we? I was suggesting you make > the argument const and not the data in arch_timer.c const. This way we > can be sure that delay.c isn't going to muck with the struct, but the > ones who register the struct can fill it in at runtime. Aha, gotcha. I thought you wanted to enforce const-ness on the provider for some reason. > Squash this in and test compile? Works a treat. Will
diff --git a/arch/arm/include/asm/delay.h b/arch/arm/include/asm/delay.h index 50928e8..ab98fdd 100644 --- a/arch/arm/include/asm/delay.h +++ b/arch/arm/include/asm/delay.h @@ -63,7 +63,7 @@ extern void __loop_const_udelay(unsigned long); /* Delay-loop timer registration. */ #define ARCH_HAS_READ_CURRENT_TIMER -extern void register_current_timer_delay(struct delay_timer *timer); +extern void register_current_timer_delay(const struct delay_timer *timer); #endif /* __ASSEMBLY__ */ diff --git a/arch/arm/lib/delay.c b/arch/arm/lib/delay.c index fe6f4fb..e868ef0 100644 --- a/arch/arm/lib/delay.c +++ b/arch/arm/lib/delay.c @@ -34,7 +34,7 @@ struct arm_delay_ops arm_delay_ops = { .udelay = __loop_udelay, }; -static struct delay_timer *delay_timer; +static const struct delay_timer *delay_timer; static bool delay_calibrated; int read_current_timer(unsigned long *timer_val) @@ -62,7 +62,7 @@ static void __timer_udelay(unsigned long usecs) __timer_const_udelay(usecs * UDELAY_MULT); } -void __init register_current_timer_delay(struct delay_timer *timer) +void __init register_current_timer_delay(const struct delay_timer *timer) { if (!delay_calibrated) { pr_info("Switching to timer-based delay loop\n");