macsec: add some of the lower device's features when offloading
This commit extends the set of netdevice features supported by macsec devices when offload is enabled, which increases performance significantly (for a single TCP stream: 17.5Gbps to 38.5Gbps on my test machines). Commitc850240b6c("net: macsec: report real_dev features when HW offloading is enabled") previously attempted something similar, but had to be reverted (commit8bcd560ae8("Revert "net: macsec: report real_dev features when HW offloading is enabled"")) because the set of features it exposed was too large. During initialization, all features are set, and they're then removed via ndo_fix_features (macsec_fix_features). This allows the offloadable features to be automatically enabled if offloading is turned on after device creation. Signed-off-by: Sabrina Dubroca <sd@queasysnail.net> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/8b32c3011d269d6f149724e80c1ffe67c9534067.1730929545.git.sd@queasysnail.net Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
0189270117
commit
bd97c29f7e
+15
-2
@@ -2666,6 +2666,8 @@ static int macsec_update_offload(struct net_device *dev, enum macsec_offload off
|
||||
macsec_set_head_tail_room(dev);
|
||||
macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops);
|
||||
|
||||
netdev_update_features(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3521,6 +3523,10 @@ static netdev_tx_t macsec_start_xmit(struct sk_buff *skb,
|
||||
#define MACSEC_FEATURES \
|
||||
(NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST)
|
||||
|
||||
#define MACSEC_OFFLOAD_FEATURES \
|
||||
(MACSEC_FEATURES | NETIF_F_GSO_SOFTWARE | NETIF_F_SOFT_FEATURES | \
|
||||
NETIF_F_LRO | NETIF_F_RXHASH | NETIF_F_CSUM_MASK | NETIF_F_RXCSUM)
|
||||
|
||||
static int macsec_dev_init(struct net_device *dev)
|
||||
{
|
||||
struct macsec_dev *macsec = macsec_priv(dev);
|
||||
@@ -3531,7 +3537,10 @@ static int macsec_dev_init(struct net_device *dev)
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
dev->features = real_dev->features & MACSEC_FEATURES;
|
||||
dev->hw_features = real_dev->hw_features & MACSEC_OFFLOAD_FEATURES;
|
||||
dev->hw_features |= NETIF_F_GSO_SOFTWARE;
|
||||
|
||||
dev->features = real_dev->features & MACSEC_OFFLOAD_FEATURES;
|
||||
dev->features |= NETIF_F_GSO_SOFTWARE;
|
||||
dev->lltx = true;
|
||||
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
|
||||
@@ -3561,8 +3570,12 @@ 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;
|
||||
netdev_features_t mask;
|
||||
|
||||
features &= (real_dev->features & MACSEC_FEATURES) |
|
||||
mask = macsec_is_offloaded(macsec) ? MACSEC_OFFLOAD_FEATURES
|
||||
: MACSEC_FEATURES;
|
||||
|
||||
features &= (real_dev->features & mask) |
|
||||
NETIF_F_GSO_SOFTWARE | NETIF_F_SOFT_FEATURES;
|
||||
|
||||
return features;
|
||||
|
||||
Reference in New Issue
Block a user