From: Sasha Levin Date: Sun, 1 Dec 2019 17:02:54 +0000 (-0500) Subject: fixes for 4.14 X-Git-Tag: v5.4.2~60 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d70220283a2c587ff33728505a64da81c7a4951b;p=thirdparty%2Fkernel%2Fstable-queue.git fixes for 4.14 Signed-off-by: Sasha Levin --- diff --git a/queue-4.14/ath10k-restore-qca9880-ar1a-v1-detection.patch b/queue-4.14/ath10k-restore-qca9880-ar1a-v1-detection.patch new file mode 100644 index 00000000000..dbfc4414fbf --- /dev/null +++ b/queue-4.14/ath10k-restore-qca9880-ar1a-v1-detection.patch @@ -0,0 +1,83 @@ +From d2fee95ee3fa3bd07accb071cd15f02cdaf3cbd7 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 29 Nov 2019 21:52:18 +0100 +Subject: ath10k: restore QCA9880-AR1A (v1) detection + +From: Christian Lamparter + +commit f8914a14623a79b73f72b2b1ee4cd9b2cb91b735 upstream + +Signed-off-by: Sasha Levin +--- + drivers/net/wireless/ath/ath10k/pci.c | 27 +++++++++++++++++++++------ + 1 file changed, 21 insertions(+), 6 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c +index 0298ddc1ff060..2be273a6c980c 100644 +--- a/drivers/net/wireless/ath/ath10k/pci.c ++++ b/drivers/net/wireless/ath/ath10k/pci.c +@@ -3201,7 +3201,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, + struct ath10k_pci *ar_pci; + enum ath10k_hw_rev hw_rev; + u32 chip_id; +- bool pci_ps; ++ bool pci_ps, is_qca988x = false; + int (*pci_soft_reset)(struct ath10k *ar); + int (*pci_hard_reset)(struct ath10k *ar); + u32 (*targ_cpu_to_ce_addr)(struct ath10k *ar, u32 addr); +@@ -3210,6 +3210,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev, + case QCA988X_2_0_DEVICE_ID: + hw_rev = ATH10K_HW_QCA988X; + pci_ps = false; ++ is_qca988x = true; + pci_soft_reset = ath10k_pci_warm_reset; + pci_hard_reset = ath10k_pci_qca988x_chip_reset; + targ_cpu_to_ce_addr = ath10k_pci_qca988x_targ_cpu_to_ce_addr; +@@ -3330,6 +3331,19 @@ static int ath10k_pci_probe(struct pci_dev *pdev, + goto err_deinit_irq; + } + ++ /* Read CHIP_ID before reset to catch QCA9880-AR1A v1 devices that ++ * fall off the bus during chip_reset. These chips have the same pci ++ * device id as the QCA9880 BR4A or 2R4E. So that's why the check. ++ */ ++ if (is_qca988x) { ++ chip_id = ath10k_pci_soc_read32(ar, SOC_CHIP_ID_ADDRESS); ++ if (chip_id != 0xffffffff) { ++ if (!ath10k_pci_chip_is_supported(pdev->device, ++ chip_id)) ++ goto err_unsupported; ++ } ++ } ++ + ret = ath10k_pci_chip_reset(ar); + if (ret) { + ath10k_err(ar, "failed to reset chip: %d\n", ret); +@@ -3342,11 +3356,8 @@ static int ath10k_pci_probe(struct pci_dev *pdev, + goto err_free_irq; + } + +- if (!ath10k_pci_chip_is_supported(pdev->device, chip_id)) { +- ath10k_err(ar, "device %04x with chip_id %08x isn't supported\n", +- pdev->device, chip_id); +- goto err_free_irq; +- } ++ if (!ath10k_pci_chip_is_supported(pdev->device, chip_id)) ++ goto err_unsupported; + + ret = ath10k_core_register(ar, chip_id); + if (ret) { +@@ -3356,6 +3367,10 @@ static int ath10k_pci_probe(struct pci_dev *pdev, + + return 0; + ++err_unsupported: ++ ath10k_err(ar, "device %04x with chip_id %08x isn't supported\n", ++ pdev->device, bus_params.chip_id); ++ + err_free_irq: + ath10k_pci_free_irq(ar); + ath10k_pci_rx_retry_sync(ar); +-- +2.20.1 + diff --git a/queue-4.14/mm-gup-add-missing-refcount-overflow-checks-on-s390.patch b/queue-4.14/mm-gup-add-missing-refcount-overflow-checks-on-s390.patch new file mode 100644 index 00000000000..82c579da5e4 --- /dev/null +++ b/queue-4.14/mm-gup-add-missing-refcount-overflow-checks-on-s390.patch @@ -0,0 +1,64 @@ +From 3a3b9df81a3eb800a1e35cb19edadf8f908ae106 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 29 Nov 2019 10:03:50 +0100 +Subject: mm, gup: add missing refcount overflow checks on s390 + +From: Vlastimil Babka + +The mainline commit 8fde12ca79af ("mm: prevent get_user_pages() from +overflowing page refcount") was backported to 4.14.y stable as commit +04198de24771. The backport however missed that in 4.14, there are several +arch-specific gup.c versions with fast gup implementations, so these do not +prevent refcount overflow. + +This stable-only commit fixes the s390 version, and is based on the backport in +SUSE SLES/openSUSE 4.12-based kernels. + +The remaining architectures with own gup.c are sparc, mips, sh. It's unlikely +the known overflow scenario based on FUSE, which needs 140GB of RAM, is a +problem for those architectures, and I don't feel confident enough to patch +them. + +Signed-off-by: Vlastimil Babka +Signed-off-by: Sasha Levin +--- + arch/s390/mm/gup.c | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/arch/s390/mm/gup.c b/arch/s390/mm/gup.c +index 05c8abd864f1d..9bce54eac0b07 100644 +--- a/arch/s390/mm/gup.c ++++ b/arch/s390/mm/gup.c +@@ -39,7 +39,8 @@ static inline int gup_pte_range(pmd_t *pmdp, pmd_t pmd, unsigned long addr, + VM_BUG_ON(!pfn_valid(pte_pfn(pte))); + page = pte_page(pte); + head = compound_head(page); +- if (!page_cache_get_speculative(head)) ++ if (unlikely(WARN_ON_ONCE(page_ref_count(head) < 0) ++ || !page_cache_get_speculative(head))) + return 0; + if (unlikely(pte_val(pte) != pte_val(*ptep))) { + put_page(head); +@@ -77,7 +78,8 @@ static inline int gup_huge_pmd(pmd_t *pmdp, pmd_t pmd, unsigned long addr, + refs++; + } while (addr += PAGE_SIZE, addr != end); + +- if (!page_cache_add_speculative(head, refs)) { ++ if (unlikely(WARN_ON_ONCE(page_ref_count(head) < 0) ++ || !page_cache_add_speculative(head, refs))) { + *nr -= refs; + return 0; + } +@@ -151,7 +153,8 @@ static int gup_huge_pud(pud_t *pudp, pud_t pud, unsigned long addr, + refs++; + } while (addr += PAGE_SIZE, addr != end); + +- if (!page_cache_add_speculative(head, refs)) { ++ if (unlikely(WARN_ON_ONCE(page_ref_count(head) < 0) ++ || !page_cache_add_speculative(head, refs))) { + *nr -= refs; + return 0; + } +-- +2.20.1 + diff --git a/queue-4.14/series b/queue-4.14/series index 172e9ddede0..8ce96c96d16 100644 --- a/queue-4.14/series +++ b/queue-4.14/series @@ -153,3 +153,5 @@ scsi-libsas-check-smp-phy-control-function-result.patch f2fs-fix-to-data-block-override-node-segment-by-mist.patch powerpc-pseries-dlpar-fix-a-missing-check-in-dlpar_p.patch mtd-remove-a-debug-trace-in-mtdpart.c.patch +ath10k-restore-qca9880-ar1a-v1-detection.patch +mm-gup-add-missing-refcount-overflow-checks-on-s390.patch