Re: PATCH: Fix broken PIO with libata

From: Tejun Heo
Date: Tue May 16 2006 - 11:35:54 EST

Alan Cox wrote:
> #2 The core sets ATA_DFLAG_PIO to indicate PIO commands should be used
> on this channel. This same information is available in dev->dma_mode but
> for some reason we get two sources of the info. The ATA_DFLAG_PIO is set
> once during setup and then cleared but not re-computed by the revalidate
> function. This causes DMA commands to be issued when PIO would be and
> usually an Oops or hang

Hmmm... I tried to fix this problem in the following commit. With it,
ATA_DFLAG_PIO isn't cleared over ata_dev_configure(). Only
ata_dev_set_mode() is allowed to diddle with it and does about the same
thing as your patch does.

diff-tree ea1dd4e13010eb9dd5ffb4bfabbb472bc238bebb (from
Author: Tejun Heo <htejun@xxxxxxxxx>
Date: Sun Apr 2 18:51:53 2006 +0900

[PATCH] libata: clear only affected flags during ata_dev_configure()

ata_dev_configure() should not clear dynamic device flags determined
elsewhere. Lower eight bits are reserved for feature flags, define
ATA_DFLAG_CFG_MASK and clear only those bits before configuring
device. Without this patch, ATA_DFLAG_PIO gets turned off during
revalidation making PIO mode unuseable.

Signed-off-by: Tejun Heo <htejun@xxxxxxxxx>
Signed-off-by: Jeff Garzik <jeff@xxxxxxxxxx>

> Also contains a related bracketing fix

Is this agreed upon? I tend to omit almost all unnecessary (by operator
precedence) parenthesis, so in new EH and all other stuff, the "a && b &
c" sort of lines are abundant. If this is something that's agreed upon,
I can do a clean sweep over those.

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at