Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

libata: Fix display of sata speed

6.0 Gbps link speed was not decoded properly:
speed was reported at 3.0 Gbps only.

Tested: On a machine where libata reports 6.0 Gbps in
/var/log/messages:
ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)

Before:
cat /sys/class/ata_link/link1/sata_spd
3.0 Gbps
After:
cat /sys/class/ata_link/link1/sata_spd
6.0 Gbps

Signed-off-by: Gwendal Grignou <gwendal@google.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: stable@vger.kernel.org

authored by

Gwendal Grignou and committed by
Tejun Heo
3e85c3ec 8b789d89

+8 -8
+8 -8
drivers/ata/libata-transport.c
··· 321 321 /* 322 322 * ATA link attributes 323 323 */ 324 + static int noop(int x) { return x; } 324 325 325 - 326 - #define ata_link_show_linkspeed(field) \ 326 + #define ata_link_show_linkspeed(field, format) \ 327 327 static ssize_t \ 328 328 show_ata_link_##field(struct device *dev, \ 329 329 struct device_attribute *attr, char *buf) \ 330 330 { \ 331 331 struct ata_link *link = transport_class_to_link(dev); \ 332 332 \ 333 - return sprintf(buf,"%s\n", sata_spd_string(fls(link->field))); \ 333 + return sprintf(buf, "%s\n", sata_spd_string(format(link->field))); \ 334 334 } 335 335 336 - #define ata_link_linkspeed_attr(field) \ 337 - ata_link_show_linkspeed(field) \ 336 + #define ata_link_linkspeed_attr(field, format) \ 337 + ata_link_show_linkspeed(field, format) \ 338 338 static DEVICE_ATTR(field, S_IRUGO, show_ata_link_##field, NULL) 339 339 340 - ata_link_linkspeed_attr(hw_sata_spd_limit); 341 - ata_link_linkspeed_attr(sata_spd_limit); 342 - ata_link_linkspeed_attr(sata_spd); 340 + ata_link_linkspeed_attr(hw_sata_spd_limit, fls); 341 + ata_link_linkspeed_attr(sata_spd_limit, fls); 342 + ata_link_linkspeed_attr(sata_spd, noop); 343 343 344 344 345 345 static DECLARE_TRANSPORT_CLASS(ata_link_class,