Messages in this thread | | | Subject | Re: [PATCH] sched: Support current clocksource handling in fallback sched_clock(). | From | Peter Zijlstra <> | Date | Thu, 28 May 2009 14:40:16 +0200 |
| |
On Thu, 2009-05-28 at 14:22 +0200, Thomas Gleixner wrote: > On Thu, 28 May 2009, Paul Mundt wrote: > > @@ -437,10 +441,19 @@ void clocksource_unregister(struct clocksource *cs) > > unsigned long flags; > > > > spin_lock_irqsave(&clocksource_lock, flags); > > + > > + if (sched_clocksource == cs) { > > + printk(KERN_WARNING "Refusing to unregister " > > + "scheduler clocksource %s", cs->name); > > Hmm, isn't that dangerous ? The clocksource might be in a module or > in kmalloced memory which is going to be freed.
One could play dirty tricks with 'leaking' module ref counts and such so as to avoid that. The alternative is making sched_clock() look something like:
u64 __weak sched_clock(void) { struct clocksource *clock; u64 time;
rcu_read_lock(); clock = rcu_dereference(sched_clocksource); time = cyc2ns(clock, read_clocksource(clock)); rcu_read_unlock;
return time; }
and make the module unload do a sync_rcu -- but this might be a little overkill
| |