* [PATCH net v2 0/8] qlcnic: Bug fixes
@ 2013-05-09 19:25 Shahed Shaikh
2013-05-11 23:01 ` David Miller
0 siblings, 1 reply; 12+ messages in thread
From: Shahed Shaikh @ 2013-05-09 19:25 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Shahed Shaikh
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Changes in v2:
* Removed access to netdev->trans_start from patch
"qlcnic: Fix reset recovery after transmit timeout"
This patch series has following bug fixes:
* Fix a bug in unicast MAC address setting in adapter.
Driver was not deleting older unicast MAC while adding new one.
* Fix an ethtool stats string array by adding missing string entry
and fix a typo.
* Fix module paramter description. Bracket ')' was missing.
* Fix port status provided though 'ethtool <device>' for 83xx adapter.
* Fix reset recovery path in case of transmit timeout.
* Fix reset recovery during diagnostic tests by preserving
current device status information.
* Fix mailbox response handling. Driver was not maintaining poll time properly.
* Fix validation of link event command.
Please apply to net.
Thanks,
Shahed
Himanshu Madhani (2):
qlcnic: Fix missing bracket in module parameter.
qlcnic: Fix ethtool supported port status for 83xx
Manish Chopra (2):
qlcnic: Fix setting MAC address
qlcnic: Fix bug in diagnostics test reset recovery path
Rajesh Borundia (2):
qlcnic: Fix mailbox response handling.
qlcnic: Fix validation of link event command.
Shahed Shaikh (1):
qlcnic: Fix ethtool strings
Sony Chacko (1):
qlcnic: Fix reset recovery after transmit timeout
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 2 +
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 95 +++++++++++++++++---
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 4 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 22 +++--
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 54 ++++++------
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 2 +-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 46 ++++++++--
.../ethernet/qlogic/qlcnic/qlcnic_sriov_common.c | 8 +-
.../net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c | 3 -
9 files changed, 167 insertions(+), 69 deletions(-)
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH net v2 0/8] qlcnic: Bug fixes
2013-05-09 19:25 Shahed Shaikh
@ 2013-05-11 23:01 ` David Miller
0 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2013-05-11 23:01 UTC (permalink / raw)
To: shahed.shaikh; +Cc: netdev, Dept_NX_Linux_NIC_Driver
From: Shahed Shaikh <shahed.shaikh@qlogic.com>
Date: Thu, 9 May 2013 15:25:08 -0400
> This patch series has following bug fixes:
> * Fix a bug in unicast MAC address setting in adapter.
> Driver was not deleting older unicast MAC while adding new one.
> * Fix an ethtool stats string array by adding missing string entry
> and fix a typo.
> * Fix module paramter description. Bracket ')' was missing.
> * Fix port status provided though 'ethtool <device>' for 83xx adapter.
> * Fix reset recovery path in case of transmit timeout.
> * Fix reset recovery during diagnostic tests by preserving
> current device status information.
> * Fix mailbox response handling. Driver was not maintaining poll time properly.
> * Fix validation of link event command.
Series applied, thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH net v2 0/8] qlcnic: Bug fixes.
@ 2013-12-16 20:36 Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 1/8] qlcnic: Fix usage of netif_tx_{wake,stop} api during link change Himanshu Madhani
` (8 more replies)
0 siblings, 9 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:36 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
This series contains bug fixes for mailbox handling and multi Tx queue support
for all supported adapters.
changes from v1 -> v2
o updated patch to fix usage of netif_tx_{wake,stop} api during link change
as per David Miller's suggestion.
o Dropped patch to use spinklock per tx queue for more work.
o Added reworked patch for memory allocation failures.
o Added patch to allow capturing of dump, when auto recovery is disabled in firmware.
o Added patches for mailbox interrupt handling and debugging data for mailbox failure.
Please apply to net.
Thanks,
Himanshu
Himanshu Madhani (4):
qlcnic: Fix usage of netif_tx_{wake,stop} api during link change.
qlcnic: Fix diagnostic test for all adapters.
qlcnic: Fix TSS/RSS ring validation logic.
qlcnic: Fix TSS/RSS validation for 83xx/84xx series adapter.
Manish Chopra (2):
qlcnic: Fix memory allocation
qlcnic: Allow firmware dump collection when auto firmware recovery is
disabled
Manish chopra (2):
qlcnic: Fix mailbox processing during diagnostic test
qlcnic: Dump mailbox registers when mailbox command times out.
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 47 +++++++---------
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 1 +
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 65 +++++++++++++---------
.../net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 19 +++----
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 10 +---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 2 +-
6 files changed, 73 insertions(+), 71 deletions(-)
--
1.8.1.4
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH net v2 1/8] qlcnic: Fix usage of netif_tx_{wake,stop} api during link change.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
@ 2013-12-16 20:36 ` Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 2/8] qlcnic: Fix diagnostic test for all adapters Himanshu Madhani
` (7 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:36 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
o Driver was using netif_tx_{stop,wake}_all_queues() api
during link change event. Remove these api calls to
manage queue start/stop event, as core networking stack
will manage this based on netif_carrier_{on,off} call.
These API's were modified as part of commit id
012ec81223aa45d2b80aeafb77392fd1a19c7b10 ("qlcnic: Multi Tx
queue support for 82xx Series adapter.")
Signed-off-by: Shahed Shaikh <shahed.shaikh@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index 0149c94..eda6c69 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -687,17 +687,11 @@ void qlcnic_advert_link_change(struct qlcnic_adapter *adapter, int linkup)
if (adapter->ahw->linkup && !linkup) {
netdev_info(netdev, "NIC Link is down\n");
adapter->ahw->linkup = 0;
- if (netif_running(netdev)) {
- netif_carrier_off(netdev);
- netif_tx_stop_all_queues(netdev);
- }
+ netif_carrier_off(netdev);
} else if (!adapter->ahw->linkup && linkup) {
netdev_info(netdev, "NIC Link is up\n");
adapter->ahw->linkup = 1;
- if (netif_running(netdev)) {
- netif_carrier_on(netdev);
- netif_wake_queue(netdev);
- }
+ netif_carrier_on(netdev);
}
}
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 2/8] qlcnic: Fix diagnostic test for all adapters.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 1/8] qlcnic: Fix usage of netif_tx_{wake,stop} api during link change Himanshu Madhani
@ 2013-12-16 20:36 ` Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 3/8] qlcnic: Fix TSS/RSS ring validation logic Himanshu Madhani
` (6 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:36 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
o Driver should re-allocate all Tx queues after completing
diagnostic tests. This regression was added by commit id
c2c5e3a0681bb1945c0cb211a5f4baa22cb2cbb3 ("qlcnic: Enable
diagnostic test for multiple Tx queues.")
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 2 ++
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 -
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index b36c02f..6d3edf6 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -948,6 +948,7 @@ static int qlcnic_irq_test(struct net_device *netdev)
struct qlcnic_hardware_context *ahw = adapter->ahw;
struct qlcnic_cmd_args cmd;
int ret, drv_sds_rings = adapter->drv_sds_rings;
+ int drv_tx_rings = adapter->drv_tx_rings;
if (qlcnic_83xx_check(adapter))
return qlcnic_83xx_interrupt_test(netdev);
@@ -980,6 +981,7 @@ free_diag_res:
clear_diag_irq:
adapter->drv_sds_rings = drv_sds_rings;
+ adapter->drv_tx_rings = drv_tx_rings;
clear_bit(__QLCNIC_RESETTING, &adapter->state);
return ret;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 05c1eef..aa019c3 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -1940,7 +1940,6 @@ int qlcnic_diag_alloc_res(struct net_device *netdev, int test)
qlcnic_detach(adapter);
adapter->drv_sds_rings = QLCNIC_SINGLE_RING;
- adapter->drv_tx_rings = QLCNIC_SINGLE_RING;
adapter->ahw->diag_test = test;
adapter->ahw->linkup = 0;
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 3/8] qlcnic: Fix TSS/RSS ring validation logic.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 1/8] qlcnic: Fix usage of netif_tx_{wake,stop} api during link change Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 2/8] qlcnic: Fix diagnostic test for all adapters Himanshu Madhani
@ 2013-12-16 20:36 ` Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 4/8] qlcnic: Fix TSS/RSS validation for 83xx/84xx series adapter Himanshu Madhani
` (5 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:36 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
o TSS/RSS ring validation does not take into account that either
of these ring values can be 0. This patch fixes this validation
and would fail set_channel operation if any of these ring value
is 0. This regression was added as part of commit id
34e8c406fda5b5a9d2e126a92bab84cd28e3b5fa ("qlcnic: refactor Tx/SDS
ring calculation and validation in driver.")
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 4 ++--
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 6 +++++-
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 1 +
3 files changed, 8 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 89208e5..fae1b71 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -2073,8 +2073,8 @@ int qlcnic_83xx_configure_opmode(struct qlcnic_adapter *adapter)
ahw->nic_mode = QLCNIC_DEFAULT_MODE;
adapter->nic_ops->init_driver = qlcnic_83xx_init_default_driver;
ahw->idc.state_entry = qlcnic_83xx_idc_ready_state_entry;
- adapter->max_sds_rings = ahw->max_rx_ques;
- adapter->max_tx_rings = ahw->max_tx_ques;
+ adapter->max_sds_rings = QLCNIC_MAX_SDS_RINGS;
+ adapter->max_tx_rings = QLCNIC_MAX_TX_RINGS;
} else {
return -EIO;
}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 6d3edf6..78f5e81 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -667,9 +667,13 @@ qlcnic_set_ringparam(struct net_device *dev,
static int qlcnic_validate_ring_count(struct qlcnic_adapter *adapter,
u8 rx_ring, u8 tx_ring)
{
+ if (rx_ring == 0 || tx_ring == 0)
+ return -EINVAL;
+
if (rx_ring != 0) {
if (rx_ring > adapter->max_sds_rings) {
- netdev_err(adapter->netdev, "Invalid ring count, SDS ring count %d should not be greater than max %d driver sds rings.\n",
+ netdev_err(adapter->netdev,
+ "Invalid ring count, SDS ring count %d should not be greater than max %d driver sds rings.\n",
rx_ring, adapter->max_sds_rings);
return -EINVAL;
}
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index aa019c3..2c8cac0 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -1178,6 +1178,7 @@ qlcnic_initialize_nic(struct qlcnic_adapter *adapter)
} else {
adapter->ahw->nic_mode = QLCNIC_DEFAULT_MODE;
adapter->max_tx_rings = QLCNIC_MAX_HW_TX_RINGS;
+ adapter->max_sds_rings = QLCNIC_MAX_SDS_RINGS;
adapter->flags &= ~QLCNIC_ESWITCH_ENABLED;
}
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 4/8] qlcnic: Fix TSS/RSS validation for 83xx/84xx series adapter.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (2 preceding siblings ...)
2013-12-16 20:36 ` [PATCH net v2 3/8] qlcnic: Fix TSS/RSS ring validation logic Himanshu Madhani
@ 2013-12-16 20:36 ` Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 5/8] qlcnic: Fix memory allocation Himanshu Madhani
` (4 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:36 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Himanshu Madhani
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
o Current code was not allowing the user to configure more
than one Tx ring using ethtool for 83xx/84xx adapter.
This regression was introduced by commit id
18afc102fdcb95d6c7d57f2967a06f2f8fe3ba4c ("qlcnic: Enable
multiple Tx queue support for 83xx/84xx Series adapter.")
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
index 78f5e81..e3be276 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c
@@ -680,21 +680,12 @@ static int qlcnic_validate_ring_count(struct qlcnic_adapter *adapter,
}
if (tx_ring != 0) {
- if (qlcnic_82xx_check(adapter) &&
- (tx_ring > adapter->max_tx_rings)) {
+ if (tx_ring > adapter->max_tx_rings) {
netdev_err(adapter->netdev,
"Invalid ring count, Tx ring count %d should not be greater than max %d driver Tx rings.\n",
tx_ring, adapter->max_tx_rings);
return -EINVAL;
}
-
- if (qlcnic_83xx_check(adapter) &&
- (tx_ring > QLCNIC_SINGLE_RING)) {
- netdev_err(adapter->netdev,
- "Invalid ring count, Tx ring count %d should not be greater than %d driver Tx rings.\n",
- tx_ring, QLCNIC_SINGLE_RING);
- return -EINVAL;
- }
}
return 0;
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 5/8] qlcnic: Fix memory allocation
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (3 preceding siblings ...)
2013-12-16 20:36 ` [PATCH net v2 4/8] qlcnic: Fix TSS/RSS validation for 83xx/84xx series adapter Himanshu Madhani
@ 2013-12-16 20:37 ` Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 6/8] qlcnic: Allow firmware dump collection when auto firmware recovery is disabled Himanshu Madhani
` (3 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:37 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Manish Chopra, himanshu.madhani
From: Manish Chopra <manish.chopra@qlogic.com>
o Use vzalloc() instead of kzalloc() for allocation of
bootloader size memory. kzalloc() may fail to allocate
the size of bootloader
Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index fae1b71..cac0503 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -1254,24 +1254,24 @@ static int qlcnic_83xx_copy_bootloader(struct qlcnic_adapter *adapter)
if (size & 0xF)
size = (size + 16) & ~0xF;
- p_cache = kzalloc(size, GFP_KERNEL);
+ p_cache = vzalloc(size);
if (p_cache == NULL)
return -ENOMEM;
ret = qlcnic_83xx_lockless_flash_read32(adapter, src, p_cache,
size / sizeof(u32));
if (ret) {
- kfree(p_cache);
+ vfree(p_cache);
return ret;
}
/* 16 byte write to MS memory */
ret = qlcnic_83xx_ms_mem_write128(adapter, dest, (u32 *)p_cache,
size / 16);
if (ret) {
- kfree(p_cache);
+ vfree(p_cache);
return ret;
}
- kfree(p_cache);
+ vfree(p_cache);
return ret;
}
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 6/8] qlcnic: Allow firmware dump collection when auto firmware recovery is disabled
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (4 preceding siblings ...)
2013-12-16 20:37 ` [PATCH net v2 5/8] qlcnic: Fix memory allocation Himanshu Madhani
@ 2013-12-16 20:37 ` Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 7/8] qlcnic: Fix mailbox processing during diagnostic test Himanshu Madhani
` (2 subsequent siblings)
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:37 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Manish Chopra, himanshu.madhani
From: Manish Chopra <manish.chopra@qlogic.com>
o Allow driver to collect firmware dump, during a forced firmware dump
operation, when auto firmware recovery is disabled. Also, during this
operation, driver should not allow reset recovery to be performed.
Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 1 +
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 53 ++++++++++++++--------
2 files changed, 35 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
index 4cae6ca..a6a3350 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
@@ -662,4 +662,5 @@ pci_ers_result_t qlcnic_83xx_io_error_detected(struct pci_dev *,
pci_channel_state_t);
pci_ers_result_t qlcnic_83xx_io_slot_reset(struct pci_dev *);
void qlcnic_83xx_io_resume(struct pci_dev *);
+void qlcnic_83xx_stop_hw(struct qlcnic_adapter *);
#endif
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
index cac0503..918e18d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c
@@ -740,6 +740,7 @@ static int qlcnic_83xx_idc_unknown_state(struct qlcnic_adapter *adapter)
adapter->ahw->idc.err_code = -EIO;
dev_err(&adapter->pdev->dev,
"%s: Device in unknown state\n", __func__);
+ clear_bit(__QLCNIC_RESETTING, &adapter->state);
return 0;
}
@@ -818,7 +819,6 @@ static int qlcnic_83xx_idc_ready_state(struct qlcnic_adapter *adapter)
struct qlcnic_hardware_context *ahw = adapter->ahw;
struct qlcnic_mailbox *mbx = ahw->mailbox;
int ret = 0;
- u32 owner;
u32 val;
/* Perform NIC configuration based ready state entry actions */
@@ -848,9 +848,9 @@ static int qlcnic_83xx_idc_ready_state(struct qlcnic_adapter *adapter)
set_bit(__QLCNIC_RESETTING, &adapter->state);
qlcnic_83xx_idc_enter_need_reset_state(adapter, 1);
} else {
- owner = qlcnic_83xx_idc_find_reset_owner_id(adapter);
- if (ahw->pci_func == owner)
- qlcnic_dump_fw(adapter);
+ netdev_info(adapter->netdev, "%s: Auto firmware recovery is disabled\n",
+ __func__);
+ qlcnic_83xx_idc_enter_failed_state(adapter, 1);
}
return -EIO;
}
@@ -948,13 +948,26 @@ static int qlcnic_83xx_idc_need_quiesce_state(struct qlcnic_adapter *adapter)
return 0;
}
-static int qlcnic_83xx_idc_failed_state(struct qlcnic_adapter *adapter)
+static void qlcnic_83xx_idc_failed_state(struct qlcnic_adapter *adapter)
{
- dev_err(&adapter->pdev->dev, "%s: please restart!!\n", __func__);
+ struct qlcnic_hardware_context *ahw = adapter->ahw;
+ u32 val, owner;
+
+ val = QLCRDX(adapter->ahw, QLC_83XX_IDC_CTRL);
+ if (val & QLC_83XX_IDC_DISABLE_FW_RESET_RECOVERY) {
+ owner = qlcnic_83xx_idc_find_reset_owner_id(adapter);
+ if (ahw->pci_func == owner) {
+ qlcnic_83xx_stop_hw(adapter);
+ qlcnic_dump_fw(adapter);
+ }
+ }
+
+ netdev_warn(adapter->netdev, "%s: Reboot will be required to recover the adapter!!\n",
+ __func__);
clear_bit(__QLCNIC_RESETTING, &adapter->state);
- adapter->ahw->idc.err_code = -EIO;
+ ahw->idc.err_code = -EIO;
- return 0;
+ return;
}
static int qlcnic_83xx_idc_quiesce_state(struct qlcnic_adapter *adapter)
@@ -1063,12 +1076,6 @@ void qlcnic_83xx_idc_poll_dev_state(struct work_struct *work)
adapter->ahw->idc.prev_state = adapter->ahw->idc.curr_state;
qlcnic_83xx_periodic_tasks(adapter);
- /* Do not reschedule if firmaware is in hanged state and auto
- * recovery is disabled
- */
- if ((adapter->flags & QLCNIC_FW_HANG) && !qlcnic_auto_fw_reset)
- return;
-
/* Re-schedule the function */
if (test_bit(QLC_83XX_MODULE_LOADED, &adapter->ahw->idc.status))
qlcnic_schedule_work(adapter, qlcnic_83xx_idc_poll_dev_state,
@@ -1219,10 +1226,10 @@ void qlcnic_83xx_idc_request_reset(struct qlcnic_adapter *adapter, u32 key)
}
val = QLCRDX(adapter->ahw, QLC_83XX_IDC_CTRL);
- if ((val & QLC_83XX_IDC_DISABLE_FW_RESET_RECOVERY) ||
- !qlcnic_auto_fw_reset) {
- dev_err(&adapter->pdev->dev,
- "%s:failed, device in non reset mode\n", __func__);
+ if (val & QLC_83XX_IDC_DISABLE_FW_RESET_RECOVERY) {
+ netdev_info(adapter->netdev, "%s: Auto firmware recovery is disabled\n",
+ __func__);
+ qlcnic_83xx_idc_enter_failed_state(adapter, 0);
qlcnic_83xx_unlock_driver(adapter);
return;
}
@@ -1939,7 +1946,7 @@ static void qlcnic_83xx_exec_template_cmd(struct qlcnic_adapter *p_dev,
p_dev->ahw->reset.seq_index = index;
}
-static void qlcnic_83xx_stop_hw(struct qlcnic_adapter *p_dev)
+void qlcnic_83xx_stop_hw(struct qlcnic_adapter *p_dev)
{
p_dev->ahw->reset.seq_index = 0;
@@ -1994,6 +2001,14 @@ static int qlcnic_83xx_restart_hw(struct qlcnic_adapter *adapter)
val = QLCRDX(adapter->ahw, QLC_83XX_IDC_CTRL);
if (!(val & QLC_83XX_IDC_GRACEFULL_RESET))
qlcnic_dump_fw(adapter);
+
+ if (val & QLC_83XX_IDC_DISABLE_FW_RESET_RECOVERY) {
+ netdev_info(adapter->netdev, "%s: Auto firmware recovery is disabled\n",
+ __func__);
+ qlcnic_83xx_idc_enter_failed_state(adapter, 1);
+ return err;
+ }
+
qlcnic_83xx_init_hw(adapter);
if (qlcnic_83xx_copy_bootloader(adapter))
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 7/8] qlcnic: Fix mailbox processing during diagnostic test
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (5 preceding siblings ...)
2013-12-16 20:37 ` [PATCH net v2 6/8] qlcnic: Allow firmware dump collection when auto firmware recovery is disabled Himanshu Madhani
@ 2013-12-16 20:37 ` Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 8/8] qlcnic: Dump mailbox registers when mailbox command times out Himanshu Madhani
2013-12-17 21:25 ` [PATCH net v2 0/8] qlcnic: Bug fixes David Miller
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:37 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Manish chopra, himanshu.madhani
From: Manish chopra <manish.chopra@qlogic.com>
o Do not enable mailbox polling in case of legacy interrupt.
Process mailbox AEN/response from the interrupt.
Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
.../net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 32 ++++------------------
1 file changed, 6 insertions(+), 26 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index b1cb0ff..ab66e7f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -447,8 +447,9 @@ irqreturn_t qlcnic_83xx_intr(int irq, void *data)
qlcnic_83xx_poll_process_aen(adapter);
- if (ahw->diag_test == QLCNIC_INTERRUPT_TEST) {
- ahw->diag_cnt++;
+ if (ahw->diag_test) {
+ if (ahw->diag_test == QLCNIC_INTERRUPT_TEST)
+ ahw->diag_cnt++;
qlcnic_83xx_enable_legacy_msix_mbx_intr(adapter);
return IRQ_HANDLED;
}
@@ -1345,11 +1346,6 @@ static int qlcnic_83xx_diag_alloc_res(struct net_device *netdev, int test,
}
if (adapter->ahw->diag_test == QLCNIC_LOOPBACK_TEST) {
- /* disable and free mailbox interrupt */
- if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) {
- qlcnic_83xx_enable_mbx_poll(adapter);
- qlcnic_83xx_free_mbx_intr(adapter);
- }
adapter->ahw->loopback_state = 0;
adapter->ahw->hw_ops->setup_link_event(adapter, 1);
}
@@ -1363,33 +1359,20 @@ static void qlcnic_83xx_diag_free_res(struct net_device *netdev,
{
struct qlcnic_adapter *adapter = netdev_priv(netdev);
struct qlcnic_host_sds_ring *sds_ring;
- int ring, err;
+ int ring;
clear_bit(__QLCNIC_DEV_UP, &adapter->state);
if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST) {
for (ring = 0; ring < adapter->drv_sds_rings; ring++) {
sds_ring = &adapter->recv_ctx->sds_rings[ring];
- qlcnic_83xx_disable_intr(adapter, sds_ring);
- if (!(adapter->flags & QLCNIC_MSIX_ENABLED))
- qlcnic_83xx_enable_mbx_poll(adapter);
+ if (adapter->flags & QLCNIC_MSIX_ENABLED)
+ qlcnic_83xx_disable_intr(adapter, sds_ring);
}
}
qlcnic_fw_destroy_ctx(adapter);
qlcnic_detach(adapter);
- if (adapter->ahw->diag_test == QLCNIC_LOOPBACK_TEST) {
- if (!(adapter->flags & QLCNIC_MSIX_ENABLED)) {
- err = qlcnic_83xx_setup_mbx_intr(adapter);
- qlcnic_83xx_disable_mbx_poll(adapter);
- if (err) {
- dev_err(&adapter->pdev->dev,
- "%s: failed to setup mbx interrupt\n",
- __func__);
- goto out;
- }
- }
- }
adapter->ahw->diag_test = 0;
adapter->drv_sds_rings = drv_sds_rings;
@@ -1399,9 +1382,6 @@ static void qlcnic_83xx_diag_free_res(struct net_device *netdev,
if (netif_running(netdev))
__qlcnic_up(adapter, netdev);
- if (adapter->ahw->diag_test == QLCNIC_INTERRUPT_TEST &&
- !(adapter->flags & QLCNIC_MSIX_ENABLED))
- qlcnic_83xx_disable_mbx_poll(adapter);
out:
netif_device_attach(netdev);
}
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH net v2 8/8] qlcnic: Dump mailbox registers when mailbox command times out.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (6 preceding siblings ...)
2013-12-16 20:37 ` [PATCH net v2 7/8] qlcnic: Fix mailbox processing during diagnostic test Himanshu Madhani
@ 2013-12-16 20:37 ` Himanshu Madhani
2013-12-17 21:25 ` [PATCH net v2 0/8] qlcnic: Bug fixes David Miller
8 siblings, 0 replies; 12+ messages in thread
From: Himanshu Madhani @ 2013-12-16 20:37 UTC (permalink / raw)
To: davem; +Cc: netdev, Dept_NX_Linux_NIC_Driver, Manish chopra, himanshu.madhani
From: Manish chopra <manish.chopra@qlogic.com>
Signed-off-by: Manish Chopra <manish.chopra@qlogic.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@qlogic.com>
---
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index ab66e7f..6055d39 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -3734,6 +3734,19 @@ static void qlcnic_83xx_decode_mbx_rsp(struct qlcnic_adapter *adapter,
return;
}
+static inline void qlcnic_dump_mailbox_registers(struct qlcnic_adapter *adapter)
+{
+ struct qlcnic_hardware_context *ahw = adapter->ahw;
+ u32 offset;
+
+ offset = QLCRDX(ahw, QLCNIC_DEF_INT_MASK);
+ dev_info(&adapter->pdev->dev, "Mbx interrupt mask=0x%x, Mbx interrupt enable=0x%x, Host mbx control=0x%x, Fw mbx control=0x%x",
+ readl(ahw->pci_base0 + offset),
+ QLCRDX(ahw, QLCNIC_MBX_INTR_ENBL),
+ QLCRDX(ahw, QLCNIC_HOST_MBX_CTRL),
+ QLCRDX(ahw, QLCNIC_FW_MBX_CTRL));
+}
+
static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
{
struct qlcnic_mailbox *mbx = container_of(work, struct qlcnic_mailbox,
@@ -3778,6 +3791,8 @@ static void qlcnic_83xx_mailbox_worker(struct work_struct *work)
__func__, cmd->cmd_op, cmd->type, ahw->pci_func,
ahw->op_mode);
clear_bit(QLC_83XX_MBX_READY, &mbx->status);
+ qlcnic_dump_mailbox_registers(adapter);
+ qlcnic_83xx_get_mbx_data(adapter, cmd);
qlcnic_dump_mbx(adapter, cmd);
qlcnic_83xx_idc_request_reset(adapter,
QLCNIC_FORCE_FW_DUMP_KEY);
--
1.8.1.4
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH net v2 0/8] qlcnic: Bug fixes.
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
` (7 preceding siblings ...)
2013-12-16 20:37 ` [PATCH net v2 8/8] qlcnic: Dump mailbox registers when mailbox command times out Himanshu Madhani
@ 2013-12-17 21:25 ` David Miller
8 siblings, 0 replies; 12+ messages in thread
From: David Miller @ 2013-12-17 21:25 UTC (permalink / raw)
To: himanshu.madhani; +Cc: netdev, Dept_NX_Linux_NIC_Driver
From: Himanshu Madhani <himanshu.madhani@qlogic.com>
Date: Mon, 16 Dec 2013 15:36:55 -0500
> This series contains bug fixes for mailbox handling and multi Tx queue support
> for all supported adapters.
>
> changes from v1 -> v2
> o updated patch to fix usage of netif_tx_{wake,stop} api during link change
> as per David Miller's suggestion.
> o Dropped patch to use spinklock per tx queue for more work.
> o Added reworked patch for memory allocation failures.
> o Added patch to allow capturing of dump, when auto recovery is disabled in firmware.
> o Added patches for mailbox interrupt handling and debugging data for mailbox failure.
>
> Please apply to net.
Series applied, thank you.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2013-12-17 21:25 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-16 20:36 [PATCH net v2 0/8] qlcnic: Bug fixes Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 1/8] qlcnic: Fix usage of netif_tx_{wake,stop} api during link change Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 2/8] qlcnic: Fix diagnostic test for all adapters Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 3/8] qlcnic: Fix TSS/RSS ring validation logic Himanshu Madhani
2013-12-16 20:36 ` [PATCH net v2 4/8] qlcnic: Fix TSS/RSS validation for 83xx/84xx series adapter Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 5/8] qlcnic: Fix memory allocation Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 6/8] qlcnic: Allow firmware dump collection when auto firmware recovery is disabled Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 7/8] qlcnic: Fix mailbox processing during diagnostic test Himanshu Madhani
2013-12-16 20:37 ` [PATCH net v2 8/8] qlcnic: Dump mailbox registers when mailbox command times out Himanshu Madhani
2013-12-17 21:25 ` [PATCH net v2 0/8] qlcnic: Bug fixes David Miller
-- strict thread matches above, loose matches on Subject: below --
2013-05-09 19:25 Shahed Shaikh
2013-05-11 23:01 ` David Miller
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).