ChangeSet 1.924.3.3, 2002/11/30 00:03:51-08:00, [EMAIL PROTECTED]
[PATCH] usbfs: more list cleanups
Here is a small cleanup patch for 2.5 that goes on top of my previous
ones. It makes devio.c use the list traversal macros from list.h.
diff -Nru a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
--- a/drivers/usb/core/devio.c Sun Dec 1 23:06:24 2002
+++ b/drivers/usb/core/devio.c Sun Dec 1 23:06:24 2002
@@ -239,18 +239,14 @@
{
unsigned long flags;
struct async *as;
- struct list_head *p;
spin_lock_irqsave(&ps->lock, flags);
- for (p = ps->async_pending.next; p != &ps->async_pending; ) {
- as = list_entry(p, struct async, asynclist);
- p = p->next;
- if (as->userurb != userurb)
- continue;
- list_del_init(&as->asynclist);
- spin_unlock_irqrestore(&ps->lock, flags);
- return as;
- }
+ list_for_each_entry(as, &ps->async_pending, asynclist)
+ if (as->userurb == userurb) {
+ list_del_init(&as->asynclist);
+ spin_unlock_irqrestore(&ps->lock, flags);
+ return as;
+ }
spin_unlock_irqrestore(&ps->lock, flags);
return NULL;
}
@@ -295,19 +291,14 @@
static void destroy_async_on_interface (struct dev_state *ps, unsigned int intf)
{
- struct async *as;
- struct list_head *p, hitlist;
+ struct list_head *p, *q, hitlist;
unsigned long flags;
INIT_LIST_HEAD(&hitlist);
spin_lock_irqsave(&ps->lock, flags);
- for (p = ps->async_pending.next; p != &ps->async_pending; ) {
- as = list_entry(p, struct async, asynclist);
- p = p->next;
-
- if (as->intf == intf)
- list_move_tail(&as->asynclist, &hitlist);
- }
+ list_for_each_safe(p, q, &ps->async_pending)
+ if (intf == list_entry(p, struct async, asynclist)->intf)
+ list_move_tail(p, &hitlist);
spin_unlock_irqrestore(&ps->lock, flags);
destroy_async(ps, &hitlist);
}
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel