@@ -1281,8 +1281,8 @@ myri10ge_vlan_rx(struct net_device *dev, void *addr, struct sk_buff *skb)
va = addr;
va += MXGEFW_PAD;
veh = (struct vlan_ethhdr *)va;
- if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) ==
- NETIF_F_HW_VLAN_CTAG_RX &&
+ if (netdev_feature_test_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
+ dev->features) &&
veh->h_vlan_proto == htons(ETH_P_8021Q)) {
/* fixup csum if needed */
if (skb->ip_summed == CHECKSUM_COMPLETE) {
@@ -1360,7 +1360,7 @@ myri10ge_rx_done(struct myri10ge_slice_state *ss, int len, __wsum csum)
skb->len = len;
skb->data_len = len;
skb->truesize += len;
- if (dev->features & NETIF_F_RXCSUM) {
+ if (netdev_feature_test_bit(NETIF_F_RXCSUM_BIT, dev->features)) {
skb->ip_summed = CHECKSUM_COMPLETE;
skb->csum = csum;
}
@@ -2889,9 +2889,12 @@ 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;
netdev_tx_t status;
- segs = skb_gso_segment(skb, dev->features & ~NETIF_F_TSO6);
+ netdev_feature_copy(&tmp, dev->features);
+ netdev_feature_clear_bit(NETIF_F_TSO6_BIT, &tmp);
+ segs = skb_gso_segment(skb, tmp);
if (IS_ERR(segs))
goto drop;
@@ -3868,21 +3871,27 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
netdev->mtu = myri10ge_initial_mtu;
netdev->netdev_ops = &myri10ge_netdev_ops;
- netdev->hw_features = mgp->features | NETIF_F_RXCSUM;
+ netdev_feature_zero(&netdev->hw_features);
+ netdev_feature_set_bits(mgp->features | NETIF_F_RXCSUM,
+ &netdev->hw_features);
/* fake NETIF_F_HW_VLAN_CTAG_RX for good GRO performance */
- netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
+ netdev_feature_set_bit(NETIF_F_HW_VLAN_CTAG_RX_BIT,
+ &netdev->hw_features);
- netdev->features = netdev->hw_features;
+ netdev_feature_copy(&netdev->features, netdev->hw_features);
if (dac_enabled)
- netdev->features |= NETIF_F_HIGHDMA;
+ netdev_feature_set_bit(NETIF_F_HIGHDMA_BIT, &netdev->features);
+
+ netdev_feature_set_bits(mgp->features, &netdev->vlan_features);
- netdev->vlan_features |= mgp->features;
if (mgp->fw_ver_tiny < 37)
- netdev->vlan_features &= ~NETIF_F_TSO6;
+ netdev_feature_clear_bit(NETIF_F_TSO6_BIT,
+ &netdev->vlan_features);
if (mgp->fw_ver_tiny < 32)
- netdev->vlan_features &= ~NETIF_F_TSO;
+ netdev_feature_clear_bit(NETIF_F_TSO_BIT,
+ &netdev->vlan_features);
/* make sure we can get an irq, and that MSI can be
* setup (if available). */
Use netdev_feature_xxx helpers to replace the logical operation for netdev features. Signed-off-by: Jian Shen <shenjian15@huawei.com> --- .../net/ethernet/myricom/myri10ge/myri10ge.c | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-)