mirror of
https://github.com/opnsense/src.git
synced 2026-06-09 08:43:19 -04:00
intrng: switch from MAXCPU to mp_ncpus
MAXCPU could be on the large side, while the hardware may not have many processors at all. As such only allocate counters for processors which actually exist, rather than always allocating for the maximum potentially allowed number. Reviewed by: markj, emaste Differential Revision: https://reviews.freebsd.org/D41462
This commit is contained in:
parent
0fcececbac
commit
2f0b059eea
1 changed files with 11 additions and 11 deletions
|
|
@ -175,11 +175,11 @@ intr_irq_init(void *dummy __unused)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* - 2 counters for each I/O interrupt.
|
* - 2 counters for each I/O interrupt.
|
||||||
* - MAXCPU counters for each IPI counters for SMP.
|
* - mp_maxid + 1 counters for each IPI counters for SMP.
|
||||||
*/
|
*/
|
||||||
nintrcnt = intr_nirq * 2;
|
nintrcnt = intr_nirq * 2;
|
||||||
#ifdef SMP
|
#ifdef SMP
|
||||||
nintrcnt += INTR_IPI_COUNT * MAXCPU;
|
nintrcnt += INTR_IPI_COUNT * (mp_maxid + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
intrcnt = mallocarray(nintrcnt, sizeof(u_long), M_INTRNG,
|
intrcnt = mallocarray(nintrcnt, sizeof(u_long), M_INTRNG,
|
||||||
|
|
@ -312,18 +312,18 @@ intr_ipi_setup_counters(const char *name)
|
||||||
mtx_lock(&isrc_table_lock);
|
mtx_lock(&isrc_table_lock);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We should never have a problem finding MAXCPU contiguous counters,
|
* We should never have a problem finding mp_maxid + 1 contiguous
|
||||||
* in practice. Interrupts will be allocated sequentially during boot,
|
* counters, in practice. Interrupts will be allocated sequentially
|
||||||
* so the array should fill from low to high index. Once reserved, the
|
* during boot, so the array should fill from low to high index. Once
|
||||||
* IPI counters will never be released. Similarly, we will not need to
|
* reserved, the IPI counters will never be released. Similarly, we
|
||||||
* allocate more IPIs once the system is running.
|
* will not need to allocate more IPIs once the system is running.
|
||||||
*/
|
*/
|
||||||
bit_ffc_area(intrcnt_bitmap, nintrcnt, MAXCPU, &index);
|
bit_ffc_area(intrcnt_bitmap, nintrcnt, mp_maxid + 1, &index);
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
panic("Failed to allocate %d counters. Array exhausted?",
|
panic("Failed to allocate %d counters. Array exhausted?",
|
||||||
MAXCPU);
|
mp_maxid + 1);
|
||||||
bit_nset(intrcnt_bitmap, index, index + MAXCPU - 1);
|
bit_nset(intrcnt_bitmap, index, index + mp_maxid);
|
||||||
for (i = 0; i < MAXCPU; i++) {
|
for (i = 0; i < mp_maxid + 1; i++) {
|
||||||
snprintf(str, INTRNAME_LEN, "cpu%d:%s", i, name);
|
snprintf(str, INTRNAME_LEN, "cpu%d:%s", i, name);
|
||||||
intrcnt_setname(str, index + i);
|
intrcnt_setname(str, index + i);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue