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: Aurelien Chartier <aurelien.chartier@citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: David Vrabel <david.vrabel@citrix.com>
This commit is contained in:
parent
0b0c002c34
commit
d7ead0c3c2
|
@ -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)
|
||||||
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 = {
|
||||||
.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)
|
||||||
|
|
||||||
register_xenstore_notifier(&xenstore_notifier);
|
register_xenstore_notifier(&xenstore_notifier);
|
||||||
|
|
||||||
|
if (xen_store_domain_type == XS_LOCAL) {
|
||||||
xenbus_frontend_wq = create_workqueue("xenbus_frontend");
|
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue