The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=01addd846c64fc2c8be610d83bfdc84ddb57f2ec
commit 01addd846c64fc2c8be610d83bfdc84ddb57f2ec Author: Gleb Smirnoff <gleb...@freebsd.org> AuthorDate: 2025-06-24 22:23:47 +0000 Commit: Gleb Smirnoff <gleb...@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