From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751366AbdJXEdN (ORCPT ); Tue, 24 Oct 2017 00:33:13 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:60132 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750711AbdJXEdK (ORCPT ); Tue, 24 Oct 2017 00:33:10 -0400 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Date: Mon, 23 Oct 2017 21:33:09 -0700 From: Sodagudi Prasad To: Thomas Gleixner , viresh.kumar@linaro.org, fweisbec@gmail.com, mingo@kernel.org Cc: linux-kernel@vger.kernel.org, psodagud@codeaurora.org Subject: =?UTF-8?Q?clock_event_device=E2=80=99s_next=5Fevent?= Message-ID: <7c5ccef0fe45286324f5bf80eb3635c3@codeaurora.org> User-Agent: Roundcube Webmail/1.2.5 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Viresh and Thomas, In the functions tick_nohz_stop_sched_tick(), when expires = KTIME_MAX we are canceling the tick_sched_timer timer but we are not updating the clock event device’s next_event to KTIME_MAX. Due to that broadcast device’s next_event is not programmed properly and resulting unnecessary wakeups for this cpu. /* * If the expiration time == KTIME_MAX, then we simply stop * the tick timer. */ if (unlikely(expires == KTIME_MAX)) { if (ts->nohz_mode == NOHZ_MODE_HIGHRES) hrtimer_cancel(&ts->sched_timer); goto out; } After digging further, I see that following call flow is updating tick_cpu_device state to shutdown state but clock event device next_event is not updated to KTIME_MAX. hrtimer_cancel -> __remove_hrtimer -> hrtimer_force_reprogram -> tick_program_event. int tick_program_event(ktime_t expires, int force) { struct clock_event_device *dev = __this_cpu_read(tick_cpu_device.evtdev); if (unlikely(expires == KTIME_MAX)) { /* * We don't need the clock event device any more, stop it. */ clockevents_switch_state(dev, CLOCK_EVT_STATE_ONESHOT_STOPPED); return 0; } In the above tick_program_event() function clock event device’s next_event is not getting updated as clockevents_program_event() function not called after state update. -thanks, Prasad -- The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, Linux Foundation Collaborative Project