Message ID | 20171025151413.GA6499@red-moon (mailing list archive) |
---|---|
State | New, archived |
Delegated to: | Bjorn Helgaas |
Headers | show |
> > > > > > removing libata modules and rebooting fixes it - so it seems to be > > > > > > loading of libata. > > > > > > > > > > Can you please cherry-pick: > > > > > > > > > > commit b1f9e5e355e9 ("ide: fix IRQ assignment for PCI bus order probing") > > > > > > > > > > from mainline and let us know if that solves the issue ? > > > > > > > > No, still breaks the same way (b1f9e5e355e9 patched on top of > > > > 0e4c2eeb758a). > > > > > > > > 4.14.0-rc5-00095-g1c9fec470b81 was also still broken the same way (tried > > > > on Sunday). > > > > > > I am not sure I patched the right sys file but if I did, does the patch > > > below help ? > > > > > > I think that at sata driver binding time the kernel finds a freed > > > pointer in the host bridge map_irq() hook and that's where things > > > go wrong. > > > > > > Please let me know if that's the right sys file, it is a mechanical > > > change and making it for other sys file should be reasonably simple. > > > > > > Lorenzo > > > > > > -- >8 -- > > > diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c > > > > "Booting GENERIC on Tsunami variation Webbrick using machine vector > > Webbrick from SRM" > > > > Seems to be the correct file - tsunami is referenced from this file and > > the IRQ-s are DP264. > > > > But the patch does not make a difference :( > > It is probably because I patched the wrong map_irq() function, > I am trying to detect which one you are _actually_ using, if > the patch below fails I will patch them all (which is what I > have to do anyway). > > Please give this a go - this _has_ to make a difference, it is not > correct to leave map_irq() pointers as __init memory, IRQ routing > for modules can't work. Yes, webrick entry seems to be the correct one fro DS10L. It works fine on top of the cherry-picked ATA IRQ patch. Will try it on top of current mainline git.
> It is probably because I patched the wrong map_irq() function, > I am trying to detect which one you are _actually_ using, if > the patch below fails I will patch them all (which is what I > have to do anyway). > > Please give this a go - this _has_ to make a difference, it is not > correct to leave map_irq() pointers as __init memory, IRQ routing > for modules can't work. This works for mainline git too. If you have another round that fixes all subarches, I will try it on a PC164 too.
On Wed, Oct 25, 2017 at 09:01:07PM +0300, Meelis Roos wrote: > > It is probably because I patched the wrong map_irq() function, > > I am trying to detect which one you are _actually_ using, if > > the patch below fails I will patch them all (which is what I > > have to do anyway). > > > > Please give this a go - this _has_ to make a difference, it is not > > correct to leave map_irq() pointers as __init memory, IRQ routing > > for modules can't work. > > This works for mainline git too. > > If you have another round that fixes all subarches, I will try it on a > PC164 too. Sure, I will send one patch shortly updating all map/swizzle functions to remove the __init markers. Thanks, Lorenzo
diff --git a/arch/alpha/kernel/sys_dp264.c b/arch/alpha/kernel/sys_dp264.c index 6c35159..62fd7f1 100644 --- a/arch/alpha/kernel/sys_dp264.c +++ b/arch/alpha/kernel/sys_dp264.c @@ -356,7 +356,7 @@ clipper_init_irq(void) * 10 64 bit PCI option slot 3 (not bus 0) */ -static int __init +static int isa_irq_fixup(const struct pci_dev *dev, int irq) { u8 irq8; @@ -372,10 +372,10 @@ isa_irq_fixup(const struct pci_dev *dev, int irq) return irq8 & 0xf; } -static int __init +static int dp264_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { - static char irq_tab[6][5] __initdata = { + static char irq_tab[6][5] = { /*INT INTA INTB INTC INTD */ { -1, -1, -1, -1, -1}, /* IdSel 5 ISA Bridge */ { 16+ 3, 16+ 3, 16+ 2, 16+ 2, 16+ 2}, /* IdSel 6 SCSI builtin*/ @@ -456,10 +456,10 @@ monet_swizzle(struct pci_dev *dev, u8 *pinp) return slot; } -static int __init +static int webbrick_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) { - static char irq_tab[13][5] __initdata = { + static char irq_tab[13][5] = { /*INT INTA INTB INTC INTD */ { -1, -1, -1, -1, -1}, /* IdSel 7 ISA Bridge */ { -1, -1, -1, -1, -1}, /* IdSel 8 unused */