[PATCH]&[Question] netdevice: Use netdev_priv()

Previous thread: [GIT]: Networking by David Miller on Friday, August 1, 2008 - 1:11 am. (1 message)

Next thread: [PATCH] raw: restore daddr_cache in raw kernel socket. by Naohiro Ooiwa on Friday, August 1, 2008 - 6:00 am. (2 messages)
To: David S. Miller <davem@...>
Cc: NETDEV <netdev@...>
Date: Friday, August 1, 2008 - 5:50 am

Dave

This mail is a question mail more than patch mail.
In your commit "netdev: netdev_priv() can now be sane again.",
you said netdev_priv() != netdev->priv, because that time,
netdev->priv = ((char *)dev +((sizeof(struct net_device) +(sizeof(struct net_device_subqueue) *
(queue_count - 1)) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST))
But now, after you do TX multiqueue improvement.
netdev->priv == netdev_priv() again.

That make me think, what the use of netdev->priv?
We have netdev_priv() and use it flexibly. Why don't kill netdev->priv?

---
From be26ade29c6a3d0002492f7aab25258cb78ab597 Mon Sep 17 00:00:00 2001
From: Wang Chen <wangchen@cn.fujitsu.com>
Date: Fri, 1 Aug 2008 16:59:59 +0800
Subject: [PATCH] netdevice: Use netdev_priv()

dev->priv is now point to private data again.

Signed-off-by: Wang Chen <wangchen@cn.fujitsu.com>
---
net/core/dev.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)

diff --git a/net/core/dev.c b/net/core/dev.c
index 63d6bcd..9b73624 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4255,11 +4255,8 @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
dev->num_tx_queues = queue_count;
dev->real_num_tx_queues = queue_count;

- if (sizeof_priv) {
- dev->priv = ((char *)dev +
- ((sizeof(struct net_device) + NETDEV_ALIGN_CONST)
- & ~NETDEV_ALIGN_CONST));
- }
+ if (sizeof_priv)
+ dev->priv = netdev_priv(dev);

dev->gso_max_size = GSO_MAX_SIZE;

--
1.5.3.4

--

To: <wangchen@...>
Cc: <netdev@...>
Date: Friday, August 1, 2008 - 6:08 am

From: Wang Chen <wangchen@cn.fujitsu.com>

Way too many old drivers still reference netdev->priv directly.

Once we convert all of them to netdev_priv(), yes we can kill
netdev->priv
--

To: David Miller <davem@...>
Cc: <netdev@...>
Date: Friday, August 1, 2008 - 6:16 am

Thanks for the explanation.

Then next question comes.
We *have to* convert the drivers to use netdev_priv(), right?
Because, netdev->priv == netdev_priv() maybe change again in future,
just as before.

--

To: <wangchen@...>
Cc: <netdev@...>
Date: Friday, August 1, 2008 - 6:24 am

From: Wang Chen <wangchen@cn.fujitsu.com>

We will work to prevent that. I should not have allowed it to happen
in the first place. :-)
--

To: David Miller <davem@...>
Cc: <netdev@...>
Date: Friday, August 1, 2008 - 6:35 am

How about add a comment to netdev->priv

void *priv; /* pointer to private data, referent me by netdev_priv()*/

--

To: <wangchen@...>
Cc: <netdev@...>
Date: Friday, August 1, 2008 - 7:05 am

From: Wang Chen <wangchen@cn.fujitsu.com>

Sure, but I'd much rather apply a patch that converts
all the direct references :-)
--

To: David Miller <davem@...>
Cc: <netdev@...>
Date: Tuesday, August 5, 2008 - 5:55 am

I just checked some drivers' source.
And, maybe some direct references of net_device->priv are needed.
For example:
init_one() of cxgb2 makes several net_device to share one private data.
For this purpose, direct reference is necessary.

--

To: <wangchen@...>
Cc: <netdev@...>
Date: Tuesday, August 5, 2008 - 6:04 am

From: Wang Chen <wangchen@cn.fujitsu.com>

It should use netdev->ml_priv which is created for this purpose.

Every direct netdev->priv usage is a bug.
--

To: David Miller <davem@...>
Cc: <wangchen@...>, <netdev@...>
Date: Tuesday, August 5, 2008 - 1:51 pm

cxgb3 was fixed in this regard, cxgb2 needs the same treatment ...

cheers,
Divy
--

To: Divy Le Ray <divy@...>
Cc: David Miller <davem@...>, <netdev@...>
Date: Wednesday, August 6, 2008 - 12:21 am

Thanks Dave and Divy.
I am making the big patch for fixing all direct reference of netdev->priv.

--

Previous thread: [GIT]: Networking by David Miller on Friday, August 1, 2008 - 1:11 am. (1 message)

Next thread: [PATCH] raw: restore daddr_cache in raw kernel socket. by Naohiro Ooiwa on Friday, August 1, 2008 - 6:00 am. (2 messages)