Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Apr 2019 15:20:46 +0000 (UTC)
From:      Ian Lepore <ian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org
Subject:   svn commit: r346560 - stable/11/sys/kern
Message-ID:  <201904221520.x3MFKkP6069861@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ian
Date: Mon Apr 22 15:20:46 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.

Modified:
  stable/11/sys/kern/kern_intr.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/kern/kern_intr.c
==============================================================================
--- stable/11/sys/kern/kern_intr.c	Mon Apr 22 15:09:47 2019	(r346559)
+++ stable/11/sys/kern/kern_intr.c	Mon Apr 22 15:20:46 2019	(r346560)
@@ -219,10 +219,20 @@ intr_event_update(struct intr_event *ie)
 	}
 
 	/*
-	 * If the handler names were too long, add +'s to indicate missing
-	 * names. If we run out of room and still have +'s to add, change
-	 * the last character from a + to a *.
+	 * If there is only one handler and its name is too long, just copy in
+	 * as much of the end of the name (includes the unit number) as will
+	 * fit.  Otherwise, we have multiple handlers and not all of the names
+	 * will fit.  Add +'s to indicate missing names.  If we run out of room
+	 * and still have +'s to add, change the last character from a + to a *.
 	 */
+	if (missed == 1 && space == 1) {
+		ih = TAILQ_FIRST(&ie->ie_handlers);
+		missed = strlen(ie->ie_fullname) + strlen(ih->ih_name) + 2 -
+		    sizeof(ie->ie_fullname);
+		strcat(ie->ie_fullname, (missed == 0) ? " " : "-");
+		strcat(ie->ie_fullname, &ih->ih_name[missed]);
+		missed = 0;
+	}
 	last = &ie->ie_fullname[sizeof(ie->ie_fullname) - 2];
 	while (missed-- > 0) {
 		if (strlen(ie->ie_fullname) + 1 == sizeof(ie->ie_fullname)) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201904221520.x3MFKkP6069861>