From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753733AbbC0Hnb (ORCPT ); Fri, 27 Mar 2015 03:43:31 -0400 Received: from mga09.intel.com ([134.134.136.24]:34105 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753696AbbC0Hn2 (ORCPT ); Fri, 27 Mar 2015 03:43:28 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,477,1422950400"; d="scan'208";a="547131265" From: Wanpeng Li To: Ingo Molnar , Peter Zijlstra Cc: Srikar Dronamraju , Jason Low , Preeti U Murthy , linux-kernel@vger.kernel.org, Wanpeng Li Subject: [PATCH] sched/fair: fix update the nohz.next_balance even if we haven't done any load balance Date: Fri, 27 Mar 2015 15:25:00 +0800 Message-Id: <1427441100-6892-1-git-send-email-wanpeng.li@linux.intel.com> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As Srikar pointed out (https://lkml.org/lkml/2015/3/27/26): | With the current code when the ilb cpus are not free: | - We would be updating the nohz.next_balance even through we havent done | any load balance. | - We might iterate thro the nohz.idle_cpus_mask()s to find balance_cpus. This patch fix it by adding need_resched check with the idle check, and keep the need_resched check in for loop to catch ilb get busy. Suggested-by: Srikar Dronamraju Signed-off-by: Wanpeng Li --- kernel/sched/fair.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 0576ce0..1d3e17f 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7639,7 +7639,8 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle) int balance_cpu; if (idle != CPU_IDLE || - !test_bit(NOHZ_BALANCE_KICK, nohz_flags(this_cpu))) + !test_bit(NOHZ_BALANCE_KICK, nohz_flags(this_cpu)) || + need_resched()) goto end; for_each_cpu(balance_cpu, nohz.idle_cpus_mask) { -- 1.9.1