Message ID | 20180323220534.19353-8-saeedm@mellanox.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net,1/8] net/mlx5e: Don't override vport admin link state in switchdev mode | expand |
Hello! On 3/24/2018 1:05 AM, Saeed Mahameed wrote: > From: Or Gerlitz <ogerlitz@mellanox.com> > > Currently we use the global ipv6_stub var to access the ipv6 global > nd table. This practice gets us to troubles when the stub is only partially > set e.g when ipv6 is loaded under the disabled policy. In this case, as of commit > 343d60aada5a "ipv6: change ipv6_stub_impl.ipv6_dst_lookup to take net argument" The summary line must be enclosed in (""), not just "". > the stub is not null, but stub->nd_tbl is and we crash. > > As we can access directly the ipv6 nd_tbl, the fix is just avoid the As we can access the ipv6 nd_tbl directly, the fix is just to avoid the > reference through the stub. There is one place in the code were we ^^^^ Where? > issue ipv6 route lookup and keep doing it through the stub, but that > mentioned commit makes sure we get -EAFNOSUPPORT from the stack. > > Fixes: 232c001398ae ('net/mlx5e: Add support to neighbour update flow') ("") here as well. > Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> > Reviewed-by: Aviv Heller <avivh@mellanox.com> > Signed-off-by: Saeed Mahameed <saeedm@mellanox.com> [...] MBR, Sergei
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c index 9a5a2a7eeab3..500d817d2b0a 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rep.c @@ -293,7 +293,7 @@ void mlx5e_remove_sqs_fwd_rules(struct mlx5e_priv *priv) static void mlx5e_rep_neigh_update_init_interval(struct mlx5e_rep_priv *rpriv) { #if IS_ENABLED(CONFIG_IPV6) - unsigned long ipv6_interval = NEIGH_VAR(&ipv6_stub->nd_tbl->parms, + unsigned long ipv6_interval = NEIGH_VAR(&nd_tbl.parms, DELAY_PROBE_TIME); #else unsigned long ipv6_interval = ~0UL; @@ -429,7 +429,7 @@ static int mlx5e_rep_netevent_event(struct notifier_block *nb, case NETEVENT_NEIGH_UPDATE: n = ptr; #if IS_ENABLED(CONFIG_IPV6) - if (n->tbl != ipv6_stub->nd_tbl && n->tbl != &arp_tbl) + if (n->tbl != &nd_tbl && n->tbl != &arp_tbl) #else if (n->tbl != &arp_tbl) #endif @@ -477,7 +477,7 @@ static int mlx5e_rep_netevent_event(struct notifier_block *nb, * done per device delay prob time parameter. */ #if IS_ENABLED(CONFIG_IPV6) - if (!p->dev || (p->tbl != ipv6_stub->nd_tbl && p->tbl != &arp_tbl)) + if (!p->dev || (p->tbl != &nd_tbl && p->tbl != &arp_tbl)) #else if (!p->dev || p->tbl != &arp_tbl) #endif diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index ae11678a31e8..43234cabf444 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -963,7 +963,7 @@ void mlx5e_tc_update_neigh_used_value(struct mlx5e_neigh_hash_entry *nhe) tbl = &arp_tbl; #if IS_ENABLED(CONFIG_IPV6) else if (m_neigh->family == AF_INET6) - tbl = ipv6_stub->nd_tbl; + tbl = &nd_tbl; #endif else return;