* [PATCH 2.6.30 2/4] cxgb3: fix workqueue flush issues
@ 2009-04-17 22:21 Divy Le Ray
2009-04-20 9:08 ` David Miller
0 siblings, 1 reply; 2+ messages in thread
From: Divy Le Ray @ 2009-04-17 22:21 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-kernel, swise
From: Divy Le Ray <divy@chelsio.com>
The fatal error task can be scheduled while processing an offload packet
in NAPI context when the connection handle is bogus. this can race
with the ports being brought down and the cxgb3 workqueue being flushed.
Stop napi processing before flushing the work queue.
The ULP drivers (iSCSI, iWARP) might also schedule a task on keventd_wk
while releasing a connection handle (cxgb3_offload.c::cxgb3_queue_tid_release()).
The driver however does not flush any work on keventd_wq while being unloaded.
This patch also fixes this.
Also call cancel_delayed_work_sync in place of the the deprecated
cancel_rearming_delayed_workqueue.
Signed-off-by: Divy Le Ray <divy@chelsio.com>
---
drivers/net/cxgb3/cxgb3_main.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index 9fdfe0b..99b5032 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -1117,8 +1117,8 @@ static void cxgb_down(struct adapter *adapter)
spin_unlock_irq(&adapter->work_lock);
free_irq_resources(adapter);
- flush_workqueue(cxgb3_wq); /* wait for external IRQ handler */
quiesce_rx(adapter);
+ flush_workqueue(cxgb3_wq); /* wait for external IRQ handler */
}
static void schedule_chk_task(struct adapter *adap)
@@ -1187,6 +1187,9 @@ static int offload_close(struct t3cdev *tdev)
sysfs_remove_group(&tdev->lldev->dev.kobj, &offload_attr_group);
+ /* Flush work scheduled while releasing TIDs */
+ flush_scheduled_work();
+
tdev->lldev = NULL;
cxgb3_set_dummy_ops(tdev);
t3_tp_set_offload_mode(adapter, 0);
@@ -1247,8 +1250,7 @@ static int cxgb_close(struct net_device *dev)
spin_unlock_irq(&adapter->work_lock);
if (!(adapter->open_device_map & PORT_MASK))
- cancel_rearming_delayed_workqueue(cxgb3_wq,
- &adapter->adap_check_task);
+ cancel_delayed_work_sync(&adapter->adap_check_task);
if (!adapter->open_device_map)
cxgb_down(adapter);
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 2.6.30 2/4] cxgb3: fix workqueue flush issues
2009-04-17 22:21 [PATCH 2.6.30 2/4] cxgb3: fix workqueue flush issues Divy Le Ray
@ 2009-04-20 9:08 ` David Miller
0 siblings, 0 replies; 2+ messages in thread
From: David Miller @ 2009-04-20 9:08 UTC (permalink / raw)
To: divy; +Cc: netdev, linux-kernel, swise
From: Divy Le Ray <divy@chelsio.com>
Date: Fri, 17 Apr 2009 15:21:17 -0700
> The fatal error task can be scheduled while processing an offload packet
> in NAPI context when the connection handle is bogus. this can race
> with the ports being brought down and the cxgb3 workqueue being flushed.
> Stop napi processing before flushing the work queue.
>
> The ULP drivers (iSCSI, iWARP) might also schedule a task on keventd_wk
> while releasing a connection handle (cxgb3_offload.c::cxgb3_queue_tid_release()).
> The driver however does not flush any work on keventd_wq while being unloaded.
> This patch also fixes this.
>
> Also call cancel_delayed_work_sync in place of the the deprecated
> cancel_rearming_delayed_workqueue.
>
> Signed-off-by: Divy Le Ray <divy@chelsio.com>
Applied.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-04-20 9:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-17 22:21 [PATCH 2.6.30 2/4] cxgb3: fix workqueue flush issues Divy Le Ray
2009-04-20 9:08 ` 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).