|
Michal Suchanek |
77923a |
From 4a59ed8a077e0a4a6f52084c80c716b9936198ef Mon Sep 17 00:00:00 2001
|
|
Michal Suchanek |
77923a |
From: Tyrel Datwyler <tyreld@linux.ibm.com>
|
|
Michal Suchanek |
77923a |
Date: Thu, 11 Feb 2021 12:57:39 -0600
|
|
Michal Suchanek |
77923a |
Subject: [PATCH 1/4] ibmvfc: simplify handling of sub-CRQ initialization
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
References: bsc#1182632 ltc#191222
|
|
Michal Suchanek |
77923a |
Patch-mainline: submitted https://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=229197
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
If ibmvfc_init_sub_crqs() fails ibmvfc_probe() simply parrots
|
|
Michal Suchanek |
77923a |
registration failure reported elsewhere, and futher
|
|
Michal Suchanek |
77923a |
vhost->scsi_scrq.scrq == NULL is indication enough to the driver that it
|
|
Michal Suchanek |
77923a |
has no sub-CRQs available. The mq_enabled check can also be moved into
|
|
Michal Suchanek |
77923a |
ibmvfc_init_sub_crqs() such that each caller doesn't have to gate the
|
|
Michal Suchanek |
77923a |
call with a mq_enabled check. Finally, in the case of sub-CRQ setup
|
|
Michal Suchanek |
77923a |
failure setting do_enquiry can be turned off to putting the driver into
|
|
Michal Suchanek |
77923a |
single queue fallback mode.
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
The aforementioned changes also simplify the next patch in the series
|
|
Michal Suchanek |
77923a |
that fixes a hard reset issue, by tying a sub-CRQ setup failure and
|
|
Michal Suchanek |
77923a |
do_enquiry logic into ibmvfc_init_sub_crqs().
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
Signed-off-by: Tyrel Datwyler <tyreld@linux.ibm.com>
|
|
Michal Suchanek |
77923a |
Reviewed-by: Brian King <brking@linux.vnet.ibm.com>
|
|
Michal Suchanek |
77923a |
Acked-by: Michal Suchanek <msuchanek@suse.de>
|
|
Michal Suchanek |
77923a |
---
|
|
Michal Suchanek |
77923a |
drivers/scsi/ibmvscsi/ibmvfc.c | 21 ++++++++++-----------
|
|
Michal Suchanek |
77923a |
1 file changed, 10 insertions(+), 11 deletions(-)
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c
|
|
Michal Suchanek |
77923a |
index a72ad6d12579..7be437e9d805 100644
|
|
Michal Suchanek |
77923a |
--- a/drivers/scsi/ibmvscsi/ibmvfc.c
|
|
Michal Suchanek |
77923a |
+++ b/drivers/scsi/ibmvscsi/ibmvfc.c
|
|
Michal Suchanek |
77923a |
@@ -5707,17 +5707,21 @@ static void ibmvfc_deregister_scsi_channel(struct ibmvfc_host *vhost, int index)
|
|
Michal Suchanek |
77923a |
LEAVE;
|
|
Michal Suchanek |
77923a |
}
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
-static int ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
|
Michal Suchanek |
77923a |
+static void ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
|
Michal Suchanek |
77923a |
{
|
|
Michal Suchanek |
77923a |
int i, j;
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
ENTER;
|
|
Michal Suchanek |
77923a |
+ if (!vhost->mq_enabled)
|
|
Michal Suchanek |
77923a |
+ return;
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
vhost->scsi_scrqs.scrqs = kcalloc(nr_scsi_hw_queues,
|
|
Michal Suchanek |
77923a |
sizeof(*vhost->scsi_scrqs.scrqs),
|
|
Michal Suchanek |
77923a |
GFP_KERNEL);
|
|
Michal Suchanek |
77923a |
- if (!vhost->scsi_scrqs.scrqs)
|
|
Michal Suchanek |
77923a |
- return -1;
|
|
Michal Suchanek |
77923a |
+ if (!vhost->scsi_scrqs.scrqs) {
|
|
Michal Suchanek |
77923a |
+ vhost->do_enquiry = 0;
|
|
Michal Suchanek |
77923a |
+ return;
|
|
Michal Suchanek |
77923a |
+ }
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
for (i = 0; i < nr_scsi_hw_queues; i++) {
|
|
Michal Suchanek |
77923a |
if (ibmvfc_register_scsi_channel(vhost, i)) {
|
|
Michal Suchanek |
77923a |
@@ -5726,13 +5730,12 @@ static int ibmvfc_init_sub_crqs(struct ibmvfc_host *vhost)
|
|
Michal Suchanek |
77923a |
kfree(vhost->scsi_scrqs.scrqs);
|
|
Michal Suchanek |
77923a |
vhost->scsi_scrqs.scrqs = NULL;
|
|
Michal Suchanek |
77923a |
vhost->scsi_scrqs.active_queues = 0;
|
|
Michal Suchanek |
77923a |
- LEAVE;
|
|
Michal Suchanek |
77923a |
- return -1;
|
|
Michal Suchanek |
77923a |
+ vhost->do_enquiry = 0;
|
|
Michal Suchanek |
77923a |
+ break;
|
|
Michal Suchanek |
77923a |
}
|
|
Michal Suchanek |
77923a |
}
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
LEAVE;
|
|
Michal Suchanek |
77923a |
- return 0;
|
|
Michal Suchanek |
77923a |
}
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
static void ibmvfc_release_sub_crqs(struct ibmvfc_host *vhost)
|
|
Michal Suchanek |
77923a |
@@ -5999,11 +6002,7 @@ static int ibmvfc_probe(struct vio_dev *vdev, const struct vio_device_id *id)
|
|
Michal Suchanek |
77923a |
goto remove_shost;
|
|
Michal Suchanek |
77923a |
}
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
- if (vhost->mq_enabled) {
|
|
Michal Suchanek |
77923a |
- rc = ibmvfc_init_sub_crqs(vhost);
|
|
Michal Suchanek |
77923a |
- if (rc)
|
|
Michal Suchanek |
77923a |
- dev_warn(dev, "Failed to allocate Sub-CRQs. rc=%d\n", rc);
|
|
Michal Suchanek |
77923a |
- }
|
|
Michal Suchanek |
77923a |
+ ibmvfc_init_sub_crqs(vhost);
|
|
Michal Suchanek |
77923a |
|
|
Michal Suchanek |
77923a |
if (shost_to_fc_host(shost)->rqst_q)
|
|
Michal Suchanek |
77923a |
blk_queue_max_segments(shost_to_fc_host(shost)->rqst_q, 1);
|
|
Michal Suchanek |
77923a |
--
|
|
Michal Suchanek |
77923a |
2.26.2
|
|
Michal Suchanek |
77923a |
|