]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 16:58:15 +0000 (18:58 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 20 Apr 2018 16:58:15 +0000 (18:58 +0200)
added patches:
clk-bcm2835-de-assert-assert-pll-reset-signal-when-appropriate.patch
clk-fix-false-positive-wmaybe-uninitialized-warning.patch
clk-mediatek-fix-pwm-clock-source-by-adding-a-fixed-factor-clock.patch
clk-mvebu-armada-38x-add-support-for-missing-clocks.patch
dt-bindings-clock-mediatek-add-binding-for-fixed-factor-clock-axisel_d4.patch
iommu-vt-d-fix-a-potential-memory-leak.patch
mmc-jz4740-fix-race-condition-in-irq-mask-update.patch
mmc-tmio-fix-error-handling-when-issuing-cmd23.patch
nfit-address-range-scrub-fix-scrub-in-progress-reporting.patch
nfit-skip-region-registration-for-incomplete-control-regions.patch
pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch
pwm-rcar-fix-a-condition-to-prevent-mismatch-value-setting-to-duty.patch
ring-buffer-check-if-memory-is-available-before-allocation.patch
thermal-imx-fix-race-condition-in-imx_thermal_probe.patch
um-compile-with-modern-headers.patch
um-use-posix-ucontext_t-instead-of-struct-ucontext.patch
vfio-pci-virtualize-maximum-read-request-size.patch
watchdog-f71808e_wdt-fix-wd_en-register-read.patch

19 files changed:
queue-4.14/clk-bcm2835-de-assert-assert-pll-reset-signal-when-appropriate.patch [new file with mode: 0644]
queue-4.14/clk-fix-false-positive-wmaybe-uninitialized-warning.patch [new file with mode: 0644]
queue-4.14/clk-mediatek-fix-pwm-clock-source-by-adding-a-fixed-factor-clock.patch [new file with mode: 0644]
queue-4.14/clk-mvebu-armada-38x-add-support-for-missing-clocks.patch [new file with mode: 0644]
queue-4.14/dt-bindings-clock-mediatek-add-binding-for-fixed-factor-clock-axisel_d4.patch [new file with mode: 0644]
queue-4.14/iommu-vt-d-fix-a-potential-memory-leak.patch [new file with mode: 0644]
queue-4.14/mmc-jz4740-fix-race-condition-in-irq-mask-update.patch [new file with mode: 0644]
queue-4.14/mmc-tmio-fix-error-handling-when-issuing-cmd23.patch [new file with mode: 0644]
queue-4.14/nfit-address-range-scrub-fix-scrub-in-progress-reporting.patch [new file with mode: 0644]
queue-4.14/nfit-skip-region-registration-for-incomplete-control-regions.patch [new file with mode: 0644]
queue-4.14/pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch [new file with mode: 0644]
queue-4.14/pwm-rcar-fix-a-condition-to-prevent-mismatch-value-setting-to-duty.patch [new file with mode: 0644]
queue-4.14/ring-buffer-check-if-memory-is-available-before-allocation.patch [new file with mode: 0644]
queue-4.14/series
queue-4.14/thermal-imx-fix-race-condition-in-imx_thermal_probe.patch [new file with mode: 0644]
queue-4.14/um-compile-with-modern-headers.patch [new file with mode: 0644]
queue-4.14/um-use-posix-ucontext_t-instead-of-struct-ucontext.patch [new file with mode: 0644]
queue-4.14/vfio-pci-virtualize-maximum-read-request-size.patch [new file with mode: 0644]
queue-4.14/watchdog-f71808e_wdt-fix-wd_en-register-read.patch [new file with mode: 0644]

diff --git a/queue-4.14/clk-bcm2835-de-assert-assert-pll-reset-signal-when-appropriate.patch b/queue-4.14/clk-bcm2835-de-assert-assert-pll-reset-signal-when-appropriate.patch
new file mode 100644 (file)
index 0000000..6f568b0
--- /dev/null
@@ -0,0 +1,49 @@
+From 753872373b599384ac7df809aa61ea12d1c4d5d1 Mon Sep 17 00:00:00 2001
+From: Boris Brezillon <boris.brezillon@bootlin.com>
+Date: Thu, 22 Mar 2018 10:11:30 +0100
+Subject: clk: bcm2835: De-assert/assert PLL reset signal when appropriate
+
+From: Boris Brezillon <boris.brezillon@bootlin.com>
+
+commit 753872373b599384ac7df809aa61ea12d1c4d5d1 upstream.
+
+In order to enable a PLL, not only the PLL has to be powered up and
+locked, but you also have to de-assert the reset signal. The last part
+was missing. Add it so PLLs that were not enabled by the FW/bootloader
+can be enabled from Linux.
+
+Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the audio domain clocks")
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
+Reviewed-by: Eric Anholt <eric@anholt.net>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/bcm/clk-bcm2835.c |    8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+--- a/drivers/clk/bcm/clk-bcm2835.c
++++ b/drivers/clk/bcm/clk-bcm2835.c
+@@ -632,9 +632,7 @@ static void bcm2835_pll_off(struct clk_h
+       const struct bcm2835_pll_data *data = pll->data;
+       spin_lock(&cprman->regs_lock);
+-      cprman_write(cprman, data->cm_ctrl_reg,
+-                   cprman_read(cprman, data->cm_ctrl_reg) |
+-                   CM_PLL_ANARST);
++      cprman_write(cprman, data->cm_ctrl_reg, CM_PLL_ANARST);
+       cprman_write(cprman, data->a2w_ctrl_reg,
+                    cprman_read(cprman, data->a2w_ctrl_reg) |
+                    A2W_PLL_CTRL_PWRDN);
+@@ -670,6 +668,10 @@ static int bcm2835_pll_on(struct clk_hw
+               cpu_relax();
+       }
++      cprman_write(cprman, data->a2w_ctrl_reg,
++                   cprman_read(cprman, data->a2w_ctrl_reg) |
++                   A2W_PLL_CTRL_PRST_DISABLE);
++
+       return 0;
+ }
diff --git a/queue-4.14/clk-fix-false-positive-wmaybe-uninitialized-warning.patch b/queue-4.14/clk-fix-false-positive-wmaybe-uninitialized-warning.patch
new file mode 100644 (file)
index 0000000..f6ab9c1
--- /dev/null
@@ -0,0 +1,71 @@
+From ce33f284935e08229046b30635e6aadcbab02b53 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Fri, 16 Feb 2018 16:27:47 +0100
+Subject: clk: fix false-positive Wmaybe-uninitialized warning
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit ce33f284935e08229046b30635e6aadcbab02b53 upstream.
+
+When we build this driver with on x86-32, gcc produces a false-positive warning:
+
+drivers/clk/renesas/clk-sh73a0.c: In function 'sh73a0_cpg_clocks_init':
+drivers/clk/renesas/clk-sh73a0.c:155:10: error: 'parent_name' may be used uninitialized in this function [-Werror=maybe-uninitialized]
+   return clk_register_fixed_factor(NULL, name, parent_name, 0,
+
+We can work around that warning by adding a fake initialization, I tried
+and failed to come up with any better workaround. This is currently one
+of few remaining warnings for a 4.14.y randconfig build, so it would be
+good to also have it backported at least to that version. Older versions
+have more randconfig warnings, so we might not care.
+
+I had not noticed this earlier, because one patch in my randconfig test
+tree removes the '-ffreestanding' option on x86-32, and that avoids
+the warning. The -ffreestanding flag was originally global but moved
+into arch/i386 by Andi Kleen in commit 6edfba1b33c7 ("[PATCH] x86_64:
+Don't define string functions to builtin") as a 'temporary workaround'.
+
+Like many temporary hacks, this turned out to be rather long-lived, from
+all I can tell we still need a simple fix to asm/string_32.h before it
+can be removed, but I'm not sure about how to best do that.
+
+Cc: stable@vger.kernel.org
+Cc: Andi Kleen <ak@linux.intel.com>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/renesas/clk-sh73a0.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/clk/renesas/clk-sh73a0.c
++++ b/drivers/clk/renesas/clk-sh73a0.c
+@@ -46,7 +46,7 @@ struct div4_clk {
+       unsigned int shift;
+ };
+-static struct div4_clk div4_clks[] = {
++static const struct div4_clk div4_clks[] = {
+       { "zg", "pll0", CPG_FRQCRA, 16 },
+       { "m3", "pll1", CPG_FRQCRA, 12 },
+       { "b",  "pll1", CPG_FRQCRA,  8 },
+@@ -79,7 +79,7 @@ sh73a0_cpg_register_clock(struct device_
+ {
+       const struct clk_div_table *table = NULL;
+       unsigned int shift, reg, width;
+-      const char *parent_name;
++      const char *parent_name = NULL;
+       unsigned int mult = 1;
+       unsigned int div = 1;
+@@ -135,7 +135,7 @@ sh73a0_cpg_register_clock(struct device_
+               shift = 24;
+               width = 5;
+       } else {
+-              struct div4_clk *c;
++              const struct div4_clk *c;
+               for (c = div4_clks; c->name; c++) {
+                       if (!strcmp(name, c->name)) {
diff --git a/queue-4.14/clk-mediatek-fix-pwm-clock-source-by-adding-a-fixed-factor-clock.patch b/queue-4.14/clk-mediatek-fix-pwm-clock-source-by-adding-a-fixed-factor-clock.patch
new file mode 100644 (file)
index 0000000..063b4a1
--- /dev/null
@@ -0,0 +1,58 @@
+From 89cd7aec21af26fd0c117bfc4bfc781724f201de Mon Sep 17 00:00:00 2001
+From: Sean Wang <sean.wang@mediatek.com>
+Date: Thu, 1 Mar 2018 11:27:51 +0800
+Subject: clk: mediatek: fix PWM clock source by adding a fixed-factor clock
+
+From: Sean Wang <sean.wang@mediatek.com>
+
+commit 89cd7aec21af26fd0c117bfc4bfc781724f201de upstream.
+
+The clock for which all PWM devices on MT7623 or MT2701 actually depending
+on has to be divided by four from its parent clock axi_sel in the clock
+path prior to PWM devices.
+
+Consequently, adding a fixed-factor clock axisel_d4 as one-fourth of
+clock axi_sel allows that PWM devices can have the correct resolution
+calculation.
+
+Cc: stable@vger.kernel.org
+Fixes: e9862118272a ("clk: mediatek: Add MT2701 clock support")
+Signed-off-by: Sean Wang <sean.wang@mediatek.com>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/mediatek/clk-mt2701.c |   15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/drivers/clk/mediatek/clk-mt2701.c
++++ b/drivers/clk/mediatek/clk-mt2701.c
+@@ -148,6 +148,7 @@ static const struct mtk_fixed_factor top
+       FACTOR(CLK_TOP_CLK26M_D8, "clk26m_d8", "clk26m", 1, 8),
+       FACTOR(CLK_TOP_32K_INTERNAL, "32k_internal", "clk26m", 1, 793),
+       FACTOR(CLK_TOP_32K_EXTERNAL, "32k_external", "rtc32k", 1, 1),
++      FACTOR(CLK_TOP_AXISEL_D4, "axisel_d4", "axi_sel", 1, 4),
+ };
+ static const char * const axi_parents[] = {
+@@ -857,13 +858,13 @@ static const struct mtk_gate peri_clks[]
+       GATE_PERI0(CLK_PERI_USB1, "usb1_ck", "usb20_sel", 11),
+       GATE_PERI0(CLK_PERI_USB0, "usb0_ck", "usb20_sel", 10),
+       GATE_PERI0(CLK_PERI_PWM, "pwm_ck", "axi_sel", 9),
+-      GATE_PERI0(CLK_PERI_PWM7, "pwm7_ck", "axi_sel", 8),
+-      GATE_PERI0(CLK_PERI_PWM6, "pwm6_ck", "axi_sel", 7),
+-      GATE_PERI0(CLK_PERI_PWM5, "pwm5_ck", "axi_sel", 6),
+-      GATE_PERI0(CLK_PERI_PWM4, "pwm4_ck", "axi_sel", 5),
+-      GATE_PERI0(CLK_PERI_PWM3, "pwm3_ck", "axi_sel", 4),
+-      GATE_PERI0(CLK_PERI_PWM2, "pwm2_ck", "axi_sel", 3),
+-      GATE_PERI0(CLK_PERI_PWM1, "pwm1_ck", "axi_sel", 2),
++      GATE_PERI0(CLK_PERI_PWM7, "pwm7_ck", "axisel_d4", 8),
++      GATE_PERI0(CLK_PERI_PWM6, "pwm6_ck", "axisel_d4", 7),
++      GATE_PERI0(CLK_PERI_PWM5, "pwm5_ck", "axisel_d4", 6),
++      GATE_PERI0(CLK_PERI_PWM4, "pwm4_ck", "axisel_d4", 5),
++      GATE_PERI0(CLK_PERI_PWM3, "pwm3_ck", "axisel_d4", 4),
++      GATE_PERI0(CLK_PERI_PWM2, "pwm2_ck", "axisel_d4", 3),
++      GATE_PERI0(CLK_PERI_PWM1, "pwm1_ck", "axisel_d4", 2),
+       GATE_PERI0(CLK_PERI_THERM, "therm_ck", "axi_sel", 1),
+       GATE_PERI0(CLK_PERI_NFI, "nfi_ck", "nfi2x_sel", 0),
diff --git a/queue-4.14/clk-mvebu-armada-38x-add-support-for-missing-clocks.patch b/queue-4.14/clk-mvebu-armada-38x-add-support-for-missing-clocks.patch
new file mode 100644 (file)
index 0000000..35bb69f
--- /dev/null
@@ -0,0 +1,77 @@
+From 6a4a4595804548e173f0763a0e7274a3521c59a9 Mon Sep 17 00:00:00 2001
+From: Richard Genoud <richard.genoud@gmail.com>
+Date: Tue, 13 Mar 2018 16:27:02 +0100
+Subject: clk: mvebu: armada-38x: add support for missing clocks
+
+From: Richard Genoud <richard.genoud@gmail.com>
+
+commit 6a4a4595804548e173f0763a0e7274a3521c59a9 upstream.
+
+Clearfog boards can come with a CPU clocked at 1600MHz (commercial)
+or 1333MHz (industrial).
+
+They have also some dip-switches to select a different clock (666, 800,
+1066, 1200).
+
+The funny thing is that the recovery button is on the MPP34 fq selector.
+So, when booting an industrial board with this button down, the frequency
+666MHz is selected (and the kernel didn't boot).
+
+This patch add all the missing clocks.
+
+The only mode I didn't test is 2GHz (uboot found 4294MHz instead :/ ).
+
+Fixes: 0e85aeced4d6 ("clk: mvebu: add clock support for Armada 380/385")
+Cc: <stable@vger.kernel.org> # 3.16.x: 9593f4f56cf5: clk: mvebu: armada-38x: add support for 1866MHz variants
+Cc: <stable@vger.kernel.org> # 3.16.x
+
+Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
+Acked-by: Gregory CLEMENT <gregory.clement@bootlin.com>
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/clk/mvebu/armada-38x.c |   14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+--- a/drivers/clk/mvebu/armada-38x.c
++++ b/drivers/clk/mvebu/armada-38x.c
+@@ -46,11 +46,11 @@ static u32 __init armada_38x_get_tclk_fr
+ }
+ static const u32 armada_38x_cpu_frequencies[] __initconst = {
+-      0, 0, 0, 0,
+-      1066 * 1000 * 1000, 0, 0, 0,
++      666 * 1000 * 1000,  0, 800 * 1000 * 1000, 0,
++      1066 * 1000 * 1000, 0, 1200 * 1000 * 1000, 0,
+       1332 * 1000 * 1000, 0, 0, 0,
+       1600 * 1000 * 1000, 0, 0, 0,
+-      1866 * 1000 * 1000,
++      1866 * 1000 * 1000, 0, 0, 2000 * 1000 * 1000,
+ };
+ static u32 __init armada_38x_get_cpu_freq(void __iomem *sar)
+@@ -76,11 +76,11 @@ static const struct coreclk_ratio armada
+ };
+ static const int armada_38x_cpu_l2_ratios[32][2] __initconst = {
+-      {0, 1}, {0, 1}, {0, 1}, {0, 1},
+-      {1, 2}, {0, 1}, {0, 1}, {0, 1},
+-      {1, 2}, {0, 1}, {0, 1}, {0, 1},
++      {1, 2}, {0, 1}, {1, 2}, {0, 1},
++      {1, 2}, {0, 1}, {1, 2}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {0, 1},
++      {1, 2}, {0, 1}, {0, 1}, {1, 2},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+@@ -91,7 +91,7 @@ static const int armada_38x_cpu_ddr_rati
+       {1, 2}, {0, 1}, {0, 1}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {0, 1},
+       {1, 2}, {0, 1}, {0, 1}, {0, 1},
+-      {1, 2}, {0, 1}, {0, 1}, {0, 1},
++      {1, 2}, {0, 1}, {0, 1}, {7, 15},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
+       {0, 1}, {0, 1}, {0, 1}, {0, 1},
diff --git a/queue-4.14/dt-bindings-clock-mediatek-add-binding-for-fixed-factor-clock-axisel_d4.patch b/queue-4.14/dt-bindings-clock-mediatek-add-binding-for-fixed-factor-clock-axisel_d4.patch
new file mode 100644 (file)
index 0000000..e43a42e
--- /dev/null
@@ -0,0 +1,37 @@
+From 55a5fcafe3a94e8a0777bb993d09107d362258d2 Mon Sep 17 00:00:00 2001
+From: Sean Wang <sean.wang@mediatek.com>
+Date: Thu, 1 Mar 2018 11:27:50 +0800
+Subject: dt-bindings: clock: mediatek: add binding for fixed-factor clock axisel_d4
+
+From: Sean Wang <sean.wang@mediatek.com>
+
+commit 55a5fcafe3a94e8a0777bb993d09107d362258d2 upstream.
+
+Just add binding for a fixed-factor clock axisel_d4, which would be
+referenced by PWM devices on MT7623 or MT2701 SoC.
+
+Cc: stable@vger.kernel.org
+Fixes: 1de9b21633d6 ("clk: mediatek: Add dt-bindings for MT2701 clocks")
+Signed-off-by: Sean Wang <sean.wang@mediatek.com>
+Reviewed-by: Rob Herring <robh@kernel.org>
+Cc: Mark Rutland <mark.rutland@arm.com>
+Cc: devicetree@vger.kernel.org
+Signed-off-by: Stephen Boyd <sboyd@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/dt-bindings/clock/mt2701-clk.h |    3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/include/dt-bindings/clock/mt2701-clk.h
++++ b/include/dt-bindings/clock/mt2701-clk.h
+@@ -176,7 +176,8 @@
+ #define CLK_TOP_AUD_EXT1                      156
+ #define CLK_TOP_AUD_EXT2                      157
+ #define CLK_TOP_NFI1X_PAD                     158
+-#define CLK_TOP_NR                            159
++#define CLK_TOP_AXISEL_D4                     159
++#define CLK_TOP_NR                            160
+ /* APMIXEDSYS */
diff --git a/queue-4.14/iommu-vt-d-fix-a-potential-memory-leak.patch b/queue-4.14/iommu-vt-d-fix-a-potential-memory-leak.patch
new file mode 100644 (file)
index 0000000..175a57e
--- /dev/null
@@ -0,0 +1,35 @@
+From bbe4b3af9d9e3172fb9aa1f8dcdfaedcb381fc64 Mon Sep 17 00:00:00 2001
+From: Lu Baolu <baolu.lu@linux.intel.com>
+Date: Sat, 24 Feb 2018 13:42:27 +0800
+Subject: iommu/vt-d: Fix a potential memory leak
+
+From: Lu Baolu <baolu.lu@linux.intel.com>
+
+commit bbe4b3af9d9e3172fb9aa1f8dcdfaedcb381fc64 upstream.
+
+A memory block was allocated in intel_svm_bind_mm() but never freed
+in a failure path. This patch fixes this by free it to avoid memory
+leakage.
+
+Cc: Ashok Raj <ashok.raj@intel.com>
+Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
+Cc: <stable@vger.kernel.org> # v4.4+
+Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
+Fixes: 2f26e0a9c9860 ('iommu/vt-d: Add basic SVM PASID support')
+Signed-off-by: Joerg Roedel <jroedel@suse.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/iommu/intel-svm.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/iommu/intel-svm.c
++++ b/drivers/iommu/intel-svm.c
+@@ -382,6 +382,7 @@ int intel_svm_bind_mm(struct device *dev
+                               pasid_max - 1, GFP_KERNEL);
+               if (ret < 0) {
+                       kfree(svm);
++                      kfree(sdev);
+                       goto out;
+               }
+               svm->pasid = ret;
diff --git a/queue-4.14/mmc-jz4740-fix-race-condition-in-irq-mask-update.patch b/queue-4.14/mmc-jz4740-fix-race-condition-in-irq-mask-update.patch
new file mode 100644 (file)
index 0000000..f057763
--- /dev/null
@@ -0,0 +1,54 @@
+From a04f0017c22453613d5f423326b190c61e3b4f98 Mon Sep 17 00:00:00 2001
+From: Alex Smith <alex.smith@imgtec.com>
+Date: Wed, 28 Mar 2018 18:00:43 -0300
+Subject: mmc: jz4740: Fix race condition in IRQ mask update
+
+From: Alex Smith <alex.smith@imgtec.com>
+
+commit a04f0017c22453613d5f423326b190c61e3b4f98 upstream.
+
+A spinlock is held while updating the internal copy of the IRQ mask,
+but not while writing it to the actual IMASK register. After the lock
+is released, an IRQ can occur before the IMASK register is written.
+If handling this IRQ causes the mask to be changed, when the handler
+returns back to the middle of the first mask update, a stale value
+will be written to the mask register.
+
+If this causes an IRQ to become unmasked that cannot have its status
+cleared by writing a 1 to it in the IREG register, e.g. the SDIO IRQ,
+then we can end up stuck with the same IRQ repeatedly being fired but
+not handled. Normally the MMC IRQ handler attempts to clear any
+unexpected IRQs by writing IREG, but for those that cannot be cleared
+in this way then the IRQ will just repeatedly fire.
+
+This was resulting in lockups after a while of using Wi-Fi on the
+CI20 (GitHub issue #19).
+
+Resolve by holding the spinlock until after the IMASK register has
+been updated.
+
+Cc: stable@vger.kernel.org
+Link: https://github.com/MIPS/CI20_linux/issues/19
+Fixes: 61bfbdb85687 ("MMC: Add support for the controller on JZ4740 SoCs.")
+Tested-by: Mathieu Malaterre <malat@debian.org>
+Signed-off-by: Alex Smith <alex.smith@imgtec.com>
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mmc/host/jz4740_mmc.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/mmc/host/jz4740_mmc.c
++++ b/drivers/mmc/host/jz4740_mmc.c
+@@ -362,9 +362,9 @@ static void jz4740_mmc_set_irq_enabled(s
+               host->irq_mask &= ~irq;
+       else
+               host->irq_mask |= irq;
+-      spin_unlock_irqrestore(&host->lock, flags);
+       writew(host->irq_mask, host->base + JZ_REG_MMC_IMASK);
++      spin_unlock_irqrestore(&host->lock, flags);
+ }
+ static void jz4740_mmc_clock_enable(struct jz4740_mmc_host *host,
diff --git a/queue-4.14/mmc-tmio-fix-error-handling-when-issuing-cmd23.patch b/queue-4.14/mmc-tmio-fix-error-handling-when-issuing-cmd23.patch
new file mode 100644 (file)
index 0000000..88598b2
--- /dev/null
@@ -0,0 +1,34 @@
+From fc167daff581c01ebce8695e9618231cae3561a1 Mon Sep 17 00:00:00 2001
+From: Masaharu Hayakawa <masaharu.hayakawa.ry@renesas.com>
+Date: Tue, 3 Apr 2018 23:57:03 +0200
+Subject: mmc: tmio: Fix error handling when issuing CMD23
+
+From: Masaharu Hayakawa <masaharu.hayakawa.ry@renesas.com>
+
+commit fc167daff581c01ebce8695e9618231cae3561a1 upstream.
+
+If an error was detected when CMD23 was issued, command sequence should
+be terminated with errors and CMD23 should be issued after retuning.
+
+Fixes: 8b22c3c18be5 ("mmc: tmio: add CMD23 support")
+Signed-off-by: Masaharu Hayakawa <masaharu.hayakawa.ry@renesas.com>
+Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
+Cc: <stable@vger.kernel.org> # 4.13+
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/mmc/host/tmio_mmc_core.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/mmc/host/tmio_mmc_core.c
++++ b/drivers/mmc/host/tmio_mmc_core.c
+@@ -911,7 +911,7 @@ static void tmio_mmc_finish_request(stru
+               host->check_scc_error(host);
+       /* If SET_BLOCK_COUNT, continue with main command */
+-      if (host->mrq) {
++      if (host->mrq && !mrq->cmd->error) {
+               tmio_process_mrq(host, mrq);
+               return;
+       }
diff --git a/queue-4.14/nfit-address-range-scrub-fix-scrub-in-progress-reporting.patch b/queue-4.14/nfit-address-range-scrub-fix-scrub-in-progress-reporting.patch
new file mode 100644 (file)
index 0000000..7cf673c
--- /dev/null
@@ -0,0 +1,41 @@
+From 78727137fdf49edf9f731bde79d7189067b4047a Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Mon, 2 Apr 2018 16:40:04 -0700
+Subject: nfit, address-range-scrub: fix scrub in-progress reporting
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 78727137fdf49edf9f731bde79d7189067b4047a upstream.
+
+There is a small window whereby ARS scan requests can schedule work that
+userspace will miss when polling scrub_show. Hold the init_mutex lock
+over calls to report the status to close this potential escape. Also,
+make sure that requests to cancel the ARS workqueue are treated as an
+idle event.
+
+Cc: <stable@vger.kernel.org>
+Cc: Vishal Verma <vishal.l.verma@intel.com>
+Fixes: 37b137ff8c83 ("nfit, libnvdimm: allow an ARS scrub...")
+Reviewed-by: Dave Jiang <dave.jiang@intel.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/nfit/core.c |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/drivers/acpi/nfit/core.c
++++ b/drivers/acpi/nfit/core.c
+@@ -1022,8 +1022,11 @@ static ssize_t scrub_show(struct device
+       if (nd_desc) {
+               struct acpi_nfit_desc *acpi_desc = to_acpi_desc(nd_desc);
++              mutex_lock(&acpi_desc->init_mutex);
+               rc = sprintf(buf, "%d%s", acpi_desc->scrub_count,
+-                              (work_busy(&acpi_desc->work)) ? "+\n" : "\n");
++                              work_busy(&acpi_desc->work)
++                              && !acpi_desc->cancel ? "+\n" : "\n");
++              mutex_unlock(&acpi_desc->init_mutex);
+       }
+       device_unlock(dev);
+       return rc;
diff --git a/queue-4.14/nfit-skip-region-registration-for-incomplete-control-regions.patch b/queue-4.14/nfit-skip-region-registration-for-incomplete-control-regions.patch
new file mode 100644 (file)
index 0000000..bb13965
--- /dev/null
@@ -0,0 +1,58 @@
+From 0731de476a37c33485af82d64041c9d193208df8 Mon Sep 17 00:00:00 2001
+From: Dan Williams <dan.j.williams@intel.com>
+Date: Wed, 21 Mar 2018 21:22:34 -0700
+Subject: nfit: skip region registration for incomplete control regions
+
+From: Dan Williams <dan.j.williams@intel.com>
+
+commit 0731de476a37c33485af82d64041c9d193208df8 upstream.
+
+Per the ACPI specification the only functional purpose for a DIMM
+Control Region to be mapped into the system physical address space, from
+an OSPM perspective, is to support block-apertures. However, there are
+some BIOSen that publish DIMM Control Region SPA entries for pre-boot
+environment consumption.  Undo the kernel policy of generating disabled
+'ndblk' regions when this configuration is detected.
+
+Cc: <stable@vger.kernel.org>
+Fixes: 1f7df6f88b92 ("libnvdimm, nfit: regions (block-data-window...)")
+Reviewed-by: Toshi Kani <toshi.kani@hpe.com>
+Signed-off-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/acpi/nfit/core.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/acpi/nfit/core.c
++++ b/drivers/acpi/nfit/core.c
+@@ -2316,7 +2316,7 @@ static int acpi_nfit_init_mapping(struct
+       struct acpi_nfit_system_address *spa = nfit_spa->spa;
+       struct nd_blk_region_desc *ndbr_desc;
+       struct nfit_mem *nfit_mem;
+-      int blk_valid = 0, rc;
++      int rc;
+       if (!nvdimm) {
+               dev_err(acpi_desc->dev, "spa%d dimm: %#x not found\n",
+@@ -2336,15 +2336,14 @@ static int acpi_nfit_init_mapping(struct
+               if (!nfit_mem || !nfit_mem->bdw) {
+                       dev_dbg(acpi_desc->dev, "spa%d %s missing bdw\n",
+                                       spa->range_index, nvdimm_name(nvdimm));
+-              } else {
+-                      mapping->size = nfit_mem->bdw->capacity;
+-                      mapping->start = nfit_mem->bdw->start_address;
+-                      ndr_desc->num_lanes = nfit_mem->bdw->windows;
+-                      blk_valid = 1;
++                      break;
+               }
++              mapping->size = nfit_mem->bdw->capacity;
++              mapping->start = nfit_mem->bdw->start_address;
++              ndr_desc->num_lanes = nfit_mem->bdw->windows;
+               ndr_desc->mapping = mapping;
+-              ndr_desc->num_mappings = blk_valid;
++              ndr_desc->num_mappings = 1;
+               ndbr_desc = to_blk_region_desc(ndr_desc);
+               ndbr_desc->enable = acpi_nfit_blk_region_enable;
+               ndbr_desc->do_io = acpi_desc->blk_do_io;
diff --git a/queue-4.14/pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch b/queue-4.14/pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch
new file mode 100644 (file)
index 0000000..6745347
--- /dev/null
@@ -0,0 +1,55 @@
+From 1b30dfd376e28e7f37eda5e2033f6823cdda222b Mon Sep 17 00:00:00 2001
+From: Sinan Kaya <okaya@codeaurora.org>
+Date: Tue, 10 Apr 2018 14:44:21 -0500
+Subject: PCI: Mark Broadcom HT1100 and HT2000 Root Port Extended Tags as broken
+
+From: Sinan Kaya <okaya@codeaurora.org>
+
+commit 1b30dfd376e28e7f37eda5e2033f6823cdda222b upstream.
+
+Per PCIe r3.1, sec 2.2.6.2 and 7.8.4, a Requester may not use 8-bit Tags
+unless its Extended Tag Field Enable is set, but all Receivers/Completers
+must handle 8-bit Tags correctly regardless of their Extended Tag Field
+Enable.
+
+Some devices do not handle 8-bit Tags as Completers, so add a quirk for
+them.  If we find such a device, we disable Extended Tags for the entire
+hierarchy to make peer-to-peer DMA possible.
+
+The Broadcom HT1100/HT2000/HT2100 seems to have issues with handling 8-bit
+tags.  Mark it as broken.
+
+This fixes Xorg hangs and unresponsive keyboards with errors like this:
+
+  radeon 0000:06:00.0: GPU lockup (current fence id 0x000000000000000e last fence id 0x0000000000000
+  [drm:r600_ring_test [radeon]] *ERROR* radeon: ring 0 test failed (scratch(0x8504)=0xCAFEDEAD)
+  [drm:r600_resume [radeon]] *ERROR* r600 startup failed on resume
+
+Fixes: 60db3a4d8cc9 ("PCI: Enable PCIe Extended Tags if supported")
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=196197
+Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
+Signed-off-by: Bjorn Helgaas <helgaas@kernel.org>
+CC: stable@vger.kernel.org     # v4.11: 62ce94a7a5a5 PCI: Mark Broadcom HT2100 Root Port Extended Tags as broken
+CC: stable@vger.kernel.org     # v4.11
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pci/quirks.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/pci/quirks.c
++++ b/drivers/pci/quirks.c
+@@ -4806,9 +4806,13 @@ static void quirk_no_ext_tags(struct pci
+       pci_walk_bus(bridge->bus, pci_configure_extended_tags, NULL);
+ }
++DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0132, quirk_no_ext_tags);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0140, quirk_no_ext_tags);
++DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0141, quirk_no_ext_tags);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0142, quirk_no_ext_tags);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0144, quirk_no_ext_tags);
++DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0420, quirk_no_ext_tags);
++DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SERVERWORKS, 0x0422, quirk_no_ext_tags);
+ #ifdef CONFIG_PCI_ATS
+ /*
diff --git a/queue-4.14/pwm-rcar-fix-a-condition-to-prevent-mismatch-value-setting-to-duty.patch b/queue-4.14/pwm-rcar-fix-a-condition-to-prevent-mismatch-value-setting-to-duty.patch
new file mode 100644 (file)
index 0000000..317d01c
--- /dev/null
@@ -0,0 +1,55 @@
+From 6225f9c64b40bc8a22503e9cda70f55d7a9dd3c6 Mon Sep 17 00:00:00 2001
+From: Ryo Kodama <ryo.kodama.vz@renesas.com>
+Date: Fri, 9 Mar 2018 20:24:21 +0900
+Subject: pwm: rcar: Fix a condition to prevent mismatch value setting to duty
+
+From: Ryo Kodama <ryo.kodama.vz@renesas.com>
+
+commit 6225f9c64b40bc8a22503e9cda70f55d7a9dd3c6 upstream.
+
+This patch fixes an issue that is possible to set mismatch value to duty
+for R-Car PWM if we input the following commands:
+
+ # cd /sys/class/pwm/<pwmchip>/
+ # echo 0 > export
+ # cd pwm0
+ # echo 30 > period
+ # echo 30 > duty_cycle
+ # echo 0 > duty_cycle
+ # cat duty_cycle
+ 0
+ # echo 1 > enable
+ --> Then, the actual duty_cycle is 30, not 0.
+
+So, this patch adds a condition into rcar_pwm_config() to fix this
+issue.
+
+Signed-off-by: Ryo Kodama <ryo.kodama.vz@renesas.com>
+[shimoda: revise the commit log and add Fixes and Cc tags]
+Fixes: ed6c1476bf7f ("pwm: Add support for R-Car PWM Timer")
+Cc: Cc: <stable@vger.kernel.org> # v4.4+
+Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
+Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/pwm/pwm-rcar.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/pwm/pwm-rcar.c
++++ b/drivers/pwm/pwm-rcar.c
+@@ -156,8 +156,12 @@ static int rcar_pwm_config(struct pwm_ch
+       if (div < 0)
+               return div;
+-      /* Let the core driver set pwm->period if disabled and duty_ns == 0 */
+-      if (!pwm_is_enabled(pwm) && !duty_ns)
++      /*
++       * Let the core driver set pwm->period if disabled and duty_ns == 0.
++       * But, this driver should prevent to set the new duty_ns if current
++       * duty_cycle is not set
++       */
++      if (!pwm_is_enabled(pwm) && !duty_ns && !pwm->state.duty_cycle)
+               return 0;
+       rcar_pwm_update(rp, RCAR_PWMCR_SYNC, RCAR_PWMCR_SYNC, RCAR_PWMCR);
diff --git a/queue-4.14/ring-buffer-check-if-memory-is-available-before-allocation.patch b/queue-4.14/ring-buffer-check-if-memory-is-available-before-allocation.patch
new file mode 100644 (file)
index 0000000..2311bf0
--- /dev/null
@@ -0,0 +1,68 @@
+From 2a872fa4e9c8adc79c830e4009e1cc0c013a9d8a Mon Sep 17 00:00:00 2001
+From: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
+Date: Mon, 2 Apr 2018 10:33:56 -0400
+Subject: ring-buffer: Check if memory is available before allocation
+
+From: Steven Rostedt (VMware) <rostedt@goodmis.org>
+
+commit 2a872fa4e9c8adc79c830e4009e1cc0c013a9d8a upstream.
+
+The ring buffer is made up of a link list of pages. When making the ring
+buffer bigger, it will allocate all the pages it needs before adding to the
+ring buffer, and if it fails, it frees them and returns an error. This makes
+increasing the ring buffer size an all or nothing action. When this was
+first created, the pages were allocated with "NORETRY". This was to not
+cause any Out-Of-Memory (OOM) actions from allocating the ring buffer. But
+NORETRY was too strict, as the ring buffer would fail to expand even when
+there's memory available, but was taken up in the page cache.
+
+Commit 848618857d253 ("tracing/ring_buffer: Try harder to allocate") changed
+the allocating from NORETRY to RETRY_MAYFAIL. The RETRY_MAYFAIL would
+allocate from the page cache, but if there was no memory available, it would
+simple fail the allocation and not trigger an OOM.
+
+This worked fine, but had one problem. As the ring buffer would allocate one
+page at a time, it could take up all memory in the system before it failed
+to allocate and free that memory. If the allocation is happening and the
+ring buffer allocates all memory and then tries to take more than available,
+its allocation will not trigger an OOM, but if there's any allocation that
+happens someplace else, that could trigger an OOM, even though once the ring
+buffer's allocation fails, it would free up all the previous memory it tried
+to allocate, and allow other memory allocations to succeed.
+
+Commit d02bd27bd33dd ("mm/page_alloc.c: calculate 'available' memory in a
+separate function") separated out si_mem_availble() as a separate function
+that could be used to see how much memory is available in the system. Using
+this function to make sure that the ring buffer could be allocated before it
+tries to allocate pages we can avoid allocating all memory in the system and
+making it vulnerable to OOMs if other allocations are taking place.
+
+Link: http://lkml.kernel.org/r/1522320104-6573-1-git-send-email-zhaoyang.huang@spreadtrum.com
+
+CC: stable@vger.kernel.org
+Cc: linux-mm@kvack.org
+Fixes: 848618857d253 ("tracing/ring_buffer: Try harder to allocate")
+Requires: d02bd27bd33dd ("mm/page_alloc.c: calculate 'available' memory in a separate function")
+Reported-by: Zhaoyang Huang <huangzhaoyang@gmail.com>
+Tested-by: Joel Fernandes <joelaf@google.com>
+Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ kernel/trace/ring_buffer.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/kernel/trace/ring_buffer.c
++++ b/kernel/trace/ring_buffer.c
+@@ -1136,6 +1136,11 @@ static int __rb_allocate_pages(long nr_p
+       struct buffer_page *bpage, *tmp;
+       long i;
++      /* Check if the available memory is there first */
++      i = si_mem_available();
++      if (i < nr_pages)
++              return -ENOMEM;
++
+       for (i = 0; i < nr_pages; i++) {
+               struct page *page;
+               /*
index 55494f5d52d4b1bae5927423c41efebbb3999acc..fda2592520240aa4c605016bc55b9a05d09158de 100644 (file)
@@ -94,3 +94,21 @@ cxl-fix-possible-deadlock-when-processing-page-faults-from-cxllib.patch
 tpm-self-test-failure-should-not-cause-suspend-to-fail.patch
 libnvdimm-dimm-fix-dpa-reservation-vs-uninitialized-label-area.patch
 libnvdimm-namespace-use-a-safe-lookup-for-dimm-device-name.patch
+nfit-address-range-scrub-fix-scrub-in-progress-reporting.patch
+nfit-skip-region-registration-for-incomplete-control-regions.patch
+ring-buffer-check-if-memory-is-available-before-allocation.patch
+um-compile-with-modern-headers.patch
+um-use-posix-ucontext_t-instead-of-struct-ucontext.patch
+iommu-vt-d-fix-a-potential-memory-leak.patch
+mmc-jz4740-fix-race-condition-in-irq-mask-update.patch
+mmc-tmio-fix-error-handling-when-issuing-cmd23.patch
+pci-mark-broadcom-ht1100-and-ht2000-root-port-extended-tags-as-broken.patch
+clk-mvebu-armada-38x-add-support-for-missing-clocks.patch
+clk-fix-false-positive-wmaybe-uninitialized-warning.patch
+clk-mediatek-fix-pwm-clock-source-by-adding-a-fixed-factor-clock.patch
+clk-bcm2835-de-assert-assert-pll-reset-signal-when-appropriate.patch
+pwm-rcar-fix-a-condition-to-prevent-mismatch-value-setting-to-duty.patch
+thermal-imx-fix-race-condition-in-imx_thermal_probe.patch
+dt-bindings-clock-mediatek-add-binding-for-fixed-factor-clock-axisel_d4.patch
+watchdog-f71808e_wdt-fix-wd_en-register-read.patch
+vfio-pci-virtualize-maximum-read-request-size.patch
diff --git a/queue-4.14/thermal-imx-fix-race-condition-in-imx_thermal_probe.patch b/queue-4.14/thermal-imx-fix-race-condition-in-imx_thermal_probe.patch
new file mode 100644 (file)
index 0000000..aa2109c
--- /dev/null
@@ -0,0 +1,55 @@
+From cf1ba1d73a33944d8c1a75370a35434bf146b8a7 Mon Sep 17 00:00:00 2001
+From: Mikhail Lappo <mikhail.lappo@esrlabs.com>
+Date: Fri, 2 Feb 2018 16:17:46 -0200
+Subject: thermal: imx: Fix race condition in imx_thermal_probe()
+
+From: Mikhail Lappo <mikhail.lappo@esrlabs.com>
+
+commit cf1ba1d73a33944d8c1a75370a35434bf146b8a7 upstream.
+
+When device boots with T > T_trip_1 and requests interrupt,
+the race condition takes place. The interrupt comes before
+THERMAL_DEVICE_ENABLED is set. This leads to an attempt to
+reading sensor value from irq and disabling the sensor, based on
+the data->mode field, which expected to be THERMAL_DEVICE_ENABLED,
+but still stays as THERMAL_DEVICE_DISABLED. Afher this issue
+sensor is never re-enabled, as the driver state is wrong.
+
+Fix this problem by setting the 'data' members prior to
+requesting the interrupts.
+
+Fixes: 37713a1e8e4c ("thermal: imx: implement thermal alarm interrupt handling")
+Cc: <stable@vger.kernel.org>
+Signed-off-by: Mikhail Lappo <mikhail.lappo@esrlabs.com>
+Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
+Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
+Acked-by: Dong Aisheng <aisheng.dong@nxp.com>
+Signed-off-by: Zhang Rui <rui.zhang@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/thermal/imx_thermal.c |    6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/thermal/imx_thermal.c
++++ b/drivers/thermal/imx_thermal.c
+@@ -601,6 +601,9 @@ static int imx_thermal_probe(struct plat
+       regmap_write(map, TEMPSENSE0 + REG_CLR, TEMPSENSE0_POWER_DOWN);
+       regmap_write(map, TEMPSENSE0 + REG_SET, TEMPSENSE0_MEASURE_TEMP);
++      data->irq_enabled = true;
++      data->mode = THERMAL_DEVICE_ENABLED;
++
+       ret = devm_request_threaded_irq(&pdev->dev, data->irq,
+                       imx_thermal_alarm_irq, imx_thermal_alarm_irq_thread,
+                       0, "imx_thermal", data);
+@@ -613,9 +616,6 @@ static int imx_thermal_probe(struct plat
+               return ret;
+       }
+-      data->irq_enabled = true;
+-      data->mode = THERMAL_DEVICE_ENABLED;
+-
+       return 0;
+ }
diff --git a/queue-4.14/um-compile-with-modern-headers.patch b/queue-4.14/um-compile-with-modern-headers.patch
new file mode 100644 (file)
index 0000000..29fefec
--- /dev/null
@@ -0,0 +1,54 @@
+From 530ba6c7cb3c22435a4d26de47037bb6f86a5329 Mon Sep 17 00:00:00 2001
+From: "Jason A. Donenfeld" <Jason@zx2c4.com>
+Date: Thu, 14 Dec 2017 03:23:37 +0100
+Subject: um: Compile with modern headers
+
+From: Jason A. Donenfeld <Jason@zx2c4.com>
+
+commit 530ba6c7cb3c22435a4d26de47037bb6f86a5329 upstream.
+
+Recent libcs have gotten a bit more strict, so we actually need to
+include the right headers and use the right types. This enables UML to
+compile again.
+
+Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/um/os-Linux/file.c   |    1 +
+ arch/um/os-Linux/signal.c |    1 +
+ arch/x86/um/stub_segv.c   |    1 +
+ 3 files changed, 3 insertions(+)
+
+--- a/arch/um/os-Linux/file.c
++++ b/arch/um/os-Linux/file.c
+@@ -12,6 +12,7 @@
+ #include <sys/mount.h>
+ #include <sys/socket.h>
+ #include <sys/stat.h>
++#include <sys/sysmacros.h>
+ #include <sys/un.h>
+ #include <sys/types.h>
+ #include <os.h>
+--- a/arch/um/os-Linux/signal.c
++++ b/arch/um/os-Linux/signal.c
+@@ -16,6 +16,7 @@
+ #include <os.h>
+ #include <sysdep/mcontext.h>
+ #include <um_malloc.h>
++#include <sys/ucontext.h>
+ void (*sig_info[NSIG])(int, struct siginfo *, struct uml_pt_regs *) = {
+       [SIGTRAP]       = relay_signal,
+--- a/arch/x86/um/stub_segv.c
++++ b/arch/x86/um/stub_segv.c
+@@ -6,6 +6,7 @@
+ #include <sysdep/stub.h>
+ #include <sysdep/faultinfo.h>
+ #include <sysdep/mcontext.h>
++#include <sys/ucontext.h>
+ void __attribute__ ((__section__ (".__syscall_stub")))
+ stub_segv_handler(int sig, siginfo_t *info, void *p)
diff --git a/queue-4.14/um-use-posix-ucontext_t-instead-of-struct-ucontext.patch b/queue-4.14/um-use-posix-ucontext_t-instead-of-struct-ucontext.patch
new file mode 100644 (file)
index 0000000..4c6d187
--- /dev/null
@@ -0,0 +1,54 @@
+From 4d1a535b8ec5e74b42dfd9dc809142653b2597f6 Mon Sep 17 00:00:00 2001
+From: Krzysztof Mazur <krzysiek@podlesie.net>
+Date: Wed, 15 Nov 2017 11:12:39 +0100
+Subject: um: Use POSIX ucontext_t instead of struct ucontext
+
+From: Krzysztof Mazur <krzysiek@podlesie.net>
+
+commit 4d1a535b8ec5e74b42dfd9dc809142653b2597f6 upstream.
+
+glibc 2.26 removed the 'struct ucontext' to "improve" POSIX compliance
+and break programs, including User Mode Linux. Fix User Mode Linux
+by using POSIX ucontext_t.
+
+This fixes:
+
+arch/um/os-Linux/signal.c: In function 'hard_handler':
+arch/um/os-Linux/signal.c:163:22: error: dereferencing pointer to incomplete type 'struct ucontext'
+  mcontext_t *mc = &uc->uc_mcontext;
+arch/x86/um/stub_segv.c: In function 'stub_segv_handler':
+arch/x86/um/stub_segv.c:16:13: error: dereferencing pointer to incomplete type 'struct ucontext'
+          &uc->uc_mcontext);
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
+Signed-off-by: Richard Weinberger <richard@nod.at>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/um/os-Linux/signal.c |    2 +-
+ arch/x86/um/stub_segv.c   |    2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/um/os-Linux/signal.c
++++ b/arch/um/os-Linux/signal.c
+@@ -160,7 +160,7 @@ static void (*handlers[_NSIG])(int sig,
+ static void hard_handler(int sig, siginfo_t *si, void *p)
+ {
+-      struct ucontext *uc = p;
++      ucontext_t *uc = p;
+       mcontext_t *mc = &uc->uc_mcontext;
+       unsigned long pending = 1UL << sig;
+--- a/arch/x86/um/stub_segv.c
++++ b/arch/x86/um/stub_segv.c
+@@ -11,7 +11,7 @@
+ void __attribute__ ((__section__ (".__syscall_stub")))
+ stub_segv_handler(int sig, siginfo_t *info, void *p)
+ {
+-      struct ucontext *uc = p;
++      ucontext_t *uc = p;
+       GET_FAULTINFO_FROM_MC(*((struct faultinfo *) STUB_DATA),
+                             &uc->uc_mcontext);
diff --git a/queue-4.14/vfio-pci-virtualize-maximum-read-request-size.patch b/queue-4.14/vfio-pci-virtualize-maximum-read-request-size.patch
new file mode 100644 (file)
index 0000000..4e27291
--- /dev/null
@@ -0,0 +1,80 @@
+From cf0d53ba4947aad6e471491d5b20a567cbe92e56 Mon Sep 17 00:00:00 2001
+From: Alex Williamson <alex.williamson@redhat.com>
+Date: Mon, 2 Oct 2017 12:39:10 -0600
+Subject: vfio/pci: Virtualize Maximum Read Request Size
+
+From: Alex Williamson <alex.williamson@redhat.com>
+
+commit cf0d53ba4947aad6e471491d5b20a567cbe92e56 upstream.
+
+MRRS defines the maximum read request size a device is allowed to
+make.  Drivers will often increase this to allow more data transfer
+with a single request.  Completions to this request are bound by the
+MPS setting for the bus.  Aside from device quirks (none known), it
+doesn't seem to make sense to set an MRRS value less than MPS, yet
+this is a likely scenario given that user drivers do not have a
+system-wide view of the PCI topology.  Virtualize MRRS such that the
+user can set MRRS >= MPS, but use MPS as the floor value that we'll
+write to hardware.
+
+Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/vfio/pci/vfio_pci_config.c |   29 ++++++++++++++++++++++++++---
+ 1 file changed, 26 insertions(+), 3 deletions(-)
+
+--- a/drivers/vfio/pci/vfio_pci_config.c
++++ b/drivers/vfio/pci/vfio_pci_config.c
+@@ -808,6 +808,7 @@ static int vfio_exp_config_write(struct
+ {
+       __le16 *ctrl = (__le16 *)(vdev->vconfig + pos -
+                                 offset + PCI_EXP_DEVCTL);
++      int readrq = le16_to_cpu(*ctrl) & PCI_EXP_DEVCTL_READRQ;
+       count = vfio_default_config_write(vdev, pos, count, perm, offset, val);
+       if (count < 0)
+@@ -833,6 +834,27 @@ static int vfio_exp_config_write(struct
+                       pci_try_reset_function(vdev->pdev);
+       }
++      /*
++       * MPS is virtualized to the user, writes do not change the physical
++       * register since determining a proper MPS value requires a system wide
++       * device view.  The MRRS is largely independent of MPS, but since the
++       * user does not have that system-wide view, they might set a safe, but
++       * inefficiently low value.  Here we allow writes through to hardware,
++       * but we set the floor to the physical device MPS setting, so that
++       * we can at least use full TLPs, as defined by the MPS value.
++       *
++       * NB, if any devices actually depend on an artificially low MRRS
++       * setting, this will need to be revisited, perhaps with a quirk
++       * though pcie_set_readrq().
++       */
++      if (readrq != (le16_to_cpu(*ctrl) & PCI_EXP_DEVCTL_READRQ)) {
++              readrq = 128 <<
++                      ((le16_to_cpu(*ctrl) & PCI_EXP_DEVCTL_READRQ) >> 12);
++              readrq = max(readrq, pcie_get_mps(vdev->pdev));
++
++              pcie_set_readrq(vdev->pdev, readrq);
++      }
++
+       return count;
+ }
+@@ -851,11 +873,12 @@ static int __init init_pci_cap_exp_perm(
+        * Allow writes to device control fields, except devctl_phantom,
+        * which could confuse IOMMU, MPS, which can break communication
+        * with other physical devices, and the ARI bit in devctl2, which
+-       * is set at probe time.  FLR gets virtualized via our writefn.
++       * is set at probe time.  FLR and MRRS get virtualized via our
++       * writefn.
+        */
+       p_setw(perm, PCI_EXP_DEVCTL,
+-             PCI_EXP_DEVCTL_BCR_FLR | PCI_EXP_DEVCTL_PAYLOAD,
+-             ~PCI_EXP_DEVCTL_PHANTOM);
++             PCI_EXP_DEVCTL_BCR_FLR | PCI_EXP_DEVCTL_PAYLOAD |
++             PCI_EXP_DEVCTL_READRQ, ~PCI_EXP_DEVCTL_PHANTOM);
+       p_setw(perm, PCI_EXP_DEVCTL2, NO_VIRT, ~PCI_EXP_DEVCTL2_ARI);
+       return 0;
+ }
diff --git a/queue-4.14/watchdog-f71808e_wdt-fix-wd_en-register-read.patch b/queue-4.14/watchdog-f71808e_wdt-fix-wd_en-register-read.patch
new file mode 100644 (file)
index 0000000..8b874e8
--- /dev/null
@@ -0,0 +1,33 @@
+From 977f6f68331f94bb72ad84ee96b7b87ce737d89d Mon Sep 17 00:00:00 2001
+From: Igor Pylypiv <igor.pylypiv@gmail.com>
+Date: Tue, 6 Mar 2018 23:47:25 -0800
+Subject: watchdog: f71808e_wdt: Fix WD_EN register read
+
+From: Igor Pylypiv <igor.pylypiv@gmail.com>
+
+commit 977f6f68331f94bb72ad84ee96b7b87ce737d89d upstream.
+
+F71808FG_FLAG_WD_EN defines bit position, not a bitmask
+
+Signed-off-by: Igor Pylypiv <igor.pylypiv@gmail.com>
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/watchdog/f71808e_wdt.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/watchdog/f71808e_wdt.c
++++ b/drivers/watchdog/f71808e_wdt.c
+@@ -496,7 +496,7 @@ static bool watchdog_is_running(void)
+       is_running = (superio_inb(watchdog.sioaddr, SIO_REG_ENABLE) & BIT(0))
+               && (superio_inb(watchdog.sioaddr, F71808FG_REG_WDT_CONF)
+-                      & F71808FG_FLAG_WD_EN);
++                      & BIT(F71808FG_FLAG_WD_EN));
+       superio_exit(watchdog.sioaddr);