Patch "Revert "net: macsec: report real_dev features when HW offloading is enabled"" has been added to the 6.0-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Revert "net: macsec: report real_dev features when HW offloading is enabled"

to the 6.0-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     revert-net-macsec-report-real_dev-features-when-hw-o.patch
and it can be found in the queue-6.0 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6b65687dc2a60934e6904b4f8f236c4d29c19dd6
Author: Sabrina Dubroca <sd@xxxxxxxxxxxxxxx>
Date:   Wed Nov 2 22:33:12 2022 +0100

    Revert "net: macsec: report real_dev features when HW offloading is enabled"
    
    [ Upstream commit 8bcd560ae8784da57c610d857118c5d6576b1a8f ]
    
    This reverts commit c850240b6c4132574a00f2da439277ab94265b66.
    
    That commit tried to improve the performance of macsec offload by
    taking advantage of some of the NIC's features, but in doing so, broke
    macsec offload when the lower device supports both macsec and ipsec
    offload, as the ipsec offload feature flags (mainly NETIF_F_HW_ESP)
    were copied from the real device. Since the macsec device doesn't
    provide xdo_* ops, the XFRM core rejects the registration of the new
    macsec device in xfrm_api_check.
    
    Example perf trace when running
      ip link add link eni1np1 type macsec port 4 offload mac
    
        ip   737 [003]   795.477676: probe:xfrm_dev_event__REGISTER      name="macsec0" features=0x1c000080014869
                  xfrm_dev_event+0x3a
                  notifier_call_chain+0x47
                  register_netdevice+0x846
                  macsec_newlink+0x25a
    
        ip   737 [003]   795.477687:   probe:xfrm_dev_event__return      ret=0x8002 (NOTIFY_BAD)
                 notifier_call_chain+0x47
                 register_netdevice+0x846
                 macsec_newlink+0x25a
    
    dev->features includes NETIF_F_HW_ESP (0x04000000000000), so
    xfrm_api_check returns NOTIFY_BAD because we don't have
    dev->xfrmdev_ops on the macsec device.
    
    We could probably propagate GSO and a few other features from the
    lower device, similar to macvlan. This will be done in a future patch.
    
    Signed-off-by: Sabrina Dubroca <sd@xxxxxxxxxxxxxxx>
    Reviewed-by: Antoine Tenart <atenart@xxxxxxxxxx>
    Reviewed-by: Leon Romanovsky <leonro@xxxxxxxxxx>
    Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index ddfa853ec9b5..d145ad189778 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2685,11 +2685,6 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
 	if (ret)
 		goto rollback;
 
-	/* Force features update, since they are different for SW MACSec and
-	 * HW offloading cases.
-	 */
-	netdev_update_features(dev);
-
 	rtnl_unlock();
 	return 0;
 
@@ -3457,16 +3452,9 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
 	return ret;
 }
 
-#define SW_MACSEC_FEATURES \
+#define MACSEC_FEATURES \
 	(NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
 
-/* If h/w offloading is enabled, use real device features save for
- *   VLAN_FEATURES - they require additional ops
- *   HW_MACSEC - no reason to report it
- */
-#define REAL_DEV_FEATURES(dev) \
-	((dev)->features & ~(NETIF_F_VLAN_FEATURES | NETIF_F_HW_MACSEC))
-
 static int macsec_dev_init(struct net_device *dev)
 {
 	struct macsec_dev *macsec = macsec_priv(dev);
@@ -3483,12 +3471,8 @@ static int macsec_dev_init(struct net_device *dev)
 		return err;
 	}
 
-	if (macsec_is_offloaded(macsec)) {
-		dev->features = REAL_DEV_FEATURES(real_dev);
-	} else {
-		dev->features = real_dev->features & SW_MACSEC_FEATURES;
-		dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE;
-	}
+	dev->features = real_dev->features & MACSEC_FEATURES;
+	dev->features |= NETIF_F_LLTX | NETIF_F_GSO_SOFTWARE;
 
 	dev->needed_headroom = real_dev->needed_headroom +
 			       MACSEC_NEEDED_HEADROOM;
@@ -3520,10 +3504,7 @@ static netdev_features_t macsec_fix_features(struct net_device *dev,
 	struct macsec_dev *macsec = macsec_priv(dev);
 	struct net_device *real_dev = macsec->real_dev;
 
-	if (macsec_is_offloaded(macsec))
-		return REAL_DEV_FEATURES(real_dev);
-
-	features &= (real_dev->features & SW_MACSEC_FEATURES) |
+	features &= (real_dev->features & MACSEC_FEATURES) |
 		    NETIF_F_GSO_SOFTWARE | NETIF_F_SOFT_FEATURES;
 	features |= NETIF_F_LLTX;
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux