git: 01addd846c64 - main - gone_in: make it __printflike()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 24 Jun 2025 22:25:05 UTC
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