* [PATCH #upstream-fixes] libata: fix PMP initialization
@ 2009-10-15 14:37 Tejun Heo
2009-10-16 10:27 ` Jeff Garzik
0 siblings, 1 reply; 2+ messages in thread
From: Tejun Heo @ 2009-10-15 14:37 UTC (permalink / raw)
To: Jeff Garzik, ethanhsiao, IDE/ATA development list, stable
Commit 842faa6c1a1d6faddf3377948e5cf214812c6c90 fixed error handling
during attach by not committing detected device class to dev->class
while attaching a new device. However, this change missed the PMP
class check in the configuration loop causing a new PMP device to go
through ata_dev_configure() as if it were an ATA or ATAPI device.
As PMP device doesn't have a regular IDENTIFY data, this makes
ata_dev_configure() tries to configure a PMP device using an invalid
data. For the most part, it wasn't too harmful and went unnoticed but
this ends up clearing dev->flags which may have ATA_DFLAG_AN set by
sata_pmp_attach(). This means that SATA_PMP_FEAT_NOTIFY ends up being
disabled on PMPs and on PMPs which honor the flag breaks hotplug
support.
This problem was discovered and reported by Ethan Hsiao.
Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Ethan Hsiao <ethanhsiao@jmicron.com>
Cc: stable@kernel.org
---
drivers/ata/libata-eh.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
index 0a97822..bba2ae5 100644
--- a/drivers/ata/libata-eh.c
+++ b/drivers/ata/libata-eh.c
@@ -2981,12 +2981,14 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
* device detection messages backwards.
*/
ata_for_each_dev(dev, link, ALL) {
- if (!(new_mask & (1 << dev->devno)) ||
- dev->class == ATA_DEV_PMP)
+ if (!(new_mask & (1 << dev->devno)))
continue;
dev->class = ehc->classes[dev->devno];
+ if (dev->class == ATA_DEV_PMP)
+ continue;
+
ehc->i.flags |= ATA_EHI_PRINTINFO;
rc = ata_dev_configure(dev);
ehc->i.flags &= ~ATA_EHI_PRINTINFO;
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH #upstream-fixes] libata: fix PMP initialization
2009-10-15 14:37 [PATCH #upstream-fixes] libata: fix PMP initialization Tejun Heo
@ 2009-10-16 10:27 ` Jeff Garzik
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Garzik @ 2009-10-16 10:27 UTC (permalink / raw)
To: Tejun Heo; +Cc: ethanhsiao, IDE/ATA development list, stable
On 10/15/2009 10:37 AM, Tejun Heo wrote:
> Commit 842faa6c1a1d6faddf3377948e5cf214812c6c90 fixed error handling
> during attach by not committing detected device class to dev->class
> while attaching a new device. However, this change missed the PMP
> class check in the configuration loop causing a new PMP device to go
> through ata_dev_configure() as if it were an ATA or ATAPI device.
>
> As PMP device doesn't have a regular IDENTIFY data, this makes
> ata_dev_configure() tries to configure a PMP device using an invalid
> data. For the most part, it wasn't too harmful and went unnoticed but
> this ends up clearing dev->flags which may have ATA_DFLAG_AN set by
> sata_pmp_attach(). This means that SATA_PMP_FEAT_NOTIFY ends up being
> disabled on PMPs and on PMPs which honor the flag breaks hotplug
> support.
>
> This problem was discovered and reported by Ethan Hsiao.
>
> Signed-off-by: Tejun Heo<tj@kernel.org>
> Reported-by: Ethan Hsiao<ethanhsiao@jmicron.com>
> Cc: stable@kernel.org
> ---
> drivers/ata/libata-eh.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
applied
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2009-10-16 10:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-15 14:37 [PATCH #upstream-fixes] libata: fix PMP initialization Tejun Heo
2009-10-16 10:27 ` Jeff Garzik
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).