qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: qemu-devel@nongnu.org
Cc: odaki@rsg.ci.i.u-tokyo.ac.jp, marcandre.lureau@redhat.com
Subject: [PATCH 12/12] error: Kill @error_warn
Date: Fri,  8 Aug 2025 10:08:23 +0200	[thread overview]
Message-ID: <20250808080823.2638861-13-armbru@redhat.com> (raw)
In-Reply-To: <20250808080823.2638861-1-armbru@redhat.com>

We added @error_warn some two years ago in commit 3ffef1a55ca (error:
add global &error_warn destination).  It has multiple issues:

* error.h's big comment was not updated for it.

* Function contracts were not updated for it.

* ERRP_GUARD() is unaware of @error_warn, and fails to mask it from
  error_prepend() and such.  These crash on @error_warn, as pointed
  out by Akihiko Odaki.

All fixable.  However, after more than two years, we had just of 15
uses, of which the last few patches removed eight as unclean or
otherwise undesirable.  I didn't look closely enough at the remaining
seven to decide whether they are desirable or not.

I don't think this feature earns its keep.  Drop it.

Thanks-to: Akihiko  Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
 include/qapi/error.h           |  6 ------
 hw/display/virtio-gpu.c        |  8 ++++++--
 hw/net/virtio-net.c            |  8 +++++++-
 tests/unit/test-error-report.c | 17 -----------------
 ui/gtk.c                       |  6 +++++-
 util/error.c                   |  5 +----
 6 files changed, 19 insertions(+), 31 deletions(-)

diff --git a/include/qapi/error.h b/include/qapi/error.h
index 41e3816380..b16c6303f8 100644
--- a/include/qapi/error.h
+++ b/include/qapi/error.h
@@ -533,12 +533,6 @@ static inline void error_propagator_cleanup(ErrorPropagator *prop)
 
 G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(ErrorPropagator, error_propagator_cleanup);
 
-/*
- * Special error destination to warn on error.
- * See error_setg() and error_propagate() for details.
- */
-extern Error *error_warn;
-
 /*
  * Special error destination to abort on error.
  * See error_setg() and error_propagate() for details.
diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
index 0a1a625b0e..de35902213 100644
--- a/hw/display/virtio-gpu.c
+++ b/hw/display/virtio-gpu.c
@@ -242,6 +242,7 @@ static uint32_t calc_image_hostmem(pixman_format_code_t pformat,
 static void virtio_gpu_resource_create_2d(VirtIOGPU *g,
                                           struct virtio_gpu_ctrl_command *cmd)
 {
+    Error *err = NULL;
     pixman_format_code_t pformat;
     struct virtio_gpu_simple_resource *res;
     struct virtio_gpu_resource_create_2d c2d;
@@ -293,7 +294,8 @@ static void virtio_gpu_resource_create_2d(VirtIOGPU *g,
                 c2d.width,
                 c2d.height,
                 c2d.height ? res->hostmem / c2d.height : 0,
-                &error_warn)) {
+                &err)) {
+            warn_report_err(err);
             goto end;
         }
     }
@@ -1282,6 +1284,7 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size,
                            const VMStateField *field)
 {
     VirtIOGPU *g = opaque;
+    Error *err = NULL;
     struct virtio_gpu_simple_resource *res;
     uint32_t resource_id, pformat;
     int i;
@@ -1317,7 +1320,8 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size,
                                              res->width,
                                              res->height,
                                              res->height ? res->hostmem / res->height : 0,
-                                             &error_warn)) {
+                                             &err)) {
+            warn_report_err(err);
             g_free(res);
             return -EINVAL;
         }
diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 6b5b5dace3..7848e26278 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -1289,6 +1289,8 @@ exit:
 
 static bool virtio_net_load_ebpf(VirtIONet *n, Error **errp)
 {
+    Error *err = NULL;
+
     if (!virtio_net_attach_ebpf_to_backend(n->nic, -1)) {
         return true;
     }
@@ -1306,7 +1308,11 @@ static bool virtio_net_load_ebpf(VirtIONet *n, Error **errp)
         return virtio_net_load_ebpf_fds(n, errp);
     }
 
-    ebpf_rss_load(&n->ebpf_rss, &error_warn);
+    ebpf_rss_load(&n->ebpf_rss, &err);
+    /* Beware, ebpf_rss_load() can return false with @err unset */
+    if (err) {
+        warn_report_err(err);
+    }
     return true;
 }
 
diff --git a/tests/unit/test-error-report.c b/tests/unit/test-error-report.c
index 54319c86c9..0cbde3c4cf 100644
--- a/tests/unit/test-error-report.c
+++ b/tests/unit/test-error-report.c
@@ -104,22 +104,6 @@ test_error_report_timestamp(void)
 ");
 }
 
-static void
-test_error_warn(void)
-{
-    if (g_test_subprocess()) {
-        error_setg(&error_warn, "Testing &error_warn");
-        return;
-    }
-
-    g_test_trap_subprocess(NULL, 0, 0);
-    g_test_trap_assert_passed();
-    g_test_trap_assert_stderr("\
-test-error-report: warning: Testing &error_warn*\
-");
-}
-
-
 int
 main(int argc, char *argv[])
 {
@@ -133,7 +117,6 @@ main(int argc, char *argv[])
     g_test_add_func("/error-report/glog", test_error_report_glog);
     g_test_add_func("/error-report/once", test_error_report_once);
     g_test_add_func("/error-report/timestamp", test_error_report_timestamp);
-    g_test_add_func("/error-report/warn", test_error_warn);
 
     return g_test_run();
 }
