diff mbox series

[18/24] libata: add 'link' argument to ata_dev_classify()

Message ID 20181213104716.31930-30-hare@suse.de
State Not Applicable
Delegated to: David Miller
Headers show
Series ata: move DPRINTK to dynamic debugging | expand

Commit Message

Hannes Reinecke Dec. 13, 2018, 10:47 a.m. UTC
Add a 'link' argument to ata_dev_classify() so that we can call
ata_link_dbg() with the correct device and drop the DPRINTK usage.

Signed-off-by: Hannes Reinecke <hare@suse.com>
---
 drivers/ata/ahci.c            |  2 +-
 drivers/ata/ahci.h            |  2 +-
 drivers/ata/libahci.c         |  9 +++++----
 drivers/ata/libata-core.c     | 18 +++++++++++-------
 drivers/ata/libata-sff.c      |  2 +-
 drivers/ata/sata_fsl.c        | 11 +++++------
 drivers/ata/sata_inic162x.c   |  2 +-
 drivers/ata/sata_sil24.c      |  2 +-
 drivers/scsi/libsas/sas_ata.c |  3 ++-
 include/linux/libata.h        |  3 ++-
 10 files changed, 30 insertions(+), 24 deletions(-)

Comments

Bartlomiej Zolnierkiewicz Jan. 30, 2020, 11:44 a.m. UTC | #1
On 12/13/18 11:47 AM, Hannes Reinecke wrote:
> Add a 'link' argument to ata_dev_classify() so that we can call
> ata_link_dbg() with the correct device and drop the DPRINTK usage.

This patch also:

- does actual ata_dev_classify() conversion to not use DPRINTK()

- adds printing of unknown signatures in ata_dev_classify()

- removes DPRINTK() instance from sata_fsl_softreset()

Please document above changes in the patch description.

Also please:

- preserve __func__ printing in the DPRINTK() conversion

- use dev_dbg() directly instead of ata_link_dbg()

Best regards,
--
Bartlomiej Zolnierkiewicz
Samsung R&D Institute Poland
Samsung Electronics

> Signed-off-by: Hannes Reinecke <hare@suse.com>
> ---
>  drivers/ata/ahci.c            |  2 +-
>  drivers/ata/ahci.h            |  2 +-
>  drivers/ata/libahci.c         |  9 +++++----
>  drivers/ata/libata-core.c     | 18 +++++++++++-------
>  drivers/ata/libata-sff.c      |  2 +-
>  drivers/ata/sata_fsl.c        | 11 +++++------
>  drivers/ata/sata_inic162x.c   |  2 +-
>  drivers/ata/sata_sil24.c      |  2 +-
>  drivers/scsi/libsas/sas_ata.c |  3 ++-
>  include/linux/libata.h        |  3 ++-
>  10 files changed, 30 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 89d9980f3de4..cda9cdd2495b 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -826,7 +826,7 @@ static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
>  	hpriv->start_engine(ap);
>  
>  	if (online)
> -		*class = ahci_dev_classify(ap);
> +		*class = ahci_dev_classify(link);
>  
>  	ata_link_dbg(link, "EXIT, rc=%d, class=%u\n", rc, *class);
>  	return rc;
> diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
> index ef356e70e6de..65df818e5e09 100644
> --- a/drivers/ata/ahci.h
> +++ b/drivers/ata/ahci.h
> @@ -403,7 +403,7 @@ extern struct ata_port_operations ahci_ops;
>  extern struct ata_port_operations ahci_platform_ops;
>  extern struct ata_port_operations ahci_pmp_retry_srst_ops;
>  
> -unsigned int ahci_dev_classify(struct ata_port *ap);
> +unsigned int ahci_dev_classify(struct ata_link *link);
>  void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
>  			u32 opts);
>  void ahci_save_initial_config(struct device *dev,
> diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
> index d6c93ce83504..421a40731ed3 100644
> --- a/drivers/ata/libahci.c
> +++ b/drivers/ata/libahci.c
> @@ -1281,8 +1281,9 @@ static void ahci_dev_config(struct ata_device *dev)
>  	}
>  }
>  
> -unsigned int ahci_dev_classify(struct ata_port *ap)
> +unsigned int ahci_dev_classify(struct ata_link *link)
>  {
> +	struct ata_port *ap = link->ap;
>  	void __iomem *port_mmio = ahci_port_base(ap);
>  	struct ata_taskfile tf;
>  	u32 tmp;
> @@ -1293,7 +1294,7 @@ unsigned int ahci_dev_classify(struct ata_port *ap)
>  	tf.lbal		= (tmp >> 8)	& 0xff;
>  	tf.nsect	= (tmp)		& 0xff;
>  
> -	return ata_dev_classify(&tf);
> +	return ata_dev_classify(link, &tf);
>  }
>  EXPORT_SYMBOL_GPL(ahci_dev_classify);
>  
> @@ -1464,7 +1465,7 @@ int ahci_do_softreset(struct ata_link *link, unsigned int *class,
>  		reason = "device not ready";
>  		goto fail;
>  	} else
> -		*class = ahci_dev_classify(ap);
> +		*class = ahci_dev_classify(link);
>  
>  	/* re-enable FBS if disabled before */
>  	if (fbs_disabled)
> @@ -1574,7 +1575,7 @@ int ahci_do_hardreset(struct ata_link *link, unsigned int *class,
>  	hpriv->start_engine(ap);
>  
>  	if (*online)
> -		*class = ahci_dev_classify(ap);
> +		*class = ahci_dev_classify(link);
>  
>  	ata_link_dbg(link, "%s: EXIT, rc=%d, class=%u\n", __func__, rc, *class);
>  	return rc;
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index f4b5a61b1c63..a36f24de399b 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -1046,6 +1046,7 @@ const char *sata_spd_string(unsigned int spd)
>  
>  /**
>   *	ata_dev_classify - determine device type based on ATA-spec signature
> + *	@link: ATA device link for the device to be identified
>   *	@tf: ATA taskfile register set for device to be identified
>   *
>   *	Determine from taskfile register contents whether a device is
> @@ -1059,7 +1060,8 @@ const char *sata_spd_string(unsigned int spd)
>   *	Device type, %ATA_DEV_ATA, %ATA_DEV_ATAPI, %ATA_DEV_PMP,
>   *	%ATA_DEV_ZAC, or %ATA_DEV_UNKNOWN the event of failure.
>   */
> -unsigned int ata_dev_classify(const struct ata_taskfile *tf)
> +unsigned int ata_dev_classify(struct ata_link *link,
> +			      const struct ata_taskfile *tf)
>  {
>  	/* Apple's open source Darwin code hints that some devices only
>  	 * put a proper signature into the LBA mid/high registers,
> @@ -1083,31 +1085,33 @@ unsigned int ata_dev_classify(const struct ata_taskfile *tf)
>  	 * ata_dev_read_id().
>  	 */
>  	if ((tf->lbam == 0) && (tf->lbah == 0)) {
> -		DPRINTK("found ATA device by sig\n");
> +		ata_link_dbg(link, "found ATA device by sig\n");
>  		return ATA_DEV_ATA;
>  	}
>  
>  	if ((tf->lbam == 0x14) && (tf->lbah == 0xeb)) {
> -		DPRINTK("found ATAPI device by sig\n");
> +		ata_link_dbg(link, "found ATAPI device by sig\n");
>  		return ATA_DEV_ATAPI;
>  	}
>  
>  	if ((tf->lbam == 0x69) && (tf->lbah == 0x96)) {
> -		DPRINTK("found PMP device by sig\n");
> +		ata_link_dbg(link, "found PMP device by sig\n");
>  		return ATA_DEV_PMP;
>  	}
>  
>  	if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) {
> -		DPRINTK("found SEMB device by sig (could be ATA device)\n");
> +		ata_link_dbg(link,
> +			     "found SEMB device by sig (could be ATA device)\n");
>  		return ATA_DEV_SEMB;
>  	}
>  
>  	if ((tf->lbam == 0xcd) && (tf->lbah == 0xab)) {
> -		DPRINTK("found ZAC device by sig\n");
> +		ata_link_dbg(link, "found ZAC device by sig\n");
>  		return ATA_DEV_ZAC;
>  	}
>  
> -	DPRINTK("unknown device\n");
> +	ata_link_dbg(link, "unknown device signature %02x %02x\n",
> +		     tf->lbam, tf->lbah);
>  	return ATA_DEV_UNKNOWN;
>  }
>  
> diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
> index 3326c3b02c61..48b27f4e52fe 100644
> --- a/drivers/ata/libata-sff.c
> +++ b/drivers/ata/libata-sff.c
> @@ -1850,7 +1850,7 @@ unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
>  		return ATA_DEV_NONE;
>  
>  	/* determine if device is ATA or ATAPI */
> -	class = ata_dev_classify(&tf);
> +	class = ata_dev_classify(dev->link, &tf);
>  
>  	if (class == ATA_DEV_UNKNOWN) {
>  		/* If the device failed diagnostic, it's likely to
> diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
> index 8bb129c87a3f..6260ea9e180f 100644
> --- a/drivers/ata/sata_fsl.c
> +++ b/drivers/ata/sata_fsl.c
> @@ -797,9 +797,9 @@ static void sata_fsl_port_stop(struct ata_port *ap)
>  	kfree(pp);
>  }
>  
> -static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
> +static unsigned int sata_fsl_dev_classify(struct ata_link *link)
>  {
> -	struct sata_fsl_host_priv *host_priv = ap->host->private_data;
> +	struct sata_fsl_host_priv *host_priv = link->ap->host->private_data;
>  	void __iomem *hcr_base = host_priv->hcr_base;
>  	struct ata_taskfile tf;
>  	u32 temp;
> @@ -815,7 +815,7 @@ static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
>  	tf.lbal = (temp >> 8) & 0xff;
>  	tf.nsect = temp & 0xff;
>  
> -	return ata_dev_classify(&tf);
> +	return ata_dev_classify(link, &tf);
>  }
>  
>  static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
> @@ -917,7 +917,7 @@ static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
>  	} else {
>  		ata_port_info(ap, "Signature Update detected @ %d msecs\n",
>  			      jiffies_to_msecs(jiffies - start_jiffies));
> -		*class = sata_fsl_dev_classify(ap);
> +		*class = sata_fsl_dev_classify(link);
>  		return 0;
>  	}
>  
> @@ -1050,9 +1050,8 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
>  		 * would have been updated
>  		 */
>  
> -		*class = sata_fsl_dev_classify(ap);
> +		*class = sata_fsl_dev_classify(link);
>  
> -		ata_link_dbg(link, "class = %d\n", *class);
>  		VPRINTK("ccreg = 0x%x\n", ioread32(hcr_base + CC));
>  		VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE));
>  	}
> diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
> index e0bcf9b2dab0..3b2c38623b57 100644
> --- a/drivers/ata/sata_inic162x.c
> +++ b/drivers/ata/sata_inic162x.c
> @@ -649,7 +649,7 @@ static int inic_hardreset(struct ata_link *link, unsigned int *class,
>  		}
>  
>  		inic_tf_read(ap, &tf);
> -		*class = ata_dev_classify(&tf);
> +		*class = ata_dev_classify(link, &tf);
>  	}
>  
>  	return 0;
> diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
> index 4b00dce151eb..f041f00342c4 100644
> --- a/drivers/ata/sata_sil24.c
> +++ b/drivers/ata/sata_sil24.c
> @@ -687,7 +687,7 @@ static int sil24_softreset(struct ata_link *link, unsigned int *class,
>  	}
>  
>  	sil24_read_tf(ap, 0, &tf);
> -	*class = ata_dev_classify(&tf);
> +	*class = ata_dev_classify(link, &tf);
>  
>  	ata_link_dbg(link, "%s: EXIT, class=%u\n", __func__, *class);
>  	return 0;
> diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
> index 4f6cdf53e913..06736b2c7a97 100644
> --- a/drivers/scsi/libsas/sas_ata.c
> +++ b/drivers/scsi/libsas/sas_ata.c
> @@ -620,6 +620,7 @@ void sas_ata_task_abort(struct sas_task *task)
>  
>  static int sas_get_ata_command_set(struct domain_device *dev)
>  {
> +	struct ata_port *ap = dev->sata_dev.ap;
>  	struct dev_to_host_fis *fis =
>  		(struct dev_to_host_fis *) dev->frame_rcvd;
>  	struct ata_taskfile tf;
> @@ -629,7 +630,7 @@ static int sas_get_ata_command_set(struct domain_device *dev)
>  
>  	ata_tf_from_fis((const u8 *)fis, &tf);
>  
> -	return ata_dev_classify(&tf);
> +	return ata_dev_classify(&ap->link, &tf);
>  }
>  
>  void sas_probe_sata(struct asd_sas_port *port)
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 7b2f039d3d21..808a96a8cb1d 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -1180,7 +1180,8 @@ extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
>  extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
>  extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
>  		 unsigned int n_elem);
> -extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
> +extern unsigned int ata_dev_classify(struct ata_link *link,
> +				     const struct ata_taskfile *tf);
>  extern void ata_dev_disable(struct ata_device *adev);
>  extern void ata_id_string(const u16 *id, unsigned char *s,
>  			  unsigned int ofs, unsigned int len);
>
diff mbox series

