Skip to contentSkip to conversation

qlcnic: bug fixes

PATCH In review Himanshu Madhani 2 participants 6 messages Jul 26, 2013 – Jul 28, 2013

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

cover qlcnic: bug fixes

From: Himanshu Madhani <[email protected]>

Please apply to net.

Thanks,
Himanshu

Jitendra Kalsaria (1):
qlcnic: Fix initialization of work function.

Manish Chopra (2):
qlcnic: Fix setting Guest VLAN
qlcnic: Fix diagnostic interrupt test for 83xx adapters.

Pratik Pujar (1):
qlcnic: Fix operation type and command type.

 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c  |  4 +--
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |  2 ++
 .../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c   |  2 ++
 .../net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c   | 30 +++++++++++++++++++---
 4 files changed, 32 insertions(+), 6 deletions(-)
Signature · 1 line
1.8.1.4
#1 lore raw

PATCH 1/4 qlcnic: Fix initialization of work function.

From: Jitendra Kalsaria <[email protected]>

Work function needs to be initialized before we participate in inter device communication (IDC).

---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +2 -2
index f41dfab..51ab4b5 100644
@@ -2123,6 +2123,8 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
 	set_bit(QLC_83XX_MBX_READY, &adapter->ahw->idc.status);
 	qlcnic_83xx_clear_function_resources(adapter);
 
+	INIT_DELAYED_WORK(&adapter->idc_aen_work, qlcnic_83xx_idc_aen_work);
+
 	/* register for NIC IDC AEN Events */
 	qlcnic_83xx_register_nic_idc_func(adapter, 1);
 
@@ -2140,8 +2142,6 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac)
 	if (adapter->nic_ops->init_driver(adapter))
 		return -EIO;
 
-	INIT_DELAYED_WORK(&adapter->idc_aen_work, qlcnic_83xx_idc_aen_work);
-
 	/* Periodically monitor device status */
 	qlcnic_83xx_idc_poll_dev_state(&adapter->fw_work.work);
 
Signature · 1 line
1.8.1.4
#2 lore raw

PATCH 2/4 qlcnic: Fix operation type and command type.

In reply to Himanshu Madhani

From: Pratik Pujar <[email protected]>

Operation type and command type is not set correct in back channel response.

---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 2 ++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c     | 4 +---
 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c +2 -0
index 62380ce..56e85f9 100644
@@ -762,6 +762,7 @@ static int qlcnic_sriov_alloc_bc_mbx_args(struct qlcnic_cmd_args *mbx, u32 type)
 			memset(mbx->rsp.arg, 0, sizeof(u32) * mbx->rsp.num);
 			mbx->req.arg[0] = (type | (mbx->req.num << 16) |
 					   (3 << 29));
+			mbx->rsp.arg[0] = (type & 0xffff) | mbx->rsp.num << 16;
 			return 0;
 		}
 	}
@@ -813,6 +814,7 @@ static int qlcnic_sriov_prepare_bc_hdr(struct qlcnic_bc_trans *trans,
 		cmd->req.num = trans->req_pay_size / 4;
 		cmd->rsp.num = trans->rsp_pay_size / 4;
 		hdr = trans->rsp_hdr;
+		cmd->op_type = trans->req_hdr->op_type;
 	}
 
 	trans->trans_id = seq;
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c +1 -3
index 46aeb59..9bdd51e 100644
@@ -641,8 +641,6 @@ static int qlcnic_sriov_pf_channel_cfg_cmd(struct qlcnic_bc_trans *trans,
 	int err;
 
 	adapter = vf->adapter;
-	cmd->rsp.arg[0] = trans->req_hdr->cmd_op;
-	cmd->rsp.arg[0] |= (1 << 16);
 
 	if (trans->req_hdr->cmd_op == QLCNIC_BC_CMD_CHANNEL_INIT) {
 		err = qlcnic_sriov_pf_config_vport(adapter, 1, func);
@@ -1187,7 +1185,7 @@ static int qlcnic_sriov_pf_get_acl_cmd(struct qlcnic_bc_trans *trans,
 	u8 cmd_op, mode = vp->vlan_mode;
 
 	cmd_op = trans->req_hdr->cmd_op;
-	cmd->rsp.arg[0] = (cmd_op & 0xffff) | 14 << 16 | 1 << 25;
+	cmd->rsp.arg[0] |= 1 << 25;
 
 	switch (mode) {
 	case QLC_GUEST_VLAN_MODE:
Signature · 1 line
1.8.1.4
#3 lore raw

PATCH 3/4 qlcnic: Fix setting Guest VLAN

In reply to Himanshu Madhani

From: Manish Chopra <[email protected]>

o When configuring guest VLAN after PVID configuration, VF was loading with previously configured PVID. Clear the PVID which was previously configured before configuring guest VLAN.

o Display guest VLAN when it is configured

---
 .../net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c   | 26 +++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c +25 -1
index 9bdd51e..eb49cd6 100644
@@ -1749,6 +1749,7 @@ int qlcnic_sriov_set_vf_vlan(struct net_device *netdev, int vf,
 
 	switch (vlan) {
 	case 4095:
+		vp->vlan = 0;
 		vp->vlan_mode = QLC_GUEST_VLAN_MODE;
 		break;
 	case 0:
@@ -1767,6 +1768,29 @@ int qlcnic_sriov_set_vf_vlan(struct net_device *netdev, int vf,
 	return 0;
 }
 
+static inline __u32 qlcnic_sriov_get_vf_vlan(struct qlcnic_adapter *adapter,
+					     struct qlcnic_vport *vp, int vf)
+{
+	__u32 vlan = 0;
+
+	switch (vp->vlan_mode) {
+	case QLC_PVID_MODE:
+		vlan = vp->vlan;
+		break;
+	case QLC_GUEST_VLAN_MODE:
+		vlan = MAX_VLAN_ID;
+		break;
+	case QLC_NO_VLAN_MODE:
+		vlan = 0;
+		break;
+	default:
+		netdev_info(adapter->netdev, "Invalid VLAN mode = %d for VF %d\n",
+			    vp->vlan_mode, vf);
+	}
+
+	return vlan;
+}
+
 int qlcnic_sriov_get_vf_config(struct net_device *netdev,
 			       int vf, struct ifla_vf_info *ivi)
 {
@@ -1782,7 +1806,7 @@ int qlcnic_sriov_get_vf_config(struct net_device *netdev,
 
 	vp = sriov->vf_info[vf].vp;
 	memcpy(&ivi->mac, vp->mac, ETH_ALEN);
-	ivi->vlan = vp->vlan;
+	ivi->vlan = qlcnic_sriov_get_vf_vlan(adapter, vp, vf);
 	ivi->qos = vp->qos;
 	ivi->spoofchk = vp->spoofchk;
 	if (vp->max_tx_bw == MAX_BW)
Signature · 1 line
1.8.1.4
#4 lore raw

PATCH 4/4 qlcnic: Fix diagnostic interrupt test for 83xx adapters.

In reply to Himanshu Madhani

From: Manish Chopra <[email protected]>

o Initialize proper interrupt handler for 83xx.

---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +2 -0
index 41635f2..cc78d39 100644
@@ -1383,6 +1383,8 @@ qlcnic_request_irq(struct qlcnic_adapter *adapter)
 	if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) {
 		if (qlcnic_82xx_check(adapter))
 			handler = qlcnic_tmp_intr;
+		else
+			handler = qlcnic_83xx_tmp_intr;
 		if (!QLCNIC_IS_MSI_FAMILY(adapter))
 			flags |= IRQF_SHARED;
 
Signature · 1 line
1.8.1.4