qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Woodhouse <dwmw2@infradead.org>
To: qemu-devel@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>, Paul Durrant <paul@xen.org>,
	Joao Martins <joao.m.martins@oracle.com>,
	Ankur Arora <ankur.a.arora@oracle.com>,
	Stefano Stabellini <sstabellini@kernel.org>,
	vikram.garhwal@amd.com,
	Anthony Perard <anthony.perard@citrix.com>,
	xen-devel@lists.xenproject.org,
	Juan Quintela <quintela@redhat.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	Peter Maydell <peter.maydell@linaro.org>
Subject: [PATCH v2 18/27] hw/xen: Avoid crash when backend watch fires too early
Date: Tue,  7 Mar 2023 17:17:41 +0000	[thread overview]
Message-ID: <20230307171750.2293175-19-dwmw2@infradead.org> (raw)
In-Reply-To: <20230307171750.2293175-1-dwmw2@infradead.org>

From: Paul Durrant <pdurrant@amazon.com>

The xen-block code ends up calling aio_poll() through blkconf_geometry(),
which means we see watch events during the indirect call to
xendev_class->realize() in xen_device_realize(). Unfortunately this call
is made before populating the initial frontend and backend device nodes
in xenstore and hence xen_block_frontend_changed() (which is called from
a watch event) fails to read the frontend's 'state' node, and hence
believes the device is being torn down. This in-turn sets the backend
state to XenbusStateClosed and causes the device to be deleted before it
is fully set up, leading to the crash.
By simply moving the call to xendev_class->realize() after the initial
xenstore nodes are populated, this sorry state of affairs is avoided.

Reported-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Paul Durrant <paul@xen.org>
---
 hw/xen/xen-bus.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c
index 9fe54967d4..c59850b1de 100644
--- a/hw/xen/xen-bus.c
+++ b/hw/xen/xen-bus.c
@@ -1034,13 +1034,6 @@ static void xen_device_realize(DeviceState *dev, Error **errp)
         goto unrealize;
     }
 
-    if (xendev_class->realize) {
-        xendev_class->realize(xendev, errp);
-        if (*errp) {
-            goto unrealize;
-        }
-    }
-
     xen_device_backend_printf(xendev, "frontend", "%s",
                               xendev->frontend_path);
     xen_device_backend_printf(xendev, "frontend-id", "%u",
@@ -1059,6 +1052,13 @@ static void xen_device_realize(DeviceState *dev, Error **errp)
         xen_device_frontend_set_state(xendev, XenbusStateInitialising, true);
     }
 
+    if (xendev_class->realize) {
+        xendev_class->realize(xendev, errp);
+        if (*errp) {
+            goto unrealize;
+        }
+    }
+
     xendev->exit.notify = xen_device_exit;
     qemu_add_exit_notifier(&xendev->exit);
     return;
-- 
2.39.0



  parent reply	other threads:[~2023-03-07 17:20 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-07 17:17 [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 01/27] hw/xen: Add xenstore wire implementation and implementation stubs David Woodhouse
2023-03-07 17:17 ` [PATCH v2 02/27] hw/xen: Add basic XenStore tree walk and write/read/directory support David Woodhouse
2023-03-07 17:17 ` [PATCH v2 03/27] hw/xen: Implement XenStore watches David Woodhouse
2023-03-07 17:17 ` [PATCH v2 04/27] hw/xen: Implement XenStore transactions David Woodhouse
2023-03-07 17:17 ` [PATCH v2 05/27] hw/xen: Watches on " David Woodhouse
2023-03-07 17:17 ` [PATCH v2 06/27] hw/xen: Implement XenStore permissions David Woodhouse
2023-03-07 17:17 ` [PATCH v2 07/27] hw/xen: Implement core serialize/deserialize methods for xenstore_impl David Woodhouse
2023-03-07 17:17 ` [PATCH v2 08/27] hw/xen: Create initial XenStore nodes David Woodhouse
2023-03-07 17:17 ` [PATCH v2 09/27] hw/xen: Add evtchn operations to allow redirection to internal emulation David Woodhouse
2023-03-23 10:29   ` Anthony PERARD via
2023-03-23 10:42     ` David Woodhouse
2023-03-23 10:57     ` [PATCH] hw/xenpv: Initialize Xen backend operations David Woodhouse
2023-03-23 13:26       ` Paul Durrant
2023-03-24 14:51       ` Anthony PERARD via
2023-03-07 17:17 ` [PATCH v2 10/27] hw/xen: Add gnttab operations to allow redirection to internal emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 11/27] hw/xen: Pass grant ref to gnttab unmap operation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 12/27] hw/xen: Add foreignmem operations to allow redirection to internal emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 13/27] hw/xen: Add xenstore " David Woodhouse
2023-03-07 17:17 ` [PATCH v2 14/27] hw/xen: Move xenstore_store_pv_console_info to xen_console.c David Woodhouse
2023-03-07 17:17 ` [PATCH v2 15/27] hw/xen: Use XEN_PAGE_SIZE in PV backend drivers David Woodhouse
2023-03-07 17:17 ` [PATCH v2 16/27] hw/xen: Rename xen_common.h to xen_native.h David Woodhouse
2023-03-07 17:17 ` [PATCH v2 17/27] hw/xen: Build PV backend drivers for CONFIG_XEN_BUS David Woodhouse
2023-03-07 17:17 ` David Woodhouse [this message]
2023-03-07 17:17 ` [PATCH v2 19/27] hw/xen: Only advertise ring-page-order for xen-block if gnttab supports it David Woodhouse
2023-03-07 17:17 ` [PATCH v2 20/27] hw/xen: Hook up emulated implementation for event channel operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 21/27] hw/xen: Add emulated implementation of grant table operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 22/27] hw/xen: Add emulated implementation of XenStore operations David Woodhouse
2023-03-07 17:17 ` [PATCH v2 23/27] hw/xen: Map guest XENSTORE_PFN grant in emulated Xenstore David Woodhouse
2023-03-07 17:17 ` [PATCH v2 24/27] hw/xen: Implement soft reset for emulated gnttab David Woodhouse
2023-03-07 17:17 ` [PATCH v2 25/27] i386/xen: Initialize Xen backends from pc_basic_device_init() for emulation David Woodhouse
2023-03-07 17:56   ` Paul Durrant
2023-03-07 17:17 ` [PATCH v2 26/27] MAINTAINERS: Add entry for Xen on KVM emulation David Woodhouse
2023-03-07 17:17 ` [PATCH v2 27/27] docs: Update Xen-on-KVM documentation for PV disk support David Woodhouse
2023-03-07 17:57 ` [PATCH v2 00/27] Enable PV backends with Xen/KVM emulation Paul Durrant
2023-03-07 18:27   ` David Woodhouse

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=20230307171750.2293175-19-dwmw2@infradead.org \
    --to=dwmw2@infradead.org \
    --cc=ankur.a.arora@oracle.com \
    --cc=anthony.perard@citrix.com \
    --cc=dgilbert@redhat.com \
    --cc=joao.m.martins@oracle.com \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=sstabellini@kernel.org \
    --cc=vikram.garhwal@amd.com \
    --cc=xen-devel@lists.xenproject.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).