diff --git a/ui/gtk.c b/ui/gtk.c
index e91d093a49..9a08cadc88 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -1181,6 +1181,7 @@ static gboolean gd_touch_event(GtkWidget *widget, GdkEventTouch *touch,
                                void *opaque)
 {
     VirtualConsole *vc = opaque;
+    Error *err = NULL;
     uint64_t num_slot = GPOINTER_TO_UINT(touch->sequence);
     int type = -1;
 
@@ -1203,7 +1204,10 @@ static gboolean gd_touch_event(GtkWidget *widget, GdkEventTouch *touch,
     console_handle_touch_event(vc->gfx.dcl.con, touch_slots,
                                num_slot, surface_width(vc->gfx.ds),
                                surface_height(vc->gfx.ds), touch->x,
-                               touch->y, type, &error_warn);
+                               touch->y, type, &err);
+    if (err) {
+        warn_report_err(err);
+    }
     return TRUE;
 }
 
diff --git a/util/error.c b/util/error.c
index daea2142f3..0ae08225c0 100644
--- a/util/error.c
+++ b/util/error.c
@@ -19,7 +19,6 @@
 
 Error *error_abort;
 Error *error_fatal;
-Error *error_warn;
 
 static void error_handle(Error **errp, Error *err)
 {
@@ -41,9 +40,7 @@ static void error_handle(Error **errp, Error *err)
         error_report_err(err);
         exit(1);
     }
-    if (errp == &error_warn) {
-        warn_report_err(err);
-    } else if (errp && !*errp) {
+    if (errp && !*errp) {
         *errp = err;
     } else {
         error_free(err);
-- 
2.49.0



  parent reply	other threads:[~2025-08-08  8:10 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-08  8:08 [PATCH 00/12] Error reporting cleanup, a fix, and &error_warn removal Markus Armbruster
2025-08-08  8:08 ` [PATCH 01/12] monitor: Clean up HMP gdbserver error reporting Markus Armbruster
2025-08-19 10:53   ` Daniel P. Berrangé
2025-09-09 11:22     ` Markus Armbruster
2025-08-08  8:08 ` [PATCH 02/12] tcg: Fix error reporting on mprotect() failure in tcg_region_init() Markus Armbruster
2025-08-08 14:00   ` Philippe Mathieu-Daudé
2025-08-19 10:56     ` Daniel P. Berrangé
2025-08-19 10:56   ` Daniel P. Berrangé
2025-08-08  8:08 ` [PATCH 03/12] hw/cxl: Convert cxl_fmws_link() to Error Markus Armbruster
2025-08-08 10:44   ` Jonathan Cameron via
2025-08-08 11:13     ` Markus Armbruster
2025-09-17 10:46       ` Markus Armbruster
2025-08-11 10:36   ` Philippe Mathieu-Daudé
2025-08-08  8:08 ` [PATCH 04/12] migration/cpr: Clean up error reporting in cpr_resave_fd() Markus Armbruster
2025-08-08 12:38   ` Steven Sistare
2025-08-08 13:55   ` Philippe Mathieu-Daudé
2025-08-08 14:08     ` Steven Sistare
2025-08-08 14:43       ` Markus Armbruster
2025-08-08 14:48         ` Steven Sistare
2025-08-08 15:04           ` Markus Armbruster
2025-08-08  8:08 ` [PATCH 05/12] hw/remote/vfio-user: Clean up error reporting Markus Armbruster
2025-08-08  8:08 ` [PATCH 06/12] net/slirp: " Markus Armbruster
2025-08-08  8:18   ` Marc-André Lureau
2025-08-19 11:10   ` Daniel P. Berrangé
2025-09-09 11:40     ` Markus Armbruster
2025-09-12 10:09       ` Daniel P. Berrangé
2025-08-08  8:08 ` [PATCH 07/12] ui/spice-core: " Markus Armbruster
2025-08-08  8:22   ` Marc-André Lureau
2025-08-19 11:15   ` Daniel P. Berrangé
2025-09-09 11:41     ` Markus Armbruster
2025-09-12 10:10       ` Daniel P. Berrangé
2025-08-08  8:08 ` [PATCH 08/12] util/oslib-win32: Revert warning on WSAEventSelect() failure Markus Armbruster
2025-08-08  8:22   ` Marc-André Lureau
2025-08-08  9:32     ` Markus Armbruster
2025-08-19 11:24   ` Daniel P. Berrangé
2025-09-09 11:50     ` Markus Armbruster
2025-09-12 10:13       ` Daniel P. Berrangé
2025-08-08  8:08 ` [PATCH 09/12] ui/pixman: Consistent error handling in qemu_pixman_shareable_free() Markus Armbruster
2025-08-08  8:16   ` Marc-André Lureau
2025-08-08  8:08 ` [PATCH 10/12] ui/dbus: Clean up dbus_update_gl_cb() error checking Markus Armbruster
2025-08-08  8:14   ` Marc-André Lureau
2025-08-08  8:08 ` [PATCH 11/12] ui/dbus: Consistent handling of texture mutex failure Markus Armbruster
2025-08-08  8:15   ` Marc-André Lureau
2025-08-08  8:08 ` Markus Armbruster [this message]
2025-08-08 14:02   ` [PATCH 12/12] error: Kill @error_warn Philippe Mathieu-Daudé
2025-08-08 14:45     ` Markus Armbruster
2025-08-09  7:07   ` Akihiko Odaki
2025-08-09  8:30     ` Markus Armbruster
2025-08-09 10:27       ` Akihiko Odaki
2025-08-09 14:42         ` Markus Armbruster
2025-08-19 11:26   ` Daniel P. Berrangé
2025-09-16 11:27     ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250808080823.2638861-13-armbru@redhat.com \
    --to=armbru@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=odaki@rsg.ci.i.u-tokyo.ac.jp \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).