From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752426AbbCEEgi (ORCPT ); Wed, 4 Mar 2015 23:36:38 -0500 Received: from e19.ny.us.ibm.com ([129.33.205.209]:45824 "EHLO e19.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751660AbbCEEgh (ORCPT ); Wed, 4 Mar 2015 23:36:37 -0500 Message-ID: <54F7DD4E.1000100@linux.vnet.ibm.com> Date: Thu, 05 Mar 2015 10:06:30 +0530 From: Preeti U Murthy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.6.0 MIME-Version: 1.0 To: Peter Zijlstra CC: tglx@linutronix.de, linux-kernel@vger.kernel.org Subject: Re: [PATCH] tick/broadcast-hrtimer : Fix suspicious RCU usage in idle loop References: <20150226032202.20019.91636.stgit@preeti.in.ibm.com> <20150302145354.GM21418@twins.programming.kicks-ass.net> In-Reply-To: <20150302145354.GM21418@twins.programming.kicks-ass.net> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 15030504-0013-0000-0000-0000001DC061 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/02/2015 08:23 PM, Peter Zijlstra wrote: > On Thu, Feb 26, 2015 at 08:52:02AM +0530, Preeti U Murthy wrote: >> The hrtimer mode of broadcast queues hrtimers in the idle entry >> path so as to wakeup cpus in deep idle states. > > Callgraph please... cpuidle_idle_call() |____ clockevents_notify(CLOCK_EVT_NOTIFY_BROADCAST_ENTER, ....)) |_____tick_broadcast_set_event() |____clockevents_program_event() |____bc_set_next() > >> hrtimer_{start/cancel} >> functions call into tracing which uses RCU. But it is not legal to call >> into RCU in cpuidle because it is one of the quiescent states. Hence >> protect this region with RCU_NONIDLE which informs RCU that the cpu >> is momentarily non-idle. > > It it not clear to me that every user of bc_set_next() is from IDLE. > From what I can tell it ends up being clockevents_program_event() and > that is called quite a lot. bc_set_next() is called from at places: 1. Idle entry : It is called when a cpu in its idle entry path finds the need to reset the broadcast hrtimer. 2. CPU offline operations : When the cpu on which the broadcast hrtimer is being queued goes offline. So you see that almost all the time, it is called in idle entry path. Regards Preeti U Murthy > > Why is bc_set_next() a good function to annotate? >