Re: PATCH 2.4.0.9.8: Fix IDE...

From: Andre Hedrick (andre@linux-ide.org)
Date: Mon Oct 02 2000 - 17:35:16 EDT

  • Next message: Andre Hedrick: "Re: hdparm -d 1 fail test9-pre8"

    No kidding, it is scheduled for a RAPE and BURN for a redesign for 2.5.
    Until then do not make changes that cause problems with 'class' code ID's.

    Cheers,

    On Mon, 2 Oct 2000, Jeff Garzik wrote:

    > Linus,
    >
    > Ug. Why do I feel like the IDE "driver" is code layered upon code
    > layered upon code, through the ages, with nary a cleanup in between?
    >
    > My previous patch was a fix, but (brown paper bag time) standard IDE
    > devices no longer called chipset init. People either had no IDE, or
    > were stuck in legacy mode. This fixes it.
    >
    > The IDE layer is in serious need of a cleanup though, IMHO...
    >
    > With this tested patch full functionality should be restored, without
    > reverting to the previously-crazy code found in test9-pre7 and before.
    >
    > Jeff
    >
    >
    >
    >
    > Index: drivers/ide/ide-pci.c
    > ===================================================================
    > RCS file: /usr/jgarzik/cvslan/linux_2_3/drivers/ide/ide-pci.c,v
    > retrieving revision 1.1.1.9
    > diff -u -r1.1.1.9 ide-pci.c
    > --- drivers/ide/ide-pci.c 2000/10/02 08:32:44 1.1.1.9
    > +++ drivers/ide/ide-pci.c 2000/10/02 18:28:10
    > @@ -493,6 +493,7 @@
    > byte tmp = 0;
    > ide_hwif_t *hwif, *mate = NULL;
    > unsigned int class_rev;
    > + int pci_class_ide;
    >
    > #ifdef CONFIG_IDEDMA_AUTO
    > autodma = 1;
    > @@ -538,7 +539,8 @@
    > * Can we trust the reported IRQ?
    > */
    > pciirq = dev->irq;
    > - if ((dev->class & ~(0xff)) != (PCI_CLASS_STORAGE_IDE << 8)) {
    > + pci_class_ide = ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE);
    > + if (!pci_class_ide) {
    > printk("%s: not 100%% native mode: will probe irqs later\n", d->name);
    > /*
    > * This allows offboard ide-pci cards the enable a BIOS,
    > @@ -548,11 +550,17 @@
    > */
    > pciirq = (d->init_chipset) ? d->init_chipset(dev, d->name) : ide_special_settings(dev, d->name);
    > } else if (tried_config) {
    > - printk("%s: will probe irqs later\n", d->name);
    > + printk(KERN_INFO "%s: will probe irqs later\n", d->name);
    > pciirq = 0;
    > } else if (!pciirq) {
    > - printk("%s: bad irq (%d): will probe later\n", d->name, pciirq);
    > - pciirq = 0;
    > + if (pci_class_ide) {
    > + /* this is the normal path for most IDE devices */
    > + if (d->init_chipset)
    > + pciirq = d->init_chipset(dev, d->name);
    > + else
    > + printk(KERN_INFO "%s standard IDE storage device detected\n", d->name);
    > + } else
    > + printk(KERN_WARNING "%s: bad irq (0): will probe later\n", d->name);
    > } else {
    > if (d->init_chipset)
    > (void) d->init_chipset(dev, d->name);
    >

    Andre Hedrick
    The Linux ATA/IDE guy

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    Please read the FAQ at http://www.tux.org/lkml/



    This archive was generated by hypermail 2b29 : Mon Oct 02 2000 - 17:36:36 EDT