> -----Original Message-----
> From: Johannes Thumshirn [mailto:[email protected]]
> Sent: Monday, January 30, 2017 2:31 AM
> To: Raghava Aditya Renukunta
> <[email protected]>
> Cc: [email protected]; [email protected]; linux-
> [email protected]; Dave Carroll <[email protected]>; Gana
> Sridaran <[email protected]>; Scott Benesh
> <[email protected]>
> Subject: Re: [PATCH V3 12/24] aacraid: Retrieve Queue Depth from Adapter
> FW
>
> EXTERNAL EMAIL
>
>
> On Fri, Jan 27, 2017 at 11:28:41AM -0800, Raghava Aditya Renukunta wrote:
> > Retrieved queue depth from fw and saved it for future use.
> > Only applicable for HBA1000 drives.
> >
> > Signed-off-by: Raghava Aditya Renukunta
> <[email protected]>
> > Signed-off-by: Dave Carroll <[email protected]>
> >
> > ---
> > Changes in V2:
> > None
> >
> > Changes in V3:
> > None
> >
> > drivers/scsi/aacraid/aachba.c | 84
> ++++++++++++++++++++++++++++++++++++++++-
> > drivers/scsi/aacraid/aacraid.h | 85
> +++++++++++++++++++++++++++++++++++++++++-
> > 2 files changed, 167 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c
> > index e441a54..c34686f 100644
> > --- a/drivers/scsi/aacraid/aachba.c
> > +++ b/drivers/scsi/aacraid/aachba.c
> > @@ -1516,6 +1516,83 @@ static int aac_scsi_32_64(struct fib * fib, struct
> scsi_cmnd * cmd)
> > return aac_scsi_32(fib, cmd);
> > }
> >
> > +int aac_issue_bmic_identify(struct aac_dev *dev, u32 bus, u32 target)
> > +{
> > + struct fib *fibptr;
> > + int rcode = -1;
> > + u16 fibsize, datasize;
> > + struct aac_srb *srbcmd;
> > + struct sgmap64 *sg64;
> > + struct aac_ciss_identify_pd *identify_resp;
> > + dma_addr_t addr;
> > + u32 vbus, vid;
> > + u16 temp;
> > +
> > + fibptr = aac_fib_alloc(dev);
> > + if (!fibptr)
> > + return -ENOMEM;
> > +
> > + temp = AAC_MAX_LUN + target;
> > +
> > + fibsize = sizeof(struct aac_srb) -
> > + sizeof(struct sgentry) + sizeof(struct sgentry64);
> > + datasize = sizeof(struct aac_ciss_identify_pd);
> > +
> > + identify_resp = (struct aac_ciss_identify_pd *)
> > + pci_alloc_consistent(dev->pdev, datasize, &addr);
>
> Please don't cast void pointers.
I apologize, yes I will remove this.
>
> > +
> > + if (identify_resp != NULL) {
>
> if (!identify_resp)
> goto free_fib_ptr;
>
> > + vbus = (u32)le16_to_cpu(
> > + dev->supplement_adapter_info.VirtDeviceBus);
> > + vid = (u32)le16_to_cpu(
> > + dev->supplement_adapter_info.VirtDeviceTarget);
> > +
> > + aac_fib_init(fibptr);
> > + srbcmd = (struct aac_srb *) fib_data(fibptr);
> > +
> > + srbcmd->function = cpu_to_le32(SRBF_ExecuteScsi);
> > + srbcmd->channel = cpu_to_le32(vbus);
> > + srbcmd->id = cpu_to_le32(vid);
> > + srbcmd->lun = 0;
> > + srbcmd->flags = cpu_to_le32(SRB_DataIn);
> > + srbcmd->timeout = cpu_to_le32(10);
> > + srbcmd->retry_limit = 0;
> > + srbcmd->cdb_size = cpu_to_le32(12);
> > + srbcmd->count = cpu_to_le32(datasize);
> > +
> > + memset(srbcmd->cdb, 0, sizeof(srbcmd->cdb));
> > + srbcmd->cdb[0] = 0x26;
> > + srbcmd->cdb[2] = (u8)(temp & 0x00FF);
> > +
> > + srbcmd->cdb[6] = CISS_IDENTIFY_PHYSICAL_DEVICE;
> > +
> > + sg64 = (struct sgmap64 *)&srbcmd->sg;
> > + sg64->count = cpu_to_le32(1);
> > + sg64->sg[0].addr[1] = cpu_to_le32((u32)(((addr) >> 16) >>
> > 16));
> > + sg64->sg[0].addr[0] = cpu_to_le32((u32)(addr & 0xffffffff));
> > + sg64->sg[0].count = cpu_to_le32(datasize);
> > +
> > + rcode = aac_fib_send(ScsiPortCommand64,
> > + fibptr, fibsize, FsaNormal, 1, 1, NULL, NULL);
> > +
> > + if (identify_resp->current_queue_depth_limit <= 0 ||
> > + identify_resp->current_queue_depth_limit > 32)
> > + dev->hba_map[bus][target].qd_limit = 32;
> > + else
> > + dev->hba_map[bus][target].qd_limit =
> > + identify_resp->current_queue_depth_limit;
> > +
> > + pci_free_consistent(dev->pdev, datasize,
> > + (void *)identify_resp, addr);
> > +
> > + aac_fib_complete(fibptr);
> > + }
>
> free_fib_ptr:
Yes let me do that.
> > +
> > + aac_fib_free(fibptr);
> > +
> > + return rcode;
> > +}
> > +
> > /**
> > * aac_update hba_map()- update current hba map with data from FW
> > * @dev: aac_dev structure
> > @@ -1565,6 +1642,9 @@ void aac_update_hba_map(struct aac_dev *dev,
> > if (devtype != AAC_DEVTYPE_NATIVE_RAW)
> > goto update_devtype;
> >
> > + if (aac_issue_bmic_identify(dev, bus, target) < 0)
> > + dev->hba_map[bus][target].qd_limit = 32;
> > +
> > update_devtype:
> > dev->hba_map[bus][target].devtype = devtype;
> > }
> > @@ -1711,8 +1791,10 @@ int aac_get_adapter_info(struct aac_dev* dev)
> >
> > /* reset all previous mapped devices (i.e. for init. after IOP_RESET)
> > */
> > for (bus = 0; bus < AAC_MAX_BUSES; bus++) {
> > - for (target = 0; target < AAC_MAX_TARGETS; target++)
> > + for (target = 0; target < AAC_MAX_TARGETS; target++) {
> > dev->hba_map[bus][target].devtype = 0;
> > + dev->hba_map[bus][target].qd_limit = 0;
> > + }
> > }
> >
> > /*
> > diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
> > index 05884e6..e541394 100644
> > --- a/drivers/scsi/aacraid/aacraid.h
> > +++ b/drivers/scsi/aacraid/aacraid.h
> > @@ -74,7 +74,7 @@ enum {
> > #define AAC_NUM_IO_FIB (1024 - AAC_NUM_MGT_FIB)
> > #define AAC_NUM_FIB (AAC_NUM_IO_FIB + AAC_NUM_MGT_FIB)
> >
> > -#define AAC_MAX_LUN (8)
> > +#define AAC_MAX_LUN (256)
> >
> > #define AAC_MAX_HOSTPHYSMEMPAGES (0xfffff)
> > #define AAC_MAX_32BIT_SGBCOUNT ((unsigned short)256)
> > @@ -89,6 +89,7 @@ enum {
> >
> > #define CISS_REPORT_PHYSICAL_LUNS 0xc3
> > #define WRITE_HOST_WELLNESS 0xa5
> > +#define CISS_IDENTIFY_PHYSICAL_DEVICE 0x15
> > #define BMIC_IN 0x26
> > #define BMIC_OUT 0x27
> >
> > @@ -110,6 +111,86 @@ struct aac_ciss_phys_luns_resp {
> > */
> > #define AAC_MAX_HRRQ 64
> >
> > +#pragma pack(1)
> > +
> > +struct aac_ciss_identify_pd {
>
> [...]
>
> > +};
> > +
> > +#pragma pack()
>
> I'd prefer '}; __packed' over #pragma pack(1) .. #pragma pack()
Yes, let me make that change.
Regards,
Raghava Aditya
> [...]
>
>
> --
> Johannes Thumshirn Storage
> [email protected] +49 911 74053 689
> SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg
> GF: Felix Imendörffer, Jane Smithard, Graham Norton
> HRB 21284 (AG Nürnberg)
> Key fingerprint = EC38 9CAB C2C4 F25D 8600 D0D0 0393 969D 2D76 0850
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html