From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 2AFB63E929C for ; Tue, 19 May 2026 21:29:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.163.158.5 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779226176; cv=none; b=fJJyo150a/40zC77nN41IQ1VeL0o98SM/MzJQX1t8W4IxD5hJcCb+RKZCF1ruxDKHTykqCttfSE6lzDJsS100rgYYpdiMhgap5CPy9kBo6xmrRPdx5v+N/K0w5YBBcAqtLhhaFZ9GLgYCBvW1fxvnDKHLDi5JiZGdG1pRqE/vi8= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779226176; c=relaxed/simple; bh=JJJCoTw+zizVrItIUf6C87NCunaIfsuRxVwapZtH9+w=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=bGGiwz3xds/vKf+vKAt84f7cvzD4MEuSDN3gZkK95FPi+0qyOFYeXp0ZU9yH50l4Fb8CYGIAaAJfTGubUS/RGit3FJ1pTjf+x4OKPX9ZhhfB9q5rOlaA+ixOKFFx5T2toyfxrUWD8Me9BqYzrO9VjgOUvn1d8gK+yr+8btgvZlo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; spf=pass smtp.mailfrom=linux.ibm.com; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b=fk0dXa8X; arc=none smtp.client-ip=148.163.158.5 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.ibm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ibm.com header.i=@ibm.com header.b="fk0dXa8X" Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 64JAK4XC509192; Tue, 19 May 2026 21:29:25 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=axvR7c dJopQDRstnioeaYYGwH423YDcc7YDbdo8nPt0=; b=fk0dXa8XjOITNkyUKuiMNj tXFlptr7aM1iVKigFA640AoOlXc8gjRJLOdWhWGeEv2nXHNcAX01zhQ0+BL11vNM pj30KNLsG7T/w0IQJhNoG6uxqjlYVH5I0m7/0hF+lDphD4j1XGfJjjgTGh75ixR5 hwy9/Ax8WxPnBFDGivuR0QPW+mfVhmFaRwiZ3YxvVqL06Hw2lKd4OnAknU87uvSq 7vdSpIRXqOynxbmaU7lbdRnRGsIJQ3wA+edH3foePHDdqpkibzd11/SRZB4V3QPH XpGXxk2tqixcrs7GoInwgOFF126pfPUgBuQYwIMDWAhKdQuPTd3n3763o1JJ6H7g == Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4e6h88ecun-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 May 2026 21:29:24 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.7/8.18.1.7) with ESMTP id 64JLO8cc009283; Tue, 19 May 2026 21:29:24 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 4e73wk4kk0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 19 May 2026 21:29:24 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (smtpav02.fra02v.mail.ibm.com [10.20.54.101]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 64JLTMr453215608 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 19 May 2026 21:29:22 GMT Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1FEAF20043; Tue, 19 May 2026 21:29:22 +0000 (GMT) Received: from smtpav02.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id AE56B20040; Tue, 19 May 2026 21:29:19 +0000 (GMT) Received: from [9.124.216.9] (unknown [9.124.216.9]) by smtpav02.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 19 May 2026 21:29:19 +0000 (GMT) Message-ID: <177e725a-ad4d-4f14-964d-8207abe67677@linux.ibm.com> Date: Wed, 20 May 2026 02:59:18 +0530 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [patch V6 08/16] genirq: Expose nr_irqs in core code To: Thomas Gleixner , LKML Cc: x86@kernel.org, Michael Kelley , Dmitry Ilvokhin , Radu Rendec , Jan Kiszka , Kieran Bingham , Florian Fainelli , Marc Zyngier References: <20260517194421.705253664@kernel.org> <20260517194931.522168332@kernel.org> From: Shrikanth Hegde Content-Language: en-US In-Reply-To: <20260517194931.522168332@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-TM-AS-GCONF: 00 X-Proofpoint-Reinject: loops=2 maxloops=12 X-Proofpoint-ORIG-GUID: OtamBIYSAgouSDiA3qYzwp5XWAQmetPx X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwNTE5MDIxMSBTYWx0ZWRfX5tqNNR0JM9m3 6EvY4XRah1IrvIE14n18ohMrC3Dr1A3X9DaQaaC9c+jTbQCgeJKQIdcQuP9y2ultYzdJ7ebLd52 Y1lhnKNaNhtestU6jI5fK8+AiW9D0zRRHCsoIj8cSiFeZLH7LElfAkWX0D4DK8tRvqIFJq6AnV5 sFWzAUNKmBwF998oYdvT7XgKycq0QcDbdFpLLaHo2K5JUnPbeFY1UAOy3SIllf/+gvlvgrXKlp9 71ZNxXcHV1NulcwR2ej42ixIwVA52t4uU3kLZ+SOkhdTdEY0FMrZvywEF5K1Umfuw/N0aZk+gG5 R6l2C4hivNTWAf7PM+inKUcyVheXXXw5MCAXooIzO+SfMkEBvvrkfXn10FA1CsvadD9yMNgCwRe clzTQYRyUk2mg/Fm0dxiAPWFS4FbFTdMCXg8OismHYfqIxwA4fGEjVDr3VKM/4gsJyRLBWZ8pJl jrvu2KGT8IwzClGYkPA== X-Proofpoint-GUID: r0McqJy_hKGtxXWTbJMnWBNephnAtLom X-Authority-Analysis: v=2.4 cv=apyCzyZV c=1 sm=1 tr=0 ts=6a0cd635 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=IkcTkHD0fZMA:10 a=NGcC8JguVDcA:10 a=VkNPw1HP01LnGYTKEx00:22 a=RnoormkPH1_aCDwRdu11:22 a=V8glGbnc2Ofi9Qvn3v5h:22 a=VwQbUJbxAAAA:8 a=UqCG9HQmAAAA:8 a=QaIFIwmdAAAA:8 a=coPjFYPWAAAA:8 a=VnNF1IyMAAAA:8 a=bKnmORuph1-i2u5_3A4A:9 a=QEXdDO2ut3YA:10 a=O8hF6Hzn-FEA:10 a=H0j26ktMJjVwFu0eHUYC:22 a=PHqHxvoSLtS9In37M5wo:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1143,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-05-19_05,2026-05-18_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 lowpriorityscore=0 priorityscore=1501 impostorscore=0 bulkscore=0 suspectscore=0 adultscore=0 spamscore=0 phishscore=0 clxscore=1015 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2605130000 definitions=main-2605190211 On 5/18/26 1:32 AM, Thomas Gleixner wrote: > From: Thomas Gleixner > > ... to avoid function calls in the core code to retrieve the maximum number > of interrupts. > > Rename it to 'total_nr_irqs' as 'nr_irqs' is too generic and fix up the > 'nr_irqs' reference in the related GDB script as well. > > Signed-off-by: Thomas Gleixner > Tested-by: Michael Kelley > Reviewed-by: Dmitry Ilvokhin > Reviewed-by: Radu Rendec > --- > V3: Fix up the missing usage sites and gdb script - Radu > --- > kernel/irq/internals.h | 1 + > kernel/irq/irqdesc.c | 28 ++++++++++++++-------------- > kernel/irq/proc.c | 4 ++-- > scripts/gdb/linux/interrupts.py | 2 +- > 4 files changed, 18 insertions(+), 17 deletions(-) > --- a/kernel/irq/internals.h > +++ b/kernel/irq/internals.h > @@ -21,6 +21,7 @@ > > extern bool noirqdebug; > extern int irq_poll_cpu; > +extern unsigned int total_nr_irqs; > > extern struct irqaction chained_action; > > --- a/kernel/irq/irqdesc.c > +++ b/kernel/irq/irqdesc.c > @@ -140,14 +140,14 @@ static void desc_set_defaults(unsigned i > desc_smp_init(desc, node, affinity); > } > > -static unsigned int nr_irqs = NR_IRQS; > +unsigned int total_nr_irqs __read_mostly = NR_IRQS; > > /** > * irq_get_nr_irqs() - Number of interrupts supported by the system. > */ > unsigned int irq_get_nr_irqs(void) > { > - return nr_irqs; > + return total_nr_irqs; > } > EXPORT_SYMBOL_GPL(irq_get_nr_irqs); > > @@ -159,7 +159,7 @@ EXPORT_SYMBOL_GPL(irq_get_nr_irqs); > */ > unsigned int irq_set_nr_irqs(unsigned int nr) > { > - nr_irqs = nr; > + total_nr_irqs = nr; > > return nr; > } > @@ -187,9 +187,9 @@ static unsigned int irq_find_at_or_after > struct irq_desc *desc; > > guard(rcu)(); > - desc = mt_find(&sparse_irqs, &index, nr_irqs); > + desc = mt_find(&sparse_irqs, &index, total_nr_irqs); > > - return desc ? irq_desc_get_irq(desc) : nr_irqs; > + return desc ? irq_desc_get_irq(desc) : total_nr_irqs; > } > > static void irq_insert_desc(unsigned int irq, struct irq_desc *desc) > @@ -543,7 +543,7 @@ static bool irq_expand_nr_irqs(unsigned > { > if (nr > MAX_SPARSE_IRQS) > return false; > - nr_irqs = nr; > + total_nr_irqs = nr; > return true; > } > > @@ -557,16 +557,16 @@ int __init early_irq_init(void) > /* Let arch update nr_irqs and return the nr of preallocated irqs */ > initcnt = arch_probe_nr_irqs(); > printk(KERN_INFO "NR_IRQS: %d, nr_irqs: %d, preallocated irqs: %d\n", > - NR_IRQS, nr_irqs, initcnt); > + NR_IRQS, total_nr_irqs, initcnt); > > - if (WARN_ON(nr_irqs > MAX_SPARSE_IRQS)) > - nr_irqs = MAX_SPARSE_IRQS; > + if (WARN_ON(total_nr_irqs > MAX_SPARSE_IRQS)) > + total_nr_irqs = MAX_SPARSE_IRQS; > > if (WARN_ON(initcnt > MAX_SPARSE_IRQS)) > initcnt = MAX_SPARSE_IRQS; > > - if (initcnt > nr_irqs) > - nr_irqs = initcnt; > + if (initcnt > total_nr_irqs) > + total_nr_irqs = initcnt; > > for (i = 0; i < initcnt; i++) { > desc = alloc_desc(i, node, 0, NULL, NULL); > @@ -862,7 +862,7 @@ void irq_free_descs(unsigned int from, u > { > int i; > > - if (from >= nr_irqs || (from + cnt) > nr_irqs) > + if (from >= total_nr_irqs || (from + cnt) > total_nr_irqs) > return; > > guard(mutex)(&sparse_irq_lock); > @@ -911,7 +911,7 @@ int __ref __irq_alloc_descs(int irq, uns > if (irq >=0 && start != irq) > return -EEXIST; > > - if (start + cnt > nr_irqs) { > + if (start + cnt > total_nr_irqs) { > if (!irq_expand_nr_irqs(start + cnt)) > return -ENOMEM; > } > @@ -923,7 +923,7 @@ EXPORT_SYMBOL_GPL(__irq_alloc_descs); > * irq_get_next_irq - get next allocated irq number > * @offset: where to start the search > * > - * Returns next irq number after offset or nr_irqs if none is found. > + * Returns next irq number after offset or total_nr_irqs if none is found. > */ > unsigned int irq_get_next_irq(unsigned int offset) > { > --- a/kernel/irq/proc.c > +++ b/kernel/irq/proc.c > @@ -447,7 +447,7 @@ int __weak arch_show_interrupts(struct s > } > > #ifndef ACTUAL_NR_IRQS > -# define ACTUAL_NR_IRQS irq_get_nr_irqs() > +# define ACTUAL_NR_IRQS total_nr_irqs > #endif > > /* Same as seq_put_decimal_ull_width(p, " ", cnt, 10) */ > @@ -489,7 +489,7 @@ void irq_proc_emit_counts(struct seq_fil > > int show_interrupts(struct seq_file *p, void *v) > { > - const unsigned int nr_irqs = irq_get_nr_irqs(); > + const unsigned int nr_irqs = total_nr_irqs; > static int prec; > > int i = *(loff_t *) v, j; > --- a/scripts/gdb/linux/interrupts.py > +++ b/scripts/gdb/linux/interrupts.py > @@ -174,7 +174,7 @@ irq_desc_type = utils.CachedType("struct > super(LxInterruptList, self).__init__("lx-interruptlist", gdb.COMMAND_DATA) > > def invoke(self, arg, from_tty): > - nr_irqs = gdb.parse_and_eval("nr_irqs") > + nr_irqs = gdb.parse_and_eval("total_nr_irqs") > prec = 3 > j = 1000 > while prec < 10 and j <= nr_irqs: > nr_irqs was used as arg in some of those irq_chip methods. This can help avoid any such confusion. Reviewed-by: Shrikanth Hegde