* [PATCH net-next] net: core: Assert the size of netdev_featres_t
@ 2018-04-27 20:11 Florian Fainelli
2018-04-30 2:52 ` David Miller
2018-04-30 16:42 ` Stephen Hemminger
0 siblings, 2 replies; 3+ messages in thread
From: Florian Fainelli @ 2018-04-27 20:11 UTC (permalink / raw)
To: netdev; +Cc: davem, edumazet, Florian Fainelli
We have about 53 netdev_features_t bits defined and counting, add a
build time check to catch when an u64 type will not be enough and we
will have to convert that to a bitmap. This is done in
register_netdevice() for convenience.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
include/linux/netdevice.h | 6 ++++++
net/core/dev.c | 1 +
2 files changed, 7 insertions(+)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 366c32891158..4326bc6b27d1 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -4121,6 +4121,12 @@ const char *netdev_drivername(const struct net_device *dev);
void linkwatch_run_queue(void);
+static inline void netdev_features_size_check(void)
+{
+ BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE <
+ NETDEV_FEATURE_COUNT);
+}
+
static inline netdev_features_t netdev_intersect_features(netdev_features_t f1,
netdev_features_t f2)
{
diff --git a/net/core/dev.c b/net/core/dev.c
index 0a2d46424069..23e6c1aa78c6 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -7881,6 +7881,7 @@ int register_netdevice(struct net_device *dev)
int ret;
struct net *net = dev_net(dev);
+ netdev_features_size_check();
BUG_ON(dev_boot_phase);
ASSERT_RTNL();
--
2.14.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] net: core: Assert the size of netdev_featres_t
2018-04-27 20:11 [PATCH net-next] net: core: Assert the size of netdev_featres_t Florian Fainelli
@ 2018-04-30 2:52 ` David Miller
2018-04-30 16:42 ` Stephen Hemminger
1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2018-04-30 2:52 UTC (permalink / raw)
To: f.fainelli; +Cc: netdev, edumazet
From: Florian Fainelli <f.fainelli@gmail.com>
Date: Fri, 27 Apr 2018 13:11:14 -0700
> We have about 53 netdev_features_t bits defined and counting, add a
> build time check to catch when an u64 type will not be enough and we
> will have to convert that to a bitmap. This is done in
> register_netdevice() for convenience.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Applied, but I don't know about putting that check as an inline
function in a header file included by every networking foo.c file.
It means that the inline function has to be parsed and (potentially)
optimized by the compiler for every foo.c file that either directly or
indirectly includes that header.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next] net: core: Assert the size of netdev_featres_t
2018-04-27 20:11 [PATCH net-next] net: core: Assert the size of netdev_featres_t Florian Fainelli
2018-04-30 2:52 ` David Miller
@ 2018-04-30 16:42 ` Stephen Hemminger
1 sibling, 0 replies; 3+ messages in thread
From: Stephen Hemminger @ 2018-04-30 16:42 UTC (permalink / raw)
To: Florian Fainelli; +Cc: netdev, davem, edumazet
On Fri, 27 Apr 2018 13:11:14 -0700
Florian Fainelli <f.fainelli@gmail.com> wrote:
> We have about 53 netdev_features_t bits defined and counting, add a
> build time check to catch when an u64 type will not be enough and we
> will have to convert that to a bitmap. This is done in
> register_netdevice() for convenience.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
> ---
> include/linux/netdevice.h | 6 ++++++
> net/core/dev.c | 1 +
> 2 files changed, 7 insertions(+)
>
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index 366c32891158..4326bc6b27d1 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -4121,6 +4121,12 @@ const char *netdev_drivername(const struct net_device *dev);
>
> void linkwatch_run_queue(void);
>
> +static inline void netdev_features_size_check(void)
> +{
> + BUILD_BUG_ON(sizeof(netdev_features_t) * BITS_PER_BYTE <
> + NETDEV_FEATURE_COUNT);
> +}
> +
> static inline netdev_features_t netdev_intersect_features(netdev_features_t f1,
> netdev_features_t f2)
> {
> diff --git a/net/core/dev.c b/net/core/dev.c
> index 0a2d46424069..23e6c1aa78c6 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -7881,6 +7881,7 @@ int register_netdevice(struct net_device *dev)
> int ret;
> struct net *net = dev_net(dev);
>
> + netdev_features_size_check();
> BUG_ON(dev_boot_phase);
> ASSERT_RTNL();
>
You don't have do this kind of inline function stuff to get the check.
Why not just put BUILD_BUG_ON directly in net/core/dev.c Could be anywhere.
Rather than adding inline in the header file.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-04-30 16:42 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-04-27 20:11 [PATCH net-next] net: core: Assert the size of netdev_featres_t Florian Fainelli
2018-04-30 2:52 ` David Miller
2018-04-30 16:42 ` Stephen Hemminger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).