On Thu, 14 May 2015 19:46:11 +0530 Shreyas B Prabhu <[email protected]> wrote: > > Thanks for the comments, but can't these still be called with > > preemption enabled. What happens when CONFIG_DEBUG_PREEMPT is set and > > you enable these tracepoints. Wont it trigger a warning about > > smp_processor_id() being used in preemptible code? > > > Yes. It does trigger "using smp_processor_id() in preemptible code" > warnings. But as you mentioned in the previous comments, we should be > safe even if the trace call happens from a preemptible section. Let me > play out the scenarios here again- > > The task gets migrated after the smp_processor_id() > 1. From an online cpu to another online cpu - No impact > 2. From an online cpu to an offline cpu - Should never happen > 3. From an offline cpu to an online cpu - IIUC, once a cpu has been > offlined it returns to cpu_idle_loop, discovers its offline and calls > arch_cpu_idle_dead. All this happens with preemption disabled. So this > scenario too should never happen. > > So I don't see any downside to changing smp_processor_id() to > raw_smp_processor_id() which will suppress the warnings. If you agree > I'll send a patch doing this.
Yes, please use the raw_smp_processor_id(), and you can add the above description about why it is safe to do so (in the comments). > > Another alternative which is perhaps worth considering is to change > __DO_TRACE itself to check for offline cpu, without a trace event > specifying the check. This will prevent any currently uncaught and any > future tracepoints from using RCU on offline cpus. But I guess it's > little extreme considering only a low fraction of tracepoints have > potential of being called from offline cpus. I think that's a bit extreme, as it would cause an impact to the speed of tracepoints in the hot path. -- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

