pci-v5.1-fixes-3

-----BEGIN PGP SIGNATURE-----
 
 iQJIBAABCgAyFiEEgMe7l+5h9hnxdsnuWYigwDrT+vwFAlzK8pkUHGJoZWxnYWFz
 QGdvb2dsZS5jb20ACgkQWYigwDrT+vwa1Q/9F/LWkDPI0RHrOYlWNHGwrw+jwL6g
 XmvBFbuyuqieaTrljtS5PLbfT2DoD0ZISolQqTjDB4KCHr5u0KyaJgUnbHk4c7qq
 arCOwEC6Ad/xRMmOd3V1qcPAHK8tNigCKOGYOtEk+YfLWfsla7FlqJBtp+5eZ7NZ
 UnGwkaeOzEDY9JskPhcHcoHkZjILgIU8PQsJMjDkh8iDJpYKIjasWcFoAmLaXZb6
 WLha6NO7oZxL3ZX6660K1ah/CxLSx3mgd+BX2KKfucNBmvzu90RuhTRNvegCMm36
 BVglWam4vI95a44N/9w+oPao8p5NMnldWbH7/g3iKFPASylLNUDPT/wKdpACYneK
 ADJmf3+A9OoI7AWEyadR9WvvGuceQ2IoIL0tGI7824HnGwc5KpF+CcFUDTSPRbVO
 94H3+q7M9YEA3CvQQkSqEIPtDcrFrO5x+aEijP4EhmE/7IV52VRyEY1IOHr88hzQ
 umf6TbbxNPaW+g/1IOTSgESSl1nPXKe85Aeb7i4mle9XOp0YIHh44FYyrPoSeysd
 egdij/9K+EPjlLpLm+X7L/dApwBNt+7dmblxanlilOSaDwkpfZ3yIm0jAgcuXhL6
 lXj30vdlCmBiYRV5bMMletrflH29UsEsSpjkW99APU+6Dmx3E2/fWoeEPTkuHw5s
 bPZ7n6KcJewg8Tg=
 =ajSb
 -----END PGP SIGNATURE-----

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:
Linus Torvalds 2019-05-02 08:29:24 -07:00
commit b7a5b22b05
5 changed files with 32 additions and 4 deletions

View file

@ -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);

View file

@ -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.

View file

@ -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

View file

@ -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)

View file

@ -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, &reg16);
*pme = (reg16 & PCI_EXP_FLAGS_IRQ) >> 9;
nvec = *pme + 1;