Messages in this thread | | | Date | Wed, 22 May 2002 16:11:44 +1000 | From | Andrew Pam <> | Subject | Re: Initialisation bug in IDE patch |
| |
On Tue, May 21, 2002 at 11:00:45PM -0700, Andre Hedrick wrote: > > Please check the function in the top of ide.c > > linux-2.4.19-p7 ide.c > > static void init_hwif_data (unsigned int index) > { > unsigned int unit; > hw_regs_t hw; > ide_hwif_t *hwif = &ide_hwifs[index]; > > /* bulk initialize hwif & drive info with zeros */ > memset(hwif, 0, sizeof(ide_hwif_t)); > memset(&hw, 0, sizeof(hw_regs_t)); > > /* fill in any non-zero initial values */ > hwif->index = index; > ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq); > memcpy(&hwif->hw, &hw, sizeof(hw)); > memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports)); > hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; > > Obviously you are calling things outside of the normal usage of the > driver.
No, this is the existing driver as shipped; I have not modified the code. The init_hwif_data roiutine has not yet been called while the ide_setup() routine is parsing the kernel parameters, hence the bug.
> 2.2.19 ide.c > > /* > * Do not even *think* about calling this! > */ > static void init_hwif_data (unsigned int index) > { > unsigned int unit; > hw_regs_t hw; > ide_hwif_t *hwif = &ide_hwifs[index]; > > /* bulk initialize hwif & drive info with zeros */ > memset(hwif, 0, sizeof(ide_hwif_t)); > memset(&hw, 0, sizeof(hw_regs_t)); > > /* fill in any non-zero initial values */ > hwif->index = index; > ide_init_hwif_ports(&hw, ide_default_io_base(index), 0, &hwif->irq); > memcpy(&hwif->hw, &hw, sizeof(hw)); > memcpy(hwif->io_ports, hw.io_ports, sizeof(hw.io_ports)); > hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET]; > #ifdef CONFIG_BLK_DEV_HD > if (hwif->io_ports[IDE_DATA_OFFSET] == HD_DATA) > > If you are attempting to introduce a hw.chipset which is unknown to the > driver please submit a patch to register it or the enum index will barf.
No, I have a qd6580 which is already supported. This bug is in existing kernel code; I am not adding any new code, but spent some hours debugging the problem with printk statements.
Regards, Andrew Pam -- mailto:xanni@xanadu.net Andrew Pam http://www.xanadu.com.au/ Chief Scientist, Xanadu http://www.glasswings.com.au/ Technology Manager, Glass Wings http://www.sericyb.com.au/ Manager, Serious Cybernetics http://two-cents-worth.com/?105347&EG Donate two cents to our work! P.O. Box 477, Blackburn VIC 3130 Australia Phone +61 401 258 915 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |