* [net-2.6 PATCH 1/5] qlge: Fix bad bit definitions.
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
@ 2009-09-29 18:39 ` Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 2/5] qlge: Fix out of sync hardware semaphore Ron Mercer
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ron Mercer @ 2009-09-29 18:39 UTC (permalink / raw)
To: davem; +Cc: netdev, ron.mercer
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge.h | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/net/qlge/qlge.h b/drivers/net/qlge/qlge.h
index a9845a2..30d5585 100644
--- a/drivers/net/qlge/qlge.h
+++ b/drivers/net/qlge/qlge.h
@@ -1381,15 +1381,15 @@ struct intr_context {
/* adapter flags definitions. */
enum {
- QL_ADAPTER_UP = (1 << 0), /* Adapter has been brought up. */
- QL_LEGACY_ENABLED = (1 << 3),
- QL_MSI_ENABLED = (1 << 3),
- QL_MSIX_ENABLED = (1 << 4),
- QL_DMA64 = (1 << 5),
- QL_PROMISCUOUS = (1 << 6),
- QL_ALLMULTI = (1 << 7),
- QL_PORT_CFG = (1 << 8),
- QL_CAM_RT_SET = (1 << 9),
+ QL_ADAPTER_UP = 0, /* Adapter has been brought up. */
+ QL_LEGACY_ENABLED = 1,
+ QL_MSI_ENABLED = 2,
+ QL_MSIX_ENABLED = 3,
+ QL_DMA64 = 4,
+ QL_PROMISCUOUS = 5,
+ QL_ALLMULTI = 6,
+ QL_PORT_CFG = 7,
+ QL_CAM_RT_SET = 8,
};
/* link_status bit definitions */
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [net-2.6 PATCH 2/5] qlge: Fix out of sync hardware semaphore.
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 1/5] qlge: Fix bad bit definitions Ron Mercer
@ 2009-09-29 18:39 ` Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 3/5] qlge: Fix spin_lock warning Ron Mercer
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ron Mercer @ 2009-09-29 18:39 UTC (permalink / raw)
To: davem; +Cc: netdev, ron.mercer
ql_clear_routing_entries() takes/gives it's own hardware semaphore since
it is called from more than one place. ql_route_initialize() should
make this call and THEN take it's own semaphore before doing it's work.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 2205292..e4b756d 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -3142,14 +3142,14 @@ static int ql_route_initialize(struct ql_adapter *qdev)
{
int status = 0;
- status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
+ /* Clear all the entries in the routing table. */
+ status = ql_clear_routing_entries(qdev);
if (status)
return status;
- /* Clear all the entries in the routing table. */
- status = ql_clear_routing_entries(qdev);
+ status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
if (status)
- goto exit;
+ return status;
status = ql_set_routing_reg(qdev, RT_IDX_ALL_ERR_SLOT, RT_IDX_ERR, 1);
if (status) {
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [net-2.6 PATCH 3/5] qlge: Fix spin_lock warning.
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 1/5] qlge: Fix bad bit definitions Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 2/5] qlge: Fix out of sync hardware semaphore Ron Mercer
@ 2009-09-29 18:39 ` Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 4/5] qlge: Protect reset recovery with rtnl_lock() Ron Mercer
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Ron Mercer @ 2009-09-29 18:39 UTC (permalink / raw)
To: davem; +Cc: netdev, ron.mercer
Remove the unnecessary locking around the call to ql_adapter_reset().
Sep 25 08:17:29 localhost kernel: SOFTIRQ-ON-W at:
Sep 25 08:17:29 localhost kernel: [<c0000000000a2964>] .lock_acquire+0x10c/0x158
Sep 25 08:17:29 localhost kernel: [<c0000000004542e0>] ._spin_lock+0x34/0x58
Sep 25 08:17:29 localhost kernel: [<d000000006723070>] .ql_adapter_down+0x40c/0x4a0 [qlge]
Sep 25 08:17:29 localhost kernel: [<d0000000067256d8>] .qlge_close+0x38/0x58 [qlge]
Sep 25 08:17:29 localhost kernel: [<c0000000003ada6c>] .dev_close+0xdc/0x118
Sep 25 08:17:29 localhost kernel: [<c0000000003adb48>] .rollback_registered+0xa0/0x158
Sep 25 08:17:29 localhost kernel: [<c0000000003adc50>] .unregister_netdevice+0x50/0x7c
Sep 25 08:17:29 localhost kernel: [<c0000000003adca0>] .unregister_netdev+0x24/0x40
Sep 25 08:17:29 localhost kernel: [<d00000000672e0c0>] .qlge_remove+0x28/0x64 [qlge]
Sep 25 08:17:29 localhost kernel: [<c000000000253fdc>] .pci_device_remove+0x50/0x90
Sep 25 08:17:29 localhost kernel: [<c0000000002f5434>] .__device_release_driver+0x94/0xf8
Sep 25 08:17:29 localhost kernel: [<c0000000002f5560>] .driver_detach+0xc8/0xfc
Sep 25 08:17:29 localhost kernel: [<c0000000002f3fd8>] .bus_remove_driver+0xb4/0x114
Sep 25 08:17:29 localhost kernel: [<c0000000002f5d4c>] .driver_unregister+0x80/0xa4
Sep 25 08:17:29 localhost kernel: [<c00000000025421c>] .pci_unregister_driver+0x50/0xc8
Sep 25 08:17:29 localhost kernel: [<d00000000672e044>] .qlge_exit+0x1c/0x34 [qlge]
Sep 25 08:17:29 localhost kernel: [<c0000000000ac8b0>] .SyS_delete_module+0x234/0x2d0
Sep 25 08:17:29 localhost kernel: [<c000000000008554>] syscall_exit+0x0/0x40
Sep 25 08:17:29 localhost kernel: INITIAL USE at:
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index e4b756d..b05300d 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -3380,12 +3380,10 @@ static int ql_adapter_down(struct ql_adapter *qdev)
ql_free_rx_buffers(qdev);
- spin_lock(&qdev->hw_lock);
status = ql_adapter_reset(qdev);
if (status)
QPRINTK(qdev, IFDOWN, ERR, "reset(func #%d) FAILED!\n",
qdev->func);
- spin_unlock(&qdev->hw_lock);
return status;
}
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [net-2.6 PATCH 4/5] qlge: Protect reset recovery with rtnl_lock().
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
` (2 preceding siblings ...)
2009-09-29 18:39 ` [net-2.6 PATCH 3/5] qlge: Fix spin_lock warning Ron Mercer
@ 2009-09-29 18:39 ` Ron Mercer
2009-09-29 18:39 ` [net-2.6 PATCH 5/5] qlge: Fix error exit for probe call Ron Mercer
2009-10-01 3:04 ` [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge David Miller
5 siblings, 0 replies; 7+ messages in thread
From: Ron Mercer @ 2009-09-29 18:39 UTC (permalink / raw)
To: davem; +Cc: netdev, ron.mercer
Move the call to rtnl_lock() to before the internal call to
ql_adapter_down()/ql_adapter_up(). This prevents collisions that can
happen when recovering from an asic error.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index b05300d..fbef305 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -3703,7 +3703,7 @@ static void ql_asic_reset_work(struct work_struct *work)
struct ql_adapter *qdev =
container_of(work, struct ql_adapter, asic_reset_work.work);
int status;
-
+ rtnl_lock();
status = ql_adapter_down(qdev);
if (status)
goto error;
@@ -3711,12 +3711,12 @@ static void ql_asic_reset_work(struct work_struct *work)
status = ql_adapter_up(qdev);
if (status)
goto error;
-
+ rtnl_unlock();
return;
error:
QPRINTK(qdev, IFUP, ALERT,
"Driver up/down cycle failed, closing device\n");
- rtnl_lock();
+
set_bit(QL_ADAPTER_UP, &qdev->flags);
dev_close(qdev->ndev);
rtnl_unlock();
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* [net-2.6 PATCH 5/5] qlge: Fix error exit for probe call.
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
` (3 preceding siblings ...)
2009-09-29 18:39 ` [net-2.6 PATCH 4/5] qlge: Protect reset recovery with rtnl_lock() Ron Mercer
@ 2009-09-29 18:39 ` Ron Mercer
2009-10-01 3:04 ` [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge David Miller
5 siblings, 0 replies; 7+ messages in thread
From: Ron Mercer @ 2009-09-29 18:39 UTC (permalink / raw)
To: davem; +Cc: netdev, ron.mercer
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index fbef305..c8a9efe 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -3832,11 +3832,14 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
return err;
}
+ qdev->ndev = ndev;
+ qdev->pdev = pdev;
+ pci_set_drvdata(pdev, ndev);
pos = pci_find_capability(pdev, PCI_CAP_ID_EXP);
if (pos <= 0) {
dev_err(&pdev->dev, PFX "Cannot find PCI Express capability, "
"aborting.\n");
- goto err_out;
+ return pos;
} else {
pci_read_config_word(pdev, pos + PCI_EXP_DEVCTL, &val16);
val16 &= ~PCI_EXP_DEVCTL_NOSNOOP_EN;
@@ -3849,7 +3852,7 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
err = pci_request_regions(pdev, DRV_NAME);
if (err) {
dev_err(&pdev->dev, "PCI region request failed.\n");
- goto err_out;
+ return err;
}
pci_set_master(pdev);
@@ -3867,7 +3870,6 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
goto err_out;
}
- pci_set_drvdata(pdev, ndev);
qdev->reg_base =
ioremap_nocache(pci_resource_start(pdev, 1),
pci_resource_len(pdev, 1));
@@ -3887,8 +3889,6 @@ static int __devinit ql_init_device(struct pci_dev *pdev,
goto err_out;
}
- qdev->ndev = ndev;
- qdev->pdev = pdev;
err = ql_get_board_info(qdev);
if (err) {
dev_err(&pdev->dev, "Register access failed.\n");
--
1.6.0.2
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge.
2009-09-29 18:39 [net-2.6 PATCH 0/5] qlge: Bug fixes for qlge Ron Mercer
` (4 preceding siblings ...)
2009-09-29 18:39 ` [net-2.6 PATCH 5/5] qlge: Fix error exit for probe call Ron Mercer
@ 2009-10-01 3:04 ` David Miller
5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2009-10-01 3:04 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev
All applied, thanks Ron.
^ permalink raw reply [flat|nested] 7+ messages in thread