2008-12-14 23:28:27

by Mario Schwalbe

[permalink] [raw]
Subject: [PATCH] ide: Fix drive's DWORD-IO handling

According the documentation, id[ATA_ID_DWORD_IO] is non-zero if
the drive supports dword IO, while the code disables support by
setting IDE_DFLAG_NO_IO_32BIT. In addition, this word has been
reused by the ATA8 specification. This patch fixes both cases.
---
drivers/ide/ide-probe.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
index c55bdbd..859b0e5 100644
--- a/drivers/ide/ide-probe.c
+++ b/drivers/ide/ide-probe.c
@@ -856,7 +856,7 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)
ide_drive_t *drive = &hwif->drives[unit];

if ((hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) ||
- drive->id[ATA_ID_DWORD_IO])
+ !ata_id_has_dword_io(drive->id))
drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT;
else
drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT;
--
1.5.6.3


Subject: Re: [PATCH] ide: Fix drive's DWORD-IO handling

On Monday 15 December 2008, Mario Schwalbe wrote:
> According the documentation, id[ATA_ID_DWORD_IO] is non-zero if
> the drive supports dword IO, while the code disables support by
> setting IDE_DFLAG_NO_IO_32BIT. In addition, this word has been
> reused by the ATA8 specification. This patch fixes both cases.
> ---
> drivers/ide/ide-probe.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
> index c55bdbd..859b0e5 100644
> --- a/drivers/ide/ide-probe.c
> +++ b/drivers/ide/ide-probe.c
> @@ -856,7 +856,7 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)
> ide_drive_t *drive = &hwif->drives[unit];
>
> if ((hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) ||
> - drive->id[ATA_ID_DWORD_IO])
> + !ata_id_has_dword_io(drive->id))
> drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT;
> else
> drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT;

This change is OK and I would happily apply the patch but...

ata_id_has_dword_io() itself has bugs that need fixing (which would
have a nice side-effect of fixing some libata drivers that happen to
use it directly). ATA_ID_DWORD_IO word is defined only in ATA-1 spec
and devices confirming to the later versions of spec support dword IO
just fine despite using zero value for the said word.

Thus could you please fix ata_id_has_dword_io() first (preferrably in
a separate patch) and than re-submit this patch (btw please remember to
include "Signed-off-by" line in your patches).

Thanks,
Bart

Subject: Re: [PATCH] ide: Fix drive's DWORD-IO handling

On Thursday 18 December 2008, Mario Schwalbe wrote:
> Resubmitted on request.
>
> According the documentation, id[ATA_ID_DWORD_IO] is non-zero if
> the drive supports dword IO, while the code disables support by
> setting IDE_DFLAG_NO_IO_32BIT. In addition, this word has been
> reused by the ATA8 specification. This patch fixes both cases.
>
> Signed-off-by: Mario Schwalbe <[email protected]>
> ---
> drivers/ide/ide-probe.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
> index c55bdbd..859b0e5 100644
> --- a/drivers/ide/ide-probe.c
> +++ b/drivers/ide/ide-probe.c
> @@ -856,7 +856,7 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)
> ide_drive_t *drive = &hwif->drives[unit];
>
> if ((hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) ||
> - drive->id[ATA_ID_DWORD_IO])
> + !ata_id_has_dword_io(drive->id))
> drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT;
> else
> drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT;

Since it seems that libata developers need more time to fully analyze
issues with ata_id_has_dword_io() and I don't want to delay this fix
because if it could you please modify the patch according to Sergei's
suggestion of removing id[ATA_ID_DWORD_IO] check altogether?

[ It is a safe thing to do since the old code has been enabling 32-bit
I/O _unless_ the ATA-1 dword I/O bit for VU compatibility was set... ]

Thanks,
Bart

Subject: Re: [PATCH] ide: Fix drive's DWORD-IO handling

On Friday 19 December 2008, Bartlomiej Zolnierkiewicz wrote:> On Thursday 18 December 2008, Mario Schwalbe wrote:> > Resubmitted on request.> > > > According the documentation, id[ATA_ID_DWORD_IO] is non-zero if> > the drive supports dword IO, while the code disables support by> > setting IDE_DFLAG_NO_IO_32BIT. In addition, this word has been> > reused by the ATA8 specification. This patch fixes both cases.> > > > Signed-off-by: Mario Schwalbe <[email protected]>> > ---> > drivers/ide/ide-probe.c | 2 +-> > 1 files changed, 1 insertions(+), 1 deletions(-)> > > > diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c> > index c55bdbd..859b0e5 100644> > --- a/drivers/ide/ide-probe.c> > +++ b/drivers/ide/ide-probe.c> > @@ -856,7 +856,7 @@ static void ide_port_tune_devices(ide_hwif_t *hwif)> > ide_drive_t *drive = &hwif->drives[unit];> > > > if ((hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) ||> > - drive->id[ATA_ID_DWORD_IO])> > + !ata_id_has_dword_io(drive->id))> > drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT;> > else> > drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT;> > Since it seems that libata developers need more time to fully analyze> issues with ata_id_has_dword_io() and I don't want to delay this fix> because if it could you please modify the patch according to Sergei's> suggestion of removing id[ATA_ID_DWORD_IO] check altogether?> > [ It is a safe thing to do since the old code has been enabling 32-bit> I/O _unless_ the ATA-1 dword I/O bit for VU compatibility was set... ]
I merged the patch and did the modification while at it:
From: Mario Schwalbe <[email protected]>Subject: [PATCH] ide: Fix drive's DWORD-IO handling
According the documentation, id[ATA_ID_DWORD_IO] is non-zero ifthe drive supports dword IO, while the code disables support bysetting IDE_DFLAG_NO_IO_32BIT. In addition, this word has beenreused by the ATA8 specification. This patch fixes both cases.
Signed-off-by: Mario Schwalbe <[email protected]>Cc: Sergei Shtylyov <[email protected]>[bart: remove id[ATA_ID_DWORD_IO] check altogether per Sergei's suggestion]Signed-off-by: Bartlomiej Zolnierkiewicz <[email protected]>--- drivers/ide/ide-probe.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
Index: b/drivers/ide/ide-probe.c===================================================================--- a/drivers/ide/ide-probe.c+++ b/drivers/ide/ide-probe.c@@ -849,8 +849,7 @@ static void ide_port_tune_devices(ide_hw } ide_port_for_each_dev(i, drive, hwif) {- if ((hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) ||- drive->id[ATA_ID_DWORD_IO])+ if (hwif->host_flags & IDE_HFLAG_NO_IO_32BIT) drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT; else drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT;
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?