Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 24 Jun 2025 22:25:05 GMT
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 01addd846c64 - main - gone_in: make it __printflike()
Message-ID:  <202506242225.55OMP5tw036051@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by glebius:

URL: https://cgit.FreeBSD.org/src/commit/?id=01addd846c64fc2c8be610d83bfdc84ddb57f2ec

commit 01addd846c64fc2c8be610d83bfdc84ddb57f2ec
Author:     Gleb Smirnoff <glebius@FreeBSD.org>
AuthorDate: 2025-06-24 22:23:47 +0000
Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
CommitDate: 2025-06-24 22:23:47 +0000

    gone_in: make it __printflike()
    
    Provide flexibility to use format strings for gone_in().  As a side
    effect, this removes hardcoded string "Obsolete code will be removed
    soon:" from the message, so now it is obligation of the deprecated code to
    provide a meaningful message.  This required a small adoption of the
    existing users: midi, drm2 and le(4).  Note that gone_in() is not a public
    KPI as it has no sense to use it outside of the FreeBSD tree.
    
    Reviewed by:            imp
    Differential Revision:  https://reviews.freebsd.org/D50783
---
 sys/dev/drm2/drm_os_freebsd.h  | 13 +++----------
 sys/dev/le/lance.c             |  3 ++-
 sys/dev/sound/midi/sequencer.c |  6 ++++--
 sys/kern/subr_bus.c            | 40 +++++++++++++++++++++++-----------------
 sys/sys/systm.h                | 13 ++++++++-----
 5 files changed, 40 insertions(+), 35 deletions(-)

diff --git a/sys/dev/drm2/drm_os_freebsd.h b/sys/dev/drm2/drm_os_freebsd.h
index 71a9637ddd9f..ec1042f8f0d4 100644
--- a/sys/dev/drm2/drm_os_freebsd.h
+++ b/sys/dev/drm2/drm_os_freebsd.h
@@ -154,18 +154,11 @@ typedef void			irqreturn_t;
 
 #if !defined(__arm__)
 #if defined(__i386__) || defined(__amd64__) || defined(__powerpc__) || defined(__aarch64__)
-#define DRM_MSG "This code is deprecated.  Install the graphics/drm-kmod pkg\n"
+#define DRM_MSG "WARNING! drm2 module is deprecated.  Install the graphics/drm-kmod pkg\n"
 #else
-#define DRM_MSG "This code is deprecated."
+#define DRM_MSG "WARNING! drm2 module is deprecated.\n"
 #endif
-
-#define DRM_OBSOLETE(dev)							\
-    do {									\
-	device_printf(dev, "=======================================================\n"); \
-	device_printf(dev, DRM_MSG);						\
-	device_printf(dev, "=======================================================\n"); \
-	gone_in_dev(dev, 13, "drm2 drivers");					\
-    } while (0)
+#define DRM_OBSOLETE(dev)	gone_in_dev(dev, 13, DRM_MSG)
 #endif /* __arm__ */
 
 /* DRM_READMEMORYBARRIER() prevents reordering of reads.
diff --git a/sys/dev/le/lance.c b/sys/dev/le/lance.c
index 6eef8b5da052..f5e41e82bb42 100644
--- a/sys/dev/le/lance.c
+++ b/sys/dev/le/lance.c
@@ -193,7 +193,8 @@ lance_attach(struct lance_softc *sc)
 	if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU, 0);
 	if_setcapenablebit(ifp, IFCAP_VLAN_MTU, 0);
 
-	gone_in(15, "le: 10/100 NIC no longer needed for Qemu/MIPS");
+	gone_in(15, "Warning! le(4) to be removed: no longer needed for "
+	    "Qemu/MIPS\n");
 }
 
 void
diff --git a/sys/dev/sound/midi/sequencer.c b/sys/dev/sound/midi/sequencer.c
index db49aa1ef259..03b71688175c 100644
--- a/sys/dev/sound/midi/sequencer.c
+++ b/sys/dev/sound/midi/sequencer.c
@@ -519,7 +519,8 @@ seq_addunit(void)
 	int ret;
 	u_char *buf;
 
-	gone_in(15, "MIDI sequencer: no longer needed or used");
+	gone_in(15, "Warning! MIDI sequencer to be removed soon: no longer "
+	    "needed or used\n");
 
 	/* Allocate the softc. */
 	ret = ENOMEM;
