Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 15 May 2024 20:23:08 -0500
From:      Mike Karels <karels@freebsd.org>
To:        Zhenlei Huang <zlei@FreeBSD.org>
Cc:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   Re: git: b827afb9e3a7 - releng/14.1 - Revert "intrng: switch from MAXCPU to mp_ncpus"
Message-ID:  <68191B25-A5CB-48CE-BD17-F5E7F95CF052@freebsd.org>
In-Reply-To: <88AD738C-4E2C-430D-8AE1-D1C7A633B977@FreeBSD.org>
References:  <202405151635.44FGZxAS021246@gitrepo.freebsd.org> <88AD738C-4E2C-430D-8AE1-D1C7A633B977@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 15 May 2024, at 19:58, Zhenlei Huang wrote:

>> On May 16, 2024, at 12:35 AM, Mike Karels <karels@FreeBSD.org> wrote:
>>
>> The branch releng/14.1 has been updated by karels:
>>
>> URL: https://cgit.FreeBSD.org/src/commit/?id=3Db827afb9e3a7aaaa2da7d10=
1c46881c646d4df2f
>>
>> commit b827afb9e3a7aaaa2da7d101c46881c646d4df2f
>> Author:     Mike Karels <karels@FreeBSD.org>
>> AuthorDate: 2024-05-14 22:44:58 +0000
>> Commit:     Mike Karels <karels@FreeBSD.org>
>> CommitDate: 2024-05-15 16:35:38 +0000
>>
>>    Revert "intrng: switch from MAXCPU to mp_ncpus"
>>
>>    This reverts commit b4d11915c73f199501672b278be86e1f63790036.
>>    This is a direct commit to stable/14.  The change breaks booting
>>    on older Raspberry Pi 4's, although that works on main.  The cause
>
> Emm, I think this revert affects other arch also. Does this have large =
impact ? If yes, and only
> older Paspberry Pi 4 is to be fixed, why not add conditional compile #i=
f directive for Paspberry Pi 4
> instead ?

That won't help with installations.  We use one GENERIC config for arm64.=
  On
the other hand, arm64 has 32K counters for interrupts and only 1K for IPI=
s
(with this reverted and MAXCPU at 1024), so this isn't that big an increm=
ent.
arm has MAXCPU of 4; riscv has 16.  This reversion makes the outcome the =
same
as on 14.0.

> For amd64 the MAXCPU has been bumped from 256 to 1024 [1]. That is larg=
e IMO.

This change does not affect amd64 or i386, just systems with INTRNG (arm,=

arm64, and riscv).  So the change is only significant on arm64.

		Mike

> 1. 9051987e40c5 amd64: Bump MAXCPU to 1024 (from 256)
>
>>    is unknown.  The original commit should be redone on stable/14
>>    if/when it catches up with main.
>>
>>    (cherry picked from commit 3e627553bbd791a4f73eaeea2c2d795fd4e0ee70=
)
>>
>>    Approved-by:    re (cperciva)
>> ---
>> sys/kern/subr_intr.c | 22 +++++++++++-----------
>> 1 file changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c
>> index 49fe20cdc890..6535c42f2404 100644
>> --- a/sys/kern/subr_intr.c
>> +++ b/sys/kern/subr_intr.c
>> @@ -175,11 +175,11 @@ intr_irq_init(void *dummy __unused)
>>
>> 	/*
>> 	 * - 2 counters for each I/O interrupt.
>> -	 * - mp_maxid + 1 counters for each IPI counters for SMP.
>> +	 * - MAXCPU counters for each IPI counters for SMP.
>> 	 */
>> 	nintrcnt =3D intr_nirq * 2;
>> #ifdef SMP
>> -	nintrcnt +=3D INTR_IPI_COUNT * (mp_maxid + 1);
>> +	nintrcnt +=3D INTR_IPI_COUNT * MAXCPU;
>> #endif
>>
>> 	intrcnt =3D mallocarray(nintrcnt, sizeof(u_long), M_INTRNG,
>> @@ -312,18 +312,18 @@ intr_ipi_setup_counters(const char *name)
>> 	mtx_lock(&isrc_table_lock);
>>
>> 	/*
>> -	 * We should never have a problem finding mp_maxid + 1 contiguous
>> -	 * counters, in practice. Interrupts will be allocated sequentially
>> -	 * during boot, so the array should fill from low to high index. Onc=
e
>> -	 * reserved, the IPI counters will never be released. Similarly, we
>> -	 * will not need to allocate more IPIs once the system is running.
>> +	 * We should never have a problem finding MAXCPU contiguous counters=
,
>> +	 * in practice. Interrupts will be allocated sequentially during boo=
t,
>> +	 * so the array should fill from low to high index. Once reserved, t=
he
>> +	 * IPI counters will never be released. Similarly, we will not need =
to
>> +	 * allocate more IPIs once the system is running.
>> 	 */
>> -	bit_ffc_area(intrcnt_bitmap, nintrcnt, mp_maxid + 1, &index);
>> +	bit_ffc_area(intrcnt_bitmap, nintrcnt, MAXCPU, &index);
>> 	if (index =3D=3D -1)
>> 		panic("Failed to allocate %d counters. Array exhausted?",
>> -		    mp_maxid + 1);
>> -	bit_nset(intrcnt_bitmap, index, index + mp_maxid);
>> -	for (i =3D 0; i < mp_maxid + 1; i++) {
>> +		    MAXCPU);
>> +	bit_nset(intrcnt_bitmap, index, index + MAXCPU - 1);
>> +	for (i =3D 0; i < MAXCPU; i++) {
>> 		snprintf(str, INTRNAME_LEN, "cpu%d:%s", i, name);
>> 		intrcnt_setname(str, index + i);
>> 	}
>
> Best regards,
> Zhenlei



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?68191B25-A5CB-48CE-BD17-F5E7F95CF052>