[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#336688: yaird also add [permanent] ide-generic



On Sun, Nov 20, 2005 at 10:19:19PM +0100, Erik van Konijnenburg wrote:
> On Fri, Nov 18, 2005 at 03:36:52AM +0100, Mau wrote:
> > Yaird also adds to the initrd the [permanent] ide-generic module,
> > which then prevents piix from loading. The result are the messages
> > "PIIX4: port 0x01f0 already claimed by ide0" and "PIIX4: port 0x0170
> > already claimed by ide1" at boot and PIIX ide channels irq driven.
> > 
> > ide-generic should probably not be permanent as it's not needed to boot
> > the root filesystem. Please fix!
> 
> Sigh, ide-generic.  With via82cxxx (2.6.8) on a test box here, the
> IDE disk will only work if ide-generic is present.  In /sys I see no hint
> where ide-generic must and must not be used.
> 
> If I'm correct, the issue is that ide-generic will manage any IDE chipset
> that's not handled by any other driver; if another driver is loaded after
> ide-generic, the IDE devices are already claimed.

Notice that i believe that ide-generic will drive any ide chipset for x86, i
have some doubt of it working on non-x86 arches, at least it does not work on
pegasos, and i don't think it will support the powermacs ide drives.

The other problem is, as you say below, that loading it before the real thing
will make the real thing not work, as is the case here.

> However, as long as ide-generic is loaded after the chipset drivers,
> all this ambiguity should not hurt too much.  For common hardware,
> ide-generic is expected to be one of the last drivers loaded.

Maybe the correct algorithm would be to :

  1) only include ide-generic on x86 hardware.
  2) load it after the real driver, and maybe only if the real driver didn't
     produce a working driver for the root device.

The Kconfig text only says :

config IDE_GENERIC
        tristate "generic/default IDE chipset support"
        default y
        help
          If unsure, say Y.

Which is not very speaking, and the code itself only has :

static int __init ide_generic_init(void)
{
        if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
                ide_get_lock(NULL, NULL); /* for atari only */

        (void)ideprobe_init();

        if (ide_hwifs[0].io_ports[IDE_DATA_OFFSET])
                ide_release_lock();     /* for atari only */

        create_proc_ide_interfaces();

        return 0;
}

which again doesn't seem very speaking.

So, what about your via based case ? Why does via alone not work ? This is
probably a bug in the via driver, maybe because of the strange interrupt issue
or something ?

Friendly,

Sven Luther




Reply to: