[SCSI] hpsa: do not inquire for unsupported ioaccel status vpd page
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:
parent
b7bb24eb4e
commit
1b70150af5
|
@ -2064,6 +2064,49 @@ static int hpsa_get_raid_map(struct ctlr_info *h,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int hpsa_vpd_page_supported(struct ctlr_info *h,
|
||||||
|
unsigned char scsi3addr[], u8 page)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
int i;
|
||||||
|
int pages;
|
||||||
|
unsigned char *buf, bufsize;
|
||||||
|
|
||||||
|
buf = kzalloc(256, GFP_KERNEL);
|
||||||
|
if (!buf)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Get the size of the page list first */
|
||||||
|
rc = hpsa_scsi_do_inquiry(h, scsi3addr,
|
||||||
|
VPD_PAGE | HPSA_VPD_SUPPORTED_PAGES,
|
||||||
|
buf, HPSA_VPD_HEADER_SZ);
|
||||||
|
if (rc != 0)
|
||||||
|
goto exit_unsupported;
|
||||||
|
pages = buf[3];
|
||||||
|
if ((pages + HPSA_VPD_HEADER_SZ) <= 255)
|
||||||
|
bufsize = pages + HPSA_VPD_HEADER_SZ;
|
||||||
|
else
|
||||||
|
bufsize = 255;
|
||||||
|
|
||||||
|
/* Get the whole VPD page list */
|
||||||
|
rc = hpsa_scsi_do_inquiry(h, scsi3addr,
|
||||||
|
VPD_PAGE | HPSA_VPD_SUPPORTED_PAGES,
|
||||||
|
buf, bufsize);
|
||||||
|
if (rc != 0)
|
||||||
|
goto exit_unsupported;
|
||||||
|
|
||||||
|
pages = buf[3];
|
||||||
|
for (i = 1; i <= pages; i++)
|
||||||
|
if (buf[3 + i] == page)
|
||||||
|
goto exit_supported;
|
||||||
|
exit_unsupported:
|
||||||
|
kfree(buf);
|
||||||
|
return 0;
|
||||||
|
exit_supported:
|
||||||
|
kfree(buf);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static void hpsa_get_ioaccel_status(struct ctlr_info *h,
|
static void hpsa_get_ioaccel_status(struct ctlr_info *h,
|
||||||
unsigned char *scsi3addr, struct hpsa_scsi_dev_t *this_device)
|
unsigned char *scsi3addr, struct hpsa_scsi_dev_t *this_device)
|
||||||
{
|
{
|
||||||
|
@ -2077,6 +2120,8 @@ static void hpsa_get_ioaccel_status(struct ctlr_info *h,
|
||||||
buf = kzalloc(64, GFP_KERNEL);
|
buf = kzalloc(64, GFP_KERNEL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return;
|
return;
|
||||||
|
if (!hpsa_vpd_page_supported(h, scsi3addr, HPSA_VPD_LV_IOACCEL_STATUS))
|
||||||
|
goto out;
|
||||||
rc = hpsa_scsi_do_inquiry(h, scsi3addr,
|
rc = hpsa_scsi_do_inquiry(h, scsi3addr,
|
||||||
VPD_PAGE | HPSA_VPD_LV_IOACCEL_STATUS, buf, 64);
|
VPD_PAGE | HPSA_VPD_LV_IOACCEL_STATUS, buf, 64);
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
|
|
|
@ -144,8 +144,10 @@
|
||||||
#define CFGTBL_BusType_Fibre2G 0x00000200l
|
#define CFGTBL_BusType_Fibre2G 0x00000200l
|
||||||
|
|
||||||
/* VPD Inquiry types */
|
/* VPD Inquiry types */
|
||||||
|
#define HPSA_VPD_SUPPORTED_PAGES 0x00
|
||||||
#define HPSA_VPD_LV_DEVICE_GEOMETRY 0xC1
|
#define HPSA_VPD_LV_DEVICE_GEOMETRY 0xC1
|
||||||
#define HPSA_VPD_LV_IOACCEL_STATUS 0xC2
|
#define HPSA_VPD_LV_IOACCEL_STATUS 0xC2
|
||||||
|
#define HPSA_VPD_HEADER_SZ 4
|
||||||
|
|
||||||
struct vals32 {
|
struct vals32 {
|
||||||
u32 lower;
|
u32 lower;
|
||||||
|
|
Loading…
Reference in New Issue