aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/rsxx/cregs.c
diff options
context:
space:
mode:
authorPhilip J Kelleher <pjk1939@linux.vnet.ibm.com>2013-06-18 14:34:54 -0500
committerJens Axboe <axboe@kernel.dk>2013-06-19 13:52:09 +0200
commita3299ab18591d36ad5622f5064619123c439b779 (patch)
tree5a08d03af4ef28eea4f1638a385d10d3fa107856 /drivers/block/rsxx/cregs.c
parentblk-throttle: implement proper hierarchy support (diff)
downloadlinux-dev-a3299ab18591d36ad5622f5064619123c439b779.tar.xz
linux-dev-a3299ab18591d36ad5622f5064619123c439b779.zip
rsxx: Individual workqueues for interruptible events.
Giving all interrupt based events their own workqueue to complete tasks on. This fixes a bug that would cause creg commands to timeout if too many are issued at once. Signed-off-by: Philip J Kelleher <pjk1939@linux.vnet.ibm.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block/rsxx/cregs.c')
-rw-r--r--drivers/block/rsxx/cregs.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/block/rsxx/cregs.c b/drivers/block/rsxx/cregs.c
index 4b5c020a0a65..4914464c19fc 100644
--- a/drivers/block/rsxx/cregs.c
+++ b/drivers/block/rsxx/cregs.c
@@ -727,6 +727,11 @@ int rsxx_creg_setup(struct rsxx_cardinfo *card)
{
card->creg_ctrl.active_cmd = NULL;
+ card->creg_ctrl.creg_wq =
+ create_singlethread_workqueue(DRIVER_NAME"_creg");
+ if (!card->creg_ctrl.creg_wq)
+ return -ENOMEM;
+
INIT_WORK(&card->creg_ctrl.done_work, creg_cmd_done);
mutex_init(&card->creg_ctrl.reset_lock);
INIT_LIST_HEAD(&card->creg_ctrl.queue);