diff options
Diffstat (limited to 'drivers/usb/host/ohci-q.c')
-rw-r--r-- | drivers/usb/host/ohci-q.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/usb/host/ohci-q.c b/drivers/usb/host/ohci-q.c index e372306ed0da..e08d1a2664e6 100644 --- a/drivers/usb/host/ohci-q.c +++ b/drivers/usb/host/ohci-q.c | |||
@@ -7,6 +7,8 @@ | |||
7 | * This file is licenced under the GPL. | 7 | * This file is licenced under the GPL. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | #include <linux/irq.h> | ||
11 | |||
10 | static void urb_free_priv (struct ohci_hcd *hc, urb_priv_t *urb_priv) | 12 | static void urb_free_priv (struct ohci_hcd *hc, urb_priv_t *urb_priv) |
11 | { | 13 | { |
12 | int last = urb_priv->length - 1; | 14 | int last = urb_priv->length - 1; |
@@ -34,7 +36,7 @@ static void urb_free_priv (struct ohci_hcd *hc, urb_priv_t *urb_priv) | |||
34 | * PRECONDITION: ohci lock held, irqs blocked. | 36 | * PRECONDITION: ohci lock held, irqs blocked. |
35 | */ | 37 | */ |
36 | static void | 38 | static void |
37 | finish_urb (struct ohci_hcd *ohci, struct urb *urb, struct pt_regs *regs) | 39 | finish_urb (struct ohci_hcd *ohci, struct urb *urb) |
38 | __releases(ohci->lock) | 40 | __releases(ohci->lock) |
39 | __acquires(ohci->lock) | 41 | __acquires(ohci->lock) |
40 | { | 42 | { |
@@ -73,7 +75,7 @@ __acquires(ohci->lock) | |||
73 | 75 | ||
74 | /* urb->complete() can reenter this HCD */ | 76 | /* urb->complete() can reenter this HCD */ |
75 | spin_unlock (&ohci->lock); | 77 | spin_unlock (&ohci->lock); |
76 | usb_hcd_giveback_urb (ohci_to_hcd(ohci), urb, regs); | 78 | usb_hcd_giveback_urb (ohci_to_hcd(ohci), urb); |
77 | spin_lock (&ohci->lock); | 79 | spin_lock (&ohci->lock); |
78 | 80 | ||
79 | /* stop periodic dma if it's not needed */ | 81 | /* stop periodic dma if it's not needed */ |
@@ -910,7 +912,7 @@ static struct td *dl_reverse_done_list (struct ohci_hcd *ohci) | |||
910 | 912 | ||
911 | /* there are some urbs/eds to unlink; called in_irq(), with HCD locked */ | 913 | /* there are some urbs/eds to unlink; called in_irq(), with HCD locked */ |
912 | static void | 914 | static void |
913 | finish_unlinks (struct ohci_hcd *ohci, u16 tick, struct pt_regs *regs) | 915 | finish_unlinks (struct ohci_hcd *ohci, u16 tick) |
914 | { | 916 | { |
915 | struct ed *ed, **last; | 917 | struct ed *ed, **last; |
916 | 918 | ||
@@ -923,7 +925,7 @@ rescan_all: | |||
923 | /* only take off EDs that the HC isn't using, accounting for | 925 | /* only take off EDs that the HC isn't using, accounting for |
924 | * frame counter wraps and EDs with partially retired TDs | 926 | * frame counter wraps and EDs with partially retired TDs |
925 | */ | 927 | */ |
926 | if (likely (regs && HC_IS_RUNNING(ohci_to_hcd(ohci)->state))) { | 928 | if (likely (get_irq_regs() && HC_IS_RUNNING(ohci_to_hcd(ohci)->state))) { |
927 | if (tick_before (tick, ed->tick)) { | 929 | if (tick_before (tick, ed->tick)) { |
928 | skip_ed: | 930 | skip_ed: |
929 | last = &ed->ed_next; | 931 | last = &ed->ed_next; |
@@ -990,7 +992,7 @@ rescan_this: | |||
990 | /* if URB is done, clean up */ | 992 | /* if URB is done, clean up */ |
991 | if (urb_priv->td_cnt == urb_priv->length) { | 993 | if (urb_priv->td_cnt == urb_priv->length) { |
992 | modified = completed = 1; | 994 | modified = completed = 1; |
993 | finish_urb (ohci, urb, regs); | 995 | finish_urb (ohci, urb); |
994 | } | 996 | } |
995 | } | 997 | } |
996 | if (completed && !list_empty (&ed->td_list)) | 998 | if (completed && !list_empty (&ed->td_list)) |
@@ -1068,7 +1070,7 @@ rescan_this: | |||
1068 | * scanning the (re-reversed) donelist as this does. | 1070 | * scanning the (re-reversed) donelist as this does. |
1069 | */ | 1071 | */ |
1070 | static void | 1072 | static void |
1071 | dl_done_list (struct ohci_hcd *ohci, struct pt_regs *regs) | 1073 | dl_done_list (struct ohci_hcd *ohci) |
1072 | { | 1074 | { |
1073 | struct td *td = dl_reverse_done_list (ohci); | 1075 | struct td *td = dl_reverse_done_list (ohci); |
1074 | 1076 | ||
@@ -1084,7 +1086,7 @@ dl_done_list (struct ohci_hcd *ohci, struct pt_regs *regs) | |||
1084 | 1086 | ||
1085 | /* If all this urb's TDs are done, call complete() */ | 1087 | /* If all this urb's TDs are done, call complete() */ |
1086 | if (urb_priv->td_cnt == urb_priv->length) | 1088 | if (urb_priv->td_cnt == urb_priv->length) |
1087 | finish_urb (ohci, urb, regs); | 1089 | finish_urb (ohci, urb); |
1088 | 1090 | ||
1089 | /* clean schedule: unlink EDs that are no longer busy */ | 1091 | /* clean schedule: unlink EDs that are no longer busy */ |
1090 | if (list_empty (&ed->td_list)) { | 1092 | if (list_empty (&ed->td_list)) { |