--- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -576,8 +576,8 @@ static inline bool napi_if_scheduled_mar { unsigned long val, new; - val = READ_ONCE(n->state); do { + val = READ_ONCE(n->state); if (val & NAPIF_STATE_DISABLE) return true; @@ -585,7 +585,7 @@ static inline bool napi_if_scheduled_mar return false; new = val | NAPIF_STATE_MISSED; - } while (!try_cmpxchg(&n->state, &val, new)); + } while (cmpxchg(&n->state, val, new) != val); return true; } @@ -1906,6 +1906,7 @@ enum netdev_stat_type { * @tipc_ptr: TIPC specific data * @atalk_ptr: AppleTalk link * @ip_ptr: IPv4 specific data + * @dn_ptr: DECnet specific data * @ip6_ptr: IPv6 specific data * @ax25_ptr: AX.25 specific data * @ieee80211_ptr: IEEE 802.11 specific data, assign before registering @@ -2202,8 +2203,6 @@ struct net_device { /* Protocol-specific pointers */ - struct in_device __rcu *ip_ptr; - struct inet6_dev __rcu *ip6_ptr; #if IS_ENABLED(CONFIG_VLAN_8021Q) struct vlan_info __rcu *vlan_info; #endif @@ -2216,15 +2215,16 @@ struct net_device { #if IS_ENABLED(CONFIG_ATALK) void *atalk_ptr; #endif + struct in_device __rcu *ip_ptr; +#if IS_ENABLED(CONFIG_DECNET) + struct dn_dev __rcu *dn_ptr; +#endif + struct inet6_dev __rcu *ip6_ptr; #if IS_ENABLED(CONFIG_AX25) void *ax25_ptr; #endif -#if IS_ENABLED(CONFIG_CFG80211) struct wireless_dev *ieee80211_ptr; -#endif -#if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN) struct wpan_dev *ieee802154_ptr; -#endif #if IS_ENABLED(CONFIG_MPLS_ROUTING) struct mpls_dev __rcu *mpls_ptr; #endif @@ -2655,6 +2655,8 @@ netif_napi_add_tx_weight(struct net_devi netif_napi_add_weight(dev, napi, poll, weight); } +#define netif_tx_napi_add netif_napi_add_tx_weight + /** * netif_napi_add_tx() - initialize a NAPI context to be used for Tx only * @dev: network device --- a/include/net/cfg802154.h +++ b/include/net/cfg802154.h @@ -482,7 +482,6 @@ struct wpan_dev { #define to_phy(_dev) container_of(_dev, struct wpan_phy, dev) -#if IS_ENABLED(CONFIG_IEEE802154) || IS_ENABLED(CONFIG_6LOWPAN) static inline int wpan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, const struct ieee802154_addr *daddr, @@ -493,7 +492,6 @@ wpan_dev_hard_header(struct sk_buff *skb return wpan_dev->header_ops->create(skb, dev, daddr, saddr, len); } -#endif struct wpan_phy * wpan_phy_new(const struct cfg802154_ops *ops, size_t priv_size); --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c @@ -309,11 +309,9 @@ static bool batadv_is_cfg80211_netdev(st if (!net_device) return false; -#if IS_ENABLED(CONFIG_CFG80211) /* cfg80211 drivers have to set ieee80211_ptr */ if (net_device->ieee80211_ptr) return true; -#endif return false; } --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c @@ -748,6 +748,7 @@ static const struct attribute_group nets .attrs = netstat_attrs, }; +#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211) static struct attribute *wireless_attrs[] = { NULL }; @@ -756,19 +757,7 @@ static const struct attribute_group wire .name = "wireless", .attrs = wireless_attrs, }; - -static bool wireless_group_needed(struct net_device *ndev) -{ -#if IS_ENABLED(CONFIG_CFG80211) - if (ndev->ieee80211_ptr) - return true; #endif -#if IS_ENABLED(CONFIG_WIRELESS_EXT) - if (ndev->wireless_handlers) - return true; -#endif - return false; -} #else /* CONFIG_SYSFS */ #define net_class_groups NULL @@ -2037,8 +2026,14 @@ int netdev_register_kobject(struct net_d *groups++ = &netstat_group; - if (wireless_group_needed(ndev)) +#if IS_ENABLED(CONFIG_WIRELESS_EXT) || IS_ENABLED(CONFIG_CFG80211) + if (ndev->ieee80211_ptr) + *groups++ = &wireless_group; +#if IS_ENABLED(CONFIG_WIRELESS_EXT) + else if (ndev->wireless_handlers) *groups++ = &wireless_group; +#endif +#endif #endif /* CONFIG_SYSFS */ error = device_add(dev);