diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2019-02-04 12:57:26 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2019-02-04 12:57:26 +0000 |
commit | f3b4d5ca67f2e933c93457b701883c307b99c15c (patch) | |
tree | 05d9e71f7f1a01369e820c5311f7b06242c135cc /hw/xen/xen-bus.c | |
parent | a61faa3d02159d24d4fa984733dbc0c905508752 (diff) | |
parent | 3149f183d7ca448b1dc30fe3d4acb9e367de01bf (diff) |
Merge remote-tracking branch 'remotes/aperard/tags/pull-xen-20190204' into staging
Xen queue
* xen-block, the Xen PV backend, now handles resize.
* configure cleanup.
* xen-bus fix.
# gpg: Signature made Mon 04 Feb 2019 11:16:13 GMT
# gpg: using RSA key F80C006308E22CFD8A92E7980CF5572FD7FB55AF
# gpg: issuer "anthony.perard@citrix.com"
# gpg: Good signature from "Anthony PERARD <anthony.perard@gmail.com>" [marginal]
# gpg: aka "Anthony PERARD <anthony.perard@citrix.com>" [marginal]
# gpg: WARNING: This key is not certified with sufficiently trusted signatures!
# gpg: It is not certain that the signature belongs to the owner.
# Primary key fingerprint: 5379 2F71 024C 600F 778A 7161 D8D5 7199 DF83 42C8
# Subkey fingerprint: F80C 0063 08E2 2CFD 8A92 E798 0CF5 572F D7FB 55AF
* remotes/aperard/tags/pull-xen-20190204:
xen-block: handle resize callback
xen: fix xen-bus state model to allow frontend re-connection
configure: Don't add Xen's libs to LDFLAGS
configure: xen: Stop build-testing for xc_domain_create
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/xen/xen-bus.c')
-rw-r--r-- | hw/xen/xen-bus.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/hw/xen/xen-bus.c b/hw/xen/xen-bus.c index 3aeccec69c..49a725e8c7 100644 --- a/hw/xen/xen-bus.c +++ b/hw/xen/xen-bus.c @@ -547,20 +547,15 @@ static void xen_device_backend_changed(void *opaque) } /* - * If a backend is still 'online' then its state should be cycled - * back round to InitWait in order for a new frontend instance to - * connect. This may happen when, for example, a frontend driver is - * re-installed or updated. - * If a backend is not 'online' then the device should be destroyed. + * If a backend is still 'online' then we should leave it alone but, + * if a backend is not 'online', then the device should be destroyed + * once the state is Closed. */ - if (xendev->backend_online && - xendev->backend_state == XenbusStateClosed) { - xen_device_backend_set_state(xendev, XenbusStateInitWait); - } else if (!xendev->backend_online && - (xendev->backend_state == XenbusStateClosed || - xendev->backend_state == XenbusStateInitialising || - xendev->backend_state == XenbusStateInitWait || - xendev->backend_state == XenbusStateUnknown)) { + if (!xendev->backend_online && + (xendev->backend_state == XenbusStateClosed || + xendev->backend_state == XenbusStateInitialising || + xendev->backend_state == XenbusStateInitWait || + xendev->backend_state == XenbusStateUnknown)) { Error *local_err = NULL; if (!xen_backend_try_device_destroy(xendev, &local_err)) { @@ -715,6 +710,17 @@ static void xen_device_frontend_changed(void *opaque) xen_device_frontend_set_state(xendev, state); + if (state == XenbusStateInitialising && + xendev->backend_state == XenbusStateClosed && + xendev->backend_online) { + /* + * The frontend is re-initializing so switch back to + * InitWait. + */ + xen_device_backend_set_state(xendev, XenbusStateInitWait); + return; + } + if (xendev_class->frontend_changed) { Error *local_err = NULL; |