[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xen: xen-pciback: Remove create_workqueue
On Fri, May 27, 2016 at 09:24:11PM +0530, Bhaktipriya Shridhar wrote: > With concurrency managed workqueues, use of dedicated workqueues can be > replaced by using system_wq. Drop host->intr_wq by using > system_wq. > > Since there is only a single work item, increase of concurrency level by > switching to system_wq should not break anything. _should_ not? Hehe. I presume this has not been tested? > > cancel_work_sync() has been used in xen_pcibk_disconnect() to ensure that > work item is not pending or executing by the time exit path runs. > > Signed-off-by: Bhaktipriya Shridhar <bhaktipriya96@xxxxxxxxx> > --- > drivers/xen/xen-pciback/pciback.h | 1 - > drivers/xen/xen-pciback/pciback_ops.c | 2 +- > drivers/xen/xen-pciback/xenbus.c | 10 +--------- > 3 files changed, 2 insertions(+), 11 deletions(-) > > diff --git a/drivers/xen/xen-pciback/pciback.h > b/drivers/xen/xen-pciback/pciback.h > index 4d529f3..7af369b6 100644 > --- a/drivers/xen/xen-pciback/pciback.h > +++ b/drivers/xen/xen-pciback/pciback.h > @@ -55,7 +55,6 @@ struct xen_pcibk_dev_data { > > /* Used by XenBus and xen_pcibk_ops.c */ > extern wait_queue_head_t xen_pcibk_aer_wait_queue; > -extern struct workqueue_struct *xen_pcibk_wq; > /* Used by pcistub.c and conf_space_quirks.c */ > extern struct list_head xen_pcibk_quirks; > > diff --git a/drivers/xen/xen-pciback/pciback_ops.c > b/drivers/xen/xen-pciback/pciback_ops.c > index 2f19dd7..f8c7775 100644 > --- a/drivers/xen/xen-pciback/pciback_ops.c > +++ b/drivers/xen/xen-pciback/pciback_ops.c > @@ -310,7 +310,7 @@ void xen_pcibk_test_and_schedule_op(struct > xen_pcibk_device *pdev) > * already processing a request */ > if (test_bit(_XEN_PCIF_active, (unsigned long *)&pdev->sh_info->flags) > && !test_and_set_bit(_PDEVF_op_active, &pdev->flags)) { > - queue_work(xen_pcibk_wq, &pdev->op_work); > + schedule_work(&pdev->op_work); > } > /*_XEN_PCIB_active should have been cleared by pcifront. And also make > sure xen_pcibk is waiting for ack by checking _PCIB_op_pending*/ > diff --git a/drivers/xen/xen-pciback/xenbus.c > b/drivers/xen/xen-pciback/xenbus.c > index c252eb3..f70a8e1 100644 > --- a/drivers/xen/xen-pciback/xenbus.c > +++ b/drivers/xen/xen-pciback/xenbus.c > @@ -17,7 +17,6 @@ > #include "pciback.h" > > #define INVALID_EVTCHN_IRQ (-1) > -struct workqueue_struct *xen_pcibk_wq; > > static bool __read_mostly passthrough; > module_param(passthrough, bool, S_IRUGO); > @@ -76,8 +75,7 @@ static void xen_pcibk_disconnect(struct xen_pcibk_device > *pdev) > /* If the driver domain started an op, make sure we complete it > * before releasing the shared memory */ > > - /* Note, the workqueue does not use spinlocks at all.*/ > - flush_workqueue(xen_pcibk_wq); > + cancel_work_sync(&pdev->op_work); > > if (pdev->sh_info != NULL) { > xenbus_unmap_ring_vfree(pdev->xdev, pdev->sh_info); > @@ -733,11 +731,6 @@ const struct xen_pcibk_backend *__read_mostly > xen_pcibk_backend; > > int __init xen_pcibk_xenbus_register(void) > { > - xen_pcibk_wq = create_workqueue("xen_pciback_workqueue"); > - if (!xen_pcibk_wq) { > - pr_err("%s: create xen_pciback_workqueue failed\n", __func__); > - return -EFAULT; > - } > xen_pcibk_backend = &xen_pcibk_vpci_backend; > if (passthrough) > xen_pcibk_backend = &xen_pcibk_passthrough_backend; > @@ -747,6 +740,5 @@ int __init xen_pcibk_xenbus_register(void) > > void __exit xen_pcibk_xenbus_unregister(void) > { > - destroy_workqueue(xen_pcibk_wq); > xenbus_unregister_driver(&xen_pcibk_driver); > } > -- > 2.1.4 > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |