speedtouch: struct sk_buff_head has a spinlock built in, so no need for our own.


 speedtouch.c |   50 +++++++++++---------------------------------------
 1 files changed, 11 insertions(+), 39 deletions(-)


diff -Nru a/drivers/usb/misc/speedtouch.c b/drivers/usb/misc/speedtouch.c
--- a/drivers/usb/misc/speedtouch.c     Fri Jan 10 12:33:04 2003
+++ b/drivers/usb/misc/speedtouch.c     Fri Jan 10 12:33:04 2003
@@ -143,14 +143,12 @@
        struct usb_device *usb_dev;
        struct udsl_data_ctx *rcvbufs;
        struct sk_buff_head sndqueue;
-       spinlock_t sndqlock;
        struct udsl_usb_send_data_context send_ctx[UDSL_NUMBER_SND_URBS];
        int data_started;
 
        /* atm device part */
        struct atm_dev *atm_dev;
        struct sk_buff_head recvqueue;
-       spinlock_t recvqlock;
 
        struct atmsar_vcc_data *atmsar_vcc_list;
 };
@@ -238,19 +236,15 @@
        struct atm_vcc *walk;
        struct sk_buff *skb;
        struct atm_dev *atm_dev;
-       unsigned long iflags;
+
        if (!instance->atm_dev)
                return;
 
        atm_dev = instance->atm_dev;
 
        /* clean queue */
-       spin_lock_irqsave (&instance->recvqlock, iflags);
-       while (!skb_queue_empty (&instance->recvqueue)) {
-               skb = skb_dequeue (&instance->recvqueue);
+       while ((skb = skb_dequeue (&instance->recvqueue)))
                dev_kfree_skb (skb);
-       };
-       spin_unlock_irqrestore (&instance->recvqlock, iflags);
 
        atm_dev->signal = ATM_PHY_SIG_LOST;
        walk = atm_dev->vccs;
@@ -372,21 +366,10 @@
        struct udsl_instance_data *instance = (struct udsl_instance_data *) data;
        struct atmsar_vcc_data *atmsar_vcc = NULL;
        struct sk_buff *new = NULL, *skb = NULL, *tmp = NULL;
-       unsigned long iflags;
 
-       /* quick check */
-       spin_lock_irqsave (&instance->recvqlock, iflags);
-       if (skb_queue_empty (&instance->recvqueue)) {
-               spin_unlock_irqrestore (&instance->recvqlock, iflags);
-               return;
-       }
        PDEBUG ("udsl_atm_processqueue entered\n");
 
-       while (!skb_queue_empty (&instance->recvqueue)) {
-               skb = skb_dequeue (&instance->recvqueue);
-
-               spin_unlock_irqrestore (&instance->recvqlock, iflags);
-
+       while ((skb = skb_dequeue (&instance->recvqueue))) {
                PDEBUG ("skb = %p, skb->len = %d\n", skb, skb->len);
                PACKETDEBUG (skb->data, skb->len);
 
@@ -426,10 +409,8 @@
                        }
                };
                dev_kfree_skb (skb);
-               spin_lock_irqsave (&instance->recvqlock, iflags);
        };
 
-       spin_unlock_irqrestore (&instance->recvqlock, iflags);
        PDEBUG ("udsl_atm_processqueue successfull\n");
 }
 
@@ -539,17 +520,12 @@
                ctx->skb, urb->status);
 
        ctx->vcc->pop (ctx->vcc, ctx->skb);
-       ctx->skb = NULL;
 
-       spin_lock (&instance->sndqlock);
-       if (skb_queue_empty (&instance->sndqueue)) {
-               spin_unlock (&instance->sndqlock);
+       if (!(ctx->skb = skb_dequeue (&(instance->sndqueue))))
                return;
-       }
+
        /* submit next skb */
-       ctx->skb = skb_dequeue (&(instance->sndqueue));
        ctx->vcc = ((struct udsl_cb *) (ctx->skb->cb))->vcc;
-       spin_unlock (&instance->sndqlock);
        usb_fill_bulk_urb (urb,
                       instance->usb_dev,
                       usb_sndbulkpipe (instance->usb_dev, UDSL_ENDPOINT_DATA_OUT),
@@ -596,13 +572,13 @@
 
        PACKETDEBUG (skb->data, skb->len);
 
-       spin_lock_irqsave (&instance->sndqlock, flags);
+       spin_lock_irqsave (&instance->sndqueue.lock, flags);
        ((struct udsl_cb *) skb->cb)->vcc = vcc;
 
        /* we are already queueing */
        if (!skb_queue_empty (&instance->sndqueue)) {
-               skb_queue_tail (&instance->sndqueue, skb);
-               spin_unlock_irqrestore (&instance->sndqlock, flags);
+               __skb_queue_tail (&instance->sndqueue, skb);
+               spin_unlock_irqrestore (&instance->sndqueue.lock, flags);
                PDEBUG ("udsl_usb_send_data: already queing, skb (0x%p) queued\n", 
skb);
                return 0;
        }
@@ -613,8 +589,8 @@
 
        /* we must start queueing */
        if (i == UDSL_NUMBER_SND_URBS) {
-               skb_queue_tail (&instance->sndqueue, skb);
-               spin_unlock_irqrestore (&instance->sndqlock, flags);
+               __skb_queue_tail (&instance->sndqueue, skb);
+               spin_unlock_irqrestore (&instance->sndqueue.lock, flags);
                PDEBUG ("udsl_usb_send_data: skb (0x%p) queued\n", skb);
                return 0;
        };
@@ -625,7 +601,7 @@
        instance->send_ctx[i].vcc = vcc;
        instance->send_ctx[i].instance = instance;
 
-       spin_unlock_irqrestore (&instance->sndqlock, flags);
+       spin_unlock_irqrestore (&instance->sndqueue.lock, flags);
 
        /* submit packet */
        usb_fill_bulk_urb (urb,
@@ -671,9 +647,7 @@
                skb_put (ctx->skb, urb->actual_length);
 
                /* queue the skb for processing and wake the SAR */
-               spin_lock (&instance->recvqlock);
                skb_queue_tail (&instance->recvqueue, ctx->skb);
-               spin_unlock (&instance->recvqlock);
                tasklet_schedule (&instance->recvqueue_tasklet);
                /* get a new skb */
                ctx->skb = dev_alloc_skb (UDSL_RECEIVE_BUFFER_SIZE);
@@ -886,8 +860,6 @@
        memset (instance, 0, sizeof (struct udsl_instance_data));
        instance->usb_dev = dev;
        instance->rcvbufs = NULL;
-       spin_lock_init (&instance->sndqlock);
-       spin_lock_init (&instance->recvqlock);
        tasklet_init (&instance->recvqueue_tasklet, udsl_atm_processqueue, (unsigned 
long) instance);
 
        udsl_atm_startdevice (instance, &udsl_atm_devops);



-------------------------------------------------------
This SF.NET email is sponsored by:
SourceForge Enterprise Edition + IBM + LinuxWorld = Something 2 See!
http://www.vasoftware.com
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to