mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
minios: fix xenbus_rm() calls in frontend drivers
The commit "minios: refactor xenbus state machine" caused "/state" to
be appended to the local value of nodename. Previously the nodename
variable pointed to dev->nodename.
The xenbus_rm() calls were not updated to reflect this change, and
refer to paths that do not exist.
For example, shutdown_blkfront() for vbd 2049 would issue these calls:
xenbus_rm(XBT_NIL, "device/vbd/2049/state/ring-ref");
xenbus_rm(XBT_NIL, "device/vbd/2049/state/event-channel");
This patch restores the previous behavior, issuing these calls
instead:
xenbus_rm(XBT_NIL, "device/vbd/2049/ring-ref");
xenbus_rm(XBT_NIL, "device/vbd/2049/event-channel");
This causes frontend drivers to not be properly reset when PV-GRUB
exists. Some PV Linux drivers fail to re-initialize frontend devices
if PV-GRUB leaves them in this state.
Signed-off-by: Ben Cressey <bcressey@amazon.com>
Reviewed-by: Matt Wilson <msw@amazon.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Acked-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
[msw: adjusted commit message to include consequences, split out
changes into separate patches]
Signed-off-by: Matt Wilson <msw@amazon.com>
This commit is contained in:
1 parent
319e8ee03c
commit
a320c05b82
4 files changed
+30
-30
No files matched your search
@@ -297,10 +297,10 @@ close:
|
||||
if (err) free(err);
|
||||
xenbus_unwatch_path_token(XBT_NIL, path, path);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/ring-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/event-channel", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(nodename, sizeof(nodename), "%s/ring-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
|
||||
if (!err)
|
||||
free_blkfront(dev);
|
||||
|
||||
+14
-14
@@ -280,12 +280,12 @@ close_kbdfront:
|
||||
if (err) free(err);
|
||||
xenbus_unwatch_path_token(XBT_NIL, path, path);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/page-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/event-channel", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/request-abs-pointer", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(nodename, sizeof(nodename), "%s/page-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/request-abs-pointer", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
|
||||
if (!err)
|
||||
free_kbdfront(dev);
|
||||
@@ -671,14 +671,14 @@ close_fbfront:
|
||||
if (err) free(err);
|
||||
xenbus_unwatch_path_token(XBT_NIL, path, path);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/page-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/event-channel", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/protocol", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/feature-update", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(nodename, sizeof(nodename), "%s/page-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/protocol", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/feature-update", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
|
||||
if (!err)
|
||||
free_fbfront(dev);
|
||||
|
||||
@@ -549,14 +549,14 @@ close:
|
||||
if (err) free(err);
|
||||
xenbus_unwatch_path_token(XBT_NIL, path, path);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/tx-ring-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/rx-ring-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/event-channel", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/request-rx-copy", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(nodename, sizeof(nodename), "%s/tx-ring-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/rx-ring-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/request-rx-copy", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
|
||||
if (!err)
|
||||
free_netfront(dev);
|
||||
|
||||
@@ -363,10 +363,10 @@ close_pcifront:
|
||||
if (err) free(err);
|
||||
xenbus_unwatch_path_token(XBT_NIL, path, path);
|
||||
|
||||
snprintf(path, sizeof(path), "%s/info-ref", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(path, sizeof(path), "%s/event-channel", nodename);
|
||||
xenbus_rm(XBT_NIL, path);
|
||||
snprintf(nodename, sizeof(nodename), "%s/info-ref", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodename);
|
||||
xenbus_rm(XBT_NIL, nodename);
|
||||
|
||||
if (!err)
|
||||
free_pcifront(dev);
|
||||
|
||||