@@ -434,6 +434,7 @@ edk2_blobs="no"
pkgversion=""
pie=""
qom_cast_debug="yes"
+qdev_deprecation_warning="no"
trace_backends="log"
trace_file="trace"
spice=""
@@ -1114,6 +1115,8 @@ for opt do
;;
--enable-qom-cast-debug) qom_cast_debug="yes"
;;
+ --enable-qdev-deprecation-warning) qdev_deprecation_warning="yes"
+ ;;
--disable-virtfs) virtfs="no"
;;
--enable-virtfs) virtfs="yes"
@@ -1882,6 +1885,7 @@ disabled with --disable-FEATURE, default is enabled if available:
virglrenderer virgl rendering support
xfsctl xfsctl support
qom-cast-debug cast debugging support
+ qdev-deprecation-warning display qdev deprecation warnings
tools build qemu-io, qemu-nbd and qemu-img tools
vxhs Veritas HyperScale vDisk backend support
bochs bochs image format support
@@ -6723,6 +6727,7 @@ echo "gcov enabled $gcov"
echo "TPM support $tpm"
echo "libssh support $libssh"
echo "QOM debugging $qom_cast_debug"
+echo "QDEV deprecation warnings $qdev_deprecation_warning"
echo "Live block migration $live_block_migration"
echo "lzo support $lzo"
echo "snappy support $snappy"
@@ -7345,6 +7350,9 @@ fi
if test "$qom_cast_debug" = "yes" ; then
echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
+if test "$qdev_deprecation_warning" = "yes" ; then
+ echo "CONFIG_QDEV_DEPRECATION_WARNING=y" >> $config_host_mak
+fi
if test "$rbd" = "yes" ; then
echo "CONFIG_RBD=m" >> $config_host_mak
echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
new file mode 100644
@@ -0,0 +1,26 @@
+/*
+ * QEMU QOM qdev deprecation helpers
+ *
+ * Copyright (c) 2020 Red Hat, Inc.
+ *
+ * Author:
+ * Philippe Mathieu-Daudé <philmd@redhat.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or later.
+ * See the COPYING file in the top-level directory.
+ */
+#ifndef HW_QDEV_DEPRECATED_H
+#define HW_QDEV_DEPRECATED_H
+
+/**
+ * qdev_warn_deprecated_function_used:
+ *
+ * Display a warning that deprecated code is used.
+ */
+#define qdev_warn_deprecated_function_used() \
+ qdev_warn_deprecated_function(__func__)
+void qdev_warn_deprecated_function(const char *function);
+
+#endif
@@ -35,6 +35,7 @@
#include "hw/hotplug.h"
#include "hw/irq.h"
#include "hw/qdev-properties.h"
+#include "hw/qdev-deprecated.h"
#include "hw/boards.h"
#include "hw/sysbus.h"
#include "hw/qdev-clock.h"
@@ -819,6 +820,13 @@ void qdev_alias_all_properties(DeviceState *target, Object *source)
} while (class != object_class_by_name(TYPE_DEVICE));
}
+void qdev_warn_deprecated_function(const char *function)
+{
+#ifdef CONFIG_QDEV_DEPRECATION_WARNING
+ warn_report("use of deprecated non-qdev/non-qom code in %s()", function);
+#endif
+}
+
static bool device_get_realized(Object *obj, Error **errp)
{
DeviceState *dev = DEVICE(obj);
When built with --enable-qdev-deprecation-warning, calling qdev_warn_deprecated_function_used() will emit a warning such: $ qemu-system-arm -M verdex ... qemu-system-arm: warning: use of deprecated non-qdev/non-qom code in pxa2xx_lcdc_init() qemu-system-arm: warning: use of deprecated non-qdev/non-qom code in pxa2xx_i2s_init() qemu-system-arm: warning: use of deprecated non-qdev/non-qom code in pxa27x_keypad_init() Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- configure | 8 ++++++++ include/hw/qdev-deprecated.h | 26 ++++++++++++++++++++++++++ hw/core/qdev.c | 8 ++++++++ 3 files changed, 42 insertions(+) create mode 100644 include/hw/qdev-deprecated.h