* [PATCH 0/2 v2] hpsa: workqueue + minor fix @ 2015-01-27 16:56 Tomas Henzl 2015-01-27 16:56 ` [PATCH 1/2] hpsa: use a driver's own workqueue instead of a shared wq Tomas Henzl ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: Tomas Henzl @ 2015-01-27 16:56 UTC (permalink / raw) To: linux-scsi; +Cc: don.brace, scott.teel, Kevin.Barnett, Justin.Lindley I've adapted previously posted changes on top of the latest hpsa series. And once again. Tomas ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] hpsa: use a driver's own workqueue instead of a shared wq 2015-01-27 16:56 [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl @ 2015-01-27 16:56 ` Tomas Henzl 2015-01-27 16:56 ` [PATCH 2/2] hpsa: remove a needless call - pci_get_drvdata Tomas Henzl 2015-01-27 17:17 ` [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl 2 siblings, 0 replies; 4+ messages in thread From: Tomas Henzl @ 2015-01-27 16:56 UTC (permalink / raw) To: linux-scsi; +Cc: don.brace, scott.teel, Kevin.Barnett, Justin.Lindley hpsa driver uses a shared wq, max sleep time in function spent hpsa_wait_for_clear_event_notify_ack may take up to 40sec and that is too much for a shared workqueue. This patch takes the easiest approach and just creates a driver's own workqueue. Signed-off-by: Tomas Henzl <thenzl@redhat.com> --- drivers/scsi/hpsa.c | 18 +++++++++++++----- drivers/scsi/hpsa.h | 1 + 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 95d581c454..af32962259 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -6822,8 +6822,8 @@ static void hpsa_monitor_ctlr_worker(struct work_struct *work) spin_lock_irqsave(&h->lock, flags); if (!h->remove_in_progress) - schedule_delayed_work(&h->monitor_ctlr_work, - h->heartbeat_sample_interval); + queue_delayed_work(h->monitor_wq, &h->monitor_ctlr_work, + h->heartbeat_sample_interval); spin_unlock_irqrestore(&h->lock, flags); } @@ -6888,12 +6888,17 @@ reinit_after_soft_reset: rc = -ENOMEM; goto clean1; } - h->resubmit_wq = hpsa_create_controller_wq(h, "resubmit"); if (!h->resubmit_wq) { rc = -ENOMEM; goto clean1; } + h->monitor_wq = hpsa_create_controller_wq(h, "monitor"); + if (!h->monitor_wq) { + rc = -ENOMEM; + goto clean1; + } + /* Allocate and clear per-cpu variable lockup_detected */ h->lockup_detected = alloc_percpu(u32); @@ -7016,8 +7021,8 @@ reinit_after_soft_reset: /* Monitor the controller for firmware lockups */ h->heartbeat_sample_interval = HEARTBEAT_SAMPLE_INTERVAL; INIT_DELAYED_WORK(&h->monitor_ctlr_work, hpsa_monitor_ctlr_worker); - schedule_delayed_work(&h->monitor_ctlr_work, - h->heartbeat_sample_interval); + queue_delayed_work(h->monitor_wq, &h->monitor_ctlr_work, + h->heartbeat_sample_interval); INIT_DELAYED_WORK(&h->rescan_ctlr_work, hpsa_rescan_ctlr_worker); queue_delayed_work(h->rescan_ctlr_wq, &h->rescan_ctlr_work, h->heartbeat_sample_interval); @@ -7030,6 +7035,8 @@ clean2_and_free_irqs: hpsa_free_irqs(h); clean2: clean1: + if (h->monitor_wq) + destroy_workqueue(h->monitor_wq); if (h->resubmit_wq) destroy_workqueue(h->resubmit_wq); if (h->rescan_ctlr_wq) @@ -7112,6 +7119,7 @@ static void hpsa_remove_one(struct pci_dev *pdev) cancel_delayed_work_sync(&h->rescan_ctlr_work); destroy_workqueue(h->rescan_ctlr_wq); destroy_workqueue(h->resubmit_wq); + destroy_workqueue(h->monitor_wq); hpsa_unregister_scsi(h); /* unhook from SCSI subsystem */ hpsa_shutdown(pdev); iounmap(h->vaddr); diff --git a/drivers/scsi/hpsa.h b/drivers/scsi/hpsa.h index 6577130503..39c720e6f0 100644 --- a/drivers/scsi/hpsa.h +++ b/drivers/scsi/hpsa.h @@ -253,6 +253,7 @@ struct ctlr_info { int raid_offload_debug; struct workqueue_struct *resubmit_wq; struct workqueue_struct *rescan_ctlr_wq; + struct workqueue_struct *monitor_wq; }; struct offline_device_entry { -- 1.9.3 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] hpsa: remove a needless call - pci_get_drvdata 2015-01-27 16:56 [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl 2015-01-27 16:56 ` [PATCH 1/2] hpsa: use a driver's own workqueue instead of a shared wq Tomas Henzl @ 2015-01-27 16:56 ` Tomas Henzl 2015-01-27 17:17 ` [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl 2 siblings, 0 replies; 4+ messages in thread From: Tomas Henzl @ 2015-01-27 16:56 UTC (permalink / raw) To: linux-scsi; +Cc: don.brace, scott.teel, Kevin.Barnett, Justin.Lindley Signed-off-by: Tomas Henzl <thenzl@redhat.com> --- drivers/scsi/hpsa.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index af32962259..6e4abba285 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -7102,14 +7102,13 @@ static void hpsa_free_device_info(struct ctlr_info *h) static void hpsa_remove_one(struct pci_dev *pdev) { - struct ctlr_info *h; unsigned long flags; + struct ctlr_info *h = pci_get_drvdata(pdev); - if (pci_get_drvdata(pdev) == NULL) { + if (!h) { dev_err(&pdev->dev, "unable to remove device\n"); return; } - h = pci_get_drvdata(pdev); /* Get rid of any controller monitoring work items */ spin_lock_irqsave(&h->lock, flags); -- 1.9.3 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2 v2] hpsa: workqueue + minor fix 2015-01-27 16:56 [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl 2015-01-27 16:56 ` [PATCH 1/2] hpsa: use a driver's own workqueue instead of a shared wq Tomas Henzl 2015-01-27 16:56 ` [PATCH 2/2] hpsa: remove a needless call - pci_get_drvdata Tomas Henzl @ 2015-01-27 17:17 ` Tomas Henzl 2 siblings, 0 replies; 4+ messages in thread From: Tomas Henzl @ 2015-01-27 17:17 UTC (permalink / raw) To: linux-scsi; +Cc: don.brace, scott.teel, Kevin.Barnett, Justin.Lindley On 01/27/2015 05:56 PM, Tomas Henzl wrote: > I've adapted previously posted changes on top of the latest hpsa series. > And once again. And because I haven't read the code in the last hpsa series properly I haven't realised that the body of this patch is already there. Please ignore this series. > > Tomas > > -- > To unsubscribe from this list: send the line "unsubscribe linux-scsi" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-01-27 17:17 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-01-27 16:56 [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl 2015-01-27 16:56 ` [PATCH 1/2] hpsa: use a driver's own workqueue instead of a shared wq Tomas Henzl 2015-01-27 16:56 ` [PATCH 2/2] hpsa: remove a needless call - pci_get_drvdata Tomas Henzl 2015-01-27 17:17 ` [PATCH 0/2 v2] hpsa: workqueue + minor fix Tomas Henzl
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).