usb: dwc3: Use an ordered workqueue for sm_work

The sm_work needs to be queued on an ordered workqueue.
The create_freezable() does not ensure the ordered attribute
needed.
Hence, use the alloc_ordered_workqueue() instead of it
with the flags WQ_FREEZABLE and WQ_MEM_RECLAIM.

Change-Id: I535cb826f117b0162efb87639c85d7b1634a441a
Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org>
This commit is contained in:
Sriharsha Allenki 2019-09-26 18:19:28 +05:30 • committed by Gerrit - the friendly Code Review server
commit ebce97468b

View file

@ -3990,12 +3990,13 @@ static int dwc3_msm_probe(struct platform_device *pdev)
}
/*
* Create freezable workqueue for sm_work so that it gets scheduled only
* after pm_resume has happened completely. This helps in avoiding race
* conditions between xhci_plat_resume and xhci_runtime_resume; and also
* between hcd disconnect and xhci_resume.
* Create an ordered freezable workqueue for sm_work so that it gets
* scheduled only after pm_resume has happened completely. This helps
* in avoiding race conditions between xhci_plat_resume and
* xhci_runtime_resume and also between hcd disconnect and xhci_resume.
*/
mdwc->sm_usb_wq = create_freezable_workqueue("k_sm_usb");
mdwc->sm_usb_wq = alloc_ordered_workqueue("k_sm_usb",
WQ_FREEZABLE | WQ_MEM_RECLAIM);
if (!mdwc->sm_usb_wq) {
destroy_workqueue(mdwc->dwc3_wq);
return -ENOMEM;