On Monday 25 August 2008, Martin Michlmayr wrote: > * Larry Finger <Larry.Finger@xxxxxxxxxxxx> [2008-08-21 12:57]: > > Do you have a git tree, or have you downloaded snapshots? If the > > former, a bisection would be useful. > > I've bisected it down to this change: ide: set hwif->dev in ide_init_port_hw() (take 2) > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=c56c5648a3bd15ff14c50f284b261140cd5b5472 Thanks for tracing it down and sorry for the bug. > I cannot revert this from current git because there were too many > changes but when I go to 5b664cb235e97afbf34db9c4d77f08ebd725335e (a > random point that shows the oops) and apply the following (which is > basically a partial revert of the c56c5648a3bd15ff14c50f284b261140cd5b5472) > then it works: > > --- a/drivers/ide/ide.c > +++ b/drivers/ide/ide.c > @@ -284,7 +284,6 @@ void ide_init_port_hw(ide_hwif_t *hwif, hw_regs_t *hw) > memcpy(&hwif->io_ports, &hw->io_ports, sizeof(hwif->io_ports)); > hwif->irq = hw->irq; > hwif->chipset = hw->chipset; > - hwif->dev = hw->dev; > hwif->gendev.parent = hw->parent ? hw->parent : hw->dev; > hwif->ack_intr = hw->ack_intr; > } > diff --git a/drivers/ide/setup-pci.c b/drivers/ide/setup-pci.c > index 65fc08b..187b7b1 100644 > --- a/drivers/ide/setup-pci.c > +++ b/drivers/ide/setup-pci.c > @@ -339,6 +339,8 @@ static ide_hwif_t *ide_hwif_configure(struct pci_dev *dev, > > ide_init_port_hw(hwif, &hw); > > + hwif->dev = &dev->dev; > + > return hwif; > } Unfortunately we cannot apply the partial revert either because it will break device tree registration for non-PCI/PCMCIA controllers (+ we really want to have PCMCIA controllers registered with the device tree). Hmm, I suspect that the root cause of the problem is actually in hwif_to_node() assuming that hwif->dev always belongs to a PCI device. Does the following patch help? From: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> Subject: [PATCH] ide: fix hwif_to_node() hwif_to_node() incorrectly assumes that hwif->dev always belongs to a PCI device. This results in ide-cs oopsing in init_irq() after commit c56c5648a3bd15ff14c50f284b261140cd5b5472 accidentally fixed device tree registration for ide-cs. Fix it by using dev_to_node(). Thanks to Martin Michlmayr and Larry Finger for help with debugging the issue. Reported-by: Martin Michlmayr <tbm@xxxxxxxxxx> Cc: Larry Finger <Larry.Finger@xxxxxxxxxxxx> Cc: Dominik Brodowski <linux@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> --- include/linux/ide.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) Index: b/include/linux/ide.h =================================================================== --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -1448,8 +1448,7 @@ static inline void ide_dump_identify(u8 static inline int hwif_to_node(ide_hwif_t *hwif) { - struct pci_dev *dev = to_pci_dev(hwif->dev); - return hwif->dev ? pcibus_to_node(dev->bus) : -1; + return hwif->dev ? dev_to_node(hwif->dev) : -1; } static inline ide_drive_t *ide_get_paired_drive(ide_drive_t *drive) -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html