Received: by 2002:a89:2c3:0:b0:1ed:23cc:44d1 with SMTP id d3csp1041323lqs; Wed, 6 Mar 2024 04:52:59 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVTrVsSZhnZuGSuiHflIox0r8oDuBzrybKiiLLSOOxjEhgjkk55GjuxYh9lngQ+18smLgjtKT4saQZm2nq8XWXyvnHzTtav4eGB33H9eg== X-Google-Smtp-Source: AGHT+IHED/jouv3dKTjlJpmg5oQZ2mJiWu8LhX6nauNHYXtbo96r8yTzX8Rcp2QZk+PMFPi7QjC+ X-Received: by 2002:a17:902:cecc:b0:1db:e7a4:90a5 with SMTP id d12-20020a170902cecc00b001dbe7a490a5mr5773799plg.12.1709729579181; Wed, 06 Mar 2024 04:52:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709729579; cv=pass; d=google.com; s=arc-20160816; b=h6Kr3n/OBdwSB2dK0uuN/+Jftt8xPgklc7BDdGBYqV0+jD+Vzb/DXyBWEBqCF4uQXv 7JXrcP2GFGz7mx+NJ08FVl2CDerkUsOPzhVtVSIKhW+d29N/3t566AAdBB7imjVKFQ1X ov93apRD+IjCLcHe/qy0iMcQqECMi+qOMPROWk354O3xvhCl0ng3xLErnuyqPWeVBNv+ zXR/XWzx+NdPt9htXY/i3eV6MdgrtcqrO+peF+FyXiBPNg35sdkyefilwFsx6JIdX3we YeayIPLMSXToJ92A6qvl+8x/TNPpr3zFEHbVvFC2eL+g6S11Dp9yHttyIkBdBRrjQUZI 79qg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=2Ekl+y5dAw/6OpDua2h0TcGTP6uBwHJnkGvttLdykK8=; fh=h1xXNY8doO7YpZZxFq7Tt2h1zNi8L7URk9NotQAeleE=; b=WJ2wkMAgWeXhiONN1Z6W99Y76qOIoB3wOXCLlE+g0R1vkwuyNoYTyofwZGQzrlKKiE yRGru3RGCbfhks4GLZo9izN8VFtSOTmfrTOdiAYsgBtUxg6CvGHIz+Sc06sthYsFPWV2 wU5JV5PFTihpM9lF91iNkYj6Iwt1lAkYd64dqMfdWN6vMlFHLi0jc2pFoL8+E39r/PyX Vb7KgILXZfo9zpPO1ZVERxIC86OTYqtW+09Xo5RaJpT8ww3dB0vmwn3O05mKbZdUm4Zd CXY6C8dd/Cq8tEHf4wHGciwx01dq5wr+pz1TFUGerkuUK8W/yNSfxxPo3FXKcPErP2Ek GHiw==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@linux.alibaba.com header.s=default header.b=WZJ4BHXX; arc=pass (i=1 spf=pass spfdomain=linux.alibaba.com dkim=pass dkdomain=linux.alibaba.com dmarc=pass fromdomain=linux.alibaba.com); spf=pass (google.com: domain of linux-kernel+bounces-93921-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93921-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.alibaba.com Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [2604:1380:45e3:2400::1]) by mx.google.com with ESMTPS id i12-20020a17090332cc00b001dcffa65612si6929244plr.508.2024.03.06.04.52.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 06 Mar 2024 04:52:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-93921-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) client-ip=2604:1380:45e3:2400::1; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.alibaba.com header.s=default header.b=WZJ4BHXX; arc=pass (i=1 spf=pass spfdomain=linux.alibaba.com dkim=pass dkdomain=linux.alibaba.com dmarc=pass fromdomain=linux.alibaba.com); spf=pass (google.com: domain of linux-kernel+bounces-93921-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45e3:2400::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-93921-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.alibaba.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 80ECE282A9C for ; Wed, 6 Mar 2024 12:52:48 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id D0FB2130E4B; Wed, 6 Mar 2024 12:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b="WZJ4BHXX" Received: from out30-119.freemail.mail.aliyun.com (out30-119.freemail.mail.aliyun.com [115.124.30.119]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2DE1712FF88; Wed, 6 Mar 2024 12:52:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=115.124.30.119 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709729546; cv=none; b=cb0Pnt5T4kMBw0+VC0rPQPzF4LrC8FmjHHPf9VTV113FGKEOn8JsVittUJX4NXVXyo/UJKrAliH/cYv4NkdswC0QRk5ec6ewcNS8CHDJM4P2fJiHnS7GtrRx5TdSupgCInbD8MW7Mh2ZEWab10rCafBwRAbum5ObCaxivz0YutY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709729546; c=relaxed/simple; bh=S0VSqiwmUSRs6IiqzRibQoLbgECPB6+uTGqfvokFpgk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=miDuAH4HVoZfZMn802SS4JOEVQphDGQkTRSwF6Q+GO4lYVnK7TS+WjyZEb2VscdqSUa0+xMkJPiSPK5f2dqK8GPqARj+6YgeJHqVjXl4jvx6ZCdVEpVrLderzAHvF6ObqKKSpGLU79/Dte4HO/FNgUCCsMIp0mZKeWEaC4/X3qM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com; spf=pass smtp.mailfrom=linux.alibaba.com; dkim=pass (1024-bit key) header.d=linux.alibaba.com header.i=@linux.alibaba.com header.b=WZJ4BHXX; arc=none smtp.client-ip=115.124.30.119 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.alibaba.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.alibaba.com DKIM-Signature:v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.alibaba.com; s=default; t=1709729541; h=From:To:Subject:Date:Message-Id:MIME-Version; bh=2Ekl+y5dAw/6OpDua2h0TcGTP6uBwHJnkGvttLdykK8=; b=WZJ4BHXXCuCMcpzXRqBc3Fg7h9dWIddtUYefS8OQSsVtb2gaf3niC5mgF8aua0RiLPyD1uhVP0pfCXtQZ+vMk52y9yBh594BGFJGGAwuuw3fmSqJHrlICgsZjOtHtVAB7+ZCWxnwQJBLw2K2PVyIBRaE4h9NyHWBKXQWlnmIMs8= X-Alimail-AntiSpam:AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=ay29a033018046060;MF=yaoma@linux.alibaba.com;NM=1;PH=DS;RN=16;SR=0;TI=SMTPD_---0W1xhgGd_1709729536; Received: from localhost.localdomain(mailfrom:yaoma@linux.alibaba.com fp:SMTPD_---0W1xhgGd_1709729536) by smtp.aliyun-inc.com; Wed, 06 Mar 2024 20:52:19 +0800 From: Bitao Hu To: dianders@chromium.org, tglx@linutronix.de, liusong@linux.alibaba.com, akpm@linux-foundation.org, pmladek@suse.com, kernelfans@gmail.com, deller@gmx.de, npiggin@gmail.com, tsbogend@alpha.franken.de, James.Bottomley@HansenPartnership.com, jan.kiszka@siemens.com Cc: linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, yaoma@linux.alibaba.com Subject: [PATCHv12 2/4] genirq: Avoid summation loops for /proc/interrupts Date: Wed, 6 Mar 2024 20:52:06 +0800 Message-Id: <20240306125208.71803-3-yaoma@linux.alibaba.com> X-Mailer: git-send-email 2.37.1 (Apple Git-137.1) In-Reply-To: <20240306125208.71803-1-yaoma@linux.alibaba.com> References: <20240306125208.71803-1-yaoma@linux.alibaba.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit show_interrupts() unconditionally accumulates the per CPU interrupt statistics to determine whether an interrupt was ever raised. This can be avoided for all interrupts which are not strictly per CPU and not of type NMI because those interrupts provide already an accumulated counter. The required logic is already implemented in kstat_irqs(). Split the inner access logic out of kstat_irqs() and use it for kstat_irqs() and show_interrupts() to avoid the accumulation loop when possible. Originally-by: Thomas Gleixner Signed-off-by: Bitao Hu Reviewed-by: Liu Song Reviewed-by: Douglas Anderson --- kernel/irq/internals.h | 2 ++ kernel/irq/irqdesc.c | 16 +++++++++++----- kernel/irq/proc.c | 6 ++---- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index 1d92532c2aae..6c43ef3e7308 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -98,6 +98,8 @@ extern void mask_irq(struct irq_desc *desc); extern void unmask_irq(struct irq_desc *desc); extern void unmask_threaded_irq(struct irq_desc *desc); +extern unsigned int kstat_irqs_desc(struct irq_desc *desc, const struct cpumask *cpumask); + #ifdef CONFIG_SPARSE_IRQ static inline void irq_mark_irq(unsigned int irq) { } #else diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c index 44e187763384..05498788ead5 100644 --- a/kernel/irq/irqdesc.c +++ b/kernel/irq/irqdesc.c @@ -960,24 +960,30 @@ static bool irq_is_nmi(struct irq_desc *desc) return desc->istate & IRQS_NMI; } -static unsigned int kstat_irqs(unsigned int irq) +unsigned int kstat_irqs_desc(struct irq_desc *desc, const struct cpumask *cpumask) { - struct irq_desc *desc = irq_to_desc(irq); unsigned int sum = 0; int cpu; - if (!desc || !desc->kstat_irqs) - return 0; if (!irq_settings_is_per_cpu_devid(desc) && !irq_settings_is_per_cpu(desc) && !irq_is_nmi(desc)) return data_race(desc->tot_count); - for_each_possible_cpu(cpu) + for_each_cpu(cpu, cpumask) sum += data_race(per_cpu(desc->kstat_irqs->cnt, cpu)); return sum; } +static unsigned int kstat_irqs(unsigned int irq) +{ + struct irq_desc *desc = irq_to_desc(irq); + + if (!desc || !desc->kstat_irqs) + return 0; + return kstat_irqs_desc(desc, cpu_possible_mask); +} + #ifdef CONFIG_GENERIC_IRQ_STAT_SNAPSHOT void kstat_snapshot_irqs(void) diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 6954e0a02047..5c320c3f10a7 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -488,10 +488,8 @@ int show_interrupts(struct seq_file *p, void *v) if (!desc || irq_settings_is_hidden(desc)) goto outsparse; - if (desc->kstat_irqs) { - for_each_online_cpu(j) - any_count |= data_race(per_cpu(desc->kstat_irqs->cnt, j)); - } + if (desc->kstat_irqs) + any_count = kstat_irqs_desc(desc, cpu_online_mask); if ((!desc->action || irq_desc_is_chained(desc)) && !any_count) goto outsparse; -- 2.37.1 (Apple Git-137.1)