netdev: netdev_priv() can now be sane again.
authorDavid S. Miller <davem@davemloft.net>
Tue, 15 Jul 2008 09:58:39 +0000 (02:58 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Jul 2008 02:21:09 +0000 (19:21 -0700)
The private area of a netdev is now at a fixed offset once more.

Unfortunately, some assumptions that netdev_priv() == netdev->priv
crept back into the tree.  In particular this happened in the
loopback driver.  Make it use netdev->ml_priv.

Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/loopback.c
include/linux/netdevice.h

index 41b774baac4d4ce6651b51f051ecc9b003d5a623..49f6bc036a9275f21478f4d7f498300020358049 100644 (file)
@@ -153,7 +153,7 @@ static int loopback_xmit(struct sk_buff *skb, struct net_device *dev)
        dev->last_rx = jiffies;
 
        /* it's OK to use per_cpu_ptr() because BHs are off */
-       pcpu_lstats = netdev_priv(dev);
+       pcpu_lstats = dev->ml_priv;
        lb_stats = per_cpu_ptr(pcpu_lstats, smp_processor_id());
        lb_stats->bytes += skb->len;
        lb_stats->packets++;
@@ -171,7 +171,7 @@ static struct net_device_stats *get_stats(struct net_device *dev)
        unsigned long packets = 0;
        int i;
 
-       pcpu_lstats = netdev_priv(dev);
+       pcpu_lstats = dev->ml_priv;
        for_each_possible_cpu(i) {
                const struct pcpu_lstats *lb_stats;
 
@@ -207,13 +207,13 @@ static int loopback_dev_init(struct net_device *dev)
        if (!lstats)
                return -ENOMEM;
 
-       dev->priv = lstats;
+       dev->ml_priv = lstats;
        return 0;
 }
 
 static void loopback_dev_free(struct net_device *dev)
 {
-       struct pcpu_lstats *lstats = netdev_priv(dev);
+       struct pcpu_lstats *lstats = dev->ml_priv;
 
        free_percpu(lstats);
        free_netdev(dev);
index a1c2c220449855a15714db01d117f8daa8a902a9..fdac1159253e45f24f0822f9520a40d23860bff0 100644 (file)
@@ -808,7 +808,9 @@ void dev_net_set(struct net_device *dev, struct net *net)
  */
 static inline void *netdev_priv(const struct net_device *dev)
 {
-       return dev->priv;
+       return (char *)dev + ((sizeof(struct net_device)
+                              + NETDEV_ALIGN_CONST)
+                             & ~NETDEV_ALIGN_CONST);
 }
 
 /* Set the sysfs physical device reference for the network logical device