When issuing vmstat -i to display interrupts on FreeBSD/arm running on a Raspberry Pi there are entries which are just labelled with a plus symbol.
This is not a bug, more like an architectural limitation. The length of full interrupt name is 20 bytes. Full name is "irq0: dev0 dev2". On x86 interrupt name is just irqNNN, on ARM event name should include device name and interrupt number to be unique. So it becomes something like "ti_aintc0,19" combined with long device name like "musbotg1" it becomes problematic to fit information into existing structure. On BBB list of IRQs looks like this: ti_aintc0,3: pmu0 ti_aintc0,96: gpio0 ti_aintc0,98: gpio1 ti_aintc0,32: gpio2 ti_aintc0,62: gpio3 ti_aintc0,72: uart0 ti_aintc0,70: iichb0 ti_aintc0,30: iichb1 ti_aintc0,64: sdhci_ti0 ti_aintc0,28: sdhci_ti1 ti_aintc0,91: ti_wdt0 ti_aintc0,77: ti_mbox0 ti_aintc0,68: am335x_dmtimer0 ti_aintc0,18: musbotg0 ti_aintc0,19: musbotg1 ti_aintc0,40: cpswss0 ti_aintc0,41: cpswss0 ti_aintc0,42: cpswss0 ti_aintc0,43: cpswss0 ti_aintc0,36: fb0 ti_aintc0,16: ti_adc0 ti_aintc0,7: am335x_pmic0 Only 7 out of 22 fit 20 bytes limit. Which basically renders vmstat -i useless
I have created a patch to ameliorate this problem (don't get to use that word every day). It's available at: https://reviews.freebsd.org/D19675
A commit references this bug: Author: ian Date: Sun Mar 24 17:53:26 UTC 2019 New revision: 345475 URL: https://svnweb.freebsd.org/changeset/base/345475 Log: Truncate a too-long interrupt handler name when there is only one handler. There are only 19 bytes available for the name of an interrupt plus the name(s) of handlers/drivers using it. There is a mechanism from the days of shared interrupts that replaces some of the handler names with '+' when they don't all fit into 19 bytes. In modern times there is typically only one device on an interrupt, but long device names are the norm, especially with embedded systems. Also, in systems with multiple interrupt controllers, the names of the interrupts themselves can be long. For example, 'gic0,s54: imx6_anatop0' doesn't fit, and replacing the device driver name with a '+' provides no useful info at all. When there is only one handler but its name was too long to fit, this change truncates enough leading chars of the handler name (replacing them with a '-' char to indicate that some chars are missing) to use all 19 bytes, preserving the unit number typically on the end of the name. Using the prior example, this results in: 'gic0,s54:-6_anatop0' which provides plenty of info to figure out which device is involved. PR: 211946 Reviewed by: gonzo@ (prior version without the '-' char) Differential Revision: https://reviews.freebsd.org/D19675 Changes: head/sys/kern/kern_intr.c
A commit references this bug: Author: ian Date: Sun Apr 21 20:53:16 UTC 2019 New revision: 346499 URL: https://svnweb.freebsd.org/changeset/base/346499 Log: MFC r345475-r345476 r345475: Truncate a too-long interrupt handler name when there is only one handler. There are only 19 bytes available for the name of an interrupt plus the name(s) of handlers/drivers using it. There is a mechanism from the days of shared interrupts that replaces some of the handler names with '+' when they don't all fit into 19 bytes. In modern times there is typically only one device on an interrupt, but long device names are the norm, especially with embedded systems. Also, in systems with multiple interrupt controllers, the names of the interrupts themselves can be long. For example, 'gic0,s54: imx6_anatop0' doesn't fit, and replacing the device driver name with a '+' provides no useful info at all. When there is only one handler but its name was too long to fit, this change truncates enough leading chars of the handler name (replacing them with a '-' char to indicate that some chars are missing) to use all 19 bytes, preserving the unit number typically on the end of the name. Using the prior example, this results in: 'gic0,s54:-6_anatop0' which provides plenty of info to figure out which device is involved. PR: 211946 Reviewed by: gonzo@ (prior version without the '-' char) Differential Revision: https://reviews.freebsd.org/D19675 r345476: Revert accidental change that should not have been included in r345475. I had changed this value as part of a local experiment, and neglected to change it back before committing the other changes. Changes: _U stable/12/ stable/12/sys/kern/kern_intr.c
A commit references this bug: Author: ian Date: Mon Apr 22 15:20:47 UTC 2019 New revision: 346560 URL: https://svnweb.freebsd.org/changeset/base/346560 Log: MFC r345475-r345476 r345475: Truncate a too-long interrupt handler name when there is only one handler. There are only 19 bytes available for the name of an interrupt plus the name(s) of handlers/drivers using it. There is a mechanism from the days of shared interrupts that replaces some of the handler names with '+' when they don't all fit into 19 bytes. In modern times there is typically only one device on an interrupt, but long device names are the norm, especially with embedded systems. Also, in systems with multiple interrupt controllers, the names of the interrupts themselves can be long. For example, 'gic0,s54: imx6_anatop0' doesn't fit, and replacing the device driver name with a '+' provides no useful info at all. When there is only one handler but its name was too long to fit, this change truncates enough leading chars of the handler name (replacing them with a '-' char to indicate that some chars are missing) to use all 19 bytes, preserving the unit number typically on the end of the name. Using the prior example, this results in: 'gic0,s54:-6_anatop0' which provides plenty of info to figure out which device is involved. PR: 211946 Reviewed by: gonzo@ (prior version without the '-' char) Differential Revision: https://reviews.freebsd.org/D19675 r345476: Revert accidental change that should not have been included in r345475. I had changed this value as part of a local experiment, and neglected to change it back before committing the other changes. Changes: _U stable/11/ stable/11/sys/kern/kern_intr.c