Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9913ff8a authored by Tejun Heo's avatar Tejun Heo Committed by Jeff Garzik
Browse files

libata: check onlineness before using SPD in sata_down_spd_limit()



sata_down_spd_limit() should check whether the link is online before
using the SPD value to determine how to limit the link speed.  Factor
out onlineness test and test it from sata_down_spd_limit().

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 678afac6
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -164,6 +164,11 @@ MODULE_LICENSE("GPL");
MODULE_VERSION(DRV_VERSION);


static bool ata_sstatus_online(u32 sstatus)
{
	return (sstatus & 0xf) == 0x3;
}

/**
 *	ata_link_next - link iteration helper
 *	@link: the previous link, NULL to start
@@ -2891,7 +2896,7 @@ int sata_down_spd_limit(struct ata_link *link)
	 * If not, use cached value in link->sata_spd.
	 */
	rc = sata_scr_read(link, SCR_STATUS, &sstatus);
	if (rc == 0)
	if (rc == 0 && ata_sstatus_online(sstatus))
		spd = (sstatus >> 4) & 0xf;
	else
		spd = link->sata_spd;
@@ -5162,7 +5167,7 @@ bool ata_phys_link_online(struct ata_link *link)
	u32 sstatus;

	if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
	    (sstatus & 0xf) == 0x3)
	    ata_sstatus_online(sstatus))
		return true;
	return false;
}
@@ -5186,7 +5191,7 @@ bool ata_phys_link_offline(struct ata_link *link)
	u32 sstatus;

	if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
	    (sstatus & 0xf) != 0x3)
	    !ata_sstatus_online(sstatus))
		return true;
	return false;
}