Skip to content

Commit 66f1939

Browse files
wenxudavem330
authored andcommitted
flow_offload: use flow_indr_block_cb_alloc/remove function
Prepare fix the bug in the next patch. use flow_indr_block_cb_alloc/remove function and remove the __flow_block_indr_binding. Signed-off-by: wenxu <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 26f2eb2 commit 66f1939

File tree

6 files changed

+44
-44
lines changed

6 files changed

+44
-44
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1889,7 +1889,8 @@ static void bnxt_tc_setup_indr_rel(void *cb_priv)
18891889
}
18901890

18911891
static int bnxt_tc_setup_indr_block(struct net_device *netdev, struct bnxt *bp,
1892-
struct flow_block_offload *f)
1892+
struct flow_block_offload *f, void *data,
1893+
void (*cleanup)(struct flow_block_cb *block_cb))
18931894
{
18941895
struct bnxt_flower_indr_block_cb_priv *cb_priv;
18951896
struct flow_block_cb *block_cb;
@@ -1907,9 +1908,10 @@ static int bnxt_tc_setup_indr_block(struct net_device *netdev, struct bnxt *bp,
19071908
cb_priv->bp = bp;
19081909
list_add(&cb_priv->list, &bp->tc_indr_block_list);
19091910

1910-
block_cb = flow_block_cb_alloc(bnxt_tc_setup_indr_block_cb,
1911-
cb_priv, cb_priv,
1912-
bnxt_tc_setup_indr_rel);
1911+
block_cb = flow_indr_block_cb_alloc(bnxt_tc_setup_indr_block_cb,
1912+
cb_priv, cb_priv,
1913+
bnxt_tc_setup_indr_rel, f,
1914+
netdev, data, cleanup);
19131915
if (IS_ERR(block_cb)) {
19141916
list_del(&cb_priv->list);
19151917
kfree(cb_priv);
@@ -1930,7 +1932,7 @@ static int bnxt_tc_setup_indr_block(struct net_device *netdev, struct bnxt *bp,
19301932
if (!block_cb)
19311933
return -ENOENT;
19321934

1933-
flow_block_cb_remove(block_cb, f);
1935+
flow_indr_block_cb_remove(block_cb, f);
19341936
list_del(&block_cb->driver_list);
19351937
break;
19361938
default:
@@ -1945,14 +1947,17 @@ static bool bnxt_is_netdev_indr_offload(struct net_device *netdev)
19451947
}
19461948

19471949
static int bnxt_tc_setup_indr_cb(struct net_device *netdev, void *cb_priv,
1948-
enum tc_setup_type type, void *type_data)
1950+
enum tc_setup_type type, void *type_data,
1951+
void *data,
1952+
void (*cleanup)(struct flow_block_cb *block_cb))
19491953
{
19501954
if (!bnxt_is_netdev_indr_offload(netdev))
19511955
return -EOPNOTSUPP;
19521956

19531957
switch (type) {
19541958
case TC_SETUP_BLOCK:
1955-
return bnxt_tc_setup_indr_block(netdev, cb_priv, type_data);
1959+
return bnxt_tc_setup_indr_block(netdev, cb_priv, type_data, data,
1960+
cleanup);
19561961
default:
19571962
break;
19581963
}

drivers/net/ethernet/mellanox/mlx5/core/en/rep/tc.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,9 @@ static int
407407
mlx5e_rep_indr_setup_block(struct net_device *netdev,
408408
struct mlx5e_rep_priv *rpriv,
409409
struct flow_block_offload *f,
410-
flow_setup_cb_t *setup_cb)
410+
flow_setup_cb_t *setup_cb,
411+
void *data,
412+
void (*cleanup)(struct flow_block_cb *block_cb))
411413
{
412414
struct mlx5e_priv *priv = netdev_priv(rpriv->netdev);
413415
struct mlx5e_rep_indr_block_priv *indr_priv;
@@ -438,8 +440,9 @@ mlx5e_rep_indr_setup_block(struct net_device *netdev,
438440
list_add(&indr_priv->list,
439441
&rpriv->uplink_priv.tc_indr_block_priv_list);
440442

441-
block_cb = flow_block_cb_alloc(setup_cb, indr_priv, indr_priv,
442-
mlx5e_rep_indr_block_unbind);
443+
block_cb = flow_indr_block_cb_alloc(setup_cb, indr_priv, indr_priv,
444+
mlx5e_rep_indr_block_unbind,
445+
f, netdev, data, cleanup);
443446
if (IS_ERR(block_cb)) {
444447
list_del(&indr_priv->list);
445448
kfree(indr_priv);
@@ -458,7 +461,7 @@ mlx5e_rep_indr_setup_block(struct net_device *netdev,
458461
if (!block_cb)
459462
return -ENOENT;
460463

461-
flow_block_cb_remove(block_cb, f);
464+
flow_indr_block_cb_remove(block_cb, f);
462465
list_del(&block_cb->driver_list);
463466
return 0;
464467
default:
@@ -469,15 +472,19 @@ mlx5e_rep_indr_setup_block(struct net_device *netdev,
469472

470473
static
471474
int mlx5e_rep_indr_setup_cb(struct net_device *netdev, void *cb_priv,
472-
enum tc_setup_type type, void *type_data)
475+
enum tc_setup_type type, void *type_data,
476+
void *data,
477+
void (*cleanup)(struct flow_block_cb *block_cb))
473478
{
474479
switch (type) {
475480
case TC_SETUP_BLOCK:
476481
return mlx5e_rep_indr_setup_block(netdev, cb_priv, type_data,
477-
mlx5e_rep_indr_setup_tc_cb);
482+
mlx5e_rep_indr_setup_tc_cb,
483+
data, cleanup);
478484
case TC_SETUP_FT:
479485
return mlx5e_rep_indr_setup_block(netdev, cb_priv, type_data,
480-
mlx5e_rep_indr_setup_ft_cb);
486+
mlx5e_rep_indr_setup_ft_cb,
487+
data, cleanup);
481488
default:
482489
return -EOPNOTSUPP;
483490
}

drivers/net/ethernet/netronome/nfp/flower/main.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,9 @@ int nfp_flower_setup_qos_offload(struct nfp_app *app, struct net_device *netdev,
459459
struct tc_cls_matchall_offload *flow);
460460
void nfp_flower_stats_rlim_reply(struct nfp_app *app, struct sk_buff *skb);
461461
int nfp_flower_indr_setup_tc_cb(struct net_device *netdev, void *cb_priv,
462-
enum tc_setup_type type, void *type_data);
462+
enum tc_setup_type type, void *type_data,
463+
void *data,
464+
void (*cleanup)(struct flow_block_cb *block_cb));
463465
int nfp_flower_setup_indr_block_cb(enum tc_setup_type type, void *type_data,
464466
void *cb_priv);
465467

drivers/net/ethernet/netronome/nfp/flower/offload.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1647,7 +1647,8 @@ static void nfp_flower_setup_indr_tc_release(void *cb_priv)
16471647

16481648
static int
16491649
nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct nfp_app *app,
1650-
struct flow_block_offload *f)
1650+
struct flow_block_offload *f, void *data,
1651+
void (*cleanup)(struct flow_block_cb *block_cb))
16511652
{
16521653
struct nfp_flower_indr_block_cb_priv *cb_priv;
16531654
struct nfp_flower_priv *priv = app->priv;
@@ -1676,9 +1677,10 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct nfp_app *app,
16761677
cb_priv->app = app;
16771678
list_add(&cb_priv->list, &priv->indr_block_cb_priv);
16781679

1679-
block_cb = flow_block_cb_alloc(nfp_flower_setup_indr_block_cb,
1680-
cb_priv, cb_priv,
1681-
nfp_flower_setup_indr_tc_release);
1680+
block_cb = flow_indr_block_cb_alloc(nfp_flower_setup_indr_block_cb,
1681+
cb_priv, cb_priv,
1682+
nfp_flower_setup_indr_tc_release,
1683+
f, netdev, data, cleanup);
16821684
if (IS_ERR(block_cb)) {
16831685
list_del(&cb_priv->list);
16841686
kfree(cb_priv);
@@ -1699,7 +1701,7 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct nfp_app *app,
16991701
if (!block_cb)
17001702
return -ENOENT;
17011703

1702-
flow_block_cb_remove(block_cb, f);
1704+
flow_indr_block_cb_remove(block_cb, f);
17031705
list_del(&block_cb->driver_list);
17041706
return 0;
17051707
default:
@@ -1710,15 +1712,17 @@ nfp_flower_setup_indr_tc_block(struct net_device *netdev, struct nfp_app *app,
17101712

17111713
int
17121714
nfp_flower_indr_setup_tc_cb(struct net_device *netdev, void *cb_priv,
1713-
enum tc_setup_type type, void *type_data)
1715+
enum tc_setup_type type, void *type_data,
1716+
void *data,
1717+
void (*cleanup)(struct flow_block_cb *block_cb))
17141718
{
17151719
if (!nfp_fl_is_netdev_to_offload(netdev))
17161720
return -EOPNOTSUPP;
17171721

17181722
switch (type) {
17191723
case TC_SETUP_BLOCK:
17201724
return nfp_flower_setup_indr_tc_block(netdev, cb_priv,
1721-
type_data);
1725+
type_data, data, cleanup);
17221726
default:
17231727
return -EOPNOTSUPP;
17241728
}

include/net/flow_offload.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -545,7 +545,9 @@ static inline void flow_block_init(struct flow_block *flow_block)
545545
}
546546

547547
typedef int flow_indr_block_bind_cb_t(struct net_device *dev, void *cb_priv,
548-
enum tc_setup_type type, void *type_data);
548+
enum tc_setup_type type, void *type_data,
549+
void *data,
550+
void (*cleanup)(struct flow_block_cb *block_cb));
549551

550552
int flow_indr_dev_register(flow_indr_block_bind_cb_t *cb, void *cb_priv);
551553
void flow_indr_dev_unregister(flow_indr_block_bind_cb_t *cb, void *cb_priv,

net/core/flow_offload.c

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -458,25 +458,6 @@ struct flow_block_cb *flow_indr_block_cb_alloc(flow_setup_cb_t *cb,
458458
}
459459
EXPORT_SYMBOL(flow_indr_block_cb_alloc);
460460

461-
static void __flow_block_indr_binding(struct flow_block_offload *bo,
462-
struct net_device *dev, void *data,
463-
void (*cleanup)(struct flow_block_cb *block_cb))
464-
{
465-
struct flow_block_cb *block_cb;
466-
467-
list_for_each_entry(block_cb, &bo->cb_list, list) {
468-
switch (bo->command) {
469-
case FLOW_BLOCK_BIND:
470-
flow_block_indr_init(block_cb, bo, dev, data, cleanup);
471-
list_add(&block_cb->indr.list, &flow_block_indr_list);
472-
break;
473-
case FLOW_BLOCK_UNBIND:
474-
list_del(&block_cb->indr.list);
475-
break;
476-
}
477-
}
478-
}
479-
480461
int flow_indr_dev_setup_offload(struct net_device *dev,
481462
enum tc_setup_type type, void *data,
482463
struct flow_block_offload *bo,
@@ -486,9 +467,8 @@ int flow_indr_dev_setup_offload(struct net_device *dev,
486467

487468
mutex_lock(&flow_indr_block_lock);
488469
list_for_each_entry(this, &flow_block_indr_dev_list, list)
489-
this->cb(dev, this->cb_priv, type, bo);
470+
this->cb(dev, this->cb_priv, type, bo, data, cleanup);
490471

491-
__flow_block_indr_binding(bo, dev, data, cleanup);
492472
mutex_unlock(&flow_indr_block_lock);
493473

494474
return list_empty(&bo->cb_list) ? -EOPNOTSUPP : 0;

0 commit comments

Comments
 (0)