USB: EHCI: add separate IAA watchdog timer
This patch (as1028) was mostly written by David Brownell; I made only a few changes (extra log info and a small bug fix -- which might account for why David's version had to be reverted). It adds a new watchdog timer to the ehci-hcd driver to be used exclusively for detecting lost or missing IAA notifications. Previously a shared timer had been used, which may have led to some problems as reported by Christian Hoffmann. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Cc: David Brownell <david-b@pacbell.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2e2eb83ffd
commit
07d29b63ef
@@ -973,7 +973,7 @@ static void end_unlink_async (struct ehci_hcd *ehci)
|
||||
struct ehci_qh *qh = ehci->reclaim;
|
||||
struct ehci_qh *next;
|
||||
|
||||
timer_action_done (ehci, TIMER_IAA_WATCHDOG);
|
||||
iaa_watchdog_done(ehci);
|
||||
|
||||
// qh->hw_next = cpu_to_hc32(qh->qh_dma);
|
||||
qh->qh_state = QH_STATE_IDLE;
|
||||
@@ -983,7 +983,6 @@ static void end_unlink_async (struct ehci_hcd *ehci)
|
||||
/* other unlink(s) may be pending (in QH_STATE_UNLINK_WAIT) */
|
||||
next = qh->reclaim;
|
||||
ehci->reclaim = next;
|
||||
ehci->reclaim_ready = 0;
|
||||
qh->reclaim = NULL;
|
||||
|
||||
qh_completions (ehci, qh);
|
||||
@@ -1059,11 +1058,10 @@ static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh)
|
||||
return;
|
||||
}
|
||||
|
||||
ehci->reclaim_ready = 0;
|
||||
cmd |= CMD_IAAD;
|
||||
ehci_writel(ehci, cmd, &ehci->regs->command);
|
||||
(void)ehci_readl(ehci, &ehci->regs->command);
|
||||
timer_action (ehci, TIMER_IAA_WATCHDOG);
|
||||
iaa_watchdog_start(ehci);
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
Reference in New Issue
Block a user