2004-01-26 00:42:23

by Jeremy Jackson

[permalink] [raw]
Subject: 2.4.23 IDE hang on boot with two single-channel controllers

Hi All,

kdb shows proc_ide_create() stuck in a loop when booting on a Compaq
Armada 7730MT while attached to the docking station.

This is a unique IDE hardware setup. Channel ide0's controller is in
the laptop, while ide1 is a separate controller (pci device) in the
docking station and is not always present.

This seems to be triggering a bug in ide-proc.c:

void proc_ide_create(void)
{
#ifdef CONFIG_BLK_DEV_IDEPCI
ide_pci_host_proc_t *p = ide_pci_host_proc_list;
#endif /* CONFIG_BLK_DEV_IDEPCI */

proc_ide_root = proc_mkdir("ide", 0);
if (!proc_ide_root) return;

create_proc_ide_interfaces();

create_proc_read_entry("drivers", 0, proc_ide_root,
proc_ide_read_drivers, NULL);

#ifdef CONFIG_BLK_DEV_IDEPCI
while (p != NULL) <------------------- INFINITE LOOP HERE
{
if (p->name != NULL && p->set == 1 && p->get_info != NULL)
{
p->parent = proc_ide_root;
create_proc_info_entry(p->name, 0, p->parent,
p->get_info);
p->set = 2;
}
p = p->next;
}
#endif /* CONFIG_BLK_DEV_IDEPCI */
}

I'm not sure if the problem is in the loop or bad data being setup
before it starts.

Assistance fixing it would be appreciated.

Regards,

Jeremy Jackson


2004-01-26 15:57:56

by Jeremy Jackson

[permalink] [raw]
Subject: Re: 2.4.23 IDE hang on boot with two single-channel controllers

Hi,

(watch crossposting when replying all)

I'm hoping to reach the maintainer of the Linux IDE driver for the
Compaq TriFlex controller. I have a problem with this driver when used
with a Compaq Armada 7730MT while docked in the base station.

The driver appears to only support one triflex controller, due to a
missing check (that other chipset drivers have) that should prevent it
from registering a /proc interface more than once. The result is that
it hangs on boot in proc_ide_create() in an infinite loop.

triflex.c:

static unsigned int __init init_chipset_triflex(struct pci_dev *dev,
const char *name)
{
#ifdef CONFIG_PROC_FS
ide_pci_register_host_proc(&triflex_proc);
#endif
return 0;
}

It also appears that triflex_get_info() doesn't support more that one
controller.

I won't go into more detail until I can establish who might care :)

Regards,

Jeremy Jackson


Attachments:
2.4.23 IDE hang on boot with two single-channel controllers (3.21 kB)