netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements
@ 2013-04-13 17:28 Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter Shahed Shaikh
                   ` (8 more replies)
  0 siblings, 9 replies; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh

From: Shahed Shaikh <shahed.shaikh@qlogic.com>

Please apply to net-next.

Thanks,
Shahed

Himanshu Madhani (4):
  qlcnic: Implement GET_LED_STATUS command for 82xx adapter.
  qlcnic: Add identifying string for 83xx adapter
  qlcnic: fix beaconing test for 82xx adapter
  qlcnic: Enable Interrupt Coalescing for 83xx adapter

Manish Chopra (1):
  qlcnic: Enhanced channel configuration logs

Shahed Shaikh (2):
  qlcnic: Fix typo in logs
  qlcnic: Bump up the version to 5.2.41

Sony Chacko (1):
  qlcnic: Fix recurring firmware dump collection

Sritej Velaga (1):
  qlcnic: fix TSO race condition

 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h        |   25 ++++-
 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c    |   24 +++--
 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c  |    3 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c    |    1 +
 .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c    |   72 ++++++++++++---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c     |   23 +++++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h     |    1 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c     |    8 ++-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   92 +++++++++++++++++---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c  |   13 +++-
 10 files changed, 217 insertions(+), 45 deletions(-)

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter.
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 2/9] qlcnic: Fix typo in logs Shahed Shaikh
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

From: Himanshu Madhani <himanshu.madhani@qlogic.com>

o GET_LED_STATUS command will be used by driver to get
  current beacon state from 82xx adapter.

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h       |    5 ++++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c   |    1 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c    |   23 +++++++++++++++++++++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h    |    1 +
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c |    9 ++++++++
 5 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index ef55718..602d3e4 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -807,6 +807,7 @@ struct qlcnic_mac_list_s {
 #define QLCNIC_FW_CAPABILITY_2_LRO_MAX_TCP_SEG	BIT_2
 #define QLCNIC_FW_CAP2_HW_LRO_IPV6		BIT_3
 #define QLCNIC_FW_CAPABILITY_2_OCBB		BIT_5
+#define QLCNIC_FW_CAPABILITY_2_BEACON		BIT_7
 
 /* module types */
 #define LINKEVENT_MODULE_NOT_PRESENT			1
@@ -901,6 +902,9 @@ struct qlcnic_ipaddr {
 #define QLCNIC_IS_MSI_FAMILY(adapter) \
 	((adapter)->flags & (QLCNIC_MSI_ENABLED | QLCNIC_MSIX_ENABLED))
 
+#define QLCNIC_BEACON_EANBLE		0xC
+#define QLCNIC_BEACON_DISABLE		0xD
+
 #define QLCNIC_DEF_NUM_STS_DESC_RINGS	4
 #define QLCNIC_MSIX_TBL_SPACE		8192
 #define QLCNIC_PCI_REG_MSIX_TBL 	0x44
@@ -1526,6 +1530,7 @@ int qlcnic_reset_npar_config(struct qlcnic_adapter *);
 int qlcnic_set_eswitch_port_config(struct qlcnic_adapter *);
 void qlcnic_add_lb_filter(struct qlcnic_adapter *, struct sk_buff *, int,
 			  __le16);
+int qlcnic_get_beacon_state(struct qlcnic_adapter *, u8 *);
 int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter);
 int qlcnic_read_mac_addr(struct qlcnic_adapter *);
 int qlcnic_setup_netdev(struct qlcnic_adapter *, struct net_device *, int);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
index 43562c2..d63b5f7 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c
@@ -37,6 +37,7 @@ static const struct qlcnic_mailbox_metadata qlcnic_mbx_tbl[] = {
 	{QLCNIC_CMD_TEMP_SIZE, 4, 4},
 	{QLCNIC_CMD_GET_TEMP_HDR, 4, 1},
 	{QLCNIC_CMD_SET_DRV_VER, 4, 1},
+	{QLCNIC_CMD_GET_LED_STATUS, 4, 2},
 };
 
 static inline u32 qlcnic_get_cmd_signature(struct qlcnic_hardware_context *ahw)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
index 253b3ac..3784bef 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
@@ -1462,6 +1462,29 @@ int qlcnic_82xx_config_led(struct qlcnic_adapter *adapter, u32 state, u32 rate)
 	return rv;
 }
 
+int qlcnic_get_beacon_state(struct qlcnic_adapter *adapter, u8 *h_state)
+{
+	int err = 0;
+	struct qlcnic_cmd_args cmd;
+
+	if (adapter->ahw->capabilities2 & QLCNIC_FW_CAPABILITY_2_BEACON) {
+		err = qlcnic_alloc_mbx_args(&cmd, adapter,
+					    QLCNIC_CMD_GET_LED_STATUS);
+		if (err)
+			goto error;
+
+		err = qlcnic_issue_cmd(adapter, &cmd);
+		if (err)
+			err = -EIO;
+		else
+			*h_state = cmd.rsp.arg[1];
+
+		qlcnic_free_mbx_args(&cmd);
+	}
+error:
+	return err;
+}
+
 void qlcnic_82xx_get_func_no(struct qlcnic_adapter *adapter)
 {
 	void __iomem *msix_base_addr;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
index e862a77..7e8f99e 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
@@ -84,6 +84,7 @@ enum qlcnic_regs {
 #define QLCNIC_CMD_TEMP_SIZE			0x2f
 #define QLCNIC_CMD_GET_TEMP_HDR			0x30
 #define QLCNIC_CMD_BC_EVENT_SETUP		0x31
+#define QLCNIC_CMD_GET_LED_STATUS		0x3C
 #define	QLCNIC_CMD_CONFIG_VPORT			0x32
 #define QLCNIC_CMD_GET_MAC_STATS		0x37
 #define QLCNIC_CMD_SET_DRV_VER			0x38
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index c77675d..a17671d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -124,6 +124,7 @@ static ssize_t qlcnic_store_beacon(struct device *dev,
 	u16 beacon;
 	u8 b_state, b_rate;
 	unsigned long h_beacon;
+	u8 h_beacon_state;
 
 	if (adapter->ahw->op_mode == QLCNIC_NON_PRIV_FUNC) {
 		dev_warn(dev,
@@ -174,6 +175,14 @@ beacon_err:
 	if (err)
 		return err;
 
+	err = qlcnic_get_beacon_state(adapter, &h_beacon_state);
+	if (err != -EIO) {
+		if (h_beacon_state == QLCNIC_BEACON_DISABLE)
+			adapter->ahw->beacon_state = 0;
+		else
+			adapter->ahw->beacon_state = 2;
+	}
+
 	if (adapter->ahw->beacon_state == b_state)
 		return len;
 
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 2/9] qlcnic: Fix typo in logs
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter Shahed Shaikh
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh

From: Shahed Shaikh <shahed.shaikh@qlogic.com>

o Debug logs were not matching with code functionality.
o Changed dev_info to netdev_err

Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c    |    8 +++-----
 1 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 374fa8a..c9c342e 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -2892,7 +2892,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
 	data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
 				      QLC_83XX_STAT_TX, &ret);
 	if (ret) {
-		dev_info(&adapter->pdev->dev, "Error getting MAC stats\n");
+		netdev_err(adapter->netdev, "Error getting Tx stats\n");
 		goto out;
 	}
 	/* Get MAC stats */
@@ -2902,8 +2902,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
 	data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
 				      QLC_83XX_STAT_MAC, &ret);
 	if (ret) {
-		dev_info(&adapter->pdev->dev,
-			 "Error getting Rx stats\n");
+		netdev_err(adapter->netdev, "Error getting MAC stats\n");
 		goto out;
 	}
 	/* Get Rx stats */
@@ -2913,8 +2912,7 @@ void qlcnic_83xx_get_stats(struct qlcnic_adapter *adapter, u64 *data)
 	data = qlcnic_83xx_fill_stats(adapter, &cmd, data,
 				      QLC_83XX_STAT_RX, &ret);
 	if (ret)
-		dev_info(&adapter->pdev->dev,
-			 "Error getting Tx stats\n");
+		netdev_err(adapter->netdev, "Error getting Rx stats\n");
 out:
 	qlcnic_free_mbx_args(&cmd);
 }
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 2/9] qlcnic: Fix typo in logs Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter Shahed Shaikh
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

From: Himanshu Madhani <himanshu.madhani@qlogic.com>

Added description for Hilda 8300 Series of Adapters.

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c |   31 ++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 0d00b2b..424a5e0 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -156,6 +156,37 @@ static const u32 qlcnic_reg_tbl[] = {
 };
 
 static const struct qlcnic_board_info qlcnic_boards[] = {
+	{0x1077, 0x8030, 0x1077, 0x24e,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x243,
+	 "8300 Series Single Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x24a,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x246,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x252,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x26e,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x260,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x266,
+	 "8300 Series Single Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x269,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x1077, 0x271,
+	 "8300 Series Dual Port 10GbE Converged Network Adapter "
+	 "(TCP/IP Networking)"},
+	{0x1077, 0x8030, 0x0, 0x0, "8300 Series 1/10GbE Controller"},
 	{0x1077, 0x8020, 0x1077, 0x203,
 	 "8200 Series Single Port 10GbE Converged Network Adapter"
 	 "(TCP/IP Networking)"},
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (2 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter Shahed Shaikh
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

From: Himanshu Madhani <himanshu.madhani@qlogic.com>

o Commit 319ecf121e1da3d75dd1bde32fed255532e61797
  ("qlcnic: 83xx sysfs routines") introduced regression
  for beaconing test while refactoring 82xx code. This patch is to
  revert code to fix beaconing test for 82xx adapter.

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
index a17671d..6f74dc8 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
@@ -207,10 +207,10 @@ beacon_err:
 	}
 
 	err = qlcnic_config_led(adapter, b_state, b_rate);
-	if (!err)
+	if (!err) {
 		err = len;
-	else
 		ahw->beacon_state = b_state;
+	}
 
 	if (test_and_clear_bit(__QLCNIC_DIAG_RES_ALLOC, &adapter->state))
 		qlcnic_diag_free_res(adapter->netdev, max_sds_rings);
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (3 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection Shahed Shaikh
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

From: Himanshu Madhani <himanshu.madhani@qlogic.com>

Enable Interrupt coalescing through ethtool on 83xx adapter.

Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h        |   12 +++-
 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c    |   16 ++++-
 .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c    |   68 ++++++++++++++++----
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   13 +++-
 4 files changed, 87 insertions(+), 22 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 602d3e4..7551b18 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -347,8 +347,14 @@ struct qlcnic_rx_buffer {
  * Interrupt coalescing defaults. The defaults are for 1500 MTU. It is
  * adjusted based on configured MTU.
  */
-#define QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US	3
-#define QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS	256
+#define QLCNIC_INTR_COAL_TYPE_RX		1
+#define QLCNIC_INTR_COAL_TYPE_TX		2
+
+#define QLCNIC_DEF_INTR_COALESCE_RX_TIME_US	3
+#define QLCNIC_DEF_INTR_COALESCE_RX_PACKETS	256
+
+#define QLCNIC_DEF_INTR_COALESCE_TX_TIME_US	64
+#define QLCNIC_DEF_INTR_COALESCE_TX_PACKETS	64
 
 #define QLCNIC_INTR_DEFAULT			0x04
 #define QLCNIC_CONFIG_INTR_COALESCE		3
@@ -359,6 +365,8 @@ struct qlcnic_nic_intr_coalesce {
 	u8	sts_ring_mask;
 	u16	rx_packets;
 	u16	rx_time_us;
+	u16	tx_packets;
+	u16	tx_time_us;
 	u16	flag;
 	u32	timer_out;
 };
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index c9c342e..fdd1fe7 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -1870,7 +1870,7 @@ int qlcnic_83xx_get_mac_address(struct qlcnic_adapter *adapter, u8 *mac)
 void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter)
 {
 	int err;
-	u32 temp;
+	u16 temp;
 	struct qlcnic_cmd_args cmd;
 	struct qlcnic_nic_intr_coalesce *coal = &adapter->ahw->coal;
 
@@ -1878,10 +1878,18 @@ void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter)
 		return;
 
 	qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL);
-	cmd.req.arg[1] = 1 | (adapter->recv_ctx->context_id << 16);
+	if (coal->type == QLCNIC_INTR_COAL_TYPE_RX) {
+		temp = adapter->recv_ctx->context_id;
+		cmd.req.arg[1] = (QLCNIC_INTR_COAL_TYPE_RX | (temp << 16));
+		temp = coal->rx_time_us;
+		cmd.req.arg[2] = (coal->rx_packets | (temp << 16));
+	} else if (coal->type == QLCNIC_INTR_COAL_TYPE_TX) {
+		temp = adapter->tx_ring->ctx_id;
+		cmd.req.arg[1] = (QLCNIC_INTR_COAL_TYPE_TX | (temp << 16));
+		temp = coal->rx_time_us;
+		cmd.req.arg[2] = (coal->rx_packets | (temp << 16));
+	}
 	cmd.req.arg[3] = coal->flag;
-	temp = coal->rx_time_us << 16;
-	cmd.req.arg[2] = coal->rx_packets | temp;
 	err = qlcnic_issue_cmd(adapter, &cmd);
 	if (err != QLCNIC_RCODE_SUCCESS)
 		dev_info(&adapter->pdev->dev,
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index f4f279d..7b56a50 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -1294,6 +1294,9 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev,
 			struct ethtool_coalesce *ethcoal)
 {
 	struct qlcnic_adapter *adapter = netdev_priv(netdev);
+	struct qlcnic_nic_intr_coalesce *coal;
+	u32 rx_coalesce_usecs, rx_max_frames;
+	u32 tx_coalesce_usecs, tx_max_frames;
 
 	if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
 		return -EINVAL;
@@ -1304,8 +1307,8 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev,
 	*/
 	if (ethcoal->rx_coalesce_usecs > 0xffff ||
 		ethcoal->rx_max_coalesced_frames > 0xffff ||
-		ethcoal->tx_coalesce_usecs ||
-		ethcoal->tx_max_coalesced_frames ||
+		ethcoal->tx_coalesce_usecs > 0xffff ||
+		ethcoal->tx_max_coalesced_frames > 0xffff ||
 		ethcoal->rx_coalesce_usecs_irq ||
 		ethcoal->rx_max_coalesced_frames_irq ||
 		ethcoal->tx_coalesce_usecs_irq ||
@@ -1325,18 +1328,55 @@ static int qlcnic_set_intr_coalesce(struct net_device *netdev,
 		ethcoal->tx_max_coalesced_frames_high)
 		return -EINVAL;
 
-	if (!ethcoal->rx_coalesce_usecs ||
-		!ethcoal->rx_max_coalesced_frames) {
-		adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT;
-		adapter->ahw->coal.rx_time_us =
-			QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
-		adapter->ahw->coal.rx_packets =
-			QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
+	coal = &adapter->ahw->coal;
+
+	if (qlcnic_83xx_check(adapter)) {
+		if (!ethcoal->tx_coalesce_usecs ||
+		    !ethcoal->tx_max_coalesced_frames ||
+		    !ethcoal->rx_coalesce_usecs ||
+		    !ethcoal->rx_max_coalesced_frames) {
+			coal->flag = QLCNIC_INTR_DEFAULT;
+			coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+			coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+			coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+			coal->tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US;
+			coal->tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS;
+		} else {
+			tx_coalesce_usecs = ethcoal->tx_coalesce_usecs;
+			tx_max_frames = ethcoal->tx_max_coalesced_frames;
+			rx_coalesce_usecs = ethcoal->rx_coalesce_usecs;
+			rx_max_frames = ethcoal->rx_max_coalesced_frames;
+			coal->flag = 0;
+
+			if ((coal->rx_time_us == rx_coalesce_usecs) &&
+			    (coal->rx_packets == rx_max_frames)) {
+				coal->type = QLCNIC_INTR_COAL_TYPE_TX;
+				coal->tx_time_us = tx_coalesce_usecs;
+				coal->tx_packets = tx_max_frames;
+			} else if ((coal->tx_time_us == tx_coalesce_usecs) &&
+				   (coal->tx_packets == tx_max_frames)) {
+				coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+				coal->rx_time_us = rx_coalesce_usecs;
+				coal->rx_packets = rx_max_frames;
+			} else {
+				coal->type = QLCNIC_INTR_COAL_TYPE_RX;
+				coal->rx_time_us = rx_coalesce_usecs;
+				coal->rx_packets = rx_max_frames;
+				coal->tx_time_us = tx_coalesce_usecs;
+				coal->tx_packets = tx_max_frames;
+			}
+		}
 	} else {
-		adapter->ahw->coal.flag = 0;
-		adapter->ahw->coal.rx_time_us = ethcoal->rx_coalesce_usecs;
-		adapter->ahw->coal.rx_packets =
-			ethcoal->rx_max_coalesced_frames;
+		if (!ethcoal->rx_coalesce_usecs ||
+		    !ethcoal->rx_max_coalesced_frames) {
+			coal->flag = QLCNIC_INTR_DEFAULT;
+			coal->rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+			coal->rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+		} else {
+			coal->flag = 0;
+			coal->rx_time_us = ethcoal->rx_coalesce_usecs;
+			coal->rx_packets = ethcoal->rx_max_coalesced_frames;
+		}
 	}
 
 	qlcnic_config_intr_coalesce(adapter);
@@ -1354,6 +1394,8 @@ static int qlcnic_get_intr_coalesce(struct net_device *netdev,
 
 	ethcoal->rx_coalesce_usecs = adapter->ahw->coal.rx_time_us;
 	ethcoal->rx_max_coalesced_frames = adapter->ahw->coal.rx_packets;
+	ethcoal->tx_coalesce_usecs = adapter->ahw->coal.tx_time_us;
+	ethcoal->tx_max_coalesced_frames = adapter->ahw->coal.tx_packets;
 
 	return 0;
 }
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 424a5e0..e0598cc 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -1586,6 +1586,8 @@ out:
 static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
 {
 	int err = 0;
+	struct qlcnic_hardware_context *ahw = adapter->ahw;
+
 	adapter->recv_ctx = kzalloc(sizeof(struct qlcnic_recv_context),
 				GFP_KERNEL);
 	if (!adapter->recv_ctx) {
@@ -1593,9 +1595,14 @@ static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
 		goto err_out;
 	}
 	/* Initialize interrupt coalesce parameters */
-	adapter->ahw->coal.flag = QLCNIC_INTR_DEFAULT;
-	adapter->ahw->coal.rx_time_us = QLCNIC_DEFAULT_INTR_COALESCE_RX_TIME_US;
-	adapter->ahw->coal.rx_packets = QLCNIC_DEFAULT_INTR_COALESCE_RX_PACKETS;
+	ahw->coal.flag = QLCNIC_INTR_DEFAULT;
+	ahw->coal.type = QLCNIC_INTR_COAL_TYPE_RX;
+	ahw->coal.rx_time_us = QLCNIC_DEF_INTR_COALESCE_RX_TIME_US;
+	ahw->coal.rx_packets = QLCNIC_DEF_INTR_COALESCE_RX_PACKETS;
+	if (qlcnic_83xx_check(adapter)) {
+		ahw->coal.tx_time_us = QLCNIC_DEF_INTR_COALESCE_TX_TIME_US;
+		ahw->coal.tx_packets = QLCNIC_DEF_INTR_COALESCE_TX_PACKETS;
+	}
 	/* clear stats */
 	memset(&adapter->stats, 0, sizeof(adapter->stats));
 err_out:
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (4 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 7/9] qlcnic: fix TSO race condition Shahed Shaikh
                   ` (2 subsequent siblings)
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Sony Chacko

From: Sony Chacko <sony.chacko@qlogic.com>

Firmware dump is collected after a non-recoverable Tx timeout error.
Reset dump collection flag and context reset flag in virtual NIC
mode to prevent recurring dump collection and context resets.

Signed-off-by: Sony Chacko <sony.chacko@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 .../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c  |    3 +++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   11 ++++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index c302d11..ad3ac82 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -641,6 +641,7 @@ static void qlcnic_83xx_idc_update_idc_params(struct qlcnic_adapter *adapter)
 	adapter->ahw->idc.delay = QLC_83XX_IDC_FW_POLL_DELAY;
 	adapter->ahw->idc.err_code = 0;
 	adapter->ahw->idc.collect_dump = 0;
+	adapter->ahw->reset_context = 0;
 }
 
 /**
@@ -691,6 +692,8 @@ int qlcnic_83xx_idc_vnic_pf_entry(struct qlcnic_adapter *adapter)
 	/* Privileged function waits till mgmt function enables VNIC mode */
 	state = QLCRDX(adapter->ahw, QLC_83XX_VNIC_STATE);
 	if (state != QLCNIC_DEV_NPAR_OPER) {
+		adapter->ahw->idc.collect_dump = 0;
+		adapter->ahw->reset_context = 0;
 		if (!ahw->idc.vnic_wait_limit--) {
 			qlcnic_83xx_idc_enter_failed_state(adapter, 1);
 			return -EIO;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index e0598cc..2a72c4f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -2378,10 +2378,15 @@ static void qlcnic_tx_timeout(struct net_device *netdev)
 
 	dev_err(&netdev->dev, "transmit timeout, resetting.\n");
 
-	if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS)
-		adapter->need_fw_reset = 1;
-	else
+	if (++adapter->tx_timeo_cnt >= QLCNIC_MAX_TX_TIMEOUTS) {
+		if (qlcnic_82xx_check(adapter))
+			adapter->need_fw_reset = 1;
+		else if (qlcnic_83xx_check(adapter))
+			qlcnic_dev_request_reset(adapter,
+						 QLCNIC_FORCE_FW_DUMP_KEY);
+	} else {
 		adapter->ahw->reset_context = 1;
+	}
 }
 
 static struct net_device_stats *qlcnic_get_stats(struct net_device *netdev)
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 7/9] qlcnic: fix TSO race condition
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (5 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-13 18:35   ` Eric Dumazet
  2013-04-13 17:28 ` [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs Shahed Shaikh
  2013-04-13 17:28 ` [PATCH net-next 9/9] qlcnic: Bump up the version to 5.2.41 Shahed Shaikh
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Sritej Velaga

From: Sritej Velaga <sritej.velaga@qlogic.com>

When driver receives a packet with gso size > 0 and when TSO is disabled,
it should be transmitted as a TSO packet to prevent Tx timeout and subsequent
firmware reset.

Signed-off-by: Sritej Velaga <sritej.velaga@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h        |    1 +
 .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c    |    2 ++
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c     |    8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 7551b18..53c414f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -485,6 +485,7 @@ struct qlcnic_adapter_stats {
 	u64  tx_dma_map_error;
 	u64  spurious_intr;
 	u64  mac_filter_limit_overrun;
+	u64  invalid_tso_pkt;
 };
 
 /*
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 7b56a50..48434ee 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -53,6 +53,8 @@ static const struct qlcnic_stats qlcnic_gstrings_stats[] = {
 				QLC_OFF(stats.mac_filter_limit_overrun)},
 	{"spurious intr", QLC_SIZEOF(stats.spurious_intr),
 	 QLC_OFF(stats.spurious_intr)},
+	{"invalid_tso_pkt", QLC_SIZEOF(stats.invalid_tso_pkt),
+			QLC_OFF(stats.invalid_tso_pkt)},
 
 };
 
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index a85ca63..cb19e30 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -362,8 +362,12 @@ set_flags:
 		memcpy(&first_desc->eth_addr, skb->data, ETH_ALEN);
 	}
 	opcode = TX_ETHER_PKT;
-	if ((adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
-	    skb_shinfo(skb)->gso_size > 0) {
+
+	if (skb_shinfo(skb)->gso_size > 0) {
+		if (!(adapter->netdev->features &
+		      (NETIF_F_TSO | NETIF_F_TSO6))) {
+			adapter->stats.invalid_tso_pkt++;
+		}
 		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
 		first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
 		first_desc->total_hdr_length = hdr_len;
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (6 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 7/9] qlcnic: fix TSO race condition Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  2013-04-14 10:55   ` Francois Romieu
  2013-04-13 17:28 ` [PATCH net-next 9/9] qlcnic: Bump up the version to 5.2.41 Shahed Shaikh
  8 siblings, 1 reply; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Manish Chopra

From: Manish Chopra <manish.chopra@qlogic.com>

Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h        |    3 +-
 .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c    |    2 +-
 drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c   |   37 ++++++++++++++++----
 3 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 53c414f..2902a15 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -1483,7 +1483,8 @@ void qlcnic_diag_free_res(struct net_device *netdev, int max_sds_rings);
 int qlcnic_diag_alloc_res(struct net_device *netdev, int test);
 netdev_tx_t qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev);
 int qlcnic_set_max_rss(struct qlcnic_adapter *, u8, size_t);
-int qlcnic_validate_max_rss(u8, u8);
+int qlcnic_validate_max_rss(struct qlcnic_adapter *adapter,
+			    __u32 val);
 void qlcnic_alloc_lb_filters_mem(struct qlcnic_adapter *adapter);
 int qlcnic_enable_msix(struct qlcnic_adapter *, u32);
 
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 48434ee..80e1137 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -637,7 +637,7 @@ static int qlcnic_set_channels(struct net_device *dev,
 	    channel->tx_count != channel->max_tx)
 		return -EINVAL;
 
-	err = qlcnic_validate_max_rss(channel->max_rx, channel->rx_count);
+	err = qlcnic_validate_max_rss(adapter, channel->rx_count);
 	if (err)
 		return err;
 
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 2a72c4f..ae1b555 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -3276,22 +3276,45 @@ qlcnicvf_start_firmware(struct qlcnic_adapter *adapter)
 	return err;
 }
 
-int qlcnic_validate_max_rss(u8 max_hw, u8 val)
+int qlcnic_validate_max_rss(struct qlcnic_adapter *adapter,
+			    __u32 val)
 {
 	u32 max_allowed;
+	u8 max_hw = adapter->ahw->max_rx_ques;
 
-	if (max_hw > QLC_MAX_SDS_RINGS) {
-		max_hw = QLC_MAX_SDS_RINGS;
-		pr_info("max rss reset to %d\n", QLC_MAX_SDS_RINGS);
+	if (val > QLC_MAX_SDS_RINGS) {
+		netdev_err(adapter->netdev,
+			   "RSS value should not be higher than %u\n",
+			   QLC_MAX_SDS_RINGS);
+		return -EINVAL;
 	}
 
 	max_allowed = rounddown_pow_of_two(min_t(int, max_hw,
 						 num_online_cpus()));
-	if ((val > max_allowed) || (val < 2) || !is_power_of_2(val)) {
-		pr_info("rss_ring valid range [2 - %x] in powers of 2\n",
-			max_allowed);
+
+	if ((val > max_allowed) || (val <  2) || !is_power_of_2(val)) {
+		if (!is_power_of_2(val))
+			netdev_err(adapter->netdev, "RSS value should be a power of 2\n");
+
+		if (val < 2)
+			netdev_err(adapter->netdev, "RSS value should not be lower than 2\n");
+
+		if (val > max_hw)
+			netdev_err(adapter->netdev,
+				   "RSS value should not be higher than[%u], the max RSS rings supported by the adapter\n",
+				   max_hw);
+
+		if (val > num_online_cpus())
+			netdev_err(adapter->netdev,
+				   "RSS value should not be higher than[%u], the max number of CPUs in the system\n",
+				   num_online_cpus());
+
+		netdev_err(adapter->netdev, "Unable to configure %u RSS rings\n",
+			   val);
+
 		return -EINVAL;
 	}
+
 	return 0;
 }
 
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* [PATCH net-next 9/9] qlcnic: Bump up the version to 5.2.41
  2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
                   ` (7 preceding siblings ...)
  2013-04-13 17:28 ` [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs Shahed Shaikh
@ 2013-04-13 17:28 ` Shahed Shaikh
  8 siblings, 0 replies; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-13 17:28 UTC (permalink / raw)
  To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh

From: Shahed Shaikh <shahed.shaikh@qlogic.com>

Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
---
 drivers/net/ethernet/qlogic/qlcnic/qlcnic.h |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 2902a15..224a089 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -38,8 +38,8 @@
 
 #define _QLCNIC_LINUX_MAJOR 5
 #define _QLCNIC_LINUX_MINOR 2
-#define _QLCNIC_LINUX_SUBVERSION 40
-#define QLCNIC_LINUX_VERSIONID  "5.2.40"
+#define _QLCNIC_LINUX_SUBVERSION 41
+#define QLCNIC_LINUX_VERSIONID  "5.2.41"
 #define QLCNIC_DRV_IDC_VER  0x01
 #define QLCNIC_DRIVER_VERSION  ((_QLCNIC_LINUX_MAJOR << 16) |\
 		 (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION))
-- 
1.5.6

^ permalink raw reply related	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 7/9] qlcnic: fix TSO race condition
  2013-04-13 17:28 ` [PATCH net-next 7/9] qlcnic: fix TSO race condition Shahed Shaikh
@ 2013-04-13 18:35   ` Eric Dumazet
  2013-04-14 17:55     ` Shahed Shaikh
  0 siblings, 1 reply; 18+ messages in thread
From: Eric Dumazet @ 2013-04-13 18:35 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Sritej Velaga

On Sat, 2013-04-13 at 13:28 -0400, Shahed Shaikh wrote:
> From: Sritej Velaga <sritej.velaga@qlogic.com>
> 
> When driver receives a packet with gso size > 0 and when TSO is disabled,
> it should be transmitted as a TSO packet to prevent Tx timeout and subsequent
> firmware reset.
> 
> Signed-off-by: Sritej Velaga <sritej.velaga@qlogic.com>
> Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
> ---
>  drivers/net/ethernet/qlogic/qlcnic/qlcnic.h        |    1 +
>  .../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c    |    2 ++
>  drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c     |    8 ++++++--
>  3 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
> index 7551b18..53c414f 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
> @@ -485,6 +485,7 @@ struct qlcnic_adapter_stats {
>  	u64  tx_dma_map_error;
>  	u64  spurious_intr;
>  	u64  mac_filter_limit_overrun;
> +	u64  invalid_tso_pkt;
>  };
>  
>  /*
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
> index 7b56a50..48434ee 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
> @@ -53,6 +53,8 @@ static const struct qlcnic_stats qlcnic_gstrings_stats[] = {
>  				QLC_OFF(stats.mac_filter_limit_overrun)},
>  	{"spurious intr", QLC_SIZEOF(stats.spurious_intr),
>  	 QLC_OFF(stats.spurious_intr)},
> +	{"invalid_tso_pkt", QLC_SIZEOF(stats.invalid_tso_pkt),
> +			QLC_OFF(stats.invalid_tso_pkt)},
>  
>  };
>  
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
> index a85ca63..cb19e30 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
> @@ -362,8 +362,12 @@ set_flags:
>  		memcpy(&first_desc->eth_addr, skb->data, ETH_ALEN);
>  	}
>  	opcode = TX_ETHER_PKT;
> -	if ((adapter->netdev->features & (NETIF_F_TSO | NETIF_F_TSO6)) &&
> -	    skb_shinfo(skb)->gso_size > 0) {
> +
> +	if (skb_shinfo(skb)->gso_size > 0) {
> +		if (!(adapter->netdev->features &
> +		      (NETIF_F_TSO | NETIF_F_TSO6))) {
> +			adapter->stats.invalid_tso_pkt++;
> +		}
>  		hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
>  		first_desc->mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
>  		first_desc->total_hdr_length = hdr_len;

This looks like not needed at all.

Take a look at all other network drivers.

Not a single one does the (netdev->features & (NETIF_F_TSO |
NETIF_F_TSO6)) check in their tx fast path.

This is done by the core networking stacks.

Just remove the check, and do not add an "invalid_tso_pkt", as there is
nothing invalid here.

If a driver advertised NETIF_F_TSO in its hw_features, then it _must_ be
prepared to send TSO packets, even if the admin plays with "ethtool -k
tso off".

RTNL is not taken in TX path, so there is always the possibility a
driver has to transmit a TSO packet right after the change.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter.
  2013-04-13 17:28 ` [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

Shahed Shaikh <shahed.shaikh@qlogic.com> :
[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
> index 253b3ac..3784bef 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c
> @@ -1462,6 +1462,29 @@ int qlcnic_82xx_config_led(struct qlcnic_adapter *adapter, u32 state, u32 rate)
>  	return rv;
>  }
>  
> +int qlcnic_get_beacon_state(struct qlcnic_adapter *adapter, u8 *h_state)
> +{
> +	int err = 0;
> +	struct qlcnic_cmd_args cmd;

The scope of this variable could have been narrowed.

> +
> +	if (adapter->ahw->capabilities2 & QLCNIC_FW_CAPABILITY_2_BEACON) {
> +		err = qlcnic_alloc_mbx_args(&cmd, adapter,
> +					    QLCNIC_CMD_GET_LED_STATUS);
> +		if (err)
> +			goto error;
> +
> +		err = qlcnic_issue_cmd(adapter, &cmd);
> +		if (err)
> +			err = -EIO;

qlcnic_issue_cmd should return a proper error code so that there is no
reason to smash it.

> +		else
> +			*h_state = cmd.rsp.arg[1];
> +
> +		qlcnic_free_mbx_args(&cmd);
> +	}
> +error:
> +	return err;
> +}

Normal path going through an "error" label... :o/

Please compare with:

int qlcnic_get_beacon_state(struct qlcnic_adapter *adapter, u8 *h_state)
{
	struct qlcnic_cmd_args cmd;
	int rc;

	if (!(adapter->ahw->capabilities2 & QLCNIC_FW_CAPABILITY_2_BEACON))
		return 0;

	rc = qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_GET_LED_STATUS);
	if (!rc) {
		rc = qlcnic_issue_cmd(adapter, &cmd);
		if (!rc)
			*h_state = cmd.rsp.arg[1];

		qlcnic_free_mbx_args(&cmd);
	}

	return rc;
}
	
