pci-v4.14-fixes-2
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJZxRRFAAoJEFmIoMA60/r8EXEP/0+zu/BTA+tdKC6JOrmPPUQL trI3VpcA9uRp8kB+Bcz5qSSoudZiSon+LrBcJinnLM9SM0AnU2KavNWpchksNHQd 2RHKulRz9WTkU/ns8UsIpTX/Yx108C3U9Ww+o0IBDxoRvpVwM8OtyEYOaaqaUsaj 9nKSZtV9RWkdGshtzv7fXuqKXaeCJvWqzfM2QFuEgdBxexXqgMkZrSSUWhTsLhpq +bZ/J1ZFb0HQIj3wVjspq6Sdbnck252BETWTF5xKWEC3Q5xSaLx9j6NqJMUfr8Hl IybmgTJPlhUTZalUEoA8KGs6aGxa1nbn15EQ7l/uU/VwHbCCUF7SR+VYOpUkkR6y dEtpMIUjlrtvFcL8d0wBtWYEUQ5Zu7d7LeAfmBEfOzCZN6jsTqdJCUL26GMTrMci ER7O0DEYF08oSgfnSr17ZLuArUiG4OLcIGHMWVELQAeZltGHTacE45J5JKTDcNaw g+88nJgQ6WKNpb3BZ1w2kKDruLTue2+JObQlC9TUNv2XIb1lCAmdQUArhbQJUDXA tJBfMdcakYHw/ffw/wJZbLxhV13Ik/DfrZYSUTZ2HcdT7qJEW3fd08B08m6E3Xl1 e3bY1ujWB7Zs2xA1WsEoKwCEtjuJ7WXa1WDs3XWlYRRZWdofRJIOmEG8jlu1GuLA 1umCpLZSQtiG7yMd9UZ+ =xb1w -----END PGP SIGNATURE----- Merge tag 'pci-v4.14-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci Pull PCI fixes from Bjorn Helgaas: - fix endpoint "end of test" interrupt issue (introduced in v4.14-rc1) (John Keeping) - fix MIPS use-after-free map_irq() issue (introduced in v4.14-rc1) (Lorenzo Pieralisi) * tag 'pci-v4.14-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: PCI: endpoint: Use correct "end of test" interrupt MIPS: PCI: Move map_irq() hooks out of initdata
This commit is contained in:
commit
e2577d2293
@ -22,10 +22,10 @@
|
||||
#include "pci.h"
|
||||
|
||||
static int (*ath79_pci_plat_dev_init)(struct pci_dev *dev);
|
||||
static const struct ath79_pci_irq *ath79_pci_irq_map __initdata;
|
||||
static unsigned ath79_pci_nr_irqs __initdata;
|
||||
static const struct ath79_pci_irq *ath79_pci_irq_map;
|
||||
static unsigned ath79_pci_nr_irqs;
|
||||
|
||||
static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq ar71xx_pci_irq_map[] = {
|
||||
{
|
||||
.slot = 17,
|
||||
.pin = 1,
|
||||
@ -41,7 +41,7 @@ static const struct ath79_pci_irq ar71xx_pci_irq_map[] __initconst = {
|
||||
}
|
||||
};
|
||||
|
||||
static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq ar724x_pci_irq_map[] = {
|
||||
{
|
||||
.slot = 0,
|
||||
.pin = 1,
|
||||
@ -49,7 +49,7 @@ static const struct ath79_pci_irq ar724x_pci_irq_map[] __initconst = {
|
||||
}
|
||||
};
|
||||
|
||||
static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
||||
static const struct ath79_pci_irq qca955x_pci_irq_map[] = {
|
||||
{
|
||||
.bus = 0,
|
||||
.slot = 0,
|
||||
@ -64,7 +64,7 @@ static const struct ath79_pci_irq qca955x_pci_irq_map[] __initconst = {
|
||||
},
|
||||
};
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
||||
int pcibios_map_irq(const struct pci_dev *dev, uint8_t slot, uint8_t pin)
|
||||
{
|
||||
int irq = -1;
|
||||
int i;
|
||||
|
@ -32,7 +32,7 @@
|
||||
#define INTC PC104PLUS_INTC_IRQ
|
||||
#define INTD PC104PLUS_INTD_IRQ
|
||||
|
||||
static char irq_tab_capcella[][5] __initdata = {
|
||||
static char irq_tab_capcella[][5] = {
|
||||
[11] = { -1, INT1, INT1, INT1, INT1 },
|
||||
[12] = { -1, INT2, INT2, INT2, INT2 },
|
||||
[14] = { -1, INTA, INTB, INTC, INTD }
|
||||
|
@ -147,7 +147,7 @@ static void qube_raq_via_board_id_fixup(struct pci_dev *dev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_0,
|
||||
qube_raq_via_board_id_fixup);
|
||||
|
||||
static char irq_tab_qube1[] __initdata = {
|
||||
static char irq_tab_qube1[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = QUBE1_ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||
@ -156,7 +156,7 @@ static char irq_tab_qube1[] __initdata = {
|
||||
[COBALT_PCICONF_ETH1] = 0
|
||||
};
|
||||
|
||||
static char irq_tab_cobalt[] __initdata = {
|
||||
static char irq_tab_cobalt[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = SCSI_IRQ,
|
||||
@ -165,7 +165,7 @@ static char irq_tab_cobalt[] __initdata = {
|
||||
[COBALT_PCICONF_ETH1] = ETH1_IRQ
|
||||
};
|
||||
|
||||
static char irq_tab_raq2[] __initdata = {
|
||||
static char irq_tab_raq2[] = {
|
||||
[COBALT_PCICONF_CPU] = 0,
|
||||
[COBALT_PCICONF_ETH0] = ETH0_IRQ,
|
||||
[COBALT_PCICONF_RAQSCSI] = RAQ2_SCSI_IRQ,
|
||||
|
@ -43,7 +43,7 @@
|
||||
*/
|
||||
|
||||
#define MAX_SLOT_NUM 10
|
||||
static unsigned char irq_map[][5] __initdata = {
|
||||
static unsigned char irq_map[][5] = {
|
||||
[3] = {0, MARKEINS_PCI_IRQ_INTB, MARKEINS_PCI_IRQ_INTC,
|
||||
MARKEINS_PCI_IRQ_INTD, 0,},
|
||||
[4] = {0, MARKEINS_PCI_IRQ_INTA, 0, 0, 0,},
|
||||
|
@ -21,7 +21,7 @@
|
||||
#define INTB MACEPCI_SHARED0_IRQ
|
||||
#define INTC MACEPCI_SHARED1_IRQ
|
||||
#define INTD MACEPCI_SHARED2_IRQ
|
||||
static char irq_tab_mace[][5] __initdata = {
|
||||
static char irq_tab_mace[][5] = {
|
||||
/* Dummy INT#A INT#B INT#C INT#D */
|
||||
{0, 0, 0, 0, 0}, /* This is placeholder row - never used */
|
||||
{0, SCSI0, SCSI0, SCSI0, SCSI0},
|
||||
|
@ -31,7 +31,7 @@
|
||||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/jmr3927.h>
|
||||
|
||||
int __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char irq = pin;
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
||||
#define PCID 7
|
||||
|
||||
/* all the pci device has the PCIA pin, check the datasheet. */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0}, /* 11: Unused */
|
||||
{0, 0, 0, 0, 0}, /* 12: Unused */
|
||||
|
@ -12,7 +12,7 @@
|
||||
static char pci_irq[5] = {
|
||||
};
|
||||
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* 0: GT64120 PCI bridge */
|
||||
{0, 0, 0, 0, 0 }, /* 1: Unused */
|
||||
|
@ -22,13 +22,13 @@
|
||||
|
||||
#include <asm/vr41xx/mpc30x.h>
|
||||
|
||||
static const int internal_func_irqs[] __initconst = {
|
||||
static const int internal_func_irqs[] = {
|
||||
VRC4173_CASCADE_IRQ,
|
||||
VRC4173_AC97_IRQ,
|
||||
VRC4173_USB_IRQ,
|
||||
};
|
||||
|
||||
static const int irq_tab_mpc30x[] __initconst = {
|
||||
static const int irq_tab_mpc30x[] = {
|
||||
[12] = VRC4173_PCMCIA1_IRQ,
|
||||
[13] = VRC4173_PCMCIA2_IRQ,
|
||||
[29] = MQ200_IRQ,
|
||||
|
@ -47,7 +47,7 @@
|
||||
|
||||
#if defined(CONFIG_PMC_MSP7120_GW)
|
||||
/* Garibaldi Board IRQ wiring to PCI slots */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
@ -86,7 +86,7 @@ static char irq_tab[][5] __initdata = {
|
||||
#elif defined(CONFIG_PMC_MSP7120_EVAL)
|
||||
|
||||
/* MSP7120 Eval Board IRQ wiring to PCI slots */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
@ -125,7 +125,7 @@ static char irq_tab[][5] __initdata = {
|
||||
#else
|
||||
|
||||
/* Unknown board -- don't assign any IRQs */
|
||||
static char irq_tab[][5] __initdata = {
|
||||
static char irq_tab[][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[0]): Unused */
|
||||
{0, 0, 0, 0, 0 }, /* (AD[1]): Unused */
|
||||
|
@ -36,7 +36,7 @@
|
||||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/rbtx4927.h>
|
||||
|
||||
int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
unsigned char irq = pin;
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
#include <asm/txx9/pci.h>
|
||||
#include <asm/txx9/rbtx4938.h>
|
||||
|
||||
int __init rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = tx4938_pcic1_map_irq(dev, slot);
|
||||
|
||||
|
@ -40,7 +40,7 @@
|
||||
* seem to be a documentation error. At least on my RM200C the Cirrus
|
||||
* Logic CL-GD5434 VGA is device 3.
|
||||
*/
|
||||
static char irq_tab_rm200[8][5] __initdata = {
|
||||
static char irq_tab_rm200[8][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
@ -57,7 +57,7 @@ static char irq_tab_rm200[8][5] __initdata = {
|
||||
*
|
||||
* The VGA card is optional for RM300 systems.
|
||||
*/
|
||||
static char irq_tab_rm300d[8][5] __initdata = {
|
||||
static char irq_tab_rm300d[8][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* EISA bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
@ -69,7 +69,7 @@ static char irq_tab_rm300d[8][5] __initdata = {
|
||||
{ 0, INTD, INTA, INTB, INTC }, /* Slot 4 */
|
||||
};
|
||||
|
||||
static char irq_tab_rm300e[5][5] __initdata = {
|
||||
static char irq_tab_rm300e[5][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ SCSI, SCSI, SCSI, SCSI, SCSI }, /* SCSI */
|
||||
@ -96,7 +96,7 @@ static char irq_tab_rm300e[5][5] __initdata = {
|
||||
#define INTC PCIT_IRQ_INTC
|
||||
#define INTD PCIT_IRQ_INTD
|
||||
|
||||
static char irq_tab_pcit[13][5] __initdata = {
|
||||
static char irq_tab_pcit[13][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ SCSI0, SCSI0, SCSI0, SCSI0, SCSI0 }, /* SCSI */
|
||||
@ -113,7 +113,7 @@ static char irq_tab_pcit[13][5] __initdata = {
|
||||
{ 0, INTA, INTB, INTC, INTD }, /* Slot 5 */
|
||||
};
|
||||
|
||||
static char irq_tab_pcit_cplus[13][5] __initdata = {
|
||||
static char irq_tab_pcit_cplus[13][5] = {
|
||||
/* INTA INTB INTC INTD */
|
||||
{ 0, 0, 0, 0, 0 }, /* HOST bridge */
|
||||
{ 0, INTB, INTC, INTD, INTA }, /* PCI Slot 9 */
|
||||
|
@ -59,8 +59,7 @@ union octeon_pci_address {
|
||||
} s;
|
||||
};
|
||||
|
||||
int (*octeon_pcibios_map_irq)(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin);
|
||||
int (*octeon_pcibios_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
enum octeon_dma_bar_type octeon_dma_bar_type = OCTEON_DMA_BAR_TYPE_INVALID;
|
||||
|
||||
/**
|
||||
|
@ -112,7 +112,7 @@ int __init tx4938_pciclk66_setup(void)
|
||||
return pciclk;
|
||||
}
|
||||
|
||||
int __init tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
{
|
||||
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {
|
||||
switch (slot) {
|
||||
|
@ -48,7 +48,7 @@ void __init tx4939_report_pci1clk(void)
|
||||
((pciclk + 50000) / 100000) % 10);
|
||||
}
|
||||
|
||||
int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
int tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
{
|
||||
if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {
|
||||
switch (slot) {
|
||||
@ -68,7 +68,7 @@ int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
|
||||
return -1;
|
||||
}
|
||||
|
||||
int __init tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
int tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
int irq = tx4939_pcic1_map_irq(dev, slot);
|
||||
|
||||
|
@ -1464,8 +1464,7 @@ static int cvmx_pcie_rc_initialize(int pcie_port)
|
||||
* as it goes through each bridge.
|
||||
* Returns Interrupt number for the device
|
||||
*/
|
||||
int __init octeon_pcie_pcibios_map_irq(const struct pci_dev *dev,
|
||||
u8 slot, u8 pin)
|
||||
int octeon_pcie_pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
/*
|
||||
* The EBH5600 board with the PCI to PCIe bridge mistakenly
|
||||
|
@ -386,9 +386,10 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
static int (*txx9_pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
|
||||
int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
|
||||
{
|
||||
return txx9_board_vec->pci_map_irq(dev, slot, pin);
|
||||
return txx9_pci_map_irq(dev, slot, pin);
|
||||
}
|
||||
|
||||
char * (*txx9_board_pcibios_setup)(char *str) __initdata;
|
||||
@ -424,5 +425,8 @@ char *__init txx9_pcibios_setup(char *str)
|
||||
txx9_pci_err_action = TXX9_PCI_ERR_IGNORE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
txx9_pci_map_irq = txx9_board_vec->pci_map_irq;
|
||||
|
||||
return str;
|
||||
}
|
||||
|
@ -251,9 +251,8 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test)
|
||||
static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test, u8 irq)
|
||||
{
|
||||
u8 irq;
|
||||
u8 msi_count;
|
||||
struct pci_epf *epf = epf_test->epf;
|
||||
struct pci_epc *epc = epf->epc;
|
||||
@ -262,7 +261,6 @@ static void pci_epf_test_raise_irq(struct pci_epf_test *epf_test)
|
||||
|
||||
reg->status |= STATUS_IRQ_RAISED;
|
||||
msi_count = pci_epc_get_msi(epc);
|
||||
irq = (reg->command & MSI_NUMBER_MASK) >> MSI_NUMBER_SHIFT;
|
||||
if (irq > msi_count || msi_count <= 0)
|
||||
pci_epc_raise_irq(epc, PCI_EPC_IRQ_LEGACY, 0);
|
||||
else
|
||||
@ -289,6 +287,8 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
|
||||
reg->command = 0;
|
||||
reg->status = 0;
|
||||
|
||||
irq = (command & MSI_NUMBER_MASK) >> MSI_NUMBER_SHIFT;
|
||||
|
||||
if (command & COMMAND_RAISE_LEGACY_IRQ) {
|
||||
reg->status = STATUS_IRQ_RAISED;
|
||||
pci_epc_raise_irq(epc, PCI_EPC_IRQ_LEGACY, 0);
|
||||
@ -301,7 +301,7 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
|
||||
reg->status |= STATUS_WRITE_FAIL;
|
||||
else
|
||||
reg->status |= STATUS_WRITE_SUCCESS;
|
||||
pci_epf_test_raise_irq(epf_test);
|
||||
pci_epf_test_raise_irq(epf_test, irq);
|
||||
goto reset_handler;
|
||||
}
|
||||
|
||||
@ -311,7 +311,7 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
|
||||
reg->status |= STATUS_READ_SUCCESS;
|
||||
else
|
||||
reg->status |= STATUS_READ_FAIL;
|
||||
pci_epf_test_raise_irq(epf_test);
|
||||
pci_epf_test_raise_irq(epf_test, irq);
|
||||
goto reset_handler;
|
||||
}
|
||||
|
||||
@ -321,13 +321,12 @@ static void pci_epf_test_cmd_handler(struct work_struct *work)
|
||||
reg->status |= STATUS_COPY_SUCCESS;
|
||||
else
|
||||
reg->status |= STATUS_COPY_FAIL;
|
||||
pci_epf_test_raise_irq(epf_test);
|
||||
pci_epf_test_raise_irq(epf_test, irq);
|
||||
goto reset_handler;
|
||||
}
|
||||
|
||||
if (command & COMMAND_RAISE_MSI_IRQ) {
|
||||
msi_count = pci_epc_get_msi(epc);
|
||||
irq = (command & MSI_NUMBER_MASK) >> MSI_NUMBER_SHIFT;
|
||||
if (irq > msi_count || msi_count <= 0)
|
||||
goto reset_handler;
|
||||
reg->status = STATUS_IRQ_RAISED;
|
||||
|
Loading…
Reference in New Issue
Block a user