summaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-core.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2017-12-19 21:37:24 +1000
committerDave Airlie <airlied@redhat.com>2017-12-19 21:37:24 +1000
commit6b7dcb536e3535444c39286333f10d06d2f44fb5 (patch)
tree6a4c1e30e5900626e506d46b100d21a2fcd59003 /drivers/ata/libata-core.c
parenta942b3c2cddc4378482a427845d15c78eb50f4d4 (diff)
parent1291a0d5049dbc06baaaf66a9ff3f53db493b19b (diff)
downloadtalos-op-linux-6b7dcb536e3535444c39286333f10d06d2f44fb5.tar.gz
talos-op-linux-6b7dcb536e3535444c39286333f10d06d2f44fb5.zip
BackMerge tag 'v4.15-rc4' into drm-next
Linux 4.15-rc4 Daniel requested it to fix some messy conflicts.
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r--drivers/ata/libata-core.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 2a882929de4a..8193b38a1cae 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -3082,13 +3082,19 @@ int sata_down_spd_limit(struct ata_link *link, u32 spd_limit)
bit = fls(mask) - 1;
mask &= ~(1 << bit);
- /* Mask off all speeds higher than or equal to the current
- * one. Force 1.5Gbps if current SPD is not available.
+ /*
+ * Mask off all speeds higher than or equal to the current one. At
+ * this point, if current SPD is not available and we previously
+ * recorded the link speed from SStatus, the driver has already
+ * masked off the highest bit so mask should already be 1 or 0.
+ * Otherwise, we should not force 1.5Gbps on a link where we have
+ * not previously recorded speed from SStatus. Just return in this
+ * case.
*/
if (spd > 1)
mask &= (1 << (spd - 1)) - 1;
else
- mask &= 1;
+ return -EINVAL;
/* were we already at the bottom? */
if (!mask)
OpenPOWER on IntegriCloud