]> git.baikalelectronics.ru Git - kernel.git/commitdiff
scsi: mpt3sas: Use cached ATA Information VPD page
authorMartin K. Petersen <martin.petersen@oracle.com>
Wed, 2 Mar 2022 05:35:46 +0000 (00:35 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 2 May 2022 20:59:10 +0000 (16:59 -0400)
We now cache VPD page 0x89 (ATA Information) so there is no need to request
it from the hardware. Make mpt3sas use the cached page.

Link: https://lore.kernel.org/r/20220302053559.32147-2-martin.petersen@oracle.com
Cc: Sreekanth Reddy <sreekanth.reddy@broadcom.com>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/mpt3sas/mpt3sas_scsih.c

index 6022875bc4a7e39e2a82b963ba42e93874c66d04..b519f4b59d30e37e711d1608def39f9e16a97b77 100644 (file)
@@ -12588,20 +12588,18 @@ scsih_pci_mmio_enabled(struct pci_dev *pdev)
  */
 bool scsih_ncq_prio_supp(struct scsi_device *sdev)
 {
-       unsigned char *buf;
+       struct scsi_vpd *vpd;
        bool ncq_prio_supp = false;
 
-       if (!scsi_device_supports_vpd(sdev))
-               return ncq_prio_supp;
-
-       buf = kmalloc(SCSI_VPD_PG_LEN, GFP_KERNEL);
-       if (!buf)
-               return ncq_prio_supp;
+       rcu_read_lock();
+       vpd = rcu_dereference(sdev->vpd_pg89);
+       if (!vpd || vpd->len < 214)
+               goto out;
 
-       if (!scsi_get_vpd_page(sdev, 0x89, buf, SCSI_VPD_PG_LEN))
-               ncq_prio_supp = (buf[213] >> 4) & 1;
+       ncq_prio_supp = (vpd->data[213] >> 4) & 1;
+out:
+       rcu_read_unlock();
 
-       kfree(buf);
        return ncq_prio_supp;
 }
 /*