Patch

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 89d9980f3de4..cda9cdd2495b 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -826,7 +826,7 @@  static int ahci_avn_hardreset(struct ata_link *link, unsigned int *class,
 	hpriv->start_engine(ap);
 
 	if (online)
-		*class = ahci_dev_classify(ap);
+		*class = ahci_dev_classify(link);
 
 	ata_link_dbg(link, "EXIT, rc=%d, class=%u\n", rc, *class);
 	return rc;
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index ef356e70e6de..65df818e5e09 100644
--- a/drivers/ata/ahci.h
+++ b/drivers/ata/ahci.h
@@ -403,7 +403,7 @@  extern struct ata_port_operations ahci_ops;
 extern struct ata_port_operations ahci_platform_ops;
 extern struct ata_port_operations ahci_pmp_retry_srst_ops;
 
-unsigned int ahci_dev_classify(struct ata_port *ap);
+unsigned int ahci_dev_classify(struct ata_link *link);
 void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
 			u32 opts);
 void ahci_save_initial_config(struct device *dev,
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index d6c93ce83504..421a40731ed3 100644
--- a/drivers/ata/libahci.c
+++ b/drivers/ata/libahci.c
@@ -1281,8 +1281,9 @@  static void ahci_dev_config(struct ata_device *dev)
 	}
 }
 
