lkml.org 
[lkml]   [2021]   [Apr]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 34/49] ARM: footbridge: fix PCI interrupt mapping
    Date
    From: Russell King <rmk+kernel@armlinux.org.uk>

    [ Upstream commit 30e3b4f256b4e366a61658c294f6a21b8626dda7 ]

    Since commit 30fdfb929e82 ("PCI: Add a call to pci_assign_irq() in
    pci_device_probe()"), the PCI code will call the IRQ mapping function
    whenever a PCI driver is probed. If these are marked as __init, this
    causes an oops if a PCI driver is loaded or bound after the kernel has
    initialised.

    Fixes: 30fdfb929e82 ("PCI: Add a call to pci_assign_irq() in pci_device_probe()")
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/arm/mach-footbridge/cats-pci.c | 4 ++--
    arch/arm/mach-footbridge/ebsa285-pci.c | 4 ++--
    arch/arm/mach-footbridge/netwinder-pci.c | 2 +-
    arch/arm/mach-footbridge/personal-pci.c | 5 ++---
    4 files changed, 7 insertions(+), 8 deletions(-)

    diff --git a/arch/arm/mach-footbridge/cats-pci.c b/arch/arm/mach-footbridge/cats-pci.c
    index 0b2fd7e2e9b4..90b1e9be430e 100644
    --- a/arch/arm/mach-footbridge/cats-pci.c
    +++ b/arch/arm/mach-footbridge/cats-pci.c
    @@ -15,14 +15,14 @@
    #include <asm/mach-types.h>

    /* cats host-specific stuff */
    -static int irqmap_cats[] __initdata = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 };
    +static int irqmap_cats[] = { IRQ_PCI, IRQ_IN0, IRQ_IN1, IRQ_IN3 };

    static u8 cats_no_swizzle(struct pci_dev *dev, u8 *pin)
    {
    return 0;
    }

    -static int __init cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    +static int cats_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    {
    if (dev->irq >= 255)
    return -1; /* not a valid interrupt. */
    diff --git a/arch/arm/mach-footbridge/ebsa285-pci.c b/arch/arm/mach-footbridge/ebsa285-pci.c
    index 6f28aaa9ca79..c3f280d08fa7 100644
    --- a/arch/arm/mach-footbridge/ebsa285-pci.c
    +++ b/arch/arm/mach-footbridge/ebsa285-pci.c
    @@ -14,9 +14,9 @@
    #include <asm/mach/pci.h>
    #include <asm/mach-types.h>

    -static int irqmap_ebsa285[] __initdata = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };
    +static int irqmap_ebsa285[] = { IRQ_IN3, IRQ_IN1, IRQ_IN0, IRQ_PCI };

    -static int __init ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    +static int ebsa285_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    {
    if (dev->vendor == PCI_VENDOR_ID_CONTAQ &&
    dev->device == PCI_DEVICE_ID_CONTAQ_82C693)
    diff --git a/arch/arm/mach-footbridge/netwinder-pci.c b/arch/arm/mach-footbridge/netwinder-pci.c
    index 9473aa0305e5..e8304392074b 100644
    --- a/arch/arm/mach-footbridge/netwinder-pci.c
    +++ b/arch/arm/mach-footbridge/netwinder-pci.c
    @@ -18,7 +18,7 @@
    * We now use the slot ID instead of the device identifiers to select
    * which interrupt is routed where.
    */
    -static int __init netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    +static int netwinder_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    {
    switch (slot) {
    case 0: /* host bridge */
    diff --git a/arch/arm/mach-footbridge/personal-pci.c b/arch/arm/mach-footbridge/personal-pci.c
    index 4391e433a4b2..9d19aa98a663 100644
    --- a/arch/arm/mach-footbridge/personal-pci.c
    +++ b/arch/arm/mach-footbridge/personal-pci.c
    @@ -14,13 +14,12 @@
    #include <asm/mach/pci.h>
    #include <asm/mach-types.h>

    -static int irqmap_personal_server[] __initdata = {
    +static int irqmap_personal_server[] = {
    IRQ_IN0, IRQ_IN1, IRQ_IN2, IRQ_IN3, 0, 0, 0,
    IRQ_DOORBELLHOST, IRQ_DMA1, IRQ_DMA2, IRQ_PCI
    };

    -static int __init personal_server_map_irq(const struct pci_dev *dev, u8 slot,
    - u8 pin)
    +static int personal_server_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
    {
    unsigned char line;

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-04-26 09:40    [W:4.126 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site