Commit e535d87d authored by David S. Miller's avatar David S. Miller
Browse files

Merge tag 'mlx5-fixes-2020-07-30' of git://git.kernel.org/pub/scm/linux/kernel/git/saeed/linux



Saeed Mahameed says:

====================
Mellanox, mlx5 fixes 2020-07-30

This small patchset introduces some fixes to mlx5 driver.

Please pull and let me know if there is any problem.

For -stable v4.18:
 ('net/mlx5e: fix bpf_prog reference count leaks in mlx5e_alloc_rq')

For -stable v5.7:
 ('net/mlx5e: E-Switch, Add misc bit when misc fields changed for mirroring')
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents bbc8a99e e692139e
Loading
Loading
Loading
Loading
+21 −9
Original line number Original line Diff line number Diff line
@@ -551,19 +551,31 @@ static bool mlx5e_restore_tunnel(struct mlx5e_priv *priv, struct sk_buff *skb,
		}
		}
	}
	}


	tun_dst = tun_rx_dst(enc_opts.key.len);
	if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV4_ADDRS) {
		tun_dst = __ip_tun_set_dst(key.enc_ipv4.src, key.enc_ipv4.dst,
					   key.enc_ip.tos, key.enc_ip.ttl,
					   key.enc_tp.dst, TUNNEL_KEY,
					   key32_to_tunnel_id(key.enc_key_id.keyid),
					   enc_opts.key.len);
	} else if (key.enc_control.addr_type == FLOW_DISSECTOR_KEY_IPV6_ADDRS) {
		tun_dst = __ipv6_tun_set_dst(&key.enc_ipv6.src, &key.enc_ipv6.dst,
					     key.enc_ip.tos, key.enc_ip.ttl,
					     key.enc_tp.dst, 0, TUNNEL_KEY,
					     key32_to_tunnel_id(key.enc_key_id.keyid),
					     enc_opts.key.len);
	} else {
		netdev_dbg(priv->netdev,
			   "Couldn't restore tunnel, unsupported addr_type: %d\n",
			   key.enc_control.addr_type);
		return false;
	}

	if (!tun_dst) {
	if (!tun_dst) {
		WARN_ON_ONCE(true);
		netdev_dbg(priv->netdev, "Couldn't restore tunnel, no tun_dst\n");
		return false;
		return false;
	}
	}


	ip_tunnel_key_init(&tun_dst->u.tun_info.key,
	tun_dst->u.tun_info.key.tp_src = key.enc_tp.src;
			   key.enc_ipv4.src, key.enc_ipv4.dst,
			   key.enc_ip.tos, key.enc_ip.ttl,
			   0, /* label */
			   key.enc_tp.src, key.enc_tp.dst,
			   key32_to_tunnel_id(key.enc_key_id.keyid),
			   TUNNEL_KEY);


	if (enc_opts.key.len)
	if (enc_opts.key.len)
		ip_tunnel_info_opts_set(&tun_dst->u.tun_info,
		ip_tunnel_info_opts_set(&tun_dst->u.tun_info,
+2 −0
Original line number Original line Diff line number Diff line
@@ -301,6 +301,8 @@ static int mlx5e_tc_tun_parse_geneve_params(struct mlx5e_priv *priv,
		MLX5_SET(fte_match_set_misc, misc_v, geneve_protocol_type, ETH_P_TEB);
		MLX5_SET(fte_match_set_misc, misc_v, geneve_protocol_type, ETH_P_TEB);
	}
	}


	spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;

	return 0;
	return 0;
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -80,6 +80,8 @@ static int mlx5e_tc_tun_parse_gretap(struct mlx5e_priv *priv,
			 gre_key.key, be32_to_cpu(enc_keyid.key->keyid));
			 gre_key.key, be32_to_cpu(enc_keyid.key->keyid));
	}
	}


	spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;

	return 0;
	return 0;
}
}


+2 −0
Original line number Original line Diff line number Diff line
@@ -136,6 +136,8 @@ static int mlx5e_tc_tun_parse_vxlan(struct mlx5e_priv *priv,
	MLX5_SET(fte_match_set_misc, misc_v, vxlan_vni,
	MLX5_SET(fte_match_set_misc, misc_v, vxlan_vni,
		 be32_to_cpu(enc_keyid.key->keyid));
		 be32_to_cpu(enc_keyid.key->keyid));


	spec->match_criteria_enable |= MLX5_MATCH_MISC_PARAMETERS;

	return 0;
	return 0;
}
}


+2 −2
Original line number Original line Diff line number Diff line
@@ -419,7 +419,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c,
		err = mlx5_wq_ll_create(mdev, &rqp->wq, rqc_wq, &rq->mpwqe.wq,
		err = mlx5_wq_ll_create(mdev, &rqp->wq, rqc_wq, &rq->mpwqe.wq,
					&rq->wq_ctrl);
					&rq->wq_ctrl);
		if (err)
		if (err)
			return err;
			goto err_rq_wq_destroy;


		rq->mpwqe.wq.db = &rq->mpwqe.wq.db[MLX5_RCV_DBR];
		rq->mpwqe.wq.db = &rq->mpwqe.wq.db[MLX5_RCV_DBR];


@@ -470,7 +470,7 @@ static int mlx5e_alloc_rq(struct mlx5e_channel *c,
		err = mlx5_wq_cyc_create(mdev, &rqp->wq, rqc_wq, &rq->wqe.wq,
		err = mlx5_wq_cyc_create(mdev, &rqp->wq, rqc_wq, &rq->wqe.wq,
					 &rq->wq_ctrl);
					 &rq->wq_ctrl);
		if (err)
		if (err)
			return err;
			goto err_rq_wq_destroy;


		rq->wqe.wq.db = &rq->wqe.wq.db[MLX5_RCV_DBR];
		rq->wqe.wq.db = &rq->wqe.wq.db[MLX5_RCV_DBR];


Loading