Commit 35a04aa3 authored by Ariel Elior's avatar Ariel Elior Committed by David S. Miller
Browse files

bnx2x: Fix functionality of configuring vlan list



The check on return code of bnx2x_vfop_config_vlan0() would lead to error
handling flow as the return value indicating an existing pending ramrod would
be erroneously considered as an error.

Signed-off-by: default avatarAriel Elior <ariele@broadcom.com>
Signed-off-by: default avatarYuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 34d5626a
Loading
Loading
Loading
Loading
+2 −35
Original line number Diff line number Diff line
@@ -522,23 +522,6 @@ static int bnx2x_vfop_set_user_req(struct bnx2x *bp,
	return 0;
}

static int
bnx2x_vfop_config_vlan0(struct bnx2x *bp,
			struct bnx2x_vlan_mac_ramrod_params *vlan_mac,
			bool add)
{
	int rc;

	vlan_mac->user_req.cmd = add ? BNX2X_VLAN_MAC_ADD :
		BNX2X_VLAN_MAC_DEL;
	vlan_mac->user_req.u.vlan.vlan = 0;

	rc = bnx2x_config_vlan_mac(bp, vlan_mac);
	if (rc == -EEXIST)
		rc = 0;
	return rc;
}

static int bnx2x_vfop_config_list(struct bnx2x *bp,
				  struct bnx2x_vfop_filters *filters,
				  struct bnx2x_vlan_mac_ramrod_params *vlan_mac)
@@ -643,30 +626,14 @@ static void bnx2x_vfop_vlan_mac(struct bnx2x *bp, struct bnx2x_virtf *vf)

	case BNX2X_VFOP_VLAN_CONFIG_LIST:
		/* next state */
		vfop->state = BNX2X_VFOP_VLAN_CONFIG_LIST_0;

		/* remove vlan0 - could be no-op */
		vfop->rc = bnx2x_vfop_config_vlan0(bp, vlan_mac, false);
		if (vfop->rc)
			goto op_err;
		vfop->state = BNX2X_VFOP_VLAN_MAC_CHK_DONE;

		/* Do vlan list config. if this operation fails we try to
		 * restore vlan0 to keep the queue is working order
		 */
		/* do list config */
		vfop->rc = bnx2x_vfop_config_list(bp, filters, vlan_mac);
		if (!vfop->rc) {
			set_bit(RAMROD_CONT, &vlan_mac->ramrod_flags);
			vfop->rc = bnx2x_config_vlan_mac(bp, vlan_mac);
		}
		bnx2x_vfop_finalize(vf, vfop->rc, VFOP_CONT); /* fall-through */

	case BNX2X_VFOP_VLAN_CONFIG_LIST_0:
		/* next state */
		vfop->state = BNX2X_VFOP_VLAN_MAC_CHK_DONE;

		if (list_empty(&obj->head))
			/* add vlan0 */
			vfop->rc = bnx2x_vfop_config_vlan0(bp, vlan_mac, true);
		bnx2x_vfop_finalize(vf, vfop->rc, VFOP_DONE);

	default: