diff options
| author | Dave Airlie <airlied@redhat.com> | 2017-12-19 21:37:24 +1000 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2017-12-19 21:37:24 +1000 |
| commit | 6b7dcb536e3535444c39286333f10d06d2f44fb5 (patch) | |
| tree | 6a4c1e30e5900626e506d46b100d21a2fcd59003 /drivers/ata/libata-core.c | |
| parent | a942b3c2cddc4378482a427845d15c78eb50f4d4 (diff) | |
| parent | 1291a0d5049dbc06baaaf66a9ff3f53db493b19b (diff) | |
| download | talos-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.c | 12 |
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) |