-unsigned int ahci_dev_classify(struct ata_port *ap)
+unsigned int ahci_dev_classify(struct ata_link *link)
 {
+	struct ata_port *ap = link->ap;
 	void __iomem *port_mmio = ahci_port_base(ap);
 	struct ata_taskfile tf;
 	u32 tmp;
@@ -1293,7 +1294,7 @@  unsigned int ahci_dev_classify(struct ata_port *ap)
 	tf.lbal		= (tmp >> 8)	& 0xff;
 	tf.nsect	= (tmp)		& 0xff;
 
-	return ata_dev_classify(&tf);
+	return ata_dev_classify(link, &tf);
 }
 EXPORT_SYMBOL_GPL(ahci_dev_classify);
 
@@ -1464,7 +1465,7 @@  int ahci_do_softreset(struct ata_link *link, unsigned int *class,
 		reason = "device not ready";
 		goto fail;
 	} else
-		*class = ahci_dev_classify(ap);
+		*class = ahci_dev_classify(link);
 
 	/* re-enable FBS if disabled before */
 	if (fbs_disabled)
@@ -1574,7 +1575,7 @@  int ahci_do_hardreset(struct ata_link *link, unsigned int *class,
 	hpriv->start_engine(ap);
 
 	if (*online)
-		*class = ahci_dev_classify(ap);
+		*class = ahci_dev_classify(link);
 
 	ata_link_dbg(link, "%s: EXIT, rc=%d, class=%u\n", __func__, rc, *class);
 	return rc;
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index f4b5a61b1c63..a36f24de399b 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1046,6 +1046,7 @@  const char *sata_spd_string(unsigned int spd)
 
 /**
  *	ata_dev_classify - determine device type based on ATA-spec signature
+ *	@link: ATA device link for the device to be identified
  *	@tf: ATA taskfile register set for device to be identified
  *
  *	Determine from taskfile register contents whether a device is
@@ -1059,7 +1060,8 @@  const char *sata_spd_string(unsigned int spd)
  *	Device type, %ATA_DEV_ATA, %ATA_DEV_ATAPI, %ATA_DEV_PMP,
  *	%ATA_DEV_ZAC, or %ATA_DEV_UNKNOWN the event of failure.
  */
-unsigned int ata_dev_classify(const struct ata_taskfile *tf)
+unsigned int ata_dev_classify(struct ata_link *link,
+			      const struct ata_taskfile *tf)
 {
 	/* Apple's open source Darwin code hints that some devices only
 	 * put a proper signature into the LBA mid/high registers,
@@ -1083,31 +1085,33 @@  unsigned int ata_dev_classify(const struct ata_taskfile *tf)
 	 * ata_dev_read_id().
 	 */
 	if ((tf->lbam == 0) && (tf->lbah == 0)) {
-		DPRINTK("found ATA device by sig\n");
+		ata_link_dbg(link, "found ATA device by sig\n");
 		return ATA_DEV_ATA;
 	}
 
 	if ((tf->lbam == 0x14) && (tf->lbah == 0xeb)) {
-		DPRINTK("found ATAPI device by sig\n");
+		ata_link_dbg(link, "found ATAPI device by sig\n");
 		return ATA_DEV_ATAPI;
 	}
 
 	if ((tf->lbam == 0x69) && (tf->lbah == 0x96)) {
-		DPRINTK("found PMP device by sig\n");
+		ata_link_dbg(link, "found PMP device by sig\n");
 		return ATA_DEV_PMP;
 	}
 
 	if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) {
-		DPRINTK("found SEMB device by sig (could be ATA device)\n");
+		ata_link_dbg(link,
+			     "found SEMB device by sig (could be ATA device)\n");
 		return ATA_DEV_SEMB;
 	}
 
 	if ((tf->lbam == 0xcd) && (tf->lbah == 0xab)) {
-		DPRINTK("found ZAC device by sig\n");
+		ata_link_dbg(link, "found ZAC device by sig\n");
 		return ATA_DEV_ZAC;
 	}
 
-	DPRINTK("unknown device\n");
+	ata_link_dbg(link, "unknown device signature %02x %02x\n",
+		     tf->lbam, tf->lbah);
 	return ATA_DEV_UNKNOWN;
 }
 
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 3326c3b02c61..48b27f4e52fe 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -1850,7 +1850,7 @@  unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
 		return ATA_DEV_NONE;
 
 	/* determine if device is ATA or ATAPI */
