Commit c534374e authored by Paul Durrant's avatar Paul Durrant Committed by Juergen Gross

xenbus: move xenbus_dev_shutdown() into frontend code...

...and make it static

xenbus_dev_shutdown() is seemingly intended to cause clean shutdown of PV
frontends when a guest is rebooted. Indeed the function waits for a
conpletion which is only set by a call to xenbus_frontend_closed().

This patch removes the shutdown() method from backends and moves
xenbus_dev_shutdown() from xenbus_probe.c into xenbus_probe_frontend.c,
renaming it appropriately and making it static.

NOTE: In the case where the backend is running in a driver domain, the
      toolstack should have already terminated any frontends that may be
      using it (since Xen does not support re-startable PV driver domains)
      so xenbus_dev_shutdown() should never be called.
Signed-off-by: default avatarPaul Durrant <pdurrant@amazon.com>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
parent 589b7289
...@@ -116,8 +116,6 @@ int xenbus_probe_devices(struct xen_bus_type *bus); ...@@ -116,8 +116,6 @@ int xenbus_probe_devices(struct xen_bus_type *bus);
void xenbus_dev_changed(const char *node, struct xen_bus_type *bus); void xenbus_dev_changed(const char *node, struct xen_bus_type *bus);
void xenbus_dev_shutdown(struct device *_dev);
int xenbus_dev_suspend(struct device *dev); int xenbus_dev_suspend(struct device *dev);
int xenbus_dev_resume(struct device *dev); int xenbus_dev_resume(struct device *dev);
int xenbus_dev_cancel(struct device *dev); int xenbus_dev_cancel(struct device *dev);
......
...@@ -281,29 +281,6 @@ int xenbus_dev_remove(struct device *_dev) ...@@ -281,29 +281,6 @@ int xenbus_dev_remove(struct device *_dev)
} }
EXPORT_SYMBOL_GPL(xenbus_dev_remove); EXPORT_SYMBOL_GPL(xenbus_dev_remove);
void xenbus_dev_shutdown(struct device *_dev)
{
struct xenbus_device *dev = to_xenbus_device(_dev);
unsigned long timeout = 5*HZ;
DPRINTK("%s", dev->nodename);
get_device(&dev->dev);
if (dev->state != XenbusStateConnected) {
pr_info("%s: %s: %s != Connected, skipping\n",
__func__, dev->nodename, xenbus_strstate(dev->state));
goto out;
}
xenbus_switch_state(dev, XenbusStateClosing);
timeout = wait_for_completion_timeout(&dev->down, timeout);
if (!timeout)
pr_info("%s: %s timeout closing device\n",
__func__, dev->nodename);
out:
put_device(&dev->dev);
}
EXPORT_SYMBOL_GPL(xenbus_dev_shutdown);
int xenbus_register_driver_common(struct xenbus_driver *drv, int xenbus_register_driver_common(struct xenbus_driver *drv,
struct xen_bus_type *bus, struct xen_bus_type *bus,
struct module *owner, const char *mod_name) struct module *owner, const char *mod_name)
......
...@@ -198,7 +198,6 @@ static struct xen_bus_type xenbus_backend = { ...@@ -198,7 +198,6 @@ static struct xen_bus_type xenbus_backend = {
.uevent = xenbus_uevent_backend, .uevent = xenbus_uevent_backend,
.probe = xenbus_dev_probe, .probe = xenbus_dev_probe,
.remove = xenbus_dev_remove, .remove = xenbus_dev_remove,
.shutdown = xenbus_dev_shutdown,
.dev_groups = xenbus_dev_groups, .dev_groups = xenbus_dev_groups,
}, },
}; };
......
...@@ -126,6 +126,28 @@ static int xenbus_frontend_dev_probe(struct device *dev) ...@@ -126,6 +126,28 @@ static int xenbus_frontend_dev_probe(struct device *dev)
return xenbus_dev_probe(dev); return xenbus_dev_probe(dev);
} }
static void xenbus_frontend_dev_shutdown(struct device *_dev)
{
struct xenbus_device *dev = to_xenbus_device(_dev);
unsigned long timeout = 5*HZ;
DPRINTK("%s", dev->nodename);
get_device(&dev->dev);
if (dev->state != XenbusStateConnected) {
pr_info("%s: %s: %s != Connected, skipping\n",
__func__, dev->nodename, xenbus_strstate(dev->state));
goto out;
}
xenbus_switch_state(dev, XenbusStateClosing);
timeout = wait_for_completion_timeout(&dev->down, timeout);
if (!timeout)
pr_info("%s: %s timeout closing device\n",
__func__, dev->nodename);
out:
put_device(&dev->dev);
}
static const struct dev_pm_ops xenbus_pm_ops = { static const struct dev_pm_ops xenbus_pm_ops = {
.suspend = xenbus_dev_suspend, .suspend = xenbus_dev_suspend,
.resume = xenbus_frontend_dev_resume, .resume = xenbus_frontend_dev_resume,
...@@ -146,7 +168,7 @@ static struct xen_bus_type xenbus_frontend = { ...@@ -146,7 +168,7 @@ static struct xen_bus_type xenbus_frontend = {
.uevent = xenbus_uevent_frontend, .uevent = xenbus_uevent_frontend,
.probe = xenbus_frontend_dev_probe, .probe = xenbus_frontend_dev_probe,
.remove = xenbus_dev_remove, .remove = xenbus_dev_remove,
.shutdown = xenbus_dev_shutdown, .shutdown = xenbus_frontend_dev_shutdown,
.dev_groups = xenbus_dev_groups, .dev_groups = xenbus_dev_groups,
.pm = &xenbus_pm_ops, .pm = &xenbus_pm_ops,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment