xdp: add xdp_set_features_flag utility routine
Introduce xdp_set_features_flag utility routine in order to update dynamically xdp_features according to the dynamic hw configuration via ethtool (e.g. changing number of hw rx/tx queues). Add xdp_clear_features_flag() in order to clear all xdp_feature flag. Reviewed-by: Shay Agroskin <shayagr@amazon.com> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
bf51d27704
commit
f85949f982
+19
-7
@@ -774,20 +774,32 @@ static int __init xdp_metadata_init(void)
|
||||
}
|
||||
late_initcall(xdp_metadata_init);
|
||||
|
||||
void xdp_set_features_flag(struct net_device *dev, xdp_features_t val)
|
||||
{
|
||||
val &= NETDEV_XDP_ACT_MASK;
|
||||
if (dev->xdp_features == val)
|
||||
return;
|
||||
|
||||
dev->xdp_features = val;
|
||||
call_netdevice_notifiers(NETDEV_XDP_FEAT_CHANGE, dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xdp_set_features_flag);
|
||||
|
||||
void xdp_features_set_redirect_target(struct net_device *dev, bool support_sg)
|
||||
{
|
||||
dev->xdp_features |= NETDEV_XDP_ACT_NDO_XMIT;
|
||||
if (support_sg)
|
||||
dev->xdp_features |= NETDEV_XDP_ACT_NDO_XMIT_SG;
|
||||
xdp_features_t val = (dev->xdp_features | NETDEV_XDP_ACT_NDO_XMIT);
|
||||
|
||||
call_netdevice_notifiers(NETDEV_XDP_FEAT_CHANGE, dev);
|
||||
if (support_sg)
|
||||
val |= NETDEV_XDP_ACT_NDO_XMIT_SG;
|
||||
xdp_set_features_flag(dev, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xdp_features_set_redirect_target);
|
||||
|
||||
void xdp_features_clear_redirect_target(struct net_device *dev)
|
||||
{
|
||||
dev->xdp_features &= ~(NETDEV_XDP_ACT_NDO_XMIT |
|
||||
NETDEV_XDP_ACT_NDO_XMIT_SG);
|
||||
call_netdevice_notifiers(NETDEV_XDP_FEAT_CHANGE, dev);
|
||||
xdp_features_t val = dev->xdp_features;
|
||||
|
||||
val &= ~(NETDEV_XDP_ACT_NDO_XMIT | NETDEV_XDP_ACT_NDO_XMIT_SG);
|
||||
xdp_set_features_flag(dev, val);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(xdp_features_clear_redirect_target);
|
||||
|
||||
Reference in New Issue
Block a user