# 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