Commit 14e83bf8 authored by David S. Miller's avatar David S. Miller

Merge branch 'net-sched-block-callbacks-follow-up'

Jiri Pirko says:

====================
net: sched: block callbacks follow-up

This patchset does a bit of cleanup of leftovers after block callbacks
patchset. The main part is patch 2, which restores the original handling
of tc offload feature flag.

---
v1->v2:
- rebased on top of current net-next (bnxt changes)
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 92899063 70b5aee4
...@@ -7347,7 +7347,7 @@ static int bnxt_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -7347,7 +7347,7 @@ static int bnxt_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
{ {
struct bnxt *bp = cb_priv; struct bnxt *bp = cb_priv;
if (!bnxt_tc_flower_enabled(bp)) if (!bnxt_tc_flower_enabled(bp) || !tc_can_offload(bp->dev))
return -EOPNOTSUPP; return -EOPNOTSUPP;
switch (type) { switch (type) {
......
...@@ -124,7 +124,7 @@ static int bnxt_vf_rep_setup_tc_block_cb(enum tc_setup_type type, ...@@ -124,7 +124,7 @@ static int bnxt_vf_rep_setup_tc_block_cb(enum tc_setup_type type,
struct bnxt *bp = vf_rep->bp; struct bnxt *bp = vf_rep->bp;
int vf_fid = bp->pf.vf[vf_rep->vf_idx].fw_fid; int vf_fid = bp->pf.vf[vf_rep->vf_idx].fw_fid;
if (!bnxt_tc_flower_enabled(vf_rep->bp)) if (!bnxt_tc_flower_enabled(vf_rep->bp) || !tc_can_offload(bp->dev))
return -EOPNOTSUPP; return -EOPNOTSUPP;
switch (type) { switch (type) {
......
...@@ -2943,6 +2943,9 @@ static int cxgb_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -2943,6 +2943,9 @@ static int cxgb_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
return -EINVAL; return -EINVAL;
} }
if (!tc_can_offload(dev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSU32: case TC_SETUP_CLSU32:
return cxgb_setup_tc_cls_u32(dev, type_data); return cxgb_setup_tc_cls_u32(dev, type_data);
......
...@@ -9386,6 +9386,9 @@ static int ixgbe_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -9386,6 +9386,9 @@ static int ixgbe_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
{ {
struct ixgbe_adapter *adapter = cb_priv; struct ixgbe_adapter *adapter = cb_priv;
if (!tc_can_offload(adapter->netdev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSU32: case TC_SETUP_CLSU32:
return ixgbe_setup_tc_cls_u32(adapter, type_data); return ixgbe_setup_tc_cls_u32(adapter, type_data);
......
...@@ -3106,6 +3106,9 @@ int mlx5e_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -3106,6 +3106,9 @@ int mlx5e_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
{ {
struct mlx5e_priv *priv = cb_priv; struct mlx5e_priv *priv = cb_priv;
if (!tc_can_offload(priv->netdev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSFLOWER: case TC_SETUP_CLSFLOWER:
return mlx5e_setup_tc_cls_flower(priv, type_data); return mlx5e_setup_tc_cls_flower(priv, type_data);
......
...@@ -682,6 +682,9 @@ static int mlx5e_rep_setup_tc_cb(enum tc_setup_type type, void *type_data, ...@@ -682,6 +682,9 @@ static int mlx5e_rep_setup_tc_cb(enum tc_setup_type type, void *type_data,
{ {
struct mlx5e_priv *priv = cb_priv; struct mlx5e_priv *priv = cb_priv;
if (!tc_can_offload(priv->netdev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSFLOWER: case TC_SETUP_CLSFLOWER:
return mlx5e_rep_setup_tc_cls_flower(priv, type_data); return mlx5e_rep_setup_tc_cls_flower(priv, type_data);
......
...@@ -1738,6 +1738,9 @@ static int mlxsw_sp_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -1738,6 +1738,9 @@ static int mlxsw_sp_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
{ {
struct mlxsw_sp_port *mlxsw_sp_port = cb_priv; struct mlxsw_sp_port *mlxsw_sp_port = cb_priv;
if (!tc_can_offload(mlxsw_sp_port->dev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSMATCHALL: case TC_SETUP_CLSMATCHALL:
return mlxsw_sp_setup_tc_cls_matchall(mlxsw_sp_port, type_data, return mlxsw_sp_setup_tc_cls_matchall(mlxsw_sp_port, type_data,
......
...@@ -121,6 +121,9 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type, ...@@ -121,6 +121,9 @@ static int nfp_bpf_setup_tc_block_cb(enum tc_setup_type type,
struct tc_cls_bpf_offload *cls_bpf = type_data; struct tc_cls_bpf_offload *cls_bpf = type_data;
struct nfp_net *nn = cb_priv; struct nfp_net *nn = cb_priv;
if (!tc_can_offload(nn->dp.netdev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSBPF: case TC_SETUP_CLSBPF:
if (!nfp_net_ebpf_capable(nn) || if (!nfp_net_ebpf_capable(nn) ||
......
...@@ -470,6 +470,9 @@ static int nfp_flower_setup_tc_block_cb(enum tc_setup_type type, ...@@ -470,6 +470,9 @@ static int nfp_flower_setup_tc_block_cb(enum tc_setup_type type,
{ {
struct nfp_net *nn = cb_priv; struct nfp_net *nn = cb_priv;
if (!tc_can_offload(nn->dp.netdev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSFLOWER: case TC_SETUP_CLSFLOWER:
return nfp_flower_repr_offload(nn->app, nn->port->netdev, return nfp_flower_repr_offload(nn->app, nn->port->netdev,
......
...@@ -611,11 +611,7 @@ struct tc_cls_u32_offload { ...@@ -611,11 +611,7 @@ struct tc_cls_u32_offload {
static inline bool tc_can_offload(const struct net_device *dev) static inline bool tc_can_offload(const struct net_device *dev)
{ {
if (!(dev->features & NETIF_F_HW_TC)) return dev->features & NETIF_F_HW_TC;
return false;
if (!dev->netdev_ops->ndo_setup_tc)
return false;
return true;
} }
static inline bool tc_skip_hw(u32 flags) static inline bool tc_skip_hw(u32 flags)
...@@ -623,13 +619,6 @@ static inline bool tc_skip_hw(u32 flags) ...@@ -623,13 +619,6 @@ static inline bool tc_skip_hw(u32 flags)
return (flags & TCA_CLS_FLAGS_SKIP_HW) ? true : false; return (flags & TCA_CLS_FLAGS_SKIP_HW) ? true : false;
} }
static inline bool tc_should_offload(const struct net_device *dev, u32 flags)
{
if (tc_skip_hw(flags))
return false;
return tc_can_offload(dev);
}
static inline bool tc_skip_sw(u32 flags) static inline bool tc_skip_sw(u32 flags)
{ {
return (flags & TCA_CLS_FLAGS_SKIP_SW) ? true : false; return (flags & TCA_CLS_FLAGS_SKIP_SW) ? true : false;
......
...@@ -799,6 +799,9 @@ static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type, void *type_data, ...@@ -799,6 +799,9 @@ static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
{ {
struct net_device *dev = cb_priv; struct net_device *dev = cb_priv;
if (!tc_can_offload(dev))
return -EOPNOTSUPP;
switch (type) { switch (type) {
case TC_SETUP_CLSMATCHALL: case TC_SETUP_CLSMATCHALL:
return dsa_slave_setup_tc_cls_matchall(dev, type_data, ingress); return dsa_slave_setup_tc_cls_matchall(dev, type_data, ingress);
......
...@@ -256,7 +256,7 @@ static void tcf_block_offload_cmd(struct tcf_block *block, struct Qdisc *q, ...@@ -256,7 +256,7 @@ static void tcf_block_offload_cmd(struct tcf_block *block, struct Qdisc *q,
struct net_device *dev = q->dev_queue->dev; struct net_device *dev = q->dev_queue->dev;
struct tc_block_offload bo = {}; struct tc_block_offload bo = {};
if (!tc_can_offload(dev)) if (!dev->netdev_ops->ndo_setup_tc)
return; return;
bo.command = command; bo.command = command;
bo.binder_type = ei->binder_type; bo.binder_type = ei->binder_type;
...@@ -1206,7 +1206,7 @@ static int tc_exts_setup_cb_egdev_call(struct tcf_exts *exts, ...@@ -1206,7 +1206,7 @@ static int tc_exts_setup_cb_egdev_call(struct tcf_exts *exts,
if (!a->ops->get_dev) if (!a->ops->get_dev)
continue; continue;
dev = a->ops->get_dev(a); dev = a->ops->get_dev(a);
if (!dev || !tc_can_offload(dev)) if (!dev)
continue; continue;
ret = tc_setup_cb_egdev_call(dev, type, type_data, err_stop); ret = tc_setup_cb_egdev_call(dev, type, type_data, err_stop);
if (ret < 0) if (ret < 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment