Пример #1
0
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);
}