bond_dev->priv_flags &= ~IFF_TX_SKB_SHARING;
 }
 
+void bond_xdp_set_features(struct net_device *bond_dev)
+{
+       struct bonding *bond = netdev_priv(bond_dev);
+       xdp_features_t val = NETDEV_XDP_ACT_MASK;
+       struct list_head *iter;
+       struct slave *slave;
+
+       ASSERT_RTNL();
+
+       if (!bond_xdp_check(bond)) {
+               xdp_clear_features_flag(bond_dev);
+               return;
+       }
+
+       bond_for_each_slave(bond, slave, iter)
+               val &= slave->dev->xdp_features;
+
+       xdp_set_features_flag(bond_dev, val);
+}
+
 /* enslave device <slave> to bond device <master> */
 int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
                 struct netlink_ext_ack *extack)
                        bpf_prog_inc(bond->xdp_prog);
        }
 
+       bond_xdp_set_features(bond_dev);
+
        slave_info(bond_dev, slave_dev, "Enslaving as %s interface with %s link\n",
                   bond_is_active_slave(new_slave) ? "an active" : "a backup",
                   new_slave->link != BOND_LINK_DOWN ? "an up" : "a down");
        if (!netif_is_bond_master(slave_dev))
                slave_dev->priv_flags &= ~IFF_BONDING;
 
+       bond_xdp_set_features(bond_dev);
        kobject_put(&slave->kobj);
 
        return 0;
                /* Propagate to master device */
                call_netdevice_notifiers(event, slave->bond->dev);
                break;
+       case NETDEV_XDP_FEAT_CHANGE:
+               bond_xdp_set_features(bond_dev);
+               break;
        default:
                break;
        }
        if (BOND_MODE(bond) == BOND_MODE_ACTIVEBACKUP)
                bond_dev->features |= BOND_XFRM_FEATURES;
 #endif /* CONFIG_XFRM_OFFLOAD */
+
+       if (bond_xdp_check(bond))
+               bond_dev->xdp_features = NETDEV_XDP_ACT_MASK;
 }
 
 /* Destroy a bonding device.
 
 void bond_prepare_sysfs_group(struct bonding *bond);
 int bond_sysfs_slave_add(struct slave *slave);
 void bond_sysfs_slave_del(struct slave *slave);
+void bond_xdp_set_features(struct net_device *bond_dev);
 int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev,
                 struct netlink_ext_ack *extack);
 int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);