static int xenbus_frontend_dev_resume(struct device *dev) { /* * If xenstored is running in this domain, we cannot access the backend * state at the moment, so we need to defer xenbus_dev_resume */ if (xen_store_domain_type == XS_LOCAL) { struct xenbus_device *xdev = to_xenbus_device(dev); schedule_work(&xdev->work); return 0; } return xenbus_dev_resume(dev); }
static int xenbus_frontend_dev_resume(struct device *dev) { /* * If xenstored is running in this domain, we cannot access the backend * state at the moment, so we need to defer xenbus_dev_resume */ if (xen_store_domain_type == XS_LOCAL) { struct xenbus_device *xdev = to_xenbus_device(dev); if (!xenbus_frontend_wq) { pr_err("%s: no workqueue to process delayed resume\n", xdev->nodename); return -EFAULT; } INIT_WORK(&xdev->work, xenbus_frontend_delayed_resume); queue_work(xenbus_frontend_wq, &xdev->work); return 0; } return xenbus_dev_resume(dev); }
static void xenbus_frontend_delayed_resume(struct work_struct *w) { struct xenbus_device *xdev = container_of(w, struct xenbus_device, work); xenbus_dev_resume(&xdev->dev); }