From: Greg Kroah-Hartman Date: Fri, 8 May 2020 09:53:36 +0000 (+0200) Subject: 5.4-stable patches X-Git-Tag: v4.4.223~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3bf6f141beed48527bd28e1791aa6e47d2defc2b;p=thirdparty%2Fkernel%2Fstable-queue.git 5.4-stable patches added patches: alsa-hda-match-both-pci-id-and-ssid-for-driver-blacklist.patch dma-direct-exclude-dma_direct_map_resource-from-the-min_low_pfn-check.patch x86-kvm-fix-a-missing-prototypes-vmread_error.patch --- diff --git a/queue-5.4/alsa-hda-match-both-pci-id-and-ssid-for-driver-blacklist.patch b/queue-5.4/alsa-hda-match-both-pci-id-and-ssid-for-driver-blacklist.patch new file mode 100644 index 00000000000..c3dca0c6621 --- /dev/null +++ b/queue-5.4/alsa-hda-match-both-pci-id-and-ssid-for-driver-blacklist.patch @@ -0,0 +1,54 @@ +From 977dfef40c8996b69afe23a9094d184049efb7bb Mon Sep 17 00:00:00 2001 +From: Takashi Iwai +Date: Fri, 24 Apr 2020 08:12:22 +0200 +Subject: ALSA: hda: Match both PCI ID and SSID for driver blacklist + +From: Takashi Iwai + +commit 977dfef40c8996b69afe23a9094d184049efb7bb upstream. + +The commit 3c6fd1f07ed0 ("ALSA: hda: Add driver blacklist") added a +new blacklist for the devices that are known to have empty codecs, and +one of the entries was ASUS ROG Zenith II (PCI SSID 1043:874f). +However, it turned out that the very same PCI SSID is used for the +previous model that does have the valid HD-audio codecs and the change +broke the sound on it. + +Since the empty codec problem appear on the certain AMD platform (PCI +ID 1022:1487), this patch changes the blacklist matching to both PCI +ID and SSID using pci_match_id(). Also, the entry that was removed by +the previous fix for ASUS ROG Zenigh II is re-added. + +Link: https://lore.kernel.org/r/20200424061222.19792-1-tiwai@suse.de +Signed-off-by: Takashi Iwai +Signed-off-by: Greg Kroah-Hartman + +--- + sound/pci/hda/hda_intel.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +--- a/sound/pci/hda/hda_intel.c ++++ b/sound/pci/hda/hda_intel.c +@@ -2023,9 +2023,10 @@ static void pcm_mmap_prepare(struct snd_ + * some HD-audio PCI entries are exposed without any codecs, and such devices + * should be ignored from the beginning. + */ +-static const struct snd_pci_quirk driver_blacklist[] = { +- SND_PCI_QUIRK(0x1462, 0xcb59, "MSI TRX40 Creator", 0), +- SND_PCI_QUIRK(0x1462, 0xcb60, "MSI TRX40", 0), ++static const struct pci_device_id driver_blacklist[] = { ++ { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1043, 0x874f) }, /* ASUS ROG Zenith II / Strix */ ++ { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb59) }, /* MSI TRX40 Creator */ ++ { PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb60) }, /* MSI TRX40 */ + {} + }; + +@@ -2064,7 +2065,7 @@ static int azx_probe(struct pci_dev *pci + bool schedule_probe; + int err; + +- if (snd_pci_quirk_lookup(pci, driver_blacklist)) { ++ if (pci_match_id(driver_blacklist, pci)) { + dev_info(&pci->dev, "Skipping the blacklisted device\n"); + return -ENODEV; + } diff --git a/queue-5.4/dma-direct-exclude-dma_direct_map_resource-from-the-min_low_pfn-check.patch b/queue-5.4/dma-direct-exclude-dma_direct_map_resource-from-the-min_low_pfn-check.patch new file mode 100644 index 00000000000..b2946e49617 --- /dev/null +++ b/queue-5.4/dma-direct-exclude-dma_direct_map_resource-from-the-min_low_pfn-check.patch @@ -0,0 +1,118 @@ +From 68a33b1794665ba8a1d1ef1d3bfcc7c587d380a6 Mon Sep 17 00:00:00 2001 +From: Christoph Hellwig +Date: Tue, 19 Nov 2019 17:38:58 +0100 +Subject: dma-direct: exclude dma_direct_map_resource from the min_low_pfn check + +From: Christoph Hellwig + +commit 68a33b1794665ba8a1d1ef1d3bfcc7c587d380a6 upstream. + +The valid memory address check in dma_capable only makes sense when mapping +normal memory, not when using dma_map_resource to map a device resource. +Add a new boolean argument to dma_capable to exclude that check for the +dma_map_resource case. + +Fixes: b12d66278dd6 ("dma-direct: check for overflows on 32 bit DMA addresses") +Reported-by: Marek Szyprowski +Signed-off-by: Christoph Hellwig +Acked-by: Marek Szyprowski +Tested-by: Marek Szyprowski +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/amd_gart_64.c | 4 ++-- + drivers/xen/swiotlb-xen.c | 4 ++-- + include/linux/dma-direct.h | 5 +++-- + kernel/dma/direct.c | 4 ++-- + kernel/dma/swiotlb.c | 2 +- + 5 files changed, 10 insertions(+), 9 deletions(-) + +--- a/arch/x86/kernel/amd_gart_64.c ++++ b/arch/x86/kernel/amd_gart_64.c +@@ -185,13 +185,13 @@ static void iommu_full(struct device *de + static inline int + need_iommu(struct device *dev, unsigned long addr, size_t size) + { +- return force_iommu || !dma_capable(dev, addr, size); ++ return force_iommu || !dma_capable(dev, addr, size, true); + } + + static inline int + nonforced_iommu(struct device *dev, unsigned long addr, size_t size) + { +- return !dma_capable(dev, addr, size); ++ return !dma_capable(dev, addr, size, true); + } + + /* Map a single continuous physical area into the IOMMU. +--- a/drivers/xen/swiotlb-xen.c ++++ b/drivers/xen/swiotlb-xen.c +@@ -375,7 +375,7 @@ static dma_addr_t xen_swiotlb_map_page(s + * we can safely return the device addr and not worry about bounce + * buffering it. + */ +- if (dma_capable(dev, dev_addr, size) && ++ if (dma_capable(dev, dev_addr, size, true) && + !range_straddles_page_boundary(phys, size) && + !xen_arch_need_swiotlb(dev, phys, dev_addr) && + swiotlb_force != SWIOTLB_FORCE) +@@ -397,7 +397,7 @@ static dma_addr_t xen_swiotlb_map_page(s + /* + * Ensure that the address returned is DMA'ble + */ +- if (unlikely(!dma_capable(dev, dev_addr, size))) { ++ if (unlikely(!dma_capable(dev, dev_addr, size, true))) { + swiotlb_tbl_unmap_single(dev, map, size, size, dir, + attrs | DMA_ATTR_SKIP_CPU_SYNC); + return DMA_MAPPING_ERROR; +--- a/include/linux/dma-direct.h ++++ b/include/linux/dma-direct.h +@@ -25,14 +25,15 @@ static inline phys_addr_t __dma_to_phys( + return paddr + ((phys_addr_t)dev->dma_pfn_offset << PAGE_SHIFT); + } + +-static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) ++static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size, ++ bool is_ram) + { + dma_addr_t end = addr + size - 1; + + if (!dev->dma_mask) + return false; + +- if (!IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) && ++ if (is_ram && !IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) && + min(addr, end) < phys_to_dma(dev, PFN_PHYS(min_low_pfn))) + return false; + +--- a/kernel/dma/direct.c ++++ b/kernel/dma/direct.c +@@ -327,7 +327,7 @@ static inline bool dma_direct_possible(s + size_t size) + { + return swiotlb_force != SWIOTLB_FORCE && +- dma_capable(dev, dma_addr, size); ++ dma_capable(dev, dma_addr, size, true); + } + + dma_addr_t dma_direct_map_page(struct device *dev, struct page *page, +@@ -376,7 +376,7 @@ dma_addr_t dma_direct_map_resource(struc + { + dma_addr_t dma_addr = paddr; + +- if (unlikely(!dma_capable(dev, dma_addr, size))) { ++ if (unlikely(!dma_capable(dev, dma_addr, size, false))) { + report_addr(dev, dma_addr, size); + return DMA_MAPPING_ERROR; + } +--- a/kernel/dma/swiotlb.c ++++ b/kernel/dma/swiotlb.c +@@ -678,7 +678,7 @@ bool swiotlb_map(struct device *dev, phy + + /* Ensure that the address returned is DMA'ble */ + *dma_addr = __phys_to_dma(dev, *phys); +- if (unlikely(!dma_capable(dev, *dma_addr, size))) { ++ if (unlikely(!dma_capable(dev, *dma_addr, size, true))) { + swiotlb_tbl_unmap_single(dev, *phys, size, size, dir, + attrs | DMA_ATTR_SKIP_CPU_SYNC); + return false; diff --git a/queue-5.4/series b/queue-5.4/series index 73358360bb7..7ae3822e718 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -35,3 +35,6 @@ lib-devres-add-a-helper-function-for-ioremap_uc.patch mfd-intel-lpss-use-devm_ioremap_uc-for-mmio.patch hexagon-clean-up-ioremap.patch hexagon-define-ioremap_uc.patch +alsa-hda-match-both-pci-id-and-ssid-for-driver-blacklist.patch +x86-kvm-fix-a-missing-prototypes-vmread_error.patch +dma-direct-exclude-dma_direct_map_resource-from-the-min_low_pfn-check.patch diff --git a/queue-5.4/x86-kvm-fix-a-missing-prototypes-vmread_error.patch b/queue-5.4/x86-kvm-fix-a-missing-prototypes-vmread_error.patch new file mode 100644 index 00000000000..f775520e81d --- /dev/null +++ b/queue-5.4/x86-kvm-fix-a-missing-prototypes-vmread_error.patch @@ -0,0 +1,36 @@ +From 514ccc194971d0649e4e7ec8a9b3a6e33561d7bf Mon Sep 17 00:00:00 2001 +From: Qian Cai +Date: Thu, 2 Apr 2020 11:39:55 -0400 +Subject: x86/kvm: fix a missing-prototypes "vmread_error" + +From: Qian Cai + +commit 514ccc194971d0649e4e7ec8a9b3a6e33561d7bf upstream. + +The commit 842f4be95899 ("KVM: VMX: Add a trampoline to fix VMREAD error +handling") removed the declaration of vmread_error() causes a W=1 build +failure with KVM_WERROR=y. Fix it by adding it back. + +arch/x86/kvm/vmx/vmx.c:359:17: error: no previous prototype for 'vmread_error' [-Werror=missing-prototypes] + asmlinkage void vmread_error(unsigned long field, bool fault) + ^~~~~~~~~~~~ + +Signed-off-by: Qian Cai +Message-Id: <20200402153955.1695-1-cai@lca.pw> +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kvm/vmx/ops.h | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/x86/kvm/vmx/ops.h ++++ b/arch/x86/kvm/vmx/ops.h +@@ -12,6 +12,7 @@ + + #define __ex(x) __kvm_handle_fault_on_reboot(x) + ++asmlinkage void vmread_error(unsigned long field, bool fault); + __attribute__((regparm(0))) void vmread_error_trampoline(unsigned long field, + bool fault); + void vmwrite_error(unsigned long field, unsigned long value);