diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 9c6f37589733..6e64ad75b847 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -1365,8 +1365,8 @@ static void bond_fix_features(struct net_device *dev,
 			      netdev_features_t *features)
 {
 	struct bonding *bond = netdev_priv(dev);
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 	struct list_head *iter;
-	netdev_features_t mask;
 	struct slave *slave;
 
 #if IS_ENABLED(CONFIG_TLS_DEVICE)
@@ -1403,16 +1403,16 @@ static void bond_compute_features(struct bonding *bond)
 {
 	unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE |
 					IFF_XMIT_DST_RELEASE_PERM;
-	netdev_features_t vlan_features;
-	netdev_features_t enc_features;
-	netdev_features_t vlan_mask;
-	netdev_features_t enc_mask;
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_features);
+	__DECLARE_NETDEV_FEATURE_MASK(enc_features);
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_mask);
+	__DECLARE_NETDEV_FEATURE_MASK(enc_mask);
 #ifdef CONFIG_XFRM_OFFLOAD
-	netdev_features_t xfrm_features;
-	netdev_features_t xfrm_mask;
+	__DECLARE_NETDEV_FEATURE_MASK(xfrm_features);
+	__DECLARE_NETDEV_FEATURE_MASK(xfrm_mask);
 #endif /* CONFIG_XFRM_OFFLOAD */
-	netdev_features_t mpls_features;
-	netdev_features_t mpls_mask;
+	__DECLARE_NETDEV_FEATURE_MASK(mpls_features);
+	__DECLARE_NETDEV_FEATURE_MASK(mpls_mask);
 	struct net_device *bond_dev = bond->dev;
 	struct list_head *iter;
 	struct slave *slave;
