From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756271AbdDPPoC (ORCPT ); Sun, 16 Apr 2017 11:44:02 -0400 Received: from mga03.intel.com ([134.134.136.65]:43916 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756091AbdDPPn7 (ORCPT ); Sun, 16 Apr 2017 11:43:59 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.37,208,1488873600"; d="scan'208";a="1156768844" From: Chen Yu To: Yu Chen Cc: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Prarit Bhargava , "Rafael J. Wysocki" , Len Brown , x86@kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] x86/irq: Do not check available vectors if no irq to migrate or required slots has been found Date: Sun, 16 Apr 2017 23:43:30 +0800 Message-Id: <1492357410-510-1-git-send-email-yu.c.chen@intel.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A micro optimization to bypass the free vector checking if the current CPU has no irq to migrate, also breaks the for_each_online_cpu() loop when the count reaches the required vectors. Suggested-by: Thomas Gleixner Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Prarit Bhargava Cc: "Rafael J. Wysocki" Cc: Len Brown Cc: x86@kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Chen Yu --- arch/x86/kernel/irq.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/irq.c b/arch/x86/kernel/irq.c index 4d8183b..f34fe74 100644 --- a/arch/x86/kernel/irq.c +++ b/arch/x86/kernel/irq.c @@ -394,6 +394,9 @@ int check_irq_vectors_for_cpu_disable(void) !cpumask_subset(&affinity_new, &online_new)) this_count++; } + /* No need to check any further. */ + if (!this_count) + return 0; count = 0; for_each_online_cpu(cpu) { @@ -411,8 +414,10 @@ int check_irq_vectors_for_cpu_disable(void) for (vector = FIRST_EXTERNAL_VECTOR; vector < first_system_vector; vector++) { if (!test_bit(vector, used_vectors) && - IS_ERR_OR_NULL(per_cpu(vector_irq, cpu)[vector])) - count++; + IS_ERR_OR_NULL(per_cpu(vector_irq, cpu)[vector])) { + if (++count == this_count) + return 0; + } } } -- 2.7.4