Re: [Patch net-next v2] act_mirred: get rid of tcfm_ifindex from struct tcf_mirred

2017-12-06 Thread David Miller
From: Cong Wang 
Date: Tue,  5 Dec 2017 16:17:26 -0800

> tcfm_dev always points to the correct netdev and we already
> hold a refcnt, so no need to use tcfm_ifindex to lookup again.
> 
> If we would support moving target netdev across netns, using
> pointer would be better than ifindex.
> 
> This also fixes dumping obsolete ifindex, now after the
> target device is gone we just dump 0 as ifindex.
> 
> Cc: Jiri Pirko 
> Cc: Jamal Hadi Salim 
> Signed-off-by: Cong Wang 

Both act_mirred patches applied, thanks Cong.


Re: [Patch net-next v2] act_mirred: get rid of tcfm_ifindex from struct tcf_mirred

2017-12-06 Thread Jiri Pirko
Wed, Dec 06, 2017 at 01:17:26AM CET, xiyou.wangc...@gmail.com wrote:
>tcfm_dev always points to the correct netdev and we already
>hold a refcnt, so no need to use tcfm_ifindex to lookup again.
>
>If we would support moving target netdev across netns, using
>pointer would be better than ifindex.
>
>This also fixes dumping obsolete ifindex, now after the
>target device is gone we just dump 0 as ifindex.
>
>Cc: Jiri Pirko 
>Cc: Jamal Hadi Salim 
>Signed-off-by: Cong Wang 

Acked-by: Jiri Pirko 

Thanks!


[Patch net-next v2] act_mirred: get rid of tcfm_ifindex from struct tcf_mirred

2017-12-05 Thread Cong Wang
tcfm_dev always points to the correct netdev and we already
hold a refcnt, so no need to use tcfm_ifindex to lookup again.

If we would support moving target netdev across netns, using
pointer would be better than ifindex.

This also fixes dumping obsolete ifindex, now after the
target device is gone we just dump 0 as ifindex.

Cc: Jiri Pirko 
Cc: Jamal Hadi Salim 
Signed-off-by: Cong Wang 
---
 drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c  |  6 ++
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c  | 12 +---
 drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c |  8 
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |  6 --
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c   |  5 ++---
 drivers/net/ethernet/mellanox/mlxsw/spectrum.c|  5 +
 drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c |  3 +--
 drivers/net/ethernet/netronome/nfp/flower/action.c|  4 +---
 include/net/tc_act/tc_mirred.h|  6 ++
 net/dsa/slave.c   |  5 +
 net/sched/act_mirred.c|  7 +++
 11 files changed, 26 insertions(+), 41 deletions(-)

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c 
b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
index 3d201d7324bd..b3ff5287aafe 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c
@@ -54,12 +54,10 @@ static int bnxt_tc_parse_redir(struct bnxt *bp,
   struct bnxt_tc_actions *actions,
   const struct tc_action *tc_act)
 {
-   int ifindex = tcf_mirred_ifindex(tc_act);
-   struct net_device *dev;
+   struct net_device *dev = tcf_mirred_dev(tc_act);
 
-   dev = __dev_get_by_index(dev_net(bp->dev), ifindex);
if (!dev) {
-   netdev_info(bp->dev, "no dev for ifindex=%d", ifindex);
+   netdev_info(bp->dev, "no dev in mirred action");
return -EINVAL;
}
 
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
index d4a548a6a55c..a12b894f135d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c
@@ -405,9 +405,7 @@ static void cxgb4_process_flow_actions(struct net_device 
*in,
} else if (is_tcf_gact_shot(a)) {
fs->action = FILTER_DROP;
} else if (is_tcf_mirred_egress_redirect(a)) {
-   int ifindex = tcf_mirred_ifindex(a);
-   struct net_device *out = __dev_get_by_index(dev_net(in),
-   ifindex);
+   struct net_device *out = tcf_mirred_dev(a);
struct port_info *pi = netdev_priv(out);
 
fs->action = FILTER_SWITCH;
@@ -582,14 +580,14 @@ static int cxgb4_validate_flow_actions(struct net_device 
*dev,
/* Do nothing */
} else if (is_tcf_mirred_egress_redirect(a)) {
struct adapter *adap = netdev2adap(dev);
-   struct net_device *n_dev;
-   unsigned int i, ifindex;
+   struct net_device *n_dev, *target_dev;
+   unsigned int i;
bool found = false;
 
-   ifindex = tcf_mirred_ifindex(a);
+   target_dev = tcf_mirred_dev(a);
for_each_port(adap, i) {
n_dev = adap->port[i];
-   if (ifindex == n_dev->ifindex) {
+   if (target_dev == n_dev) {
found = true;
break;
}
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c 
b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
index cd0cd13a964d..ab174bcfbfb0 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
@@ -114,14 +114,14 @@ static int fill_action_fields(struct adapter *adap,
 
/* Re-direct to specified port in hardware. */
if (is_tcf_mirred_egress_redirect(a)) {
-   struct net_device *n_dev;
-   unsigned int i, index;
+   struct net_device *n_dev, *target_dev;
bool found = false;
+   unsigned int i;
 
-   index = tcf_mirred_ifindex(a);
+   target_dev = tcf_mirred_dev(a);
for_each_port(adap, i) {
n_dev = adap->port[i];
-   if (index == n_dev->ifindex) {
+   if (target_dev == n_dev) {