@@ -738,7 +739,8 @@ mseq_open(struct cdev *i_dev, int flags, int mode, struct thread *td)
 	struct seq_softc *scp = i_dev->si_drv1;
 	int i;
 
-	gone_in(15, "MIDI sequencer: no longer needed or used");
+	gone_in(15, "Warning! MIDI sequencer to be removed soon: no longer "
+	    "needed or used\n");
 
 	if (scp == NULL)
 		return ENXIO;
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 4de1df0c248f..e7e8896fc100 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -6258,8 +6258,10 @@ SYSCTL_INT(_debug, OID_AUTO, obsolete_panic, CTLFLAG_RWTUN, &obsolete_panic, 0,
     "2 = if deprecated)");
 
 static void
-gone_panic(int major, int running, const char *msg)
+gone_panic(int major, int running, const char *msg, ...)
 {
+	va_list ap;
+
 	switch (obsolete_panic)
 	{
 	case 0:
@@ -6269,32 +6271,36 @@ gone_panic(int major, int running, const char *msg)
 			return;
 		/* FALLTHROUGH */
 	default:
-		panic("%s", msg);
+		va_start(ap, msg);
+		vpanic(msg, ap);
 	}
 }
 
 void
-_gone_in(int major, const char *msg)
+_gone_in(int major, const char *msg, ...)
 {
-	gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg);
-	if (P_OSREL_MAJOR(__FreeBSD_version) >= major)
-		printf("Obsolete code will be removed soon: %s\n", msg);
-	else
-		printf("Deprecated code (to be removed in FreeBSD %d): %s\n",
-		    major, msg);
+	va_list ap;
+
+	gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg, ap);
+	va_start(ap, msg);
+	vprintf(msg, ap);
+	va_end(ap);
+	if (P_OSREL_MAJOR(__FreeBSD_version) < major)
+		printf("To be removed in FreeBSD %d\n", major);
 }
 
 void
-_gone_in_dev(device_t dev, int major, const char *msg)
+_gone_in_dev(device_t dev, int major, const char *msg, ...)
 {
-	gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg);
-	if (P_OSREL_MAJOR(__FreeBSD_version) >= major)
-		device_printf(dev,
-		    "Obsolete code will be removed soon: %s\n", msg);
-	else
+	va_list ap;
+
+	gone_panic(major, P_OSREL_MAJOR(__FreeBSD_version), msg, ap);
+	va_start(ap, msg);
+	device_printf(dev, msg, ap);
+	va_end(ap);
+	if (P_OSREL_MAJOR(__FreeBSD_version) < major)
 		device_printf(dev,
-		    "Deprecated code (to be removed in FreeBSD %d): %s\n",
-		    major, msg);
+		    "to be removed in FreeBSD %d\n", major);
 }
 
 #ifdef DDB
diff --git a/sys/sys/systm.h b/sys/sys/systm.h
index 7cc02c77bea4..7a6edaef2cb8 100644
--- a/sys/sys/systm.h
+++ b/sys/sys/systm.h
@@ -566,17 +566,20 @@ void counted_warning(unsigned *counter, const char *msg);
 /*
  * APIs to manage deprecation and obsolescence.
  */
-void _gone_in(int major, const char *msg);
-void _gone_in_dev(device_t dev, int major, const char *msg);
+void _gone_in(int major, const char *msg, ...) __printflike(2, 3);
+void _gone_in_dev(device_t dev, int major, const char *msg, ...)
+    __printflike(3, 4);
 #ifdef NO_OBSOLETE_CODE
 #define __gone_ok(m, msg)					 \
 	_Static_assert(m < P_OSREL_MAJOR(__FreeBSD_version)),	 \
-	    "Obsolete code: " msg);
+	    "Obsolete code: " msg)
 #else
 #define	__gone_ok(m, msg)
 #endif
-#define gone_in(major, msg)		__gone_ok(major, msg) _gone_in(major, msg)
-#define gone_in_dev(dev, major, msg)	__gone_ok(major, msg) _gone_in_dev(dev, major, msg)
+#define gone_in(major, msg, ...)		__gone_ok(major, msg) \
+	_gone_in(major, msg __VA_OPT__(,) __VA_ARGS__)
+#define gone_in_dev(dev, major, msg, ...)	__gone_ok(major, msg) \
+	_gone_in_dev(dev, major, msg __VA_OPT__(,) __VA_ARGS__)
 
 #ifdef INVARIANTS
 #define	__diagused



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