usbnet: ratelimit warning messages invoked from callback handler
[safe/jmp/linux-2.6] / drivers / net / usb / rtl8150.c
index 67368cc..fcc6fa0 100644 (file)
@@ -221,7 +221,8 @@ static void ctrl_callback(struct urb *urb)
        case -ENOENT:
                break;
        default:
-               dev_warn(&urb->dev->dev, "ctrl urb status %d\n", status);
+               if (printk_ratelimit())
+                       dev_warn(&urb->dev->dev, "ctrl urb status %d\n", status);
        }
        dev = urb->context;
        clear_bit(RX_REG_SET, &dev->flags);
@@ -442,10 +443,12 @@ static void read_bulk_callback(struct urb *urb)
        case -ENOENT:
                return; /* the urb is in unlink state */
        case -ETIME:
-               dev_warn(&urb->dev->dev, "may be reset is needed?..\n");
+               if (printk_ratelimit())
+                       dev_warn(&urb->dev->dev, "may be reset is needed?..\n");
                goto goon;
        default:
-               dev_warn(&urb->dev->dev, "Rx status %d\n", status);
+               if (printk_ratelimit())
+                       dev_warn(&urb->dev->dev, "Rx status %d\n", status);
                goto goon;
        }
 
@@ -891,6 +894,19 @@ static int rtl8150_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
        return res;
 }
 
+static const struct net_device_ops rtl8150_netdev_ops = {
+       .ndo_open               = rtl8150_open,
+       .ndo_stop               = rtl8150_close,
+       .ndo_do_ioctl           = rtl8150_ioctl,
+       .ndo_start_xmit         = rtl8150_start_xmit,
+       .ndo_tx_timeout         = rtl8150_tx_timeout,
+       .ndo_set_multicast_list = rtl8150_set_multicast,
+       .ndo_set_mac_address    = rtl8150_set_mac_address,
+
+       .ndo_change_mtu         = eth_change_mtu,
+       .ndo_validate_addr      = eth_validate_addr,
+};
+
 static int rtl8150_probe(struct usb_interface *intf,
                         const struct usb_device_id *id)
 {
@@ -917,15 +933,8 @@ static int rtl8150_probe(struct usb_interface *intf,
        
        dev->udev = udev;
        dev->netdev = netdev;
-       netdev->open = rtl8150_open;
-       netdev->stop = rtl8150_close;
-       netdev->do_ioctl = rtl8150_ioctl;
+       netdev->netdev_ops = &rtl8150_netdev_ops;
        netdev->watchdog_timeo = RTL8150_TX_TIMEOUT;
-       netdev->tx_timeout = rtl8150_tx_timeout;
-       netdev->hard_start_xmit = rtl8150_start_xmit;
-       netdev->set_multicast_list = rtl8150_set_multicast;
-       netdev->set_mac_address = rtl8150_set_mac_address;
-
        SET_ETHTOOL_OPS(netdev, &ops);
        dev->intr_interval = 100;       /* 100ms */