@@ -2304,10 +2304,10 @@ static int __bond_release_one(struct net_device *bond_dev,
 			      bool all, bool unregister)
 {
 	struct bonding *bond = netdev_priv(bond_dev);
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
 	struct slave *slave, *oldcurrent;
 	struct sockaddr_storage ss;
 	int old_flags = bond_dev->flags;
-	netdev_features_t old_features;
 
 	netdev_feature_copy(&old_features, bond_dev->features);
 	/* slave is not a slave or master is not master of this slave */
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 3bbf12bc25d8..3eda7401ce63 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -4026,7 +4026,7 @@ static u32 ena_calc_max_io_queue_num(struct pci_dev *pdev,
 static void ena_set_dev_offloads(struct ena_com_dev_get_features_ctx *feat,
 				 struct net_device *netdev)
 {
-	netdev_features_t dev_features;
+	__DECLARE_NETDEV_FEATURE_MASK(dev_features);
 
 	netdev_feature_zero(&dev_features);
 
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index 2c29fa3a0bee..401060a2e020 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -2186,7 +2186,7 @@ static void xgbe_fix_features(struct net_device *netdev,
 			      netdev_features_t *features)
 {
 	struct xgbe_prv_data *pdata = netdev_priv(netdev);
-	netdev_features_t vxlan_base;
+	__DECLARE_NETDEV_FEATURE_MASK(vxlan_base);
 
 	netdev_feature_zero(&vxlan_base);
 	netdev_feature_set_bits(NETIF_F_GSO_UDP_TUNNEL |
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe.h b/drivers/net/ethernet/amd/xgbe/xgbe.h
index 3305979a9f7c..7355056ed935 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe.h
+++ b/drivers/net/ethernet/amd/xgbe/xgbe.h
@@ -1170,7 +1170,7 @@ struct xgbe_prv_data {
 
 	/* Netdev related settings */
 	unsigned char mac_addr[ETH_ALEN];
-	netdev_features_t netdev_features;
+	__DECLARE_NETDEV_FEATURE_MASK(netdev_features);
 	struct napi_struct napi;
 	struct xgbe_mmc_stats mmc_stats;
 	struct xgbe_ext_stats ext_stats;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
index 685adb52d44a..a1047dfce73e 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_nic.h
@@ -38,7 +38,7 @@ struct aq_fc_info {
 
 struct aq_nic_cfg_s {
 	const struct aq_hw_caps_s *aq_hw_caps;
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	u32 rxds;		/* rx ring size, descriptors # */
 	u32 txds;		/* tx ring size, descriptors # */
 	u32 vecs;		/* allocated rx/tx vectors */
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index eea741e971ae..1c8803f86900 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -530,7 +530,7 @@ static void atl1c_fix_features(struct net_device *netdev,
 static int atl1c_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 
diff --git a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
index fe5339b0ca7f..d5ee30450f89 100644
--- a/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
+++ b/drivers/net/ethernet/atheros/atl1e/atl1e_main.c
@@ -399,7 +399,7 @@ static void atl1e_fix_features(struct net_device *netdev,
 static int atl1e_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
diff --git a/drivers/net/ethernet/atheros/atlx/atl2.c b/drivers/net/ethernet/atheros/atlx/atl2.c
index 2db693636588..943f2af0e3e6 100644
--- a/drivers/net/ethernet/atheros/atlx/atl2.c
+++ b/drivers/net/ethernet/atheros/atlx/atl2.c
@@ -388,7 +388,7 @@ static void atl2_fix_features(struct net_device *netdev,
 static int atl2_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
diff --git a/drivers/net/ethernet/atheros/atlx/atlx.c b/drivers/net/ethernet/atheros/atlx/atlx.c
index 6e91bf6f54d0..ea5b6d73e2f1 100644
--- a/drivers/net/ethernet/atheros/atlx/atlx.c
+++ b/drivers/net/ethernet/atheros/atlx/atlx.c
@@ -254,7 +254,7 @@ static void atlx_fix_features(struct net_device *netdev,
 static int atlx_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
diff --git a/drivers/net/ethernet/broadcom/bnx2.c b/drivers/net/ethernet/broadcom/bnx2.c
index 29f7b0b03d64..4be5a2fa0734 100644
--- a/drivers/net/ethernet/broadcom/bnx2.c
+++ b/drivers/net/ethernet/broadcom/bnx2.c
@@ -7750,7 +7750,7 @@ static int
 bnx2_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct bnx2 *bp = netdev_priv(dev);
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	/* TSO with VLAN tag won't work with current firmware */
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_TX_BIT, features)) {
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
index b238312fd0c7..57709a295867 100644
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
@@ -4906,7 +4906,7 @@ void bnx2x_fix_features(struct net_device *dev, netdev_features_t *features)
 	struct bnx2x *bp = netdev_priv(dev);
 
 	if (pci_num_vf(bp->pdev)) {
-		netdev_features_t changed;
+		__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 		netdev_feature_xor(&changed, dev->features, *features);
 
@@ -4944,8 +4944,8 @@ void bnx2x_fix_features(struct net_device *dev, netdev_features_t *features)
 
 int bnx2x_set_features(struct net_device *dev, netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changes);
 	struct bnx2x *bp = netdev_priv(dev);
-	netdev_features_t changes;
 	bool bnx2x_reload = false;
 	int rc;
 
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 24d6f883c243..3d18839615a2 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -10905,7 +10905,8 @@ static bool bnxt_rfs_capable(struct bnxt *bp)
 static void bnxt_fix_features(struct net_device *dev,
 			      netdev_features_t *features)
 {
-	netdev_features_t vlan_features, tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_features);
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	struct bnxt *bp = netdev_priv(dev);
 
 	if (netdev_feature_test_bit(NETIF_F_NTUPLE_BIT, *features) &&
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 0406951a3a3e..430082a11f9c 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -7860,8 +7860,8 @@ static int tg3_tso_bug(struct tg3 *tp, struct tg3_napi *tnapi,
 		       struct netdev_queue *txq, struct sk_buff *skb)
 {
 	u32 frag_cnt_est = skb_shinfo(skb)->gso_segs * 3;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	struct sk_buff *segs, *seg, *next;
-	netdev_features_t tmp;
 
 	/* Estimate the number of fragments in the worst case */
 	if (unlikely(tg3_tx_avail(tnapi) <= frag_cnt_est)) {
@@ -8316,7 +8316,7 @@ static void tg3_fix_features(struct net_device *dev,
 
 static int tg3_set_features(struct net_device *dev, netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_LOOPBACK_BIT, changed) &&
@@ -17557,13 +17557,13 @@ static void tg3_init_coal(struct tg3 *tp)
 static int tg3_init_one(struct pci_dev *pdev,
 				  const struct pci_device_id *ent)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct net_device *dev;
 	struct tg3 *tp;
 	int i, err;
 	u32 sndmbx, rcvmbx, intmbx;
 	char str[40];
 	u64 dma_mask, persist_dma_mask;
-	netdev_features_t features;
 
 	netdev_feature_zero(&features);
 
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c
index 2e51cf6fb1c3..ed630cea4906 100644
--- a/drivers/net/ethernet/brocade/bna/bnad.c
+++ b/drivers/net/ethernet/brocade/bna/bnad.c
@@ -3351,8 +3351,8 @@ bnad_vlan_rx_kill_vid(struct net_device *netdev, __be16 proto, u16 vid)
 
 static int bnad_set_features(struct net_device *dev, netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct bnad *bnad = netdev_priv(dev);
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, features, dev->features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed) &&
diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c
index 53a44ba6444c..7ffaa706536e 100644
--- a/drivers/net/ethernet/cadence/macb_main.c
+++ b/drivers/net/ethernet/cadence/macb_main.c
@@ -3634,8 +3634,8 @@ static inline void macb_set_rxflow_feature(struct macb *bp,
 static int macb_set_features(struct net_device *netdev,
 			     netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct macb *bp = netdev_priv(netdev);
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
@@ -3656,9 +3656,9 @@ static int macb_set_features(struct net_device *netdev,
 
 static void macb_restore_features(struct macb *bp)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct net_device *netdev = bp->dev;
 	struct ethtool_rx_fs_item *item;
-	netdev_features_t features;
 
 	netdev_feature_copy(&features, netdev->features);
 
diff --git a/drivers/net/ethernet/calxeda/xgmac.c b/drivers/net/ethernet/calxeda/xgmac.c
index 10792529ef56..3679fed9beaf 100644
--- a/drivers/net/ethernet/calxeda/xgmac.c
+++ b/drivers/net/ethernet/calxeda/xgmac.c
@@ -1490,8 +1490,8 @@ static int xgmac_set_features(struct net_device *dev, netdev_features_t features
 {
 	u32 ctrl;
 	struct xgmac_priv *priv = netdev_priv(dev);
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	void __iomem *ioaddr = priv->base;
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, dev->features, features);
 
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
index 1653c058e4b9..170c3b0aaaee 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
@@ -1854,8 +1854,8 @@ static void liquidio_fix_features(struct net_device *netdev,
 static int liquidio_set_features(struct net_device *netdev,
 				 netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct lio *lio = netdev_priv(netdev);
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, netdev->features, features);
 	if (!netdev_feature_test_bit(NETIF_F_LRO_BIT, changed))
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
index de451d94e1a7..be88c1b8a0a2 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
@@ -1788,7 +1788,7 @@ static int nicvf_set_features(struct net_device *netdev,
 			      netdev_features_t features)
 {
 	struct nicvf *nic = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
index 193c75f5d682..6d4fbb1bd303 100644
--- a/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
+++ b/drivers/net/ethernet/chelsio/cxgb/cxgb2.c
@@ -875,7 +875,7 @@ static void t1_fix_features(struct net_device *dev, netdev_features_t *features)
 static int t1_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct adapter *adapter = dev->ml_priv;
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
index acd2299c1657..806d4a4d4ffe 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c
@@ -2615,7 +2615,7 @@ static void cxgb_fix_features(struct net_device *dev,
 
 static int cxgb_set_features(struct net_device *dev, netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
@@ -3220,9 +3220,9 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
 {
 	int i, err, pci_using_dac = 0;
 	resource_size_t mmio_start, mmio_len;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	const struct adapter_info *ai;
 	struct adapter *adapter = NULL;
-	netdev_features_t tmp;
 	struct port_info *pi;
 
 	if (!cxgb3_wq) {
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index 26c550ae6dd0..260695dd4f68 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -1274,7 +1274,7 @@ int cxgb4_set_rspq_intr_params(struct sge_rspq *q,
 static int cxgb_set_features(struct net_device *dev, netdev_features_t features)
 {
 	const struct port_info *pi = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int err;
 
 	netdev_feature_xor(&changed, dev->features, features);
diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
index 772b513b6ba1..5b2730de38c8 100644
--- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c
@@ -1191,7 +1191,7 @@ static int cxgb4vf_set_features(struct net_device *dev,
 	netdev_features_t features)
 {
 	struct port_info *pi = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 	if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT, changed))
diff --git a/drivers/net/ethernet/davicom/dm9000.c b/drivers/net/ethernet/davicom/dm9000.c
index cf349566d9e0..8e4ca68c1986 100644
--- a/drivers/net/ethernet/davicom/dm9000.c
+++ b/drivers/net/ethernet/davicom/dm9000.c
@@ -586,7 +586,7 @@ static int dm9000_set_features(struct net_device *dev,
 	netdev_features_t features)
 {
 	struct board_info *dm = to_dm9000_board(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	unsigned long flags;
 
 	netdev_feature_xor(&changed, dev->features, features);
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c
index 0ca939eb2921..8552bbaa8256 100644
--- a/drivers/net/ethernet/faraday/ftgmac100.c
+++ b/drivers/net/ethernet/faraday/ftgmac100.c
@@ -1582,7 +1582,7 @@ static int ftgmac100_set_features(struct net_device *netdev,
 				  netdev_features_t features)
 {
 	struct ftgmac100 *priv = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	if (!netif_running(netdev))
 		return 0;
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index d9ce2925e0b9..796a311c1a0a 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -2142,7 +2142,7 @@ static int dpaa2_eth_set_features(struct net_device *net_dev,
 				  netdev_features_t features)
 {
 	struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	bool enable;
 	int err;
 
diff --git a/drivers/net/ethernet/freescale/enetc/enetc.c b/drivers/net/ethernet/freescale/enetc/enetc.c
index 0d92c45aa5df..719da3a38e36 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc.c
@@ -2354,7 +2354,7 @@ static void enetc_enable_txvlan(struct net_device *ndev, bool en)
 int enetc_set_features(struct net_device *ndev,
 		       netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int err = 0;
 
 	netdev_feature_xor(&changed, ndev->features, features);
diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
index 7dad33460673..e4a3b3d8d98f 100644
--- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
+++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
@@ -705,7 +705,7 @@ static int enetc_pf_set_features(struct net_device *ndev,
 				 netdev_features_t features)
 {
 	struct enetc_ndev_priv *priv = netdev_priv(ndev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, ndev->features, features);
 
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index e782bf61463d..987267f897b9 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -3373,7 +3373,7 @@ static inline void fec_enet_set_netdev_features(struct net_device *netdev,
 	netdev_features_t features)
 {
 	struct fec_enet_private *fep = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 	netdev_feature_copy(&netdev->features, features);
@@ -3391,7 +3391,7 @@ static int fec_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
 	struct fec_enet_private *fep = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/freescale/gianfar_ethtool.c b/drivers/net/ethernet/freescale/gianfar_ethtool.c
index 38e77a01ddd1..f90708d51ecf 100644
--- a/drivers/net/ethernet/freescale/gianfar_ethtool.c
+++ b/drivers/net/ethernet/freescale/gianfar_ethtool.c
@@ -504,7 +504,7 @@ static int gfar_spauseparam(struct net_device *dev,
 int gfar_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct gfar_private *priv = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int err = 0;
 
 	netdev_feature_xor(&changed, dev->features, features);
diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ethernet/google/gve/gve_main.c
index 2a5620bc35e5..1e964410d4fd 100644
--- a/drivers/net/ethernet/google/gve/gve_main.c
+++ b/drivers/net/ethernet/google/gve/gve_main.c
@@ -1112,8 +1112,8 @@ static void gve_tx_timeout(struct net_device *dev, unsigned int txqueue)
 static int gve_set_features(struct net_device *netdev,
 			    netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(orig_features);
 	struct gve_priv *priv = netdev_priv(netdev);
-	netdev_features_t orig_features;
 	int err;
 
 	netdev_feature_copy(&orig_features, netdev->features);
diff --git a/drivers/net/ethernet/google/gve/gve_rx.c b/drivers/net/ethernet/google/gve/gve_rx.c
index d76e89afb329..f91387efc7ef 100644
--- a/drivers/net/ethernet/google/gve/gve_rx.c
+++ b/drivers/net/ethernet/google/gve/gve_rx.c
@@ -587,8 +587,8 @@ bool gve_clean_rx_done(struct gve_rx_ring *rx, int budget,
 
 bool gve_rx_poll(struct gve_notify_block *block, int budget)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(feat);
 	struct gve_rx_ring *rx = block->rx;
-	netdev_features_t feat;
 	bool repoll = false;
 
 	netdev_feature_copy(&feat, block->napi.dev->features);
diff --git a/drivers/net/ethernet/google/gve/gve_rx_dqo.c b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
index 8e55d11daceb..90ac50df604d 100644
--- a/drivers/net/ethernet/google/gve/gve_rx_dqo.c
+++ b/drivers/net/ethernet/google/gve/gve_rx_dqo.c
@@ -663,7 +663,7 @@ static int gve_rx_complete_skb(struct gve_rx_ring *rx, struct napi_struct *napi,
 int gve_rx_poll_dqo(struct gve_notify_block *block, int budget)
 {
 	struct napi_struct *napi = &block->napi;
-	netdev_features_t feat;
+	__DECLARE_NETDEV_FEATURE_MASK(feat);
 
 	struct gve_rx_ring *rx = block->rx;
 	struct gve_rx_compl_queue_dqo *complq = &rx->dqo.complq;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
index 180019026650..ad522b163242 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_enet.c
@@ -2318,7 +2318,7 @@ static int hns3_nic_set_features(struct net_device *netdev,
 {
 	struct hns3_nic_priv *priv = netdev_priv(netdev);
 	struct hnae3_handle *h = priv->ae_handle;
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	bool enable;
 	int ret;
 
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_main.c b/drivers/net/ethernet/huawei/hinic/hinic_main.c
index c33bb3dd5614..fc0765db66d1 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_main.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_main.c
@@ -1079,9 +1079,9 @@ static int set_features(struct hinic_dev *nic_dev,
 			netdev_features_t pre_features,
 			netdev_features_t features, bool force_change)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(failed_features);
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	u32 csum_en = HINIC_RX_CSUM_OFFLOAD_EN;
-	netdev_features_t failed_features;
-	netdev_features_t changed;
 	int ret = 0;
 	int err = 0;
 
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 4dfabea91db6..4008951a24fd 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -4510,8 +4510,8 @@ static void send_control_ip_offload(struct ibmvnic_adapter *adapter)
 {
 	struct ibmvnic_control_ip_offload_buffer *ctrl_buf = &adapter->ip_offload_ctrl;
 	struct ibmvnic_query_ip_offload_buffer *buf = &adapter->ip_offload_buf;
+	__DECLARE_NETDEV_FEATURE_MASK(old_hw_features);
 	struct device *dev = &adapter->vdev->dev;
-	netdev_features_t old_hw_features;
 	union ibmvnic_crq crq;
 
 	adapter->ip_offload_ctrl_tok =
@@ -4577,7 +4577,7 @@ static void send_control_ip_offload(struct ibmvnic_adapter *adapter)
 				  adapter->netdev->hw_features);
 	} else if (!netdev_feature_equal(old_hw_features,
 					 adapter->netdev->hw_features)) {
-		netdev_features_t tmp;
+		__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 		netdev_feature_zero(&tmp);
 
diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c
index abec49f6b541..4208d8fd3b2e 100644
--- a/drivers/net/ethernet/intel/e100.c
+++ b/drivers/net/ethernet/intel/e100.c
@@ -2794,8 +2794,8 @@ static int e100_close(struct net_device *netdev)
 static int e100_set_features(struct net_device *netdev,
 			     netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct nic *nic = netdev_priv(netdev);
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index 34536befc4ea..218b8a944645 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -804,7 +804,7 @@ static int e1000_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
 	struct e1000_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index a299f2789164..4e36331c76d9 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -7328,7 +7328,7 @@ static int e1000_set_features(struct net_device *netdev,
 			      netdev_features_t features)
 {
 	struct e1000_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
index e3747f310c2e..dbefa249e560 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_netdev.c
@@ -1540,7 +1540,7 @@ static const struct net_device_ops fm10k_netdev_ops = {
 
 struct net_device *fm10k_alloc_netdev(const struct fm10k_info *info)
 {
-	netdev_features_t hw_features;
+	__DECLARE_NETDEV_FEATURE_MASK(hw_features);
 	struct fm10k_intfc *interface;
 	struct net_device *dev;
 
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 5dddd63bde74..d4692a9f2a55 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -13310,6 +13310,8 @@ static const struct net_device_ops i40e_netdev_ops = {
  **/
 static int i40e_config_netdev(struct i40e_vsi *vsi)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(hw_enc_features);
+	__DECLARE_NETDEV_FEATURE_MASK(hw_features);
 	struct i40e_pf *pf = vsi->back;
 	struct i40e_hw *hw = &pf->hw;
 	struct i40e_netdev_priv *np;
@@ -13317,8 +13319,6 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
 	u8 broadcast[ETH_ALEN];
 	u8 mac_addr[ETH_ALEN];
 	int etherdev_size;
-	netdev_features_t hw_enc_features;
-	netdev_features_t hw_features;
 
 	etherdev_size = sizeof(struct i40e_netdev_priv);
 	netdev = alloc_etherdev_mq(etherdev_size, vsi->alloc_queue_pairs);
diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 9f6b6cabdca1..0897ee2740ee 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -3354,7 +3354,7 @@ static int iavf_set_features(struct net_device *netdev,
 			     netdev_features_t features)
 {
 	struct iavf_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 	/* Don't allow changing VLAN_RX flag when adapter is not capable
@@ -3505,10 +3505,10 @@ int iavf_process_config(struct iavf_adapter *adapter)
 {
 	struct virtchnl_vf_resource *vfres = adapter->vf_res;
 	int i, num_req_queues = adapter->num_req_queues;
+	__DECLARE_NETDEV_FEATURE_MASK(hw_enc_features);
 	struct net_device *netdev = adapter->netdev;
+	__DECLARE_NETDEV_FEATURE_MASK(hw_features);
 	struct iavf_vsi *vsi = &adapter->vsi;
-	netdev_features_t hw_enc_features;
-	netdev_features_t hw_features;
 
 	/* got VF config message back from PF, now we can parse it */
 	for (i = 0; i < vfres->num_vsis; i++) {
diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 682b14bebdee..bb76ea65dbc1 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -3057,11 +3057,11 @@ static void ice_set_ops(struct net_device *netdev)
  */
 static void ice_set_netdev_features(struct net_device *netdev)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(csumo_features);
+	__DECLARE_NETDEV_FEATURE_MASK(vlano_features);
+	__DECLARE_NETDEV_FEATURE_MASK(dflt_features);
+	__DECLARE_NETDEV_FEATURE_MASK(tso_features);
 	struct ice_pf *pf = ice_netdev_to_pf(netdev);
-	netdev_features_t csumo_features;
-	netdev_features_t vlano_features;
-	netdev_features_t dflt_features;
-	netdev_features_t tso_features;
 
 	if (ice_is_safe_mode(pf)) {
 		/* safe mode */
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 1f764d4fbd14..e4582a4ec30e 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2450,7 +2450,7 @@ static int igb_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
 	struct igb_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index f8b4d5cfa07b..d5d79ed550fe 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -4938,7 +4938,7 @@ static int igc_set_features(struct net_device *netdev,
 			    netdev_features_t features)
 {
 	struct igc_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, netdev->features, features);
 
diff --git a/drivers/net/ethernet/intel/ixgb/ixgb_main.c b/drivers/net/ethernet/intel/ixgb/ixgb_main.c
index c56ac31de3e1..4357e43666c5 100644
--- a/drivers/net/ethernet/intel/ixgb/ixgb_main.c
+++ b/drivers/net/ethernet/intel/ixgb/ixgb_main.c
@@ -309,7 +309,7 @@ static int
 ixgb_set_features(struct net_device *netdev, netdev_features_t features)
 {
 	struct ixgb_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 742947fad23c..fc31773b2631 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -4901,7 +4901,7 @@ void ixgbe_set_rx_mode(struct net_device *netdev)
 	struct ixgbe_adapter *adapter = netdev_priv(netdev);
 	struct ixgbe_hw *hw = &adapter->hw;
 	u32 fctrl, vmolr = IXGBE_VMOLR_BAM | IXGBE_VMOLR_AUPE;
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	int count;
 
 	netdev_feature_copy(&features, netdev->features);
@@ -9731,7 +9731,7 @@ static int ixgbe_set_features(struct net_device *netdev,
 			      netdev_features_t features)
 {
 	struct ixgbe_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	bool need_reset = false;
 
 	netdev_feature_xor(&changed, netdev->features, features);
diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
index a222a6923dcb..894b90a6ca49 100644
--- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
+++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
@@ -1265,7 +1265,7 @@ static int mvpp2_swf_bm_pool_init(struct mvpp2_port *port)
 static void mvpp2_set_hw_csum(struct mvpp2_port *port,
 			      enum mvpp2_bm_pool_log_num new_long_pool)
 {
-	netdev_features_t csums;
+	__DECLARE_NETDEV_FEATURE_MASK(csums);
 
 	netdev_feature_zero(&csums);
 	netdev_feature_set_bits(NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM, &csums);
@@ -5289,7 +5289,7 @@ static int mvpp2_set_features(struct net_device *dev,
 			      netdev_features_t features)
 {
 	struct mvpp2_port *port = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 
@@ -6749,7 +6749,7 @@ static int mvpp2_port_probe(struct platform_device *pdev,
 	struct mvpp2_port *port;
 	struct mvpp2_port_pcpu *port_pcpu;
 	struct device_node *port_node = to_of_node(port_fwnode);
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct net_device *dev;
 	struct phylink *phylink;
 	char *mac_from = "";
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
index c3d187a57d35..77806bedb8dd 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
@@ -1842,7 +1842,7 @@ static int otx2_set_features(struct net_device *netdev,
 	bool ntuple = netdev_feature_test_bit(NETIF_F_NTUPLE_BIT, features);
 	bool tc = netdev_feature_test_bit(NETIF_F_HW_TC_BIT, features);
 	struct otx2_nic *pf = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
index 9b500cc46e9f..5d493afc2924 100644
--- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
+++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c
@@ -475,7 +475,7 @@ static int otx2vf_set_features(struct net_device *netdev,
 {
 	bool ntuple_enabled = netdev_feature_test_bit(NETIF_F_NTUPLE_BIT, features);
 	struct otx2_nic *vf = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 	if (netdev_feature_test_bit(NETIF_F_NTUPLE_BIT, changed)) {
diff --git a/drivers/net/ethernet/marvell/sky2.c b/drivers/net/ethernet/marvell/sky2.c
index eee84e6b97f6..e5132f55e830 100644
--- a/drivers/net/ethernet/marvell/sky2.c
+++ b/drivers/net/ethernet/marvell/sky2.c
@@ -4391,7 +4391,7 @@ static void sky2_fix_features(struct net_device *dev,
 static int sky2_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct sky2_port *sky2 = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
index 4370b7241522..84a14756a171 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c
@@ -3333,7 +3333,7 @@ static int mlx5e_handle_feature(struct net_device *netdev,
 				u32 feature_bit,
 				mlx5e_feature_handler feature_handler)
 {
-	netdev_features_t changes;
+	__DECLARE_NETDEV_FEATURE_MASK(changes);
 	bool enable;
 	int err;
 
@@ -3356,7 +3356,7 @@ static int mlx5e_handle_feature(struct net_device *netdev,
 
 int mlx5e_set_features(struct net_device *netdev, netdev_features_t features)
 {
-	netdev_features_t oper_features;
+	__DECLARE_NETDEV_FEATURE_MASK(oper_features);
 	int err = 0;
 
 	netdev_feature_copy(&oper_features, netdev->features);
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index d5a8bc944947..620346d392b1 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -1109,7 +1109,7 @@ static int mlxsw_sp_handle_feature(struct net_device *dev,
 				   mlxsw_sp_feature_handler feature_handler)
 {
 	bool enable = netdev_feature_test_bit(feature_bit, wanted_features);
-	netdev_features_t changes;
+	__DECLARE_NETDEV_FEATURE_MASK(changes);
 	int err;
 
 	netdev_feature_xor(&changes, wanted_features, dev->features);
@@ -1133,7 +1133,7 @@ static int mlxsw_sp_handle_feature(struct net_device *dev,
 static int mlxsw_sp_set_features(struct net_device *dev,
 				 netdev_features_t features)
 {
-	netdev_features_t oper_features;
+	__DECLARE_NETDEV_FEATURE_MASK(oper_features);
 	int err = 0;
 
 	netdev_feature_copy(&oper_features, dev->features);
diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c
index 844525fc558c..224dcf2d2a76 100644
--- a/drivers/net/ethernet/mscc/ocelot_net.c
+++ b/drivers/net/ethernet/mscc/ocelot_net.c
@@ -726,8 +726,8 @@ static int ocelot_set_features(struct net_device *dev,
 {
 	struct ocelot_port_private *priv = netdev_priv(dev);
 	struct ocelot *ocelot = priv->port.ocelot;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int port = priv->chip_port;
-	netdev_features_t changed;
 
 	netdev_feature_xor(&changed, dev->features, features);
 
diff --git a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
index 542cb42f7ea5..b0a6b1211534 100644
--- a/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
+++ b/drivers/net/ethernet/myricom/myri10ge/myri10ge.c
@@ -2889,7 +2889,7 @@ static netdev_tx_t myri10ge_sw_tso(struct sk_buff *skb,
 	struct sk_buff *segs, *curr, *next;
 	struct myri10ge_priv *mgp = netdev_priv(dev);
 	struct myri10ge_slice_state *ss;
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	netdev_tx_t status;
 
 	netdev_feature_copy(&tmp, dev->features);
diff --git a/drivers/net/ethernet/neterion/s2io.c b/drivers/net/ethernet/neterion/s2io.c
index 0e3f500ab5bb..79165cf28549 100644
--- a/drivers/net/ethernet/neterion/s2io.c
+++ b/drivers/net/ethernet/neterion/s2io.c
@@ -6567,7 +6567,7 @@ static void s2io_ethtool_get_strings(struct net_device *dev,
 static int s2io_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct s2io_nic *sp = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, dev->features);
 
diff --git a/drivers/net/ethernet/neterion/vxge/vxge-main.c b/drivers/net/ethernet/neterion/vxge/vxge-main.c
index 12d0508dbd7b..98184a71aad5 100644
--- a/drivers/net/ethernet/neterion/vxge/vxge-main.c
+++ b/drivers/net/ethernet/neterion/vxge/vxge-main.c
@@ -2643,7 +2643,7 @@ static void vxge_poll_vp_lockup(struct timer_list *t)
 static void vxge_fix_features(struct net_device *dev,
 			      netdev_features_t *features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, *features);
 
@@ -2659,7 +2659,7 @@ static void vxge_fix_features(struct net_device *dev,
 static int vxge_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct vxgedev *vdev = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 63aa017804a5..38d3066aaf7c 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -3519,7 +3519,7 @@ static int nfp_net_set_features(struct net_device *netdev,
 				netdev_features_t features)
 {
 	struct nfp_net *nn = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	u32 new_ctrl;
 	int err;
 
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
index a9afa3bf8c56..42e211017384 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_repr.c
@@ -235,9 +235,9 @@ static int nfp_repr_open(struct net_device *netdev)
 static void nfp_repr_fix_features(struct net_device *netdev,
 				  netdev_features_t *features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(lower_features);
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
 	struct nfp_repr *repr = netdev_priv(netdev);
-	netdev_features_t lower_features;
-	netdev_features_t old_features;
 	struct net_device *lower_dev;
 
 	lower_dev = repr->dst->u.port_info.lower_dev;
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c
index 48b253e54888..0c408d420d79 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -4953,9 +4953,9 @@ static void nv_vlan_mode(struct net_device *dev, netdev_features_t features)
 
 static int nv_set_features(struct net_device *dev, netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct fe_priv *np = netdev_priv(dev);
 	u8 __iomem *base = get_hwbase(dev);
-	netdev_features_t changed;
 	int retval;
 
 	netdev_feature_xor(&changed, dev->features, features);
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
index 49caca2ae753..7e25af846448 100644
--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
@@ -2210,7 +2210,7 @@ static int pch_gbe_set_features(struct net_device *netdev,
 	netdev_features_t features)
 {
 	struct pch_gbe_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/pensando/ionic/ionic_lif.c b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
index 0d1604e85ed4..62178c7b9cc1 100644
--- a/drivers/net/ethernet/pensando/ionic/ionic_lif.c
+++ b/drivers/net/ethernet/pensando/ionic/ionic_lif.c
@@ -1604,7 +1604,7 @@ static int ionic_set_nic_features(struct ionic_lif *lif,
 static int ionic_init_nic_features(struct ionic_lif *lif)
 {
 	struct net_device *netdev = lif->netdev;
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	int err;
 
 	/* set up what we expect to support by default */
diff --git a/drivers/net/ethernet/qlogic/qede/qede.h b/drivers/net/ethernet/qlogic/qede/qede.h
index ada71452d454..dc5041c289eb 100644
--- a/drivers/net/ethernet/qlogic/qede/qede.h
+++ b/drivers/net/ethernet/qlogic/qede/qede.h
@@ -515,7 +515,7 @@ int qede_get_arfs_filter_count(struct qede_dev *edev);
 struct qede_reload_args {
 	void (*func)(struct qede_dev *edev, struct qede_reload_args *args);
 	union {
-		netdev_features_t features;
+		__DECLARE_NETDEV_FEATURE_MASK(features);
 		struct bpf_prog *new_prog;
 		u16 mtu;
 	} u;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_filter.c b/drivers/net/ethernet/qlogic/qede/qede_filter.c
index 9fe5762b4eb6..684565231c25 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_filter.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_filter.c
@@ -922,7 +922,7 @@ void qede_fix_features(struct net_device *dev, netdev_features_t *features)
 int qede_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct qede_dev *edev = netdev_priv(dev);
-	netdev_features_t changes;
+	__DECLARE_NETDEV_FEATURE_MASK(changes);
 	bool need_reload = false;
 
 	netdev_feature_xor(&changes, features, dev->features);
diff --git a/drivers/net/ethernet/qlogic/qede/qede_main.c b/drivers/net/ethernet/qlogic/qede/qede_main.c
index e7c3139af274..e0a38e3e4ec8 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_main.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_main.c
@@ -761,10 +761,10 @@ static struct qede_dev *qede_alloc_etherdev(struct qed_dev *cdev,
 
 static void qede_init_ndev(struct qede_dev *edev)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(hw_features);
 	struct net_device *ndev = edev->ndev;
 	struct pci_dev *pdev = edev->pdev;
 	bool udp_tunnel_enable = false;
-	netdev_features_t hw_features;
 
 	pci_set_drvdata(pdev, ndev);
 
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
index 625fcf3ecb12..ee055e9e8eda 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
@@ -1060,7 +1060,7 @@ static void qlcnic_process_flags(struct qlcnic_adapter *adapter,
 void qlcnic_fix_features(struct net_device *netdev, netdev_features_t *features)
 {
 	struct qlcnic_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	if (qlcnic_82xx_check(adapter) &&
 	    (adapter->flags & QLCNIC_ESWITCH_ENABLED)) {
@@ -1087,7 +1087,7 @@ void qlcnic_fix_features(struct net_device *netdev, netdev_features_t *features)
 int qlcnic_set_features(struct net_device *netdev, netdev_features_t features)
 {
 	struct qlcnic_adapter *adapter = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int hw_lro;
 
 	netdev_feature_xor(&changed, netdev->features, features);
diff --git a/drivers/net/ethernet/qualcomm/emac/emac.c b/drivers/net/ethernet/qualcomm/emac/emac.c
index 71c403cb5e6c..53a83c12cb53 100644
--- a/drivers/net/ethernet/qualcomm/emac/emac.c
+++ b/drivers/net/ethernet/qualcomm/emac/emac.c
@@ -176,7 +176,7 @@ static int emac_set_features(struct net_device *netdev,
 			     netdev_features_t features)
 {
 	struct emac_adapter *adpt = netdev_priv(netdev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, features, netdev->features);
 
diff --git a/drivers/net/ethernet/realtek/8139too.c b/drivers/net/ethernet/realtek/8139too.c
index 59b5a95bcaa4..bb8ed95c70ad 100644
--- a/drivers/net/ethernet/realtek/8139too.c
+++ b/drivers/net/ethernet/realtek/8139too.c
@@ -900,7 +900,7 @@ static struct net_device *rtl8139_init_board(struct pci_dev *pdev)
 static int rtl8139_set_features(struct net_device *dev, netdev_features_t features)
 {
 	struct rtl8139_private *tp = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	unsigned long flags;
 	void __iomem *ioaddr = tp->mmio_addr;
 
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 6f3574494a8e..e4fcda147396 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -1923,7 +1923,7 @@ static void ravb_set_rx_csum(struct net_device *ndev, bool enable)
 static int ravb_set_features_rx_csum(struct net_device *ndev,
 				     netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, ndev->features, features);
 
diff --git a/drivers/net/ethernet/renesas/sh_eth.c b/drivers/net/ethernet/renesas/sh_eth.c
index a3cfc6283a86..a8fc9e42feca 100644
--- a/drivers/net/ethernet/renesas/sh_eth.c
+++ b/drivers/net/ethernet/renesas/sh_eth.c
@@ -2934,7 +2934,7 @@ static int sh_eth_set_features(struct net_device *ndev,
 			       netdev_features_t features)
 {
 	struct sh_eth_private *mdp = netdev_priv(ndev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, ndev->features, features);
 
diff --git a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
index b70ce380fa61..b8b6e3164ad5 100644
--- a/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
+++ b/drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c
@@ -1775,7 +1775,7 @@ static int sxgbe_set_features(struct net_device *dev,
 			      netdev_features_t features)
 {
 	struct sxgbe_priv_data *priv = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, dev->features, features);
 
diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c
index 981c01acef51..426a56a6f48e 100644
--- a/drivers/net/ethernet/sfc/ef10.c
+++ b/drivers/net/ethernet/sfc/ef10.c
@@ -1305,7 +1305,7 @@ static void efx_ef10_fini_nic(struct efx_nic *efx)
 static int efx_ef10_init_nic(struct efx_nic *efx)
 {
 	struct efx_ef10_nic_data *nic_data = efx->nic_data;
-	netdev_features_t hw_enc_features;
+	__DECLARE_NETDEV_FEATURE_MASK(hw_enc_features);
 	int rc;
 
 	netdev_feature_zero(&hw_enc_features);
@@ -1358,7 +1358,7 @@ static int efx_ef10_init_nic(struct efx_nic *efx)
 					&hw_enc_features);
 	/* add encapsulated TSO features */
 	if (efx_has_cap(efx, TX_TSO_V2_ENCAP)) {
-		netdev_features_t encap_tso_features;
+		__DECLARE_NETDEV_FEATURE_MASK(encap_tso_features);
 
 		netdev_feature_zero(&encap_tso_features);
 		netdev_feature_set_bits(NETIF_F_GSO_UDP_TUNNEL |
diff --git a/drivers/net/ethernet/sfc/ef100_nic.c b/drivers/net/ethernet/sfc/ef100_nic.c
index 5127e03050d1..e16cf6bc6ba1 100644
--- a/drivers/net/ethernet/sfc/ef100_nic.c
+++ b/drivers/net/ethernet/sfc/ef100_nic.c
@@ -184,7 +184,7 @@ static int efx_ef100_init_datapath_caps(struct efx_nic *efx)
 
 	if (efx_ef100_has_cap(nic_data->datapath_caps2, TX_TSO_V3)) {
 		struct net_device *net_dev = efx->net_dev;
-		netdev_features_t tso;
+		__DECLARE_NETDEV_FEATURE_MASK(tso);
 
 		netdev_feature_zero(&tso);
 		netdev_feature_set_bits(NETIF_F_TSO | NETIF_F_TSO6 |
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c
index 30cbfdbc100e..7c909e8bfdde 100644
--- a/drivers/net/ethernet/sfc/efx.c
+++ b/drivers/net/ethernet/sfc/efx.c
@@ -990,8 +990,8 @@ static int efx_pci_probe_main(struct efx_nic *efx)
 static int efx_pci_probe_post_io(struct efx_nic *efx)
 {
 	struct net_device *net_dev = efx->net_dev;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	int rc = efx_pci_probe_main(efx);
-	netdev_features_t tmp;
 
 	if (rc)
 		return rc;
diff --git a/drivers/net/ethernet/sfc/efx_common.c b/drivers/net/ethernet/sfc/efx_common.c
index 01353739bae0..8eac2466e33b 100644
--- a/drivers/net/ethernet/sfc/efx_common.c
+++ b/drivers/net/ethernet/sfc/efx_common.c
@@ -211,7 +211,7 @@ void efx_set_rx_mode(struct net_device *net_dev)
 int efx_set_features(struct net_device *net_dev, netdev_features_t data)
 {
 	struct efx_nic *efx = netdev_priv(net_dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int rc;
 
 	/* If disabling RX n-tuple filtering, clear existing filters */
@@ -366,8 +366,8 @@ void efx_start_monitor(struct efx_nic *efx)
  */
 static void efx_start_datapath(struct efx_nic *efx)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
 	bool old_rx_scatter = efx->rx_scatter;
-	netdev_features_t old_features;
 	size_t rx_buf_len;
 
 	/* Calculate the rx buffer allocation parameters required to
diff --git a/drivers/net/ethernet/sfc/falcon/efx.c b/drivers/net/ethernet/sfc/falcon/efx.c
index a6301c8dd9cb..f4bde5771ba2 100644
--- a/drivers/net/ethernet/sfc/falcon/efx.c
+++ b/drivers/net/ethernet/sfc/falcon/efx.c
@@ -592,8 +592,8 @@ static int ef4_probe_channels(struct ef4_nic *efx)
  */
 static void ef4_start_datapath(struct ef4_nic *efx)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
 	bool old_rx_scatter = efx->rx_scatter;
-	netdev_features_t old_features;
 	struct ef4_tx_queue *tx_queue;
 	struct ef4_rx_queue *rx_queue;
 	struct ef4_channel *channel;
@@ -2196,7 +2196,7 @@ static void ef4_set_rx_mode(struct net_device *net_dev)
 static int ef4_set_features(struct net_device *net_dev, netdev_features_t data)
 {
 	struct ef4_nic *efx = netdev_priv(net_dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int rc;
 
 	/* If disabling RX n-tuple filtering, clear existing filters */
diff --git a/drivers/net/ethernet/sfc/falcon/net_driver.h b/drivers/net/ethernet/sfc/falcon/net_driver.h
index 942c539c76c2..4b66f69f516b 100644
--- a/drivers/net/ethernet/sfc/falcon/net_driver.h
+++ b/drivers/net/ethernet/sfc/falcon/net_driver.h
@@ -849,7 +849,7 @@ struct ef4_nic {
 	bool port_initialized;
 	struct net_device *net_dev;
 
-	netdev_features_t fixed_features;
+	__DECLARE_NETDEV_FEATURE_MASK(fixed_features);
 
 	struct ef4_buffer stats_buffer;
 	u64 rx_nodesc_drops_total;
diff --git a/drivers/net/ethernet/sfc/mcdi_filters.c b/drivers/net/ethernet/sfc/mcdi_filters.c
index 2a9a692da100..c19950974b62 100644
--- a/drivers/net/ethernet/sfc/mcdi_filters.c
+++ b/drivers/net/ethernet/sfc/mcdi_filters.c
@@ -1297,8 +1297,8 @@ efx_mcdi_filter_table_probe_matches(struct efx_nic *efx,
 int efx_mcdi_filter_table_probe(struct efx_nic *efx, bool multicast_chaining)
 {
 	struct net_device *net_dev = efx->net_dev;
+	__DECLARE_NETDEV_FEATURE_MASK(supported);
 	struct efx_mcdi_filter_table *table;
-	netdev_features_t supported;
 	int rc;
 
 	if (!efx_rwsem_assert_write_locked(&efx->filter_sem))
diff --git a/drivers/net/ethernet/sfc/net_driver.h b/drivers/net/ethernet/sfc/net_driver.h
index 0c47ba740445..ca29a3786ea2 100644
--- a/drivers/net/ethernet/sfc/net_driver.h
+++ b/drivers/net/ethernet/sfc/net_driver.h
@@ -1052,7 +1052,7 @@ struct efx_nic {
 	bool port_initialized;
 	struct net_device *net_dev;
 
-	netdev_features_t fixed_features;
+	__DECLARE_NETDEV_FEATURE_MASK(fixed_features);
 
 	u16 num_mac_stats;
 	struct efx_buffer stats_buffer;
diff --git a/drivers/net/ethernet/sun/sunvnet_common.c b/drivers/net/ethernet/sun/sunvnet_common.c
index 44f4bffb5f24..534c10e353d4 100644
--- a/drivers/net/ethernet/sun/sunvnet_common.c
+++ b/drivers/net/ethernet/sun/sunvnet_common.c
@@ -1224,7 +1224,7 @@ vnet_handle_offloads(struct vnet_port *port, struct sk_buff *skb,
 	struct net_device *dev = VNET_PORT_TO_NET_DEVICE(port);
 	struct vio_dring_state *dr = &port->vio.drings[VIO_DRIVER_TX_RING];
 	struct sk_buff *segs, *curr, *next;
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	int maclen, datalen;
 	int status;
 	int gso_size, gso_type, gso_segs;
diff --git a/drivers/net/ethernet/synopsys/dwc-xlgmac.h b/drivers/net/ethernet/synopsys/dwc-xlgmac.h
index 8598aaf3ec99..a0f69cc235fc 100644
--- a/drivers/net/ethernet/synopsys/dwc-xlgmac.h
+++ b/drivers/net/ethernet/synopsys/dwc-xlgmac.h
@@ -606,7 +606,7 @@ struct xlgmac_pdata {
 
 	/* Netdev related settings */
 	unsigned char mac_addr[ETH_ALEN];
-	netdev_features_t netdev_features;
+	__DECLARE_NETDEV_FEATURE_MASK(netdev_features);
 	struct napi_struct napi;
 
 	/* Filtering support */
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 22875a7ef1ff..84b3bce287cb 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -1944,8 +1944,8 @@ static int netvsc_set_features(struct net_device *ndev,
 	struct net_device_context *ndevctx = netdev_priv(ndev);
 	struct netvsc_device *nvdev = rtnl_dereference(ndevctx->nvdev);
 	struct net_device *vf_netdev = rtnl_dereference(ndevctx->vf_netdev);
+	__DECLARE_NETDEV_FEATURE_MASK(change);
 	struct ndis_offload_params offloads;
-	netdev_features_t change;
 	int ret = 0;
 
 	if (!nvdev || nvdev->destroy)
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index 115ebe0b970a..f0206cd90678 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -1348,7 +1348,7 @@ static int rndis_netdev_set_hwcaps(struct rndis_device *rndis_device,
 	struct ndis_offload hwcaps;
 	struct ndis_offload_params offloads;
 	unsigned int gso_max_size = GSO_MAX_SIZE;
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	int ret;
 
 	/* Find HW offload capabilities */
diff --git a/drivers/net/ipvlan/ipvlan.h b/drivers/net/ipvlan/ipvlan.h
index 3837c897832e..84cd8f1a5131 100644
--- a/drivers/net/ipvlan/ipvlan.h
+++ b/drivers/net/ipvlan/ipvlan.h
@@ -67,7 +67,7 @@ struct ipvl_dev {
 	struct list_head	addrs;
 	struct ipvl_pcpu_stats	__percpu *pcpu_stats;
 	DECLARE_BITMAP(mac_filters, IPVLAN_MAC_FILTER_SIZE);
-	netdev_features_t	sfeatures;
+	__DECLARE_NETDEV_FEATURE_MASK(sfeatures);
 	u32			msg_enable;
 	spinlock_t		addrs_lock;
 };
diff --git a/drivers/net/ipvlan/ipvlan_main.c b/drivers/net/ipvlan/ipvlan_main.c
index 84ad786ae18d..e77e4dc2aa60 100644
--- a/drivers/net/ipvlan/ipvlan_main.c
+++ b/drivers/net/ipvlan/ipvlan_main.c
@@ -242,7 +242,7 @@ static void ipvlan_fix_features(struct net_device *dev,
 				netdev_features_t *features)
 {
 	struct ipvl_dev *ipvlan = netdev_priv(dev);
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	netdev_feature_set_bits(NETIF_F_ALL_FOR_ALL, features);
 	netdev_feature_fill(&tmp);
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 5526d54c0a14..8693decea5e8 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -3478,7 +3478,7 @@ static void macsec_fix_features(struct net_device *dev,
 {
 	struct macsec_dev *macsec = macsec_priv(dev);
 	struct net_device *real_dev = macsec->real_dev;
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	if (macsec_is_offloaded(macsec)) {
 		netdev_feature_copy(features, real_dev->features);
diff --git a/drivers/net/macvlan.c b/drivers/net/macvlan.c
index 9ac38e22ccfc..d373b4557206 100644
--- a/drivers/net/macvlan.c
+++ b/drivers/net/macvlan.c
@@ -1074,9 +1074,10 @@ static int macvlan_ethtool_get_ts_info(struct net_device *dev,
 static void macvlan_fix_features(struct net_device *dev,
 				 netdev_features_t *features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(lowerdev_features);
 	struct macvlan_dev *vlan = netdev_priv(dev);
-	netdev_features_t lowerdev_features;
-	netdev_features_t mask, tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	netdev_feature_copy(&lowerdev_features, vlan->lowerdev->features);
 	netdev_feature_set_bits(NETIF_F_ALL_FOR_ALL, features);
diff --git a/drivers/net/net_failover.c b/drivers/net/net_failover.c
index 704e691530f7..16375fb5c958 100644
--- a/drivers/net/net_failover.c
+++ b/drivers/net/net_failover.c
@@ -384,10 +384,10 @@ static void net_failover_compute_features(struct net_device *dev)
 					IFF_XMIT_DST_RELEASE_PERM;
 	struct net_failover_info *nfo_info = netdev_priv(dev);
 	struct net_device *primary_dev, *standby_dev;
-	netdev_features_t vlan_features;
-	netdev_features_t enc_features;
-	netdev_features_t vlan_mask;
-	netdev_features_t enc_mask;
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_features);
+	__DECLARE_NETDEV_FEATURE_MASK(enc_features);
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_mask);
+	__DECLARE_NETDEV_FEATURE_MASK(enc_mask);
 
 	netdev_feature_zero(&vlan_features);
 	netdev_feature_set_bits(FAILOVER_VLAN_FEATURES & NETIF_F_ALL_FOR_ALL,
diff --git a/drivers/net/tap.c b/drivers/net/tap.c
index 03158fa9476c..49da4d101517 100644
--- a/drivers/net/tap.c
+++ b/drivers/net/tap.c
@@ -317,11 +317,11 @@ EXPORT_SYMBOL_GPL(tap_del_queues);
 
 rx_handler_result_t tap_handle_frame(struct sk_buff **pskb)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *skb = *pskb;
 	struct net_device *dev = skb->dev;
 	struct tap_dev *tap;
 	struct tap_queue *q;
-	netdev_features_t features;
 
 	netdev_feature_zero(&features);
 	netdev_feature_set_bits(TAP_FEATURES, &features);
@@ -923,9 +923,9 @@ static int tap_ioctl_set_queue(struct file *file, unsigned int flags)
 
 static int set_offload(struct tap_queue *q, unsigned long arg)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(feature_mask);
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct tap_dev *tap;
-	netdev_features_t features;
-	netdev_features_t feature_mask;
 
 	tap = rtnl_dereference(q->tap);
 	if (!tap)
diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c
index 207771e0d1c8..79171c8c7379 100644
--- a/drivers/net/team/team.c
+++ b/drivers/net/team/team.c
@@ -988,10 +988,10 @@ static void __team_compute_features(struct team *team)
 	unsigned short max_hard_header_len = ETH_HLEN;
 	unsigned int dst_release_flag = IFF_XMIT_DST_RELEASE |
 					IFF_XMIT_DST_RELEASE_PERM;
-	netdev_features_t vlan_features;
-	netdev_features_t enc_features;
-	netdev_features_t mask_vlan;
-	netdev_features_t mask_enc;
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_features);
+	__DECLARE_NETDEV_FEATURE_MASK(enc_features);
+	__DECLARE_NETDEV_FEATURE_MASK(mask_vlan);
+	__DECLARE_NETDEV_FEATURE_MASK(mask_enc);
 
 	netdev_feature_zero(&vlan_features);
 	netdev_feature_set_bits(TEAM_VLAN_FEATURES & NETIF_F_ALL_FOR_ALL,
@@ -2010,7 +2010,7 @@ static void team_fix_features(struct net_device *dev,
 {
 	struct team_port *port;
 	struct team *team = netdev_priv(dev);
-	netdev_features_t mask;
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 
 	netdev_feature_copy(&mask, *features);
 	netdev_feature_clear_bits(NETIF_F_ONE_FOR_ALL, features);
diff --git a/drivers/net/tun.c b/drivers/net/tun.c
index 9e9cbafc870b..66c566291b16 100644
--- a/drivers/net/tun.c
+++ b/drivers/net/tun.c
@@ -183,7 +183,7 @@ struct tun_struct {
 	kgid_t			group;
 
 	struct net_device	*dev;
-	netdev_features_t	set_features;
+	__DECLARE_NETDEV_FEATURE_MASK(set_features);
 #define TUN_USER_FEATURES (NETIF_F_HW_CSUM|NETIF_F_TSO_ECN|NETIF_F_TSO| \
 			  NETIF_F_TSO6)
 
@@ -1083,7 +1083,7 @@ static void tun_net_fix_features(struct net_device *dev,
 				 netdev_features_t *features)
 {
 	struct tun_struct *tun = netdev_priv(dev);
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	netdev_feature_and(&tmp, *features, tun->set_features);
 	netdev_feature_clear_bits(TUN_USER_FEATURES, features);
@@ -2802,7 +2802,7 @@ static void tun_get_iff(struct tun_struct *tun, struct ifreq *ifr)
  * privs required. */
 static int set_offload(struct tun_struct *tun, unsigned long arg)
 {
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 
 	netdev_feature_zero(&features);
 
diff --git a/drivers/net/usb/aqc111.c b/drivers/net/usb/aqc111.c
index 1363f64f4c86..45305d74692e 100644
--- a/drivers/net/usb/aqc111.c
+++ b/drivers/net/usb/aqc111.c
@@ -567,7 +567,7 @@ static int aqc111_set_features(struct net_device *net,
 {
 	struct usbnet *dev = netdev_priv(net);
 	struct aqc111_data *aqc111_data = dev->driver_priv;
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	u16 reg16 = 0;
 	u8 reg8 = 0;
 
diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c
index 0099d55f9c90..b11b4bba443e 100644
--- a/drivers/net/usb/ax88179_178a.c
+++ b/drivers/net/usb/ax88179_178a.c
@@ -952,7 +952,7 @@ ax88179_set_features(struct net_device *net, netdev_features_t features)
 {
 	u8 tmp;
 	struct usbnet *dev = netdev_priv(net);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 
 	netdev_feature_xor(&changed, net->features, features);
 
diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c
index 31fb92ae23c2..61d2175c63d7 100644
--- a/drivers/net/usb/r8152.c
+++ b/drivers/net/usb/r8152.c
@@ -2092,9 +2092,9 @@ static void r8152_csum_workaround(struct r8152 *tp, struct sk_buff *skb,
 				  struct sk_buff_head *list)
 {
 	if (skb_shinfo(skb)->gso_size) {
+		__DECLARE_NETDEV_FEATURE_MASK(features);
 		struct sk_buff *segs, *seg, *next;
 		struct sk_buff_head seg_list;
-		netdev_features_t features;
 
 		netdev_feature_copy(&features, tp->netdev->features);
 		netdev_feature_clear_bits(NETIF_F_SG | NETIF_F_IPV6_CSUM |
@@ -3233,8 +3233,8 @@ static void rtl_rx_vlan_en(struct r8152 *tp, bool enable)
 static int rtl8152_set_features(struct net_device *dev,
 				netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	struct r8152 *tp = netdev_priv(dev);
-	netdev_features_t changed;
 	int ret;
 
 	ret = usb_autopm_get_interface(tp->intf);
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index 39bfa024861c..6603dcaf4c84 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -1407,7 +1407,7 @@ static int veth_set_features(struct net_device *dev,
 			     netdev_features_t features)
 {
 	struct veth_priv *priv = netdev_priv(dev);
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int err;
 
 	netdev_feature_xor(&changed, features, dev->features);
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 5307bc4f3c99..96dc985a3fb0 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -3154,7 +3154,7 @@ static int virtnet_probe(struct virtio_device *vdev)
 		netdev_feature_set_bit(NETIF_F_GSO_ROBUST_BIT, &dev->features);
 
 		if (gso) {
-			netdev_features_t tmp;
+			__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 			netdev_feature_copy(&tmp, dev->hw_features);
 			netdev_feature_and_bits(NETIF_F_ALL_TSO, &tmp);
diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c b/drivers/net/vmxnet3/vmxnet3_ethtool.c
index 05e422b48774..e9035e80d5ae 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethtool.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c
@@ -340,7 +340,7 @@ int vmxnet3_set_features(struct net_device *netdev, netdev_features_t features)
 	struct vmxnet3_adapter *adapter = netdev_priv(netdev);
 	u64 tun_offload_mask = NETIF_F_GSO_UDP_TUNNEL |
 				NETIF_F_GSO_UDP_TUNNEL_CSUM;
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	unsigned long flags;
 	u8 udp_tun_enabled;
 
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
index cfe0fcb1a0ba..aaf8c15a99ad 100644
--- a/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
+++ b/drivers/net/wireless/intel/iwlwifi/mvm/tx.c
@@ -836,8 +836,8 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
 	struct ieee80211_hdr *hdr = (void *)skb->data;
 	unsigned int mss = skb_shinfo(skb)->gso_size;
 	unsigned int num_subframes, tcp_payload_len, subf_len, max_amsdu_len;
+	__DECLARE_NETDEV_FEATURE_MASK(netdev_flags);
 	u16 snap_ip_tcp, pad;
-	netdev_features_t netdev_flags;
 	u8 tid;
 
 	netdev_feature_zero(&netdev_flags);
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 00c30e6dbe7c..1c5b58ebe844 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -679,7 +679,7 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
 	struct netfront_queue *queue = NULL;
 	struct xennet_gnttab_make_txreq info = { };
 	unsigned int num_queues = dev->real_num_tx_queues;
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	u16 queue_index;
 	struct sk_buff *nskb;
 
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c
index 21e4a356c717..82c4ae2ae064 100644
--- a/drivers/s390/net/qeth_core_main.c
+++ b/drivers/s390/net/qeth_core_main.c
@@ -6833,8 +6833,8 @@ static int qeth_set_ipa_rx_csum(struct qeth_card *card, bool on)
  */
 void qeth_enable_hw_features(struct net_device *dev)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct qeth_card *card = dev->ml_priv;
-	netdev_features_t features;
 
 	netdev_feature_copy(&features, dev->features);
 	/* force-off any feature that might need an IPA sequence.
@@ -6860,8 +6860,8 @@ static void qeth_check_restricted_features(struct qeth_card *card,
 					   netdev_features_t changed,
 					   netdev_features_t actual)
 {
-	netdev_features_t ipv6_features;
-	netdev_features_t ipv4_features;
+	__DECLARE_NETDEV_FEATURE_MASK(ipv6_features);
+	__DECLARE_NETDEV_FEATURE_MASK(ipv4_features);
 
 	netdev_features_zero(&ipv6_features);
 	netdev_features_zero(&ipv4_features);
@@ -6975,7 +6975,7 @@ void qeth_features_check(struct sk_buff *skb, struct net_device *dev,
 	/* Traffic with local next-hop is not eligible for some offloads: */
 	if (skb->ip_summed == CHECKSUM_PARTIAL &&
 	    READ_ONCE(card->options.isolation) != ISOLATION_MODE_FWD) {
-		netdev_features_t restricted;
+		__DECLARE_NETDEV_FEATURE_MASK(restricted);
 
 		netdev_feature_zero(&restricted);
 		if (skb_is_gso(skb) && !netif_needs_gso(skb, *features))
diff --git a/drivers/staging/qlge/qlge_main.c b/drivers/staging/qlge/qlge_main.c
index efbeb0a1a601..61b7cb6d1396 100644
--- a/drivers/staging/qlge/qlge_main.c
+++ b/drivers/staging/qlge/qlge_main.c
@@ -2276,7 +2276,7 @@ static int qlge_update_hw_vlan_features(struct net_device *ndev,
 static int qlge_set_features(struct net_device *ndev,
 			     netdev_features_t features)
 {
-	netdev_features_t changed;
+	__DECLARE_NETDEV_FEATURE_MASK(changed);
 	int err;
 
 	netdev_feature_xor(&changed, ndev->features, features);
diff --git a/include/linux/if_macvlan.h b/include/linux/if_macvlan.h
index 10c94a3936ca..101be703a4db 100644
--- a/include/linux/if_macvlan.h
+++ b/include/linux/if_macvlan.h
@@ -26,7 +26,7 @@ struct macvlan_dev {
 
 	DECLARE_BITMAP(mc_filter, MACVLAN_MC_FILTER_SZ);
 
-	netdev_features_t	set_features;
+	__DECLARE_NETDEV_FEATURE_MASK(set_features);
 	enum macvlan_mode	mode;
 	u16			flags;
 	unsigned int		macaddr_count;
diff --git a/include/linux/if_tap.h b/include/linux/if_tap.h
index 915a187cfabd..e81070409f39 100644
--- a/include/linux/if_tap.h
+++ b/include/linux/if_tap.h
@@ -40,7 +40,7 @@ struct tap_dev {
 	struct list_head	queue_list;
 	int			numvtaps;
 	int			numqueues;
-	netdev_features_t	tap_features;
+	__DECLARE_NETDEV_FEATURE_MASK(tap_features);
 	int			minor;
 
 	void (*update_features)(struct tap_dev *tap, netdev_features_t features);
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
index b3fa05c88eef..b5013b3e3e48 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -103,6 +103,9 @@ enum {
 
 #define NETDEV_FEATURE_DWORDS	DIV_ROUND_UP(NETDEV_FEATURE_COUNT, 64)
 
+#define __DECLARE_NETDEV_FEATURE_MASK(name)	\
+	netdev_features_t name
+
 /* copy'n'paste compression ;) */
 #define __NETIF_F_BIT(bit)	((netdev_features_t)1 << (bit))
 #define __NETIF_F(name)		__NETIF_F_BIT(NETIF_F_##name##_BIT)
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 56e642a72997..4d36b747165c 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1995,13 +1995,13 @@ struct net_device {
 	unsigned short		needed_headroom;
 	unsigned short		needed_tailroom;
 
-	netdev_features_t	features;
-	netdev_features_t	hw_features;
-	netdev_features_t	wanted_features;
-	netdev_features_t	vlan_features;
-	netdev_features_t	hw_enc_features;
-	netdev_features_t	mpls_features;
-	netdev_features_t	gso_partial_features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
+	__DECLARE_NETDEV_FEATURE_MASK(hw_features);
+	__DECLARE_NETDEV_FEATURE_MASK(wanted_features);
+	__DECLARE_NETDEV_FEATURE_MASK(vlan_features);
+	__DECLARE_NETDEV_FEATURE_MASK(hw_enc_features);
+	__DECLARE_NETDEV_FEATURE_MASK(mpls_features);
+	__DECLARE_NETDEV_FEATURE_MASK(gso_partial_features);
 
 	unsigned int		min_mtu;
 	unsigned int		max_mtu;
@@ -5055,7 +5055,7 @@ void netdev_increment_features(netdev_features_t *ret, netdev_features_t all,
 static inline void netdev_add_tso_features(netdev_features_t *features,
 					   netdev_features_t mask)
 {
-	netdev_features_t one;
+	__DECLARE_NETDEV_FEATURE_MASK(one);
 
 	netdev_feature_zero(&one);
 	netdev_feature_set_bits(NETIF_F_ALL_TSO, &one);
@@ -5075,7 +5075,7 @@ void netif_skb_features(struct sk_buff *skb, netdev_features_t *features);
 
 static inline bool net_gso_ok(netdev_features_t features, int gso_type)
 {
-	netdev_features_t feature;
+	__DECLARE_NETDEV_FEATURE_MASK(feature);
 
 	/* check flags correspondence */
 	BUILD_BUG_ON(SKB_GSO_TCPV4   != (NETIF_F_TSO >> NETIF_F_GSO_SHIFT));
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index af0fc13cea34..683c56f8b8c3 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -2624,7 +2624,7 @@ struct ieee80211_hw {
 		int units_pos;
 		s16 accuracy;
 	} radiotap_timestamp;
-	netdev_features_t netdev_features;
+	__DECLARE_NETDEV_FEATURE_MASK(netdev_features);
 	u8 uapsd_queues;
 	u8 uapsd_max_sp_len;
 	u8 n_cipher_schemes;
diff --git a/include/net/sock.h b/include/net/sock.h
index f7ba322c63bd..6107aa6731e6 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -451,9 +451,9 @@ struct sock {
 	unsigned long		sk_pacing_rate; /* bytes per second */
 	unsigned long		sk_max_pacing_rate;
 	struct page_frag	sk_frag;
-	netdev_features_t	sk_route_caps;
-	netdev_features_t	sk_route_nocaps;
-	netdev_features_t	sk_route_forced_caps;
+	__DECLARE_NETDEV_FEATURE_MASK(sk_route_caps);
+	__DECLARE_NETDEV_FEATURE_MASK(sk_route_nocaps);
+	__DECLARE_NETDEV_FEATURE_MASK(sk_route_forced_caps);
 	int			sk_gso_type;
 	unsigned int		sk_gso_max_size;
 	gfp_t			sk_allocation;
@@ -2056,7 +2056,7 @@ static inline void sk_nocaps_add(struct sock *sk, netdev_features_t flags)
 
 static inline void sk_nocaps_add_gso(struct sock *sk)
 {
-	netdev_features_t gso_flags;
+	__DECLARE_NETDEV_FEATURE_MASK(gso_flags);
 
 	netdev_feature_zero(&gso_flags);
 	netdev_feature_set_bits(NETIF_F_GSO_MASK, &gso_flags);
diff --git a/include/net/udp.h b/include/net/udp.h
index 3855b9775cbf..42681e7e2eba 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -481,7 +481,7 @@ void udpv6_encap_enable(void);
 static inline struct sk_buff *udp_rcv_segment(struct sock *sk,
 					      struct sk_buff *skb, bool ipv4)
 {
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *segs;
 
 	netdev_feature_zero(&features);
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c
index a010612cf27b..4062917584de 100644
--- a/net/8021q/vlan_dev.c
+++ b/net/8021q/vlan_dev.c
@@ -640,9 +640,9 @@ static void vlan_dev_fix_features(struct net_device *dev,
 				  netdev_features_t *features)
 {
 	struct net_device *real_dev = vlan_dev_priv(dev)->real_dev;
-	netdev_features_t lower_features;
-	netdev_features_t old_features;
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(lower_features);
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	netdev_feature_copy(&tmp, real_dev->vlan_features);
 	netdev_feature_set_bit(NETIF_F_RXCSUM_BIT, &tmp);
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index c0a71fd6f772..d210031df22a 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -534,8 +534,8 @@ static void br_set_gso_limits(struct net_bridge *br)
  */
 void br_features_recompute(struct net_bridge *br, netdev_features_t *features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 	struct net_bridge_port *p;
-	netdev_features_t mask;
 
 	if (list_empty(&br->port_list))
 		return;
diff --git a/net/core/dev.c b/net/core/dev.c
index 17a93ec301b6..d0f04bdcc00e 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -3183,7 +3183,7 @@ static u16 skb_tx_hash(const struct net_device *dev,
 
 static void skb_warn_bad_offload(const struct sk_buff *skb)
 {
-	static const netdev_features_t null_features;
+	static __DECLARE_NETDEV_FEATURE_MASK(null_features);
 	struct net_device *dev = skb->dev;
 	const char *name = "";
 
@@ -3382,7 +3382,7 @@ struct sk_buff *__skb_gso_segment(struct sk_buff *skb,
 	 * work.
 	 */
 	if (netdev_feature_test_bit(NETIF_F_GSO_PARTIAL_BIT, features)) {
-		netdev_features_t partial_features;
+		__DECLARE_NETDEV_FEATURE_MASK(partial_features);
 		struct net_device *dev = skb->dev;
 
 		netdev_feature_and(&partial_features, dev->features,
@@ -3552,7 +3552,7 @@ void netif_skb_features(struct sk_buff *skb, netdev_features_t *features)
 		netdev_feature_and(features, *features, dev->hw_enc_features);
 
 	if (skb_vlan_tagged(skb)) {
-		netdev_features_t tmp;
+		__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 		netdev_feature_copy(&tmp, dev->vlan_features);
 		netdev_feature_set_bits(NETIF_F_HW_VLAN_CTAG_TX_BIT |
@@ -3649,7 +3649,7 @@ EXPORT_SYMBOL(skb_csum_hwoffload_help);
 
 static struct sk_buff *validate_xmit_skb(struct sk_buff *skb, struct net_device *dev, bool *again)
 {
-	netdev_features_t features;
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 
 	netif_skb_features(skb, &features);
 	skb = validate_xmit_vlan(skb, features);
@@ -9803,7 +9803,7 @@ static void netdev_sync_upper_features(struct net_device *lower,
 				       struct net_device *upper,
 				       netdev_features_t *features)
 {
-	netdev_features_t upper_disables;
+	__DECLARE_NETDEV_FEATURE_MASK(upper_disables);
 	int feature_bit;
 
 	netdev_feature_zero(&upper_disables);
@@ -9823,7 +9823,7 @@ static void netdev_sync_upper_features(struct net_device *lower,
 static void netdev_sync_lower_features(struct net_device *upper,
 	struct net_device *lower, netdev_features_t features)
 {
-	netdev_features_t upper_disables;
+	__DECLARE_NETDEV_FEATURE_MASK(upper_disables);
 	int feature_bit;
 
 	netdev_feature_zero(&upper_disables);
@@ -9953,8 +9953,8 @@ static void netdev_fix_features(struct net_device *dev,
 
 int __netdev_update_features(struct net_device *dev)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct net_device *upper, *lower;
-	netdev_features_t features;
 	struct list_head *iter;
 	int err = -1;
 
@@ -10001,7 +10001,7 @@ int __netdev_update_features(struct net_device *dev)
 		netdev_sync_lower_features(dev, lower, features);
 
 	if (!err) {
-		netdev_features_t diff;
+		__DECLARE_NETDEV_FEATURE_MASK(diff);
 
 		netdev_feature_xor(&diff, features, dev->features);
 
@@ -11373,7 +11373,7 @@ static int dev_cpu_dead(unsigned int oldcpu)
 void netdev_increment_features(netdev_features_t *ret, netdev_features_t all,
 			       netdev_features_t one, netdev_features_t mask)
 {
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	if (netdev_feature_test_bit(NETIF_F_HW_CSUM_BIT, mask))
 		netdev_feature_set_bits(NETIF_F_CSUM_MASK, &mask);
diff --git a/net/core/netpoll.c b/net/core/netpoll.c
index d2fc92b89a5f..83cfc0c5a200 100644
--- a/net/core/netpoll.c
+++ b/net/core/netpoll.c
@@ -74,8 +74,8 @@ static netdev_tx_t netpoll_start_xmit(struct sk_buff *skb,
 				      struct net_device *dev,
 				      struct netdev_queue *txq)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	netdev_tx_t status = NETDEV_TX_OK;
-	netdev_features_t features;
 
 	netif_skb_features(skb, &features);
 
diff --git a/net/ethtool/features.c b/net/ethtool/features.c
index 1c9f4df273bd..93c6238c7ade 100644
--- a/net/ethtool/features.c
+++ b/net/ethtool/features.c
@@ -38,8 +38,8 @@ static int features_prepare_data(const struct ethnl_req_info *req_base,
 				 struct genl_info *info)
 {
 	struct features_reply_data *data = FEATURES_REPDATA(reply_base);
+	__DECLARE_NETDEV_FEATURE_MASK(all_features);
 	struct net_device *dev = reply_base->dev;
-	netdev_features_t all_features;
 
 	ethnl_features_to_bitmap32(data->hw, dev->hw_features);
 	ethnl_features_to_bitmap32(data->wanted, dev->wanted_features);
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 661b75dee9fd..0b2e98e97f58 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -232,8 +232,8 @@ static void ethtool_get_feature_mask(u32 eth_cmd, netdev_features_t *mask)
 static int ethtool_get_one_feature(struct net_device *dev,
 	char __user *useraddr, u32 ethcmd)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 	struct ethtool_value edata;
-	netdev_features_t mask;
 
 	ethtool_get_feature_mask(ethcmd, &mask);
 	edata.cmd = ethcmd;
@@ -247,8 +247,8 @@ static int ethtool_get_one_feature(struct net_device *dev,
 static int ethtool_set_one_feature(struct net_device *dev,
 	void __user *useraddr, u32 ethcmd)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 	struct ethtool_value edata;
-	netdev_features_t mask;
 
 	if (copy_from_user(&edata, useraddr, sizeof(edata)))
 		return -EFAULT;
@@ -2710,9 +2710,9 @@ static int ethtool_set_fecparam(struct net_device *dev, void __user *useraddr)
 int dev_ethtool(struct net *net, struct ifreq *ifr, void __user *useraddr)
 {
 	struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name);
+	__DECLARE_NETDEV_FEATURE_MASK(old_features);
 	u32 ethcmd, sub_cmd;
 	int rc;
-	netdev_features_t old_features;
 
 	if (!dev)
 		return -ENODEV;
diff --git a/net/hsr/hsr_device.c b/net/hsr/hsr_device.c
index b7ba16bdb8e0..7a4c5e79eb5f 100644
--- a/net/hsr/hsr_device.c
+++ b/net/hsr/hsr_device.c
@@ -180,7 +180,7 @@ static int hsr_dev_close(struct net_device *dev)
 static void hsr_features_recompute(struct hsr_priv *hsr,
 				   netdev_features_t *features)
 {
-	netdev_features_t mask;
+	__DECLARE_NETDEV_FEATURE_MASK(mask);
 	struct hsr_port *port;
 
 	netdev_feature_copy(&mask, *features);
diff --git a/net/ipv4/esp4_offload.c b/net/ipv4/esp4_offload.c
index f7e77a9176d6..2c0b7a4e5489 100644
--- a/net/ipv4/esp4_offload.c
+++ b/net/ipv4/esp4_offload.c
@@ -190,7 +190,7 @@ static struct sk_buff *esp4_gso_segment(struct sk_buff *skb,
 	struct ip_esp_hdr *esph;
 	struct crypto_aead *aead;
 	struct xfrm_offload *xo = xfrm_offload(skb);
-	netdev_features_t esp_features;
+	__DECLARE_NETDEV_FEATURE_MASK(esp_features);
 	struct sec_path *sp;
 
 	if (!xo)
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index 60a693c7ae79..8a065badcf2d 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -233,8 +233,8 @@ static int ip_finish_output2(struct net *net, struct sock *sk, struct sk_buff *s
 static int ip_finish_output_gso(struct net *net, struct sock *sk,
 				struct sk_buff *skb, unsigned int mtu)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *segs, *nskb;
-	netdev_features_t features;
 	int ret = 0;
 
 	/* common case: seglen is <= mtu
diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c
index 4bf0a0d382f6..2f4b7489f1a2 100644
--- a/net/ipv4/tcp_offload.c
+++ b/net/ipv4/tcp_offload.c
@@ -55,6 +55,7 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
 				netdev_features_t features)
 {
 	struct sk_buff *segs = ERR_PTR(-EINVAL);
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	unsigned int sum_truesize = 0;
 	struct tcphdr *th;
 	unsigned int thlen;
@@ -65,7 +66,6 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb,
 	struct sk_buff *gso_skb = skb;
 	__sum16 newcheck;
 	bool ooo_okay, copy_destructor;
-	netdev_features_t tmp;
 
 	th = tcp_hdr(skb);
 	thlen = th->doff * 4;
diff --git a/net/ipv6/esp6_offload.c b/net/ipv6/esp6_offload.c
index 5c2e0da49804..3ce9360071f4 100644
--- a/net/ipv6/esp6_offload.c
+++ b/net/ipv6/esp6_offload.c
@@ -229,7 +229,7 @@ static struct sk_buff *esp6_gso_segment(struct sk_buff *skb,
 	struct ip_esp_hdr *esph;
 	struct crypto_aead *aead;
 	struct xfrm_offload *xo = xfrm_offload(skb);
-	netdev_features_t esp_features;
+	__DECLARE_NETDEV_FEATURE_MASK(esp_features);
 	struct sec_path *sp;
 
 	if (!xo)
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
index c7e060064686..72acb065abc0 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -138,8 +138,8 @@ static int
 ip6_finish_output_gso_slowpath_drop(struct net *net, struct sock *sk,
 				    struct sk_buff *skb, unsigned int mtu)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *segs, *nskb;
-	netdev_features_t features;
 	int ret = 0;
 
 	/* Please see corresponding comment in ip_finish_output_gso
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 7e7431144727..fa5fc30db294 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -2034,7 +2034,7 @@ int ieee80211_if_add(struct ieee80211_local *local, const char *name,
 	ieee80211_setup_sdata(sdata, type);
 
 	if (ndev) {
-		netdev_features_t tmp;
+		__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 		ndev->ieee80211_ptr->use_4addr = params->use_4addr;
 		if (type == NL80211_IFTYPE_STATION)
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 06142de8f8db..0cc11097f3ae 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -911,7 +911,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
 	int channels, max_bitrates;
 	bool supp_ht, supp_vht, supp_he;
 	struct cfg80211_chan_def dflt_chandef = {};
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 
 	if (ieee80211_hw_check(hw, QUEUE_CONTROL) &&
 	    (local->hw.offchannel_tx_hw_queue == IEEE80211_INVAL_HW_QUEUE ||
diff --git a/net/mpls/mpls_gso.c b/net/mpls/mpls_gso.c
index 65994c68e126..8d733c4427bd 100644
--- a/net/mpls/mpls_gso.c
+++ b/net/mpls/mpls_gso.c
@@ -19,9 +19,9 @@
 static struct sk_buff *mpls_gso_segment(struct sk_buff *skb,
 				       netdev_features_t features)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(mpls_features);
 	struct sk_buff *segs = ERR_PTR(-EINVAL);
 	u16 mac_offset = skb->mac_header;
-	netdev_features_t mpls_features;
 	u16 mac_len = skb->mac_len;
 	__be16 mpls_protocol;
 	unsigned int mpls_hlen;
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index dfb69428c6b2..aad26e4cd2cb 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -318,9 +318,9 @@ static int queue_gso_packets(struct datapath *dp, struct sk_buff *skb,
 			     uint32_t cutlen)
 {
 	unsigned int gso_type = skb_shinfo(skb)->gso_type;
+	__DECLARE_NETDEV_FEATURE_MASK(feature);
 	struct sw_flow_key later_key;
 	struct sk_buff *segs, *nskb;
-	netdev_features_t feature;
 	int err;
 
 	BUILD_BUG_ON(sizeof(*OVS_CB(skb)) > SKB_GSO_CB_OFFSET);
diff --git a/net/sched/sch_cake.c b/net/sched/sch_cake.c
index 5d783cd72290..fc45f242381e 100644
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
@@ -1739,8 +1739,8 @@ static s32 cake_enqueue(struct sk_buff *skb, struct Qdisc *sch,
 		b->max_skblen = len;
 
 	if (skb_is_gso(skb) && q->rate_flags & CAKE_FLAG_SPLIT_GSO) {
+		__DECLARE_NETDEV_FEATURE_MASK(features);
 		struct sk_buff *segs, *nskb;
-		netdev_features_t features;
 		unsigned int slen = 0, numsegs = 0;
 
 		netif_skb_features(skb, &features);
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index 4aabeb206777..313591a9c879 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -412,8 +412,8 @@ static void tfifo_enqueue(struct sk_buff *nskb, struct Qdisc *sch)
 static struct sk_buff *netem_segment(struct sk_buff *skb, struct Qdisc *sch,
 				     struct sk_buff **to_free)
 {
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *segs;
-	netdev_features_t features;
 
 	netif_skb_features(skb, &features);
 	netdev_feature_clear_bits(NETIF_F_GSO_MASK, &features);
diff --git a/net/sched/sch_taprio.c b/net/sched/sch_taprio.c
index e42deaf723b1..2ff999208324 100644
--- a/net/sched/sch_taprio.c
+++ b/net/sched/sch_taprio.c
@@ -453,7 +453,7 @@ static int taprio_enqueue(struct sk_buff *skb, struct Qdisc *sch,
 	 */
 	if (skb_is_gso(skb) && !FULL_OFFLOAD_IS_ENABLED(q->flags)) {
 		unsigned int slen = 0, numsegs = 0, len = qdisc_pkt_len(skb);
-		netdev_features_t features;
+		__DECLARE_NETDEV_FEATURE_MASK(features);
 		struct sk_buff *segs, *nskb;
 		int ret;
 
diff --git a/net/sched/sch_tbf.c b/net/sched/sch_tbf.c
index 8ac786f467a0..6b6b347da52f 100644
--- a/net/sched/sch_tbf.c
+++ b/net/sched/sch_tbf.c
@@ -191,8 +191,8 @@ static int tbf_segment(struct sk_buff *skb, struct Qdisc *sch,
 		       struct sk_buff **to_free)
 {
 	struct tbf_sched_data *q = qdisc_priv(sch);
+	__DECLARE_NETDEV_FEATURE_MASK(features);
 	struct sk_buff *segs, *nskb;
-	netdev_features_t features;
 	unsigned int len = 0, prev_len = qdisc_pkt_len(skb);
 	int ret, nb;
 
diff --git a/net/sctp/offload.c b/net/sctp/offload.c
index c49464811614..10d569bd9ef8 100644
--- a/net/sctp/offload.c
+++ b/net/sctp/offload.c
@@ -39,7 +39,7 @@ static struct sk_buff *sctp_gso_segment(struct sk_buff *skb,
 					netdev_features_t features)
 {
 	struct sk_buff *segs = ERR_PTR(-EINVAL);
-	netdev_features_t tmp;
+	__DECLARE_NETDEV_FEATURE_MASK(tmp);
 	struct sctphdr *sh;
 
 	if (!skb_is_gso_sctp(skb))
diff --git a/net/xfrm/xfrm_device.c b/net/xfrm/xfrm_device.c
index 7c167060d959..e3eeef8bfe89 100644
--- a/net/xfrm/xfrm_device.c
+++ b/net/xfrm/xfrm_device.c
@@ -105,8 +105,8 @@ struct sk_buff *validate_xmit_xfrm(struct sk_buff *skb, netdev_features_t featur
 	struct softnet_data *sd;
 	struct sk_buff *skb2, *nskb, *pskb = NULL;
 	struct xfrm_offload *xo = xfrm_offload(skb);
+	__DECLARE_NETDEV_FEATURE_MASK(esp_features);
 	struct net_device *dev = skb->dev;
-	netdev_features_t esp_features;
 	struct sec_path *sp;
 
 	if (!xo || (xo->flags & XFRM_XMIT))
