&[Question] netdevice: Use netdev_priv()
Subsystems (2)
PATCH 1/1 &[Question] netdevice: Use netdev_priv()
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?
---
Quoted 1 line
From
be26ade29c6a3d0002492f7aab25258cb78ab597Mon Sep 17 00:00:00 2001
From: Wang Chen <[email protected]>
Date: Fri, 1 Aug 2008 16:59:59 +0800
Subject: [PATCH] netdevice: Use netdev_priv()
dev->priv is now point to private data again.
--- net/core/dev.c | 7 ++----- 1 files changed, 2 insertions(+), 5 deletions(-)
net/core/dev.c +2 -5
@@ -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 ;
Signature · 1 line
1.5.3.4
David Miller
maintainerFrom: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 17:50:15 +0800
Quoted 2 lines
That make me think, what the use of
netdev->priv?
We havenetdev_priv()and use it flexibly. Why don't killnetdev->priv?
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
David Miller said the following on 2008-8-1 18:08:
Quoted 11 lines
From: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 17:50:15 +0800Quoted 2 lines
That make me think, what the use of
netdev->priv?
We havenetdev_priv()and use it flexibly. Why don't killnetdev->priv?Way too many old drivers still reference
netdev->privdirectly.Once we convert all of them to
netdev_priv(), yes we can killnetdev->priv
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.
David Miller
maintainerFrom: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 18:16:32 +0800
Quoted 2 lines
Then next question comes.
We *have to* convert the drivers to usenetdev_priv(), right?
No, we don't.
Quoted 2 lines
Because,
netdev->priv==netdev_priv()maybe change again in future, just as before.
We will work to prevent that. I should not have allowed it to happen in the first place. :-)
David Miller said the following on 2008-8-1 18:24:
Quoted 6 lines
From: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 18:16:32 +0800Quoted 2 lines
Then next question comes.
We *have to* convert the drivers to usenetdev_priv(), right?
Quoted 8 lines
No, we don't.
Quoted 2 lines
Because,
netdev->priv==netdev_priv()maybe change again in future, just as before.We will work to prevent that. I should not have allowed it to happen in the first place. :-)
How about add a comment to netdev->priv
void *priv; /* pointer to private data, referent me by netdev_priv()*/
David Miller
maintainerFrom: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 18:35:24 +0800
Quoted 3 lines
How about add a comment to
netdev->privvoid *priv; /* pointer to private data, referent me by netdev_priv()*/
Sure, but I'd much rather apply a patch that converts all the direct references :-)
David Miller said the following on 2008-8-1 19:05:
Quoted 9 lines
From: Wang Chen <[email protected]>
Date: Fri, 01 Aug 2008 18:35:24 +0800Quoted 3 lines
How about add a comment to
netdev->privvoid *priv; /* pointer to private data, referent me by netdev_priv()*/
Sure, but I'd much rather apply a patch that converts all the direct references :-)
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.
David Miller
maintainerFrom: Wang Chen <[email protected]>
Date: Tue, 05 Aug 2008 17:55:27 +0800
Quoted 2 lines
init_one()of cxgb2 makes severalnet_deviceto share one private data. For this purpose, direct reference is necessary.
It should use netdev->ml_priv which is created for this purpose.
Every direct netdev->priv usage is a bug.
Quoted 9 lines · David Miller
From: Wang Chen <[email protected]>
Date: Tue, 05 Aug 2008 17:55:27 +0800Quoted 2 lines
init_one()of cxgb2 makes severalnet_deviceto share one private data. For this purpose, direct reference is necessary.It should use
netdev->ml_privwhich is created for this purpose.Every direct
netdev->privusage is a bug.
cxgb3 was fixed in this regard, cxgb2 needs the same treatment ...
cheers,
Divy
Divy Le Ray said the following on 2008-8-6 1:51:
Quoted 12 lines · David Miller
Quoted 8 lines
From: Wang Chen <[email protected]>
Date: Tue, 05 Aug 2008 17:55:27 +0800Quoted 2 lines
init_one()of cxgb2 makes severalnet_deviceto share one private data. For this purpose, direct reference is necessary.It should use
netdev->ml_privwhich is created for this purpose.Every direct
netdev->privusage is a bug.cxgb3 was fixed in this regard, cxgb2 needs the same treatment ...
Thanks Dave and Divy.
I am making the big patch for fixing all direct reference of netdev->priv.