mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-26 05:34:13 +08:00
pci-v6.3-fixes-2
-----BEGIN PGP SIGNATURE----- iQJIBAABCgAyFiEEgMe7l+5h9hnxdsnuWYigwDrT+vwFAmQ1qFYUHGJoZWxnYWFz QGdvb2dsZS5jb20ACgkQWYigwDrT+vxRJA/+JnDrZ8Ag8sIGgI7meuqWcLe3dHXQ 7KaOGM/MP0ir8qJwiobuon2ml1lEU+iWZEcpFH9b9b5iurAfbvZkPhFAWZzJG3GW B6qEX5zaK4tNJHC8byK4pSat2pJLg8Q6xwA6c3H9264tj4Dc83dg2Y8hWWozbU2l xFaawRexCus7Xzd2VEfskwOpHQpSYkWCDtTFclIt1iZeelj6an/0FVdvYqvvIXi+ QZjS80tMeZIcKJq06023KJX36lZHf0RGzYzQTyr7asiNnXBnQ1DfYIASwx1Nf6Y3 9PpvoDVbUGnLDAB8THcOM9j9UOrhlbOJ+4b60J0b4nsT0ORn4rCrN05K0DIIXZi0 CsP3qR2l04xYZFElWrvnA30KS76G7vq0OeAGpQsE0nB1PgydXuiXk5lniQhsrOuj xRiY7YeDFwiNzpjWsVtqkANvl6tA53ZUn+AMEPfIpdYbjnbLcSSF/qY3WCeKoftx KUg6fVOoXbbSctK5rXQnj2yhwQZSkm3DrG9Ol2i3E524vcMKs28QBBuUN+gtL3TP aD6nYP2Q0gItYAQCMtJHCBzfstrO5l9JSLM6xUHR/GwiaLCC9+QRdLJFcAxZvZJi buGs09B2Xz8AbgQ3AejEw7UXk+4JP19ZLyznBhLaaQQO9YOvDYlcn3Xw1QGvJGY/ qsYKElgrLWSz+50= =2gjK -----END PGP SIGNATURE----- Merge tag 'pci-v6.3-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci Pull pci fixes from Bjorn Helgaas: - Provide pci_msix_can_alloc_dyn() stub when CONFIG_PCI_MSI unset to avoid build errors (Reinette Chatre) - Quirk AMD XHCI controller that loses MSI-X state in D3hot to avoid broken USB after hotplug or suspend/resume (Basavaraj Natikar) - Fix use-after-free in pci_bus_release_domain_nr() (Rob Herring) * tag 'pci-v6.3-fixes-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci: PCI: Fix use-after-free in pci_bus_release_domain_nr() x86/PCI: Add quirk for AMD XHCI controller that loses MSI-X state in D3hot PCI/MSI: Provide missing stub for pci_msix_can_alloc_dyn()
This commit is contained in:
commit
e62252bc55
@ -7,6 +7,7 @@
|
|||||||
#include <linux/dmi.h>
|
#include <linux/dmi.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/vgaarb.h>
|
#include <linux/vgaarb.h>
|
||||||
|
#include <asm/amd_nb.h>
|
||||||
#include <asm/hpet.h>
|
#include <asm/hpet.h>
|
||||||
#include <asm/pci_x86.h>
|
#include <asm/pci_x86.h>
|
||||||
|
|
||||||
@ -824,3 +825,23 @@ static void rs690_fix_64bit_dma(struct pci_dev *pdev)
|
|||||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x7910, rs690_fix_64bit_dma);
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x7910, rs690_fix_64bit_dma);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_AMD_NB
|
||||||
|
|
||||||
|
#define AMD_15B8_RCC_DEV2_EPF0_STRAP2 0x10136008
|
||||||
|
#define AMD_15B8_RCC_DEV2_EPF0_STRAP2_NO_SOFT_RESET_DEV2_F0_MASK 0x00000080L
|
||||||
|
|
||||||
|
static void quirk_clear_strap_no_soft_reset_dev2_f0(struct pci_dev *dev)
|
||||||
|
{
|
||||||
|
u32 data;
|
||||||
|
|
||||||
|
if (!amd_smn_read(0, AMD_15B8_RCC_DEV2_EPF0_STRAP2, &data)) {
|
||||||
|
data &= ~AMD_15B8_RCC_DEV2_EPF0_STRAP2_NO_SOFT_RESET_DEV2_F0_MASK;
|
||||||
|
if (amd_smn_write(0, AMD_15B8_RCC_DEV2_EPF0_STRAP2, data))
|
||||||
|
pci_err(dev, "Failed to write data 0x%x\n", data);
|
||||||
|
} else {
|
||||||
|
pci_err(dev, "Failed to read data\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_AMD, 0x15b8, quirk_clear_strap_no_soft_reset_dev2_f0);
|
||||||
|
#endif
|
||||||
|
@ -157,8 +157,6 @@ void pci_remove_root_bus(struct pci_bus *bus)
|
|||||||
list_for_each_entry_safe(child, tmp,
|
list_for_each_entry_safe(child, tmp,
|
||||||
&bus->devices, bus_list)
|
&bus->devices, bus_list)
|
||||||
pci_remove_bus_device(child);
|
pci_remove_bus_device(child);
|
||||||
pci_remove_bus(bus);
|
|
||||||
host_bridge->bus = NULL;
|
|
||||||
|
|
||||||
#ifdef CONFIG_PCI_DOMAINS_GENERIC
|
#ifdef CONFIG_PCI_DOMAINS_GENERIC
|
||||||
/* Release domain_nr if it was dynamically allocated */
|
/* Release domain_nr if it was dynamically allocated */
|
||||||
@ -166,6 +164,9 @@ void pci_remove_root_bus(struct pci_bus *bus)
|
|||||||
pci_bus_release_domain_nr(bus, host_bridge->dev.parent);
|
pci_bus_release_domain_nr(bus, host_bridge->dev.parent);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
pci_remove_bus(bus);
|
||||||
|
host_bridge->bus = NULL;
|
||||||
|
|
||||||
/* remove the host bridge */
|
/* remove the host bridge */
|
||||||
device_del(&host_bridge->dev);
|
device_del(&host_bridge->dev);
|
||||||
}
|
}
|
||||||
|
@ -1624,6 +1624,8 @@ pci_alloc_irq_vectors(struct pci_dev *dev, unsigned int min_vecs,
|
|||||||
flags, NULL);
|
flags, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool pci_msix_can_alloc_dyn(struct pci_dev *dev)
|
||||||
|
{ return false; }
|
||||||
static inline struct msi_map pci_msix_alloc_irq_at(struct pci_dev *dev, unsigned int index,
|
static inline struct msi_map pci_msix_alloc_irq_at(struct pci_dev *dev, unsigned int index,
|
||||||
const struct irq_affinity_desc *affdesc)
|
const struct irq_affinity_desc *affdesc)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user