Re: git: b827afb9e3a7 - releng/14.1 - Revert "intrng: switch from MAXCPU to mp_ncpus"
- In reply to: Mike Karels : "Re: git: b827afb9e3a7 - releng/14.1 - Revert "intrng: switch from MAXCPU to mp_ncpus""
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 16 May 2024 01:56:41 UTC
> On May 16, 2024, at 9:23 AM, Mike Karels <karels@freebsd.org> wrote: > > 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=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 ? > > 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 IPIs > (with this reverted and MAXCPU at 1024), so this isn't that big an increment. > arm has MAXCPU of 4; riscv has 16. This reversion makes the outcome the same > as on 14.0. Thanks for the explanation. > >> For amd64 the MAXCPU has been bumped from 256 to 1024 [1]. That is large 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. Sorry I was not aware that INTRNG is arm, arm64 and riscv only. > > 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 = 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