Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

macsec: inherit lower device's TSO limits when offloading

If macsec is offloaded, we need to follow the lower device's
capabilities, like VLAN devices do.

Leave the limits unchanged when the offload is disabled.

Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/8240c0181e851f169d815f59658a01fb9dfc5073.1730929545.git.sd@queasysnail.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Sabrina Dubroca and committed by
Jakub Kicinski
de187a39 f29d24a2

+22
+22
drivers/net/macsec.c
··· 2621 2621 dev->needed_tailroom = real_dev->needed_tailroom + needed_tailroom; 2622 2622 } 2623 2623 2624 + static void macsec_inherit_tso_max(struct net_device *dev) 2625 + { 2626 + struct macsec_dev *macsec = macsec_priv(dev); 2627 + 2628 + /* if macsec is offloaded, we need to follow the lower 2629 + * device's capabilities. otherwise, we can ignore them. 2630 + */ 2631 + if (macsec_is_offloaded(macsec)) 2632 + netif_inherit_tso_max(dev, macsec->real_dev); 2633 + } 2634 + 2624 2635 static int macsec_update_offload(struct net_device *dev, enum macsec_offload offload) 2625 2636 { 2626 2637 enum macsec_offload prev_offload; ··· 2676 2665 2677 2666 macsec_set_head_tail_room(dev); 2678 2667 macsec->insert_tx_tag = macsec_needs_tx_tag(macsec, ops); 2668 + 2669 + macsec_inherit_tso_max(dev); 2679 2670 2680 2671 netdev_update_features(dev); 2681 2672 ··· 3549 3536 err = gro_cells_init(&macsec->gro_cells, dev); 3550 3537 if (err) 3551 3538 return err; 3539 + 3540 + macsec_inherit_tso_max(dev); 3552 3541 3553 3542 dev->hw_features = real_dev->hw_features & MACSEC_OFFLOAD_FEATURES; 3554 3543 dev->hw_features |= NETIF_F_GSO_SOFTWARE; ··· 4494 4479 if (dev->mtu > mtu) 4495 4480 dev_set_mtu(dev, mtu); 4496 4481 } 4482 + break; 4483 + case NETDEV_FEAT_CHANGE: 4484 + list_for_each_entry(m, &rxd->secys, secys) { 4485 + macsec_inherit_tso_max(m->secy.netdev); 4486 + netdev_update_features(m->secy.netdev); 4487 + } 4488 + break; 4497 4489 } 4498 4490 4499 4491 return NOTIFY_OK;