Messages in this thread | | | From | Dmitry Torokhov <> | Subject | Re: [2.6.32-rc5-git5] synchronize_sched() inside spin_lock()? | Date | Mon, 2 Nov 2009 15:33:46 -0800 |
| |
On Monday 02 November 2009 02:30:28 pm Paul E. McKenney wrote: > On Mon, Nov 02, 2009 at 09:00:06PM +0900, Tetsuo Handa wrote: > > Commit: 4ea7e38696c7e798c47ebbecadfd392f23f814f9 > > > > tracepoint_synchronize_unregister() calls synchronize_sched(), but it is > > between spin_lock() and spin_unlock(). Is it OK? > > Calling synchronize_sched() while holding a spinlock would indeed be > very bad, but the code below seems to instead be invoking call_rcu(), > which is no problem. > > Or am I missing something here? > > Thanx, Paul > > > static int set_all_monitor_traces(int state) > > { > > int rc = 0; > > struct dm_hw_stat_delta *new_stat = NULL; > > struct dm_hw_stat_delta *temp; > > > > spin_lock(&trace_state_lock); > > > > switch (state) { > > case TRACE_ON: > > rc |= register_trace_kfree_skb(trace_kfree_skb_hit); > > rc |= register_trace_napi_poll(trace_napi_poll_hit); > > break; > > case TRACE_OFF: > > rc |= unregister_trace_kfree_skb(trace_kfree_skb_hit); > > rc |= unregister_trace_napi_poll(trace_napi_poll_hit); > > > > tracepoint_synchronize_unregister();
This has synchronize_sched() inside.
-- Dmitry
| |