Basically you have drive that caught in the word93 rules change. However, the error you got were real and the kernel did properly respeed the drive to one step slower. The problem above prevented you from going from ATA66 to ATA44, thus you fell to ATA33. You RHS 7.0 kernel does not have all the fallback and rules testing to keep things running the very best and in the safest way. Also you do not have the rules for testing if the driver/host/device register and report that all signals are valid and stable. If you did not set TUNING option if the chipset has it specifically flagged then you will not be able to retune the chipset/drive and the IO will be out of sync. At best it will reject DMA attempts, at worst this will do bad things to data. The stuff that 2.4 has that 2.2 does not have is following the rules and guidelines set forth by the folks writing the rules. Cheers, Andre Hedrick The Linux ATA/IDE guy
diff -urN linux-2.4.0-t10-1-pristine/drivers/ide/ide-features.c linux-2.4.0-t10-1.smsc/drivers/ide/ide-features.c --- linux-2.4.0-t10-1-pristine/drivers/ide/ide-features.c Thu Aug 3 16:07:42 2000 +++ linux-2.4.0-t10-1.smsc/drivers/ide/ide-features.c Tue Oct 10 00:00:38 2000 @@ -224,7 +224,8 @@ #ifndef CONFIG_IDEDMA_IVB if ((drive->id->hw_config & 0x6000) == 0) { #else /* !CONFIG_IDEDMA_IVB */ - if ((drive->id->hw_config & 0x2000) == 0) { + if (((drive->id->hw_config & 0x2000) == 0) || + ((drive->id->hw_config & 0x4000) == 0)) { #endif /* CONFIG_IDEDMA_IVB */ printk("%s: Speed warnings UDMA 3/4/5 is not functional.\n", drive->name); return 1; @@ -260,7 +261,7 @@ #ifndef CONFIG_IDEDMA_IVB (drive->id->hw_config & 0x4000) && #endif /* CONFIG_IDEDMA_IVB */ - (drive->id->hw_config & 0x2000)) ? 1 : 0); + (drive->id->hw_config & 0x6000)) ? 1 : 0); } /*