From: Hannes Reinecke <hare@xxxxxxxx>
Use a reserved command for host and device reset.
Signed-off-by: Hannes Reinecke <hare@xxxxxxxx>
---
drivers/scsi/snic/snic.h | 4 +-
drivers/scsi/snic/snic_main.c | 8 +++
drivers/scsi/snic/snic_scsi.c | 140 +++++++++++++++++-------------------------
3 files changed, 66 insertions(+), 86 deletions(-)
diff --git a/drivers/scsi/snic/snic.h b/drivers/scsi/snic/snic.h
index de0ab5fc8474..7dc529ae8a90 100644
--- a/drivers/scsi/snic/snic.h
+++ b/drivers/scsi/snic/snic.h
@@ -59,7 +59,6 @@
*/
#define SNIC_TAG_ABORT BIT(30) /* Tag indicating abort */
#define SNIC_TAG_DEV_RST BIT(29) /* Tag for device reset */
-#define SNIC_TAG_IOCTL_DEV_RST BIT(28) /* Tag for User Device Reset */
#define SNIC_TAG_MASK (BIT(24) - 1) /* Mask for lookup */
#define SNIC_NO_TAG -1
@@ -278,6 +277,7 @@ struct snic {
/* Scsi Host info */
struct Scsi_Host *shost;
+ struct scsi_device *shost_dev;
/* vnic related structures */
struct vnic_dev_bar bar0;
@@ -380,7 +380,7 @@ int snic_queuecommand(struct Scsi_Host *, struct scsi_cmnd *);
int snic_abort_cmd(struct scsi_cmnd *);
int snic_device_reset(struct scsi_cmnd *);
int snic_host_reset(struct scsi_cmnd *);
-int snic_reset(struct Scsi_Host *, struct scsi_cmnd *);
+int snic_reset(struct Scsi_Host *);
void snic_shutdown_scsi_cleanup(struct snic *);
diff --git a/drivers/scsi/snic/snic_main.c b/drivers/scsi/snic/snic_main.c
index 14f4ce665e58..f520da64ec8e 100644
--- a/drivers/scsi/snic/snic_main.c
+++ b/drivers/scsi/snic/snic_main.c
@@ -303,6 +303,7 @@ static int
snic_add_host(struct Scsi_Host *shost, struct pci_dev *pdev)
{
int ret = 0;
+ struct snic *snic = shost_priv(shost);
ret = scsi_add_host(shost, &pdev->dev);
if (ret) {
@@ -313,6 +314,12 @@ snic_add_host(struct Scsi_Host *shost, struct pci_dev *pdev)
return ret;
}
+ snic->shost_dev = scsi_get_virtual_dev(shost, 1, 0);
+ if (!snic->shost_dev) {
+ SNIC_HOST_ERR(shost,
+ "snic: scsi_get_virtual_dev failed\n");
+ return -ENOMEM;
+ }
SNIC_BUG_ON(shost->work_q != NULL);
snprintf(shost->work_q_name, sizeof(shost->work_q_name), "scsi_wq_%d",
shost->host_no);
@@ -385,6 +392,7 @@ snic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto prob_end;
}
+ shost->nr_reserved_cmds = 2;