Lines Matching refs:anchor

126 void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor)  in usb_anchor_urb()  argument
130 spin_lock_irqsave(&anchor->lock, flags); in usb_anchor_urb()
132 list_add_tail(&urb->anchor_list, &anchor->urb_list); in usb_anchor_urb()
133 urb->anchor = anchor; in usb_anchor_urb()
135 if (unlikely(anchor->poisoned)) in usb_anchor_urb()
138 spin_unlock_irqrestore(&anchor->lock, flags); in usb_anchor_urb()
142 static int usb_anchor_check_wakeup(struct usb_anchor *anchor) in usb_anchor_check_wakeup() argument
144 return atomic_read(&anchor->suspend_wakeups) == 0 && in usb_anchor_check_wakeup()
145 list_empty(&anchor->urb_list); in usb_anchor_check_wakeup()
149 static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor) in __usb_unanchor_urb() argument
151 urb->anchor = NULL; in __usb_unanchor_urb()
154 if (usb_anchor_check_wakeup(anchor)) in __usb_unanchor_urb()
155 wake_up(&anchor->wait); in __usb_unanchor_urb()
167 struct usb_anchor *anchor; in usb_unanchor_urb() local
172 anchor = urb->anchor; in usb_unanchor_urb()
173 if (!anchor) in usb_unanchor_urb()
176 spin_lock_irqsave(&anchor->lock, flags); in usb_unanchor_urb()
182 if (likely(anchor == urb->anchor)) in usb_unanchor_urb()
183 __usb_unanchor_urb(urb, anchor); in usb_unanchor_urb()
184 spin_unlock_irqrestore(&anchor->lock, flags); in usb_unanchor_urb()
809 void usb_kill_anchored_urbs(struct usb_anchor *anchor) in usb_kill_anchored_urbs() argument
815 spin_lock_irq(&anchor->lock); in usb_kill_anchored_urbs()
816 while (!list_empty(&anchor->urb_list)) { in usb_kill_anchored_urbs()
817 victim = list_entry(anchor->urb_list.prev, in usb_kill_anchored_urbs()
821 spin_unlock_irq(&anchor->lock); in usb_kill_anchored_urbs()
825 spin_lock_irq(&anchor->lock); in usb_kill_anchored_urbs()
827 surely_empty = usb_anchor_check_wakeup(anchor); in usb_kill_anchored_urbs()
829 spin_unlock_irq(&anchor->lock); in usb_kill_anchored_urbs()
847 void usb_poison_anchored_urbs(struct usb_anchor *anchor) in usb_poison_anchored_urbs() argument
853 spin_lock_irq(&anchor->lock); in usb_poison_anchored_urbs()
854 anchor->poisoned = 1; in usb_poison_anchored_urbs()
855 while (!list_empty(&anchor->urb_list)) { in usb_poison_anchored_urbs()
856 victim = list_entry(anchor->urb_list.prev, in usb_poison_anchored_urbs()
860 spin_unlock_irq(&anchor->lock); in usb_poison_anchored_urbs()
864 spin_lock_irq(&anchor->lock); in usb_poison_anchored_urbs()
866 surely_empty = usb_anchor_check_wakeup(anchor); in usb_poison_anchored_urbs()
868 spin_unlock_irq(&anchor->lock); in usb_poison_anchored_urbs()
881 void usb_unpoison_anchored_urbs(struct usb_anchor *anchor) in usb_unpoison_anchored_urbs() argument
886 spin_lock_irqsave(&anchor->lock, flags); in usb_unpoison_anchored_urbs()
887 list_for_each_entry(lazarus, &anchor->urb_list, anchor_list) { in usb_unpoison_anchored_urbs()
890 anchor->poisoned = 0; in usb_unpoison_anchored_urbs()
891 spin_unlock_irqrestore(&anchor->lock, flags); in usb_unpoison_anchored_urbs()
906 void usb_unlink_anchored_urbs(struct usb_anchor *anchor) in usb_unlink_anchored_urbs() argument
910 while ((victim = usb_get_from_anchor(anchor)) != NULL) { in usb_unlink_anchored_urbs()
925 void usb_anchor_suspend_wakeups(struct usb_anchor *anchor) in usb_anchor_suspend_wakeups() argument
927 if (anchor) in usb_anchor_suspend_wakeups()
928 atomic_inc(&anchor->suspend_wakeups); in usb_anchor_suspend_wakeups()
939 void usb_anchor_resume_wakeups(struct usb_anchor *anchor) in usb_anchor_resume_wakeups() argument
941 if (!anchor) in usb_anchor_resume_wakeups()
944 atomic_dec(&anchor->suspend_wakeups); in usb_anchor_resume_wakeups()
945 if (usb_anchor_check_wakeup(anchor)) in usb_anchor_resume_wakeups()
946 wake_up(&anchor->wait); in usb_anchor_resume_wakeups()
960 int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, in usb_wait_anchor_empty_timeout() argument
963 return wait_event_timeout(anchor->wait, in usb_wait_anchor_empty_timeout()
964 usb_anchor_check_wakeup(anchor), in usb_wait_anchor_empty_timeout()
979 struct urb *usb_get_from_anchor(struct usb_anchor *anchor) in usb_get_from_anchor() argument
984 spin_lock_irqsave(&anchor->lock, flags); in usb_get_from_anchor()
985 if (!list_empty(&anchor->urb_list)) { in usb_get_from_anchor()
986 victim = list_entry(anchor->urb_list.next, struct urb, in usb_get_from_anchor()
989 __usb_unanchor_urb(victim, anchor); in usb_get_from_anchor()
993 spin_unlock_irqrestore(&anchor->lock, flags); in usb_get_from_anchor()
1006 void usb_scuttle_anchored_urbs(struct usb_anchor *anchor) in usb_scuttle_anchored_urbs() argument
1013 spin_lock_irqsave(&anchor->lock, flags); in usb_scuttle_anchored_urbs()
1014 while (!list_empty(&anchor->urb_list)) { in usb_scuttle_anchored_urbs()
1015 victim = list_entry(anchor->urb_list.prev, in usb_scuttle_anchored_urbs()
1017 __usb_unanchor_urb(victim, anchor); in usb_scuttle_anchored_urbs()
1019 surely_empty = usb_anchor_check_wakeup(anchor); in usb_scuttle_anchored_urbs()
1021 spin_unlock_irqrestore(&anchor->lock, flags); in usb_scuttle_anchored_urbs()
1034 int usb_anchor_empty(struct usb_anchor *anchor) in usb_anchor_empty() argument
1036 return list_empty(&anchor->urb_list); in usb_anchor_empty()