|
@@ -3971,13 +3971,21 @@ static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci,
|
|
|
int ret;
|
|
|
|
|
|
spin_lock_irqsave(&xhci->lock, flags);
|
|
|
- if (max_exit_latency == xhci->devs[udev->slot_id]->current_mel) {
|
|
|
+
|
|
|
+ virt_dev = xhci->devs[udev->slot_id];
|
|
|
+
|
|
|
+ /*
|
|
|
+ * virt_dev might not exists yet if xHC resumed from hibernate (S4) and
|
|
|
+ * xHC was re-initialized. Exit latency will be set later after
|
|
|
+ * hub_port_finish_reset() is done and xhci->devs[] are re-allocated
|
|
|
+ */
|
|
|
+
|
|
|
+ if (!virt_dev || max_exit_latency == virt_dev->current_mel) {
|
|
|
spin_unlock_irqrestore(&xhci->lock, flags);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
/* Attempt to issue an Evaluate Context command to change the MEL. */
|
|
|
- virt_dev = xhci->devs[udev->slot_id];
|
|
|
command = xhci->lpm_command;
|
|
|
ctrl_ctx = xhci_get_input_control_ctx(xhci, command->in_ctx);
|
|
|
if (!ctrl_ctx) {
|