Merge tag 'pci-v5.1-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci
Pull PCI fixes from Bjorn Helgaas:
"I apologize for sending these so late in the cycle. We went back and
forth about how to deal with the unexpected logging of intentional
link state changes and finally decided to just config them off by
default.
PCI fixes:
- Stop ignoring "pci=disable_acs_redir" parameter (Logan Gunthorpe)
- Use shared MSI/MSI-X vector for Link Bandwidth Management (Alex
Williamson)
- Add Kconfig option for Link Bandwidth notification messages (Keith
Busch)"
* tag 'pci-v5.1-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci:
PCI/LINK: Add Kconfig option (default off)
PCI/portdrv: Use shared MSI/MSI-X vector for Bandwidth Management
PCI: Fix issue with "pci=disable_acs_redir" parameter being ignored
This commit is contained in:
+17
-2
@@ -6262,8 +6262,7 @@ static int __init pci_setup(char *str)
|
||||
} else if (!strncmp(str, "pcie_scan_all", 13)) {
|
||||
pci_add_flags(PCI_SCAN_ALL_PCIE_DEVS);
|
||||
} else if (!strncmp(str, "disable_acs_redir=", 18)) {
|
||||
disable_acs_redir_param =
|
||||
kstrdup(str + 18, GFP_KERNEL);
|
||||
disable_acs_redir_param = str + 18;
|
||||
} else {
|
||||
printk(KERN_ERR "PCI: Unknown option `%s'\n",
|
||||
str);
|
||||
@@ -6274,3 +6273,19 @@ static int __init pci_setup(char *str)
|
||||
return 0;
|
||||
}
|
||||
early_param("pci", pci_setup);
|
||||
|
||||
/*
|
||||
* 'disable_acs_redir_param' is initialized in pci_setup(), above, to point
|
||||
* to data in the __initdata section which will be freed after the init
|
||||
* sequence is complete. We can't allocate memory in pci_setup() because some
|
||||
* architectures do not have any memory allocation service available during
|
||||
* an early_param() call. So we allocate memory and copy the variable here
|
||||
* before the init section is freed.
|
||||
*/
|
||||
static int __init pci_realloc_setup_params(void)
|
||||
{
|
||||
disable_acs_redir_param = kstrdup(disable_acs_redir_param, GFP_KERNEL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
pure_initcall(pci_realloc_setup_params);
|
||||
|
||||
@@ -142,3 +142,11 @@ config PCIE_PTM
|
||||
|
||||
This is only useful if you have devices that support PTM, but it
|
||||
is safe to enable even if you don't.
|
||||
|
||||
config PCIE_BW
|
||||
bool "PCI Express Bandwidth Change Notification"
|
||||
depends on PCIEPORTBUS
|
||||
help
|
||||
This enables PCI Express Bandwidth Change Notification. If
|
||||
you know link width or rate changes occur only to correct
|
||||
unreliable links, you may answer Y.
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
# Makefile for PCI Express features and port driver
|
||||
|
||||
pcieportdrv-y := portdrv_core.o portdrv_pci.o err.o
|
||||
pcieportdrv-y += bw_notification.o
|
||||
|
||||
obj-$(CONFIG_PCIEPORTBUS) += pcieportdrv.o
|
||||
|
||||
@@ -13,3 +12,4 @@ obj-$(CONFIG_PCIEAER_INJECT) += aer_inject.o
|
||||
obj-$(CONFIG_PCIE_PME) += pme.o
|
||||
obj-$(CONFIG_PCIE_DPC) += dpc.o
|
||||
obj-$(CONFIG_PCIE_PTM) += ptm.o
|
||||
obj-$(CONFIG_PCIE_BW) += bw_notification.o
|
||||
|
||||
@@ -49,7 +49,11 @@ int pcie_dpc_init(void);
|
||||
static inline int pcie_dpc_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PCIE_BW
|
||||
int pcie_bandwidth_notification_init(void);
|
||||
#else
|
||||
static inline int pcie_bandwidth_notification_init(void) { return 0; }
|
||||
#endif
|
||||
|
||||
/* Port Type */
|
||||
#define PCIE_ANY_PORT (~0)
|
||||
|
||||
@@ -55,7 +55,8 @@ static int pcie_message_numbers(struct pci_dev *dev, int mask,
|
||||
* 7.8.2, 7.10.10, 7.31.2.
|
||||
*/
|
||||
|
||||
if (mask & (PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP)) {
|
||||
if (mask & (PCIE_PORT_SERVICE_PME | PCIE_PORT_SERVICE_HP |
|
||||
PCIE_PORT_SERVICE_BWNOTIF)) {
|
||||
pcie_capability_read_word(dev, PCI_EXP_FLAGS, ®16);
|
||||
*pme = (reg16 & PCI_EXP_FLAGS_IRQ) >> 9;
|
||||
nvec = *pme + 1;
|
||||
|
||||
Reference in New Issue
Block a user