-	class = ata_dev_classify(&tf);
+	class = ata_dev_classify(dev->link, &tf);
 
 	if (class == ATA_DEV_UNKNOWN) {
 		/* If the device failed diagnostic, it's likely to
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c
index 8bb129c87a3f..6260ea9e180f 100644
--- a/drivers/ata/sata_fsl.c
+++ b/drivers/ata/sata_fsl.c
@@ -797,9 +797,9 @@  static void sata_fsl_port_stop(struct ata_port *ap)
 	kfree(pp);
 }
 
-static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
+static unsigned int sata_fsl_dev_classify(struct ata_link *link)
 {
-	struct sata_fsl_host_priv *host_priv = ap->host->private_data;
+	struct sata_fsl_host_priv *host_priv = link->ap->host->private_data;
 	void __iomem *hcr_base = host_priv->hcr_base;
 	struct ata_taskfile tf;
 	u32 temp;
@@ -815,7 +815,7 @@  static unsigned int sata_fsl_dev_classify(struct ata_port *ap)
 	tf.lbal = (temp >> 8) & 0xff;
 	tf.nsect = temp & 0xff;
 
-	return ata_dev_classify(&tf);
+	return ata_dev_classify(link, &tf);
 }
 
 static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
@@ -917,7 +917,7 @@  static int sata_fsl_hardreset(struct ata_link *link, unsigned int *class,
 	} else {
 		ata_port_info(ap, "Signature Update detected @ %d msecs\n",
 			      jiffies_to_msecs(jiffies - start_jiffies));
-		*class = sata_fsl_dev_classify(ap);
+		*class = sata_fsl_dev_classify(link);
 		return 0;
 	}
 
@@ -1050,9 +1050,8 @@  static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
 		 * would have been updated
 		 */
 
-		*class = sata_fsl_dev_classify(ap);
+		*class = sata_fsl_dev_classify(link);
 
-		ata_link_dbg(link, "class = %d\n", *class);
 		VPRINTK("ccreg = 0x%x\n", ioread32(hcr_base + CC));
 		VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE));
 	}
