[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <037ab78ebaae448386536f09218e7483@AcuMS.aculab.com>
Date: Tue, 9 Oct 2018 08:47:44 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Heiner Kallweit' <hkallweit1@...il.com>,
David Miller <davem@...emloft.net>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: RE: [PATCH net-next] net: core: change bool members of struct
net_device to bitfield members
From: Heiner Kallweit
> Sent: 08 October 2018 21:01
>
> bool is good as parameter type or function return type, but if used
> for struct members it consumes more memory than needed.
Actually it can generate extra code when used as a parameter or
return type - but DM doesn't seem to worry about that,
> Changing the bool members of struct net_device to bitfield members
> allows to decrease the memory footprint of this struct.
On archs where bool is 8 bit does this actually make any difference?
Especially since the structure is probably malloced.
> Signed-off-by: Heiner Kallweit <hkallweit1@...il.com>
> ---
> include/linux/netdevice.h | 24 +++++++++++++-----------
> 1 file changed, 13 insertions(+), 11 deletions(-)
>
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index 76603ee13..3d7b8df2e 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
...
> @@ -1879,7 +1882,6 @@ struct net_device {
> unsigned short dev_port;
> spinlock_t addr_list_lock;
> unsigned char name_assign_type;
> - bool uc_promisc;
You've a great big hole here.
I suspect there is one after dev_port as well.
> struct netdev_hw_addr_list uc;
> struct netdev_hw_addr_list mc;
> struct netdev_hw_addr_list dev_addrs;
> @@ -1986,14 +1988,11 @@ struct net_device {
> NETREG_DUMMY, /* dummy device for NAPI poll */
> } reg_state:8;
>
> - bool dismantle;
> -
> enum {
> RTNL_LINK_INITIALIZED,
> RTNL_LINK_INITIALIZING,
> } rtnl_link_state:16;
>
> - bool needs_free_netdev;
This one might remove some padding.
But it could be moved into one of the holes.
> void (*priv_destructor)(struct net_device *dev);
>
> #ifdef CONFIG_NETPOLL
> @@ -2046,7 +2045,10 @@ struct net_device {
> struct sfp_bus *sfp_bus;
> struct lock_class_key *qdisc_tx_busylock;
> struct lock_class_key *qdisc_running_key;
> - bool proto_down;
> + unsigned uc_promisc:1;
> + unsigned dismantle:1;
> + unsigned needs_free_netdev:1;
> + unsigned proto_down:1;
> unsigned wol_enabled:1;
> };
> #define to_net_dev(d) container_of(d, struct net_device, dev)
> --
> 2.19.1
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Powered by blists - more mailing lists