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

Reply via email to