Commit d7ead0c3 authored by Aurelien Chartier's avatar Aurelien Chartier Committed by Konrad Rzeszutek Wilk

xenbus: frontend resume cleanup

Only create the delayed resume workqueue if we are running in the same domain
as xenstored and issue a warning if the workqueue creation fails.

Move the work initialization to the device probe so it is done only once.
Signed-off-by: default avatarAurelien Chartier <aurelien.chartier@citrix.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
parent 0b0c002c
...@@ -115,7 +115,6 @@ static int xenbus_frontend_dev_resume(struct device *dev) ...@@ -115,7 +115,6 @@ static int xenbus_frontend_dev_resume(struct device *dev)
return -EFAULT; return -EFAULT;
} }
INIT_WORK(&xdev->work, xenbus_frontend_delayed_resume);
queue_work(xenbus_frontend_wq, &xdev->work); queue_work(xenbus_frontend_wq, &xdev->work);
return 0; return 0;
...@@ -124,6 +123,16 @@ static int xenbus_frontend_dev_resume(struct device *dev) ...@@ -124,6 +123,16 @@ static int xenbus_frontend_dev_resume(struct device *dev)
return xenbus_dev_resume(dev); return xenbus_dev_resume(dev);
} }
static int xenbus_frontend_dev_probe(struct device *dev)
{
if (xen_store_domain_type == XS_LOCAL) {
struct xenbus_device *xdev = to_xenbus_device(dev);
INIT_WORK(&xdev->work, xenbus_frontend_delayed_resume);
}
return xenbus_dev_probe(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,
...@@ -142,7 +151,7 @@ static struct xen_bus_type xenbus_frontend = { ...@@ -142,7 +151,7 @@ static struct xen_bus_type xenbus_frontend = {
.name = "xen", .name = "xen",
.match = xenbus_match, .match = xenbus_match,
.uevent = xenbus_uevent_frontend, .uevent = xenbus_uevent_frontend,
.probe = xenbus_dev_probe, .probe = xenbus_frontend_dev_probe,
.remove = xenbus_dev_remove, .remove = xenbus_dev_remove,
.shutdown = xenbus_dev_shutdown, .shutdown = xenbus_dev_shutdown,
.dev_attrs = xenbus_dev_attrs, .dev_attrs = xenbus_dev_attrs,
...@@ -474,7 +483,11 @@ static int __init xenbus_probe_frontend_init(void) ...@@ -474,7 +483,11 @@ static int __init xenbus_probe_frontend_init(void)
register_xenstore_notifier(&xenstore_notifier); register_xenstore_notifier(&xenstore_notifier);
xenbus_frontend_wq = create_workqueue("xenbus_frontend"); if (xen_store_domain_type == XS_LOCAL) {
xenbus_frontend_wq = create_workqueue("xenbus_frontend");
if (!xenbus_frontend_wq)
pr_warn("create xenbus frontend workqueue failed, S3 resume is likely to fail\n");
}
return 0; return 0;
} }
......
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