Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e3c50d5d authored by David S. Miller's avatar David S. Miller
Browse files

netdev: netdev_priv() can now be sane again.



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: default avatarDavid S. Miller <davem@davemloft.net>
parent 6b0fb126
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -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