Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2911b040 authored by Sriharsha Allenki's avatar Sriharsha Allenki Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarSriharsha Allenki <sallenki@codeaurora.org>
parent eca47d45
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -3481,12 +3481,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;