[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
> index c77675d..a17671d 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c
[...]
> @@ -174,6 +175,14 @@ beacon_err:
>  	if (err)
>  		return err;
>  
> +	err = qlcnic_get_beacon_state(adapter, &h_beacon_state);
> +	if (err != -EIO) {
> +		if (h_beacon_state == QLCNIC_BEACON_DISABLE)
> +			adapter->ahw->beacon_state = 0;
> +		else
> +			adapter->ahw->beacon_state = 2;

Nit: what about a ternary ?

		adapter->ahw->beacon_state =
			(h_beacon_state == QLCNIC_BEACON_DISABLE) ? 0 : 2;

You should consider reworking qlcnic_store_beacon. It's in a sad state
(multiple return points and locks as well as a big inline reset path).

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter
  2013-04-13 17:28 ` [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

Shahed Shaikh <shahed.shaikh@qlogic.com> :
[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> index 0d00b2b..424a5e0 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> @@ -156,6 +156,37 @@ static const u32 qlcnic_reg_tbl[] = {
>  };
>  
>  static const struct qlcnic_board_info qlcnic_boards[] = {
> +	{0x1077, 0x8030, 0x1077, 0x24e,

You may consider adding a space after the curly brace at a later time.

> +	 "8300 Series Dual Port 10GbE Converged Network Adapter "
> +	 "(TCP/IP Networking)"},
> +	{0x1077, 0x8030, 0x1077, 0x243,

0x1077 is also known as PCI_VENDOR_ID_QLOGIC.

You should imho use a macro to factor out the vendor.

At your choice, you may:
1. try a second macro to paste "Converged Network Adapter (TCP/IP Networking)"
2. save some kernel memory through replacement of
   short_name[QLCNIC_MAX_BOARD_NAME_LEN] (short indeed :o) ) by a char **.

Nit: rework qlcnic_get_board_name to avoid its sprintf and 
     QLCNIC_MAX_BOARD_NAME_LEN sized string in qlcnic_probe.

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter
  2013-04-13 17:28 ` [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

Shahed Shaikh <shahed.shaikh@qlogic.com> :
> From: Himanshu Madhani <himanshu.madhani@qlogic.com>
> 
> o Commit 319ecf121e1da3d75dd1bde32fed255532e61797
>   ("qlcnic: 83xx sysfs routines") introduced regression
>   for beaconing test while refactoring 82xx code. This patch is to
>   revert code to fix beaconing test for 82xx adapter.

Fix ought to go through net, not net-next.

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter
  2013-04-13 17:28 ` [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani

Shahed Shaikh <shahed.shaikh@qlogic.com> :
[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
> index 602d3e4..7551b18 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
(...]
> @@ -359,6 +365,8 @@ struct qlcnic_nic_intr_coalesce {
>  	u8	sts_ring_mask;
>  	u16	rx_packets;
>  	u16	rx_time_us;
> +	u16	tx_packets;
> +	u16	tx_time_us;

(ok)

[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
> index c9c342e..fdd1fe7 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
[...]
> @@ -1878,10 +1878,18 @@ void qlcnic_83xx_config_intr_coal(struct qlcnic_adapter *adapter)
>  		return;
>  
>  	qlcnic_alloc_mbx_args(&cmd, adapter, QLCNIC_CMD_CONFIG_INTR_COAL);
> -	cmd.req.arg[1] = 1 | (adapter->recv_ctx->context_id << 16);
> +	if (coal->type == QLCNIC_INTR_COAL_TYPE_RX) {
> +		temp = adapter->recv_ctx->context_id;
> +		cmd.req.arg[1] = (QLCNIC_INTR_COAL_TYPE_RX | (temp << 16));
> +		temp = coal->rx_time_us;
> +		cmd.req.arg[2] = (coal->rx_packets | (temp << 16));
> +	} else if (coal->type == QLCNIC_INTR_COAL_TYPE_TX) {
> +		temp = adapter->tx_ring->ctx_id;
> +		cmd.req.arg[1] = (QLCNIC_INTR_COAL_TYPE_TX | (temp << 16));
> +		temp = coal->rx_time_us;
                             ^^ -> tx ?
> +		cmd.req.arg[2] = (coal->rx_packets | (temp << 16));
                                        ^^ -> tx ?

[...]
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> @@ -1586,6 +1586,8 @@ out:
>  static int qlcnic_alloc_adapter_resources(struct qlcnic_adapter *adapter)
>  {
>  	int err = 0;
> +	struct qlcnic_hardware_context *ahw = adapter->ahw;
> +

Nit: long lines ought to appear first.

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection
  2013-04-13 17:28 ` [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Sony Chacko

Shahed Shaikh <shahed.shaikh@qlogic.com> :
> From: Sony Chacko <sony.chacko@qlogic.com>
> 
> Firmware dump is collected after a non-recoverable Tx timeout error.
> Reset dump collection flag and context reset flag in virtual NIC
> mode to prevent recurring dump collection and context resets.

Candidate for net instead of net-next ?

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs
  2013-04-13 17:28 ` [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs Shahed Shaikh
@ 2013-04-14 10:55   ` Francois Romieu
  0 siblings, 0 replies; 18+ messages in thread
From: Francois Romieu @ 2013-04-14 10:55 UTC (permalink / raw)
  To: Shahed Shaikh; +Cc: davem, netdev, Dept_NX_Linux_NIC_Driver, Manish Chopra

Shahed Shaikh <shahed.shaikh@qlogic.com> :
[...]
> diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> index 2a72c4f..ae1b555 100644
> --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
> @@ -3276,22 +3276,45 @@ qlcnicvf_start_firmware(struct qlcnic_adapter *adapter)
>  	return err;
>  }
>  
> -int qlcnic_validate_max_rss(u8 max_hw, u8 val)
> +int qlcnic_validate_max_rss(struct qlcnic_adapter *adapter,
> +			    __u32 val)
>  {
>  	u32 max_allowed;
> +	u8 max_hw = adapter->ahw->max_rx_ques;
>  
> -	if (max_hw > QLC_MAX_SDS_RINGS) {
> -		max_hw = QLC_MAX_SDS_RINGS;
> -		pr_info("max rss reset to %d\n", QLC_MAX_SDS_RINGS);
> +	if (val > QLC_MAX_SDS_RINGS) {
> +		netdev_err(adapter->netdev,

Please consider a local variable for adapter->netdev.

-- 
Ueimor

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [PATCH net-next 7/9] qlcnic: fix TSO race condition
  2013-04-13 18:35   ` Eric Dumazet
@ 2013-04-14 17:55     ` Shahed Shaikh
  0 siblings, 0 replies; 18+ messages in thread
From: Shahed Shaikh @ 2013-04-14 17:55 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: David Miller, netdev, Dept-NX Linux NIC Driver, Sritej Velaga

> -----Original Message-----
> From: Eric Dumazet [mailto:eric.dumazet@gmail.com]
> Sent: Sunday, April 14, 2013 12:05 AM
> To: Shahed Shaikh
> Cc: David Miller; netdev; Dept-NX Linux NIC Driver; Sritej Velaga
> Subject: Re: [PATCH net-next 7/9] qlcnic: fix TSO race condition
>
>
> This looks like not needed at all.
>
> Take a look at all other network drivers.
>
> Not a single one does the (netdev->features & (NETIF_F_TSO |
> NETIF_F_TSO6)) check in their tx fast path.
>
> This is done by the core networking stacks.
>
> Just remove the check, and do not add an "invalid_tso_pkt", as there is
> nothing invalid here.
>
> If a driver advertised NETIF_F_TSO in its hw_features, then it _must_ be
> prepared to send TSO packets, even if the admin plays with "ethtool -k tso
> off".
>
> RTNL is not taken in TX path, so there is always the possibility a driver has to
> transmit a TSO packet right after the change.
>

Thanks Eric . We will look into your feedback.

-Shahed


________________________________

This message and any attached documents contain information from QLogic Corporation or its wholly-owned subsidiaries that may be confidential. If you are not the intended recipient, you may not read, copy, distribute, or use this information. If you have received this transmission in error, please notify the sender immediately by reply e-mail and then delete this message.

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2013-04-14 17:55 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-04-13 17:28 [PATCH net-next 0/9] qlcnic: Bug fixes and enhancements Shahed Shaikh
2013-04-13 17:28 ` [PATCH net-next 1/9] qlcnic: Implement GET_LED_STATUS command for 82xx adapter Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 2/9] qlcnic: Fix typo in logs Shahed Shaikh
2013-04-13 17:28 ` [PATCH net-next 3/9] qlcnic: Add identifying string for 83xx adapter Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 4/9] qlcnic: fix beaconing test for 82xx adapter Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 5/9] qlcnic: Enable Interrupt Coalescing for 83xx adapter Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 6/9] qlcnic: Fix recurring firmware dump collection Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 7/9] qlcnic: fix TSO race condition Shahed Shaikh
2013-04-13 18:35   ` Eric Dumazet
2013-04-14 17:55     ` Shahed Shaikh
2013-04-13 17:28 ` [PATCH net-next 8/9] qlcnic: Enhanced channel configuration logs Shahed Shaikh
2013-04-14 10:55   ` Francois Romieu
2013-04-13 17:28 ` [PATCH net-next 9/9] qlcnic: Bump up the version to 5.2.41 Shahed Shaikh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).