Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5bc16031 authored by Mitch Williams's avatar Mitch Williams Committed by Jeff Kirsher
Browse files

i40e: set default VSI without a reset



Remove the need for a reset when the device enters limited promiscuous
mode. This was causing heartburn for people who were using VFs and
bridging, since this would require all of the VFs to undergo a reset
each time the PF changed its promiscuity.

Change-ID: I0a83495c5e4d68112bbc7a7a076d20fa8dd3b61c
Signed-off-by: default avatarMitch Williams <mitch.a.williams@intel.com>
Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent 63590b61
Loading
Loading
Loading
Loading
+22 −4
Original line number Original line Diff line number Diff line
@@ -2110,7 +2110,25 @@ int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
			 */
			 */
			if (pf->cur_promisc != cur_promisc) {
			if (pf->cur_promisc != cur_promisc) {
				pf->cur_promisc = cur_promisc;
				pf->cur_promisc = cur_promisc;
				set_bit(__I40E_PF_RESET_REQUESTED, &pf->state);
				if (cur_promisc)
					aq_ret =
					      i40e_aq_set_default_vsi(hw,
								      vsi->seid,
								      NULL);
				else
					aq_ret =
					    i40e_aq_clear_default_vsi(hw,
								      vsi->seid,
								      NULL);
				if (aq_ret) {
					retval = i40e_aq_rc_to_posix(aq_ret,
							hw->aq.asq_last_status);
					dev_info(&pf->pdev->dev,
						 "Set default VSI failed, err %s, aq_err %s\n",
						 i40e_stat_str(hw, aq_ret),
						 i40e_aq_str(hw,
						     hw->aq.asq_last_status));
				}
			}
			}
		} else {
		} else {
			aq_ret = i40e_aq_set_vsi_unicast_promiscuous(
			aq_ret = i40e_aq_set_vsi_unicast_promiscuous(
@@ -10047,14 +10065,14 @@ void i40e_veb_release(struct i40e_veb *veb)
static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi)
static int i40e_add_veb(struct i40e_veb *veb, struct i40e_vsi *vsi)
{
{
	struct i40e_pf *pf = veb->pf;
	struct i40e_pf *pf = veb->pf;
	bool is_default = veb->pf->cur_promisc;
	bool enable_stats = !!(pf->flags & I40E_FLAG_VEB_STATS_ENABLED);
	bool enable_stats = !!(pf->flags & I40E_FLAG_VEB_STATS_ENABLED);
	int ret;
	int ret;


	/* get a VEB from the hardware */
	ret = i40e_aq_add_veb(&pf->hw, veb->uplink_seid, vsi->seid,
	ret = i40e_aq_add_veb(&pf->hw, veb->uplink_seid, vsi->seid,
			      veb->enabled_tc, is_default,
			      veb->enabled_tc, false,
			      &veb->seid, enable_stats, NULL);
			      &veb->seid, enable_stats, NULL);

	/* get a VEB from the hardware */
	if (ret) {
	if (ret) {
		dev_info(&pf->pdev->dev,
		dev_info(&pf->pdev->dev,
			 "couldn't add VEB, err %s aq_err %s\n",
			 "couldn't add VEB, err %s aq_err %s\n",