Re: git: b827afb9e3a7 - releng/14.1 - Revert "intrng: switch from MAXCPU to mp_ncpus"

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Thu, 16 May 2024 00:58:54 UTC

> 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=b827afb9e3a7aaaa2da7d101c46881c646d4df2f
> 
> 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 #if directive for Paspberry Pi 4
instead ?

For amd64 the MAXCPU has been bumped from 256 to 1024 [1]. That is large IMO.

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 = intr_nirq * 2;
> #ifdef SMP
> -	nintrcnt += INTR_IPI_COUNT * (mp_maxid + 1);
> +	nintrcnt += INTR_IPI_COUNT * MAXCPU;
> #endif
> 
> 	intrcnt = 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. Once
> -	 * 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 boot,
> +	 * so the array should fill from low to high index. Once reserved, the
> +	 * 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 == -1)
> 		panic("Failed to allocate %d counters. Array exhausted?",
> -		    mp_maxid + 1);
> -	bit_nset(intrcnt_bitmap, index, index + mp_maxid);
> -	for (i = 0; i < mp_maxid + 1; i++) {
> +		    MAXCPU);
> +	bit_nset(intrcnt_bitmap, index, index + MAXCPU - 1);
> +	for (i = 0; i < MAXCPU; i++) {
> 		snprintf(str, INTRNAME_LEN, "cpu%d:%s", i, name);
> 		intrcnt_setname(str, index + i);
> 	}

Best regards,
Zhenlei