From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752273AbbCaGz3 (ORCPT ); Tue, 31 Mar 2015 02:55:29 -0400 Received: from mail-pd0-f178.google.com ([209.85.192.178]:35986 "EHLO mail-pd0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750898AbbCaGz2 (ORCPT ); Tue, 31 Mar 2015 02:55:28 -0400 From: Viresh Kumar To: Ingo Molnar , Peter Zijlstra , Thomas Gleixner Cc: linaro-kernel@lists.linaro.org, linux-kernel@vger.kernel.org, Viresh Kumar , Steven Miao Subject: [PATCH 0/2] timer: Migrate running timers Date: Tue, 31 Mar 2015 12:25:15 +0530 Message-Id: X-Mailer: git-send-email 2.3.0.rc0.44.ga94655d Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Ingo/Thomas/Peter, While queuing a timer, we try to migrate it to a non-idle core if the local core is idle, but we don't try that if the timer is re-armed from its handler. There were few unsolved problems due to which it was avoided until now. But there are cases where solving these problems can be useful. When the timer is always re-armed from its handler, it never migrates to other cores. And many a times, it ends up waking an idle core to just service the timer, which could have been handled by a non-idle core. Peter suggested [1] few changes which can make that work and the first patch does exactly that. The second one is a minor improvement, that replaces 'running_timer' pointer with 'busy'. That variable was required as part of a sanity check during CPU hot-unplug operation. I was not sure if we should drop this extra variable ('running_timer' or 'busy') and the sanity check. Because we are using another bit from base pointer to keep track of running status of timer, we get a warning on blackfin, as it doesn't respect ____cacheline_aligned [2]. kernel/time/timer.c: In function 'init_timers': kernel/time/timer.c:1731:2: error: call to '__compiletime_assert_1731' declared with attribute error: BUILD_BUG_ON failed: __alignof__(struct tvec_base) & TIMER_FLAG_MASK -- viresh [1] https://lkml.org/lkml/2015/3/28/32 [2] https://lkml.org/lkml/2015/3/29/178 Cc: Steven Miao Viresh Kumar (2): timer: Avoid waking up an idle-core by migrate running timer timer: Replace base-> 'running_timer' with 'busy' include/linux/timer.h | 3 +- kernel/time/timer.c | 102 ++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 81 insertions(+), 24 deletions(-) -- 2.3.0.rc0.44.ga94655d