On Fri, 27 Apr 2018 13:11:14 -0700 Florian Fainelli <f.faine...@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.faine...@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.