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

Commit b1513dee authored by Manu Gautam's avatar Manu Gautam
Browse files

usb: xhci: clean up command queue on HC halt failure as well



'Commit c9cabb7e ("usb: xhci: clean up command queue when
halting"); fixes deadlock condition when some commands are pending
at the time of usb_remove_hcd() or when controller is halted.
That change cleans up command queue if halting of controller is
successful. But, this deadlock may still be seen in case if due
to some reason halting of controller fails. To handle that scenario
as well cleanup command queue irrespective of controller halt
succeeds or fails.

Change-Id: I2c88fca3614af7fe58bc858898449d47546da247
Signed-off-by: default avatarManu Gautam <mgautam@codeaurora.org>
parent d3e41c96
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -115,6 +115,11 @@ int xhci_halt(struct xhci_hcd *xhci)
			STS_HALT, STS_HALT, XHCI_MAX_HALT_USEC);
	if (!ret) {
		xhci->xhc_state |= XHCI_STATE_HALTED;
	} else {
		xhci_warn(xhci, "Host not halted after %u microseconds.\n",
				XHCI_MAX_HALT_USEC);
	}

	xhci->cmd_ring_state = CMD_RING_STATE_STOPPED;

	if (timer_pending(&xhci->cmd_timer)) {
@@ -123,9 +128,7 @@ int xhci_halt(struct xhci_hcd *xhci)
		del_timer(&xhci->cmd_timer);
		xhci_cleanup_command_queue(xhci);
	}
	} else
		xhci_warn(xhci, "Host not halted after %u microseconds.\n",
				XHCI_MAX_HALT_USEC);

	return ret;
}