mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
USB: EHCI: remove usages of hcd->state
This patch (as1483) improves the ehci-hcd driver family by getting rid of the reliance on the hcd->state variable. It has no clear owner and it isn't protected by the usual HCD locks. In its place, the patch adds a new, private ehci->rh_state field to record the state of the root hub. Along the way, the patch removes a couple of lines containing redundant assignments to the state variable. Also, the QUIESCING state simply gets changed to the RUNNING state, because the driver doesn't make any distinction between them. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Acked-by: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
dfd8c81fd1
commit
e879990604
10 changed files with 56 additions and 41 deletions
|
@ -479,7 +479,6 @@ static int enable_periodic (struct ehci_hcd *ehci)
|
|||
cmd = ehci_readl(ehci, &ehci->regs->command) | CMD_PSE;
|
||||
ehci_writel(ehci, cmd, &ehci->regs->command);
|
||||
/* posted write ... PSS happens later */
|
||||
ehci_to_hcd(ehci)->state = HC_STATE_RUNNING;
|
||||
|
||||
/* make sure ehci_work scans these */
|
||||
ehci->next_uframe = ehci_readl(ehci, &ehci->regs->frame_index)
|
||||
|
@ -677,7 +676,7 @@ static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh)
|
|||
|
||||
/* reschedule QH iff another request is queued */
|
||||
if (!list_empty(&qh->qtd_list) &&
|
||||
HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) {
|
||||
ehci->rh_state == EHCI_RH_RUNNING) {
|
||||
rc = qh_schedule(ehci, qh);
|
||||
|
||||
/* An error here likely indicates handshake failure
|
||||
|
@ -2275,7 +2274,7 @@ scan_periodic (struct ehci_hcd *ehci)
|
|||
* Touches as few pages as possible: cache-friendly.
|
||||
*/
|
||||
now_uframe = ehci->next_uframe;
|
||||
if (HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) {
|
||||
if (ehci->rh_state == EHCI_RH_RUNNING) {
|
||||
clock = ehci_readl(ehci, &ehci->regs->frame_index);
|
||||
clock_frame = (clock >> 3) & (ehci->periodic_size - 1);
|
||||
} else {
|
||||
|
@ -2310,7 +2309,7 @@ restart:
|
|||
union ehci_shadow temp;
|
||||
int live;
|
||||
|
||||
live = HC_IS_RUNNING (ehci_to_hcd(ehci)->state);
|
||||
live = (ehci->rh_state == EHCI_RH_RUNNING);
|
||||
switch (hc32_to_cpu(ehci, type)) {
|
||||
case Q_TYPE_QH:
|
||||
/* handle any completions */
|
||||
|
@ -2435,7 +2434,7 @@ restart:
|
|||
* We can't advance our scan without collecting the ISO
|
||||
* transfers that are still pending in this frame.
|
||||
*/
|
||||
if (incomplete && HC_IS_RUNNING(ehci_to_hcd(ehci)->state)) {
|
||||
if (incomplete && ehci->rh_state == EHCI_RH_RUNNING) {
|
||||
ehci->next_uframe = now_uframe;
|
||||
break;
|
||||
}
|
||||
|
@ -2451,7 +2450,7 @@ restart:
|
|||
if (now_uframe == clock) {
|
||||
unsigned now;
|
||||
|
||||
if (!HC_IS_RUNNING (ehci_to_hcd(ehci)->state)
|
||||
if (ehci->rh_state != EHCI_RH_RUNNING
|
||||
|| ehci->periodic_sched == 0)
|
||||
break;
|
||||
ehci->next_uframe = now_uframe;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue