Bug 211946 - vmstat -i has unlabelled interrupts in output
Summary: vmstat -i has unlabelled interrupts in output
Status: Closed FIXED
Alias: None
Product: Base System
Classification: Unclassified
Component: arm (show other bugs)
Version: CURRENT
Hardware: arm Any
: --- Affects Some People
Assignee: Ian Lepore
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-08-17 16:44 UTC by Sevan Janiyan
Modified: 2019-04-22 15:37 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sevan Janiyan 2016-08-17 16:44:37 UTC
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.
Comment 1 Oleksandr Tymoshenko freebsd_committer freebsd_triage 2018-04-04 03:04:59 UTC
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
Comment 2 Ian Lepore freebsd_committer freebsd_triage 2019-03-22 03:39:50 UTC
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
Comment 3 commit-hook freebsd_committer freebsd_triage 2019-03-24 17:53:55 UTC
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
Comment 4 commit-hook freebsd_committer freebsd_triage 2019-04-21 20:53:45 UTC
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
Comment 5 commit-hook freebsd_committer freebsd_triage 2019-04-22 15:21:42 UTC
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