diff --git a/drivers/ata/sata_inic162x.c b/drivers/ata/sata_inic162x.c
index e0bcf9b2dab0..3b2c38623b57 100644
--- a/drivers/ata/sata_inic162x.c
+++ b/drivers/ata/sata_inic162x.c
@@ -649,7 +649,7 @@  static int inic_hardreset(struct ata_link *link, unsigned int *class,
 		}
 
 		inic_tf_read(ap, &tf);
-		*class = ata_dev_classify(&tf);
+		*class = ata_dev_classify(link, &tf);
 	}
 
 	return 0;
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c
index 4b00dce151eb..f041f00342c4 100644
--- a/drivers/ata/sata_sil24.c
+++ b/drivers/ata/sata_sil24.c
@@ -687,7 +687,7 @@  static int sil24_softreset(struct ata_link *link, unsigned int *class,
 	}
 
 	sil24_read_tf(ap, 0, &tf);
-	*class = ata_dev_classify(&tf);
+	*class = ata_dev_classify(link, &tf);
 
 	ata_link_dbg(link, "%s: EXIT, class=%u\n", __func__, *class);
 	return 0;
diff --git a/drivers/scsi/libsas/sas_ata.c b/drivers/scsi/libsas/sas_ata.c
index 4f6cdf53e913..06736b2c7a97 100644
--- a/drivers/scsi/libsas/sas_ata.c
+++ b/drivers/scsi/libsas/sas_ata.c
@@ -620,6 +620,7 @@  void sas_ata_task_abort(struct sas_task *task)
 
 static int sas_get_ata_command_set(struct domain_device *dev)
 {
+	struct ata_port *ap = dev->sata_dev.ap;
 	struct dev_to_host_fis *fis =
 		(struct dev_to_host_fis *) dev->frame_rcvd;
 	struct ata_taskfile tf;
@@ -629,7 +630,7 @@  static int sas_get_ata_command_set(struct domain_device *dev)
 
 	ata_tf_from_fis((const u8 *)fis, &tf);
 
-	return ata_dev_classify(&tf);
+	return ata_dev_classify(&ap->link, &tf);
 }
 
 void sas_probe_sata(struct asd_sas_port *port)
diff --git a/include/linux/libata.h b/include/linux/libata.h
index 7b2f039d3d21..808a96a8cb1d 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -1180,7 +1180,8 @@  extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
 extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
 extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
 		 unsigned int n_elem);
-extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
+extern unsigned int ata_dev_classify(struct ata_link *link,
+				     const struct ata_taskfile *tf);
 extern void ata_dev_disable(struct ata_device *adev);
 extern void ata_id_string(const u16 *id, unsigned char *s,
 			  unsigned int ofs, unsigned int len);