# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#                  ChangeSet    1.538   -> 1.539  
#       drivers/usb/net/rtl8150.c       1.6     -> 1.7    
#       drivers/usb/net/pegasus.c       1.24    -> 1.25   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/04/22      [EMAIL PROTECTED] 1.539
# USB pegasus and rtl8150
# 
# Rx tasklet cleanups for both pegasus and rtl8150
# --------------------------------------------
#
diff -Nru a/drivers/usb/net/pegasus.c b/drivers/usb/net/pegasus.c
--- a/drivers/usb/net/pegasus.c Mon Apr 22 14:28:15 2002
+++ b/drivers/usb/net/pegasus.c Mon Apr 22 14:28:15 2002
@@ -469,20 +469,11 @@
 
 static int enable_net_traffic(struct net_device *dev, struct usb_device *usb)
 {
-       __u16 linkpart, bmsr;
+       __u16 linkpart;
        __u8 data[4];
        pegasus_t *pegasus = dev->priv;
 
-       read_mii_word(pegasus, pegasus->phy, MII_BMSR, &bmsr);
-       read_mii_word(pegasus, pegasus->phy, MII_BMSR, &bmsr);
-       if (!(bmsr & BMSR_LSTATUS) && !loopback)
-               warn("%s: link NOT established (%04x) - check the cable.",
-                    dev->name, bmsr);
-       if (read_mii_word(pegasus, pegasus->phy, MII_LPA, &linkpart))
-               return 2;
-       if (!(linkpart & 1))
-               warn("link partner stat %x", linkpart);
-
+       read_mii_word(pegasus, pegasus->phy, MII_LPA, &linkpart);
        data[0] = 0xc9;
        data[1] = 0;
        if (linkpart & (ADVERTISE_100FULL | ADVERTISE_10FULL))
@@ -529,6 +520,8 @@
                dbg("reset MAC");
                pegasus->flags &= ~PEGASUS_RX_BUSY;
                break;
+       case -ENOENT:
+               return;
        default:
                dbg("%s: RX status %d", net->name, urb->status);
                goto goon;
@@ -551,10 +544,8 @@
        }
        pkt_len = (rx_status & 0xfff) - 8;
 
-       tasklet_schedule(&pegasus->rx_tl);
-
        if (!pegasus->rx_skb)
-               return;
+               goto tl_sched;
 
        skb_put(pegasus->rx_skb, pkt_len);
        pegasus->rx_skb->protocol = eth_type_trans(pegasus->rx_skb, net);
@@ -562,7 +553,7 @@
 
        if (!(skb = dev_alloc_skb(PEGASUS_MTU + 2))) {
                pegasus->rx_skb = NULL;
-               return;
+               goto tl_sched;
        }
        
        skb->dev = net;
@@ -575,10 +566,17 @@
                      usb_rcvbulkpipe(pegasus->usb, 1),
                      pegasus->rx_skb->data, PEGASUS_MTU + 8,
                      read_bulk_callback, pegasus);
-       if (usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC))
+       if (usb_submit_urb(pegasus->rx_urb, GFP_ATOMIC)) {
                pegasus->flags |= PEGASUS_RX_URB_FAIL;
-       else
+               goto tl_sched;
+       } else {
                pegasus->flags &= ~PEGASUS_RX_URB_FAIL;
+       }
+       
+       return;
+       
+tl_sched:
+       tasklet_schedule(&pegasus->rx_tl);
 }
 
 static void rx_fixup(unsigned long data)
@@ -587,11 +585,10 @@
 
        pegasus = (pegasus_t *)data;
 
-       if (pegasus->flags & PEGASUS_RX_URB_FAIL) {
-               goto try_again;
-       }
-       if (pegasus->rx_skb)
-               return;
+       if (pegasus->flags & PEGASUS_RX_URB_FAIL)
+               if (pegasus->rx_skb)
+                       goto try_again;
+
        if (!(pegasus->rx_skb = dev_alloc_skb(PEGASUS_MTU + 2))) {
                tasklet_schedule(&pegasus->rx_tl);
                return;
@@ -655,8 +652,12 @@
                        pegasus->stats.tx_aborted_errors++;
                if (d[0] & LATE_COL)
                        pegasus->stats.tx_window_errors++;
-               if (d[0] & (NO_CARRIER | LOSS_CARRIER))
+               if (d[0] & (NO_CARRIER | LOSS_CARRIER)) {
                        pegasus->stats.tx_carrier_errors++;
+                       netif_carrier_off(net);
+               } else {
+                       netif_carrier_on(net);
+               }
        }
 }
 #endif
diff -Nru a/drivers/usb/net/rtl8150.c b/drivers/usb/net/rtl8150.c
--- a/drivers/usb/net/rtl8150.c Mon Apr 22 14:28:15 2002
+++ b/drivers/usb/net/rtl8150.c Mon Apr 22 14:28:15 2002
@@ -309,7 +309,7 @@
        case 0:
                break;
        case -ENOENT:
-               return; /* urb's in unlink state */
+               return; /* the urb is in unlink state */
        case -ETIMEDOUT:
                warn("reset needed may be?..");
                goto goon;
@@ -318,12 +318,8 @@
                goto goon;
        }
 
-       tasklet_schedule(&dev->tl);
-
-       if (!dev->rx_skb) {
-               /* lost packets++ */
-               return;
-       }
+       if (!dev->rx_skb)
+               goto resched;
 
        res = urb->actual_length;
        rx_stat = le16_to_cpu(*(short *)(urb->transfer_buffer + res - 4));
@@ -336,10 +332,8 @@
        dev->stats.rx_bytes += pkt_len;
        
        skb = pull_skb(dev);
-       if (!skb) {
-               dev->rx_skb = NULL;
-               return;
-       }
+       if (!skb)
+               goto resched;
 
        skb->dev = netdev;
        skb_reserve(skb, 2);
@@ -347,10 +341,16 @@
 goon:
        FILL_BULK_URB(dev->rx_urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1),
                      dev->rx_skb->data, RTL8150_MTU, read_bulk_callback, dev);
-       if (usb_submit_urb(dev->rx_urb, GFP_ATOMIC))
+       if (usb_submit_urb(dev->rx_urb, GFP_ATOMIC)) {
                set_bit(RX_URB_FAIL, &dev->flags);
-       else
+               goto resched;
+       } else {
                clear_bit(RX_URB_FAIL, &dev->flags);
+       }
+
+       return;
+resched:
+       tasklet_schedule(&dev->tl);
 }
 
 static void rx_fixup(unsigned long data)
@@ -362,22 +362,24 @@
 
        fill_skb_pool(dev);
        if (test_bit(RX_URB_FAIL, &dev->flags))
-               goto try_again;
-       if (dev->rx_skb)
-               return;
-       if (!(skb = pull_skb(dev))) {
-               tasklet_schedule(&dev->tl);
-               return;
-       }
+               if (dev->rx_skb)
+                       goto try_again;
+       if (!(skb = pull_skb(dev)))
+               goto tlsched;
        dev->rx_skb = skb;
        FILL_BULK_URB(dev->rx_urb, dev->udev, usb_rcvbulkpipe(dev->udev, 1),
                      dev->rx_skb->data, RTL8150_MTU, read_bulk_callback, dev);
 try_again:
        if (usb_submit_urb(dev->rx_urb, GFP_ATOMIC)) {
                set_bit(RX_URB_FAIL, &dev->flags);
-               tasklet_schedule(&dev->tl);
-        } else
+               goto tlsched;
+        } else {
                clear_bit(RX_URB_FAIL, &dev->flags);
+       }
+
+       return;
+tlsched:
+       tasklet_schedule(&dev->tl);
 }
 
 static void write_bulk_callback(struct urb *urb)

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to