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
This commit is contained in:
Gleb Smirnoff 2025-06-24 15:23:47 -07:00
parent 5843b8ee02
commit 01addd846c
5 changed files with 40 additions and 35 deletions

View file

@ -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.

View file

@ -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

View file

@ -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;

View file

@ -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)
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,
"Obsolete code will be removed soon: %s\n", msg);
else
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

View file

@ -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