net: bridge: Do not allocate stats in the driver
[linux-2.6-microblaze.git] / net / bridge / br_device.c
index 65cee0a..4f636f7 100644 (file)
@@ -108,38 +108,23 @@ out:
        return NETDEV_TX_OK;
 }
 
-static struct lock_class_key bridge_netdev_addr_lock_key;
-
-static void br_set_lockdep_class(struct net_device *dev)
-{
-       lockdep_set_class(&dev->addr_list_lock, &bridge_netdev_addr_lock_key);
-}
-
 static int br_dev_init(struct net_device *dev)
 {
        struct net_bridge *br = netdev_priv(dev);
        int err;
 
-       dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
-       if (!dev->tstats)
-               return -ENOMEM;
-
        err = br_fdb_hash_init(br);
-       if (err) {
-               free_percpu(dev->tstats);
+       if (err)
                return err;
-       }
 
        err = br_mdb_hash_init(br);
        if (err) {
-               free_percpu(dev->tstats);
                br_fdb_hash_fini(br);
                return err;
        }
 
        err = br_vlan_init(br);
        if (err) {
-               free_percpu(dev->tstats);
                br_mdb_hash_fini(br);
                br_fdb_hash_fini(br);
                return err;
@@ -147,13 +132,12 @@ static int br_dev_init(struct net_device *dev)
 
        err = br_multicast_init_stats(br);
        if (err) {
-               free_percpu(dev->tstats);
                br_vlan_flush(br);
                br_mdb_hash_fini(br);
                br_fdb_hash_fini(br);
        }
 
-       br_set_lockdep_class(dev);
+       netdev_lockdep_set_classes(dev);
        return err;
 }
 
@@ -166,7 +150,6 @@ static void br_dev_uninit(struct net_device *dev)
        br_vlan_flush(br);
        br_mdb_hash_fini(br);
        br_fdb_hash_fini(br);
-       free_percpu(dev->tstats);
 }
 
 static int br_dev_open(struct net_device *dev)
@@ -481,7 +464,7 @@ static const struct net_device_ops br_netdev_ops = {
        .ndo_fill_forward_path   = br_fill_forward_path,
 };
 
-static struct device_type br_type = {
+static const struct device_type br_type = {
        .name   = "bridge",
 };
 
@@ -503,6 +486,7 @@ void br_dev_setup(struct net_device *dev)
        dev->hw_features = COMMON_FEATURES | NETIF_F_HW_VLAN_CTAG_TX |
                           NETIF_F_HW_VLAN_STAG_TX;
        dev->vlan_features = COMMON_FEATURES;
+       dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
 
        br->dev = dev;
        spin_lock_init(&br->lock);