Lines Matching refs:anchor

123 void usb_anchor_urb(struct urb *urb, struct usb_anchor *anchor)  in usb_anchor_urb()  argument
127 spin_lock_irqsave(&anchor->lock, flags); in usb_anchor_urb()
129 list_add_tail(&urb->anchor_list, &anchor->urb_list); in usb_anchor_urb()
130 urb->anchor = anchor; in usb_anchor_urb()
132 if (unlikely(anchor->poisoned)) { in usb_anchor_urb()
136 spin_unlock_irqrestore(&anchor->lock, flags); in usb_anchor_urb()
140 static int usb_anchor_check_wakeup(struct usb_anchor *anchor) in usb_anchor_check_wakeup() argument
142 return atomic_read(&anchor->suspend_wakeups) == 0 && in usb_anchor_check_wakeup()
143 list_empty(&anchor->urb_list); in usb_anchor_check_wakeup()
147 static void __usb_unanchor_urb(struct urb *urb, struct usb_anchor *anchor) in __usb_unanchor_urb() argument
149 urb->anchor = NULL; in __usb_unanchor_urb()
152 if (usb_anchor_check_wakeup(anchor)) in __usb_unanchor_urb()
153 wake_up(&anchor->wait); in __usb_unanchor_urb()
165 struct usb_anchor *anchor; in usb_unanchor_urb() local
170 anchor = urb->anchor; in usb_unanchor_urb()
171 if (!anchor) in usb_unanchor_urb()
174 spin_lock_irqsave(&anchor->lock, flags); in usb_unanchor_urb()
180 if (likely(anchor == urb->anchor)) in usb_unanchor_urb()
181 __usb_unanchor_urb(urb, anchor); in usb_unanchor_urb()
182 spin_unlock_irqrestore(&anchor->lock, flags); in usb_unanchor_urb()
756 void usb_kill_anchored_urbs(struct usb_anchor *anchor) in usb_kill_anchored_urbs() argument
760 spin_lock_irq(&anchor->lock); in usb_kill_anchored_urbs()
761 while (!list_empty(&anchor->urb_list)) { in usb_kill_anchored_urbs()
762 victim = list_entry(anchor->urb_list.prev, struct urb, in usb_kill_anchored_urbs()
766 spin_unlock_irq(&anchor->lock); in usb_kill_anchored_urbs()
770 spin_lock_irq(&anchor->lock); in usb_kill_anchored_urbs()
772 spin_unlock_irq(&anchor->lock); in usb_kill_anchored_urbs()
788 void usb_poison_anchored_urbs(struct usb_anchor *anchor) in usb_poison_anchored_urbs() argument
792 spin_lock_irq(&anchor->lock); in usb_poison_anchored_urbs()
793 anchor->poisoned = 1; in usb_poison_anchored_urbs()
794 while (!list_empty(&anchor->urb_list)) { in usb_poison_anchored_urbs()
795 victim = list_entry(anchor->urb_list.prev, struct urb, in usb_poison_anchored_urbs()
799 spin_unlock_irq(&anchor->lock); in usb_poison_anchored_urbs()
803 spin_lock_irq(&anchor->lock); in usb_poison_anchored_urbs()
805 spin_unlock_irq(&anchor->lock); in usb_poison_anchored_urbs()
816 void usb_unpoison_anchored_urbs(struct usb_anchor *anchor) in usb_unpoison_anchored_urbs() argument
821 spin_lock_irqsave(&anchor->lock, flags); in usb_unpoison_anchored_urbs()
822 list_for_each_entry(lazarus, &anchor->urb_list, anchor_list) { in usb_unpoison_anchored_urbs()
825 anchor->poisoned = 0; in usb_unpoison_anchored_urbs()
826 spin_unlock_irqrestore(&anchor->lock, flags); in usb_unpoison_anchored_urbs()
841 void usb_unlink_anchored_urbs(struct usb_anchor *anchor) in usb_unlink_anchored_urbs() argument
845 while ((victim = usb_get_from_anchor(anchor)) != NULL) { in usb_unlink_anchored_urbs()
860 void usb_anchor_suspend_wakeups(struct usb_anchor *anchor) in usb_anchor_suspend_wakeups() argument
862 if (anchor) in usb_anchor_suspend_wakeups()
863 atomic_inc(&anchor->suspend_wakeups); in usb_anchor_suspend_wakeups()
874 void usb_anchor_resume_wakeups(struct usb_anchor *anchor) in usb_anchor_resume_wakeups() argument
876 if (!anchor) in usb_anchor_resume_wakeups()
879 atomic_dec(&anchor->suspend_wakeups); in usb_anchor_resume_wakeups()
880 if (usb_anchor_check_wakeup(anchor)) in usb_anchor_resume_wakeups()
881 wake_up(&anchor->wait); in usb_anchor_resume_wakeups()
895 int usb_wait_anchor_empty_timeout(struct usb_anchor *anchor, in usb_wait_anchor_empty_timeout() argument
898 return wait_event_timeout(anchor->wait, in usb_wait_anchor_empty_timeout()
899 usb_anchor_check_wakeup(anchor), in usb_wait_anchor_empty_timeout()
914 struct urb *usb_get_from_anchor(struct usb_anchor *anchor) in usb_get_from_anchor() argument
919 spin_lock_irqsave(&anchor->lock, flags); in usb_get_from_anchor()
920 if (!list_empty(&anchor->urb_list)) { in usb_get_from_anchor()
921 victim = list_entry(anchor->urb_list.next, struct urb, in usb_get_from_anchor()
924 __usb_unanchor_urb(victim, anchor); in usb_get_from_anchor()
928 spin_unlock_irqrestore(&anchor->lock, flags); in usb_get_from_anchor()
941 void usb_scuttle_anchored_urbs(struct usb_anchor *anchor) in usb_scuttle_anchored_urbs() argument
946 spin_lock_irqsave(&anchor->lock, flags); in usb_scuttle_anchored_urbs()
947 while (!list_empty(&anchor->urb_list)) { in usb_scuttle_anchored_urbs()
948 victim = list_entry(anchor->urb_list.prev, struct urb, in usb_scuttle_anchored_urbs()
950 __usb_unanchor_urb(victim, anchor); in usb_scuttle_anchored_urbs()
952 spin_unlock_irqrestore(&anchor->lock, flags); in usb_scuttle_anchored_urbs()
963 int usb_anchor_empty(struct usb_anchor *anchor) in usb_anchor_empty() argument
965 return list_empty(&anchor->urb_list); in usb_anchor_empty()