From: Greg Kroah-Hartman Date: Mon, 23 Jan 2017 16:02:15 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.4.45~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=06db6e7cbc2d3358b6826653d8986bd416e5f50e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: arm-8613-1-fix-the-uaccess-crash-on-pb11mpcore.patch arm-dts-am33xx-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-am4372-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-dm814x-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-dm816x-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-dra7-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-imx6qdl-nitrogen6_max-fix-sgtl5000-pinctrl-init.patch arm-dts-omap2-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-omap3-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-omap3-fix-card-detect-and-write-protect-on-logic-pd-som-lv.patch arm-dts-omap4-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-dts-omap5-add-an-empty-chosen-node-to-top-level-dtsi.patch arm-ux500-fix-prcmu_is_cpu_in_wfi-calculation.patch arm64-fix-swiotlb-fallback-allocation.patch arm64-mm-avoid-name-clash-in-__page_to_voff.patch blackfin-check-devm_pinctrl_get-for-errors.patch ceph-fix-ceph_get_caps-interruption.patch ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch ceph-fix-scheduler-warning-due-to-nested-blocking.patch dmaengine-pl330-fix-runtime-pm-support-for-terminated-transfers.patch dmaengine-rcar-dmac-unmap-slave-resource-when-channel-is-freed.patch gs1662-drop-kfree-for-memory-allocated-with-devm_kzalloc.patch ite-cir-initialize-use_demodulator-before-using-it.patch libceph-make-sure-ceph_aes_crypt-iv-is-aligned.patch mtd-spi-nor-fix-some-error-codes-in-cqspi_setup_flash.patch mtd-spi-nor-off-by-one-in-cqspi_setup_flash.patch platform-pxa_camera-add-video_v4l2-dependency.patch pm-devfreq-exynos-bus-fix-the-wrong-return-value.patch pm-devfreq-fix-the-bug-of-devfreq_add_device-when-governor-is-null.patch rpmsg-virtio_rpmsg_bus-fix-channel-creation.patch s5p-cec-mark-pm-functions-as-__maybe_unused-again.patch s5p-mfc-fix-clock-management-in-s5p_mfc_release-function.patch scsi-mpt3sas-fix-hang-on-ata-passthrough-commands.patch scsi-ses-fix-sas-device-detection-in-enclosure.patch selftest-powerpc-wrong-pmc-initialized-in-pmc56_overflow-test.patch soc-ti-wkup_m3_ipc-fix-error-return-code-in-wkup_m3_ipc_probe.patch spi-pxa2xx-add-missed-break.patch st-hva-fix-some-error-handling-in-hva_hw_probe.patch tools-virtio-ringtest-fix-run-on-all.sh-for-offline-cpus.patch xprtrdma-make-frwr-send-queue-entry-accounting-more-accurate.patch xprtrdma-squelch-max-send-max-recv-messages-at-connect-time.patch --- diff --git a/queue-4.9/arm-8613-1-fix-the-uaccess-crash-on-pb11mpcore.patch b/queue-4.9/arm-8613-1-fix-the-uaccess-crash-on-pb11mpcore.patch new file mode 100644 index 00000000000..4913f1a42d0 --- /dev/null +++ b/queue-4.9/arm-8613-1-fix-the-uaccess-crash-on-pb11mpcore.patch @@ -0,0 +1,70 @@ +From 90f92c631b210c1e97080b53a9d863783281a932 Mon Sep 17 00:00:00 2001 +From: Linus Walleij +Date: Tue, 13 Sep 2016 12:31:17 +0100 +Subject: ARM: 8613/1: Fix the uaccess crash on PB11MPCore + +From: Linus Walleij + +commit 90f92c631b210c1e97080b53a9d863783281a932 upstream. + +The following patch was sketched by Russell in response to my +crashes on the PB11MPCore after the patch for software-based +priviledged no access support for ARMv8.1. See this thread: +http://marc.info/?l=linux-arm-kernel&m=144051749807214&w=2 + +I am unsure what is going on, I suspect everyone involved in +the discussion is. I just want to repost this to get the +discussion restarted, as I still have to apply this patch +with every kernel iteration to get my PB11MPCore Realview +running. + +Testing by Neil Armstrong on the Oxnas NAS has revealed that +this bug exist also on that widely deployed hardware, so +we are probably currently regressing all ARM11MPCore systems. + +Cc: Russell King +Cc: Will Deacon +Fixes: a5e090acbf54 ("ARM: software-based priviledged-no-access support") +Tested-by: Neil Armstrong +Signed-off-by: Linus Walleij +Signed-off-by: Russell King +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/kernel/smp_tlb.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +--- a/arch/arm/kernel/smp_tlb.c ++++ b/arch/arm/kernel/smp_tlb.c +@@ -9,6 +9,7 @@ + */ + #include + #include ++#include + + #include + #include +@@ -40,8 +41,11 @@ static inline void ipi_flush_tlb_mm(void + static inline void ipi_flush_tlb_page(void *arg) + { + struct tlb_args *ta = (struct tlb_args *)arg; ++ unsigned int __ua_flags = uaccess_save_and_enable(); + + local_flush_tlb_page(ta->ta_vma, ta->ta_start); ++ ++ uaccess_restore(__ua_flags); + } + + static inline void ipi_flush_tlb_kernel_page(void *arg) +@@ -54,8 +58,11 @@ static inline void ipi_flush_tlb_kernel_ + static inline void ipi_flush_tlb_range(void *arg) + { + struct tlb_args *ta = (struct tlb_args *)arg; ++ unsigned int __ua_flags = uaccess_save_and_enable(); + + local_flush_tlb_range(ta->ta_vma, ta->ta_start, ta->ta_end); ++ ++ uaccess_restore(__ua_flags); + } + + static inline void ipi_flush_tlb_kernel_range(void *arg) diff --git a/queue-4.9/arm-dts-am33xx-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-am33xx-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..7cfa60c8343 --- /dev/null +++ b/queue-4.9/arm-dts-am33xx-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 1d8d6d3f2f7d553c479f24ab93767974a8c2dfad Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:37 -0300 +Subject: ARM: dts: am33xx: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 1d8d6d3f2f7d553c479f24ab93767974a8c2dfad upstream. + +Commit f8bf01611c99 ("ARM: dts: am33xx: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: f8bf01611c99 ("ARM: dts: am33xx: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/am33xx.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/am33xx.dtsi ++++ b/arch/arm/boot/dts/am33xx.dtsi +@@ -16,6 +16,7 @@ + interrupt-parent = <&intc>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + i2c0 = &i2c0; diff --git a/queue-4.9/arm-dts-am4372-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-am4372-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..1b37e2b2542 --- /dev/null +++ b/queue-4.9/arm-dts-am4372-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From ce95077d0cdfcc8e40dea10a1680249831ccec77 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:38 -0300 +Subject: ARM: dts: am4372: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit ce95077d0cdfcc8e40dea10a1680249831ccec77 upstream. + +Commit 75813028bbd7 ("ARM: dts: am4372: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 75813028bbd7 ("ARM: dts: am4372: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/am4372.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/am4372.dtsi ++++ b/arch/arm/boot/dts/am4372.dtsi +@@ -16,6 +16,7 @@ + interrupt-parent = <&wakeupgen>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + memory@0 { + device_type = "memory"; diff --git a/queue-4.9/arm-dts-dm814x-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-dm814x-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..186c7b94543 --- /dev/null +++ b/queue-4.9/arm-dts-dm814x-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 9536fd30d41ae4f30d04762676e5f5f602e16aa8 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:39 -0300 +Subject: ARM: dts: dm814x: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 9536fd30d41ae4f30d04762676e5f5f602e16aa8 upstream. + +Commit 76155b378c59 ("ARM: dts: dm814x: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 76155b378c59 ("ARM: dts: dm814x: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/dm814x.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/dm814x.dtsi ++++ b/arch/arm/boot/dts/dm814x.dtsi +@@ -12,6 +12,7 @@ + interrupt-parent = <&intc>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-dts-dm816x-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-dm816x-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..0ea21fc0671 --- /dev/null +++ b/queue-4.9/arm-dts-dm816x-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 6ed80b3a232e61da6d0189bbbe2b2b9afaefe3b3 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:40 -0300 +Subject: ARM: dts: dm816x: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 6ed80b3a232e61da6d0189bbbe2b2b9afaefe3b3 upstream. + +Commit 06bfb9c19957 ("ARM: dts: dm816x: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 06bfb9c19957 ("ARM: dts: dm816x: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/dm816x.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/dm816x.dtsi ++++ b/arch/arm/boot/dts/dm816x.dtsi +@@ -12,6 +12,7 @@ + interrupt-parent = <&intc>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-dts-dra7-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-dra7-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..d6250bccb9b --- /dev/null +++ b/queue-4.9/arm-dts-dra7-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 7f6c857b12911ed56b2056f9d5491e16b5fc95ea Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:41 -0300 +Subject: ARM: dts: dra7: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 7f6c857b12911ed56b2056f9d5491e16b5fc95ea upstream. + +Commit 55871eb6e2cc ("ARM: dts: dra7: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 55871eb6e2cc ("ARM: dts: dra7: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/dra7.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/dra7.dtsi ++++ b/arch/arm/boot/dts/dra7.dtsi +@@ -18,6 +18,7 @@ + + compatible = "ti,dra7xx"; + interrupt-parent = <&crossbar_mpu>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-dts-imx6qdl-nitrogen6_max-fix-sgtl5000-pinctrl-init.patch b/queue-4.9/arm-dts-imx6qdl-nitrogen6_max-fix-sgtl5000-pinctrl-init.patch new file mode 100644 index 00000000000..592e1a3f652 --- /dev/null +++ b/queue-4.9/arm-dts-imx6qdl-nitrogen6_max-fix-sgtl5000-pinctrl-init.patch @@ -0,0 +1,47 @@ +From 6ab5c2b662e2dcbb964099bf7f19e9dbc9ae5a41 Mon Sep 17 00:00:00 2001 +From: Gary Bisson +Date: Tue, 3 Jan 2017 12:22:46 +0100 +Subject: ARM: dts: imx6qdl-nitrogen6_max: fix sgtl5000 pinctrl init + +From: Gary Bisson + +commit 6ab5c2b662e2dcbb964099bf7f19e9dbc9ae5a41 upstream. + +This patch fixes the following error: +sgtl5000 0-000a: Error reading chip id -6 +imx-sgtl5000 sound: ASoC: CODEC DAI sgtl5000 not registered +imx-sgtl5000 sound: snd_soc_register_card failed (-517) + +The problem was that the pinctrl group was linked to the sound driver +instead of the codec node. Since the codec is probed first, the sys_mclk +was missing and it would therefore fail to initialize. + +Fixes: b32e700256bc ("ARM: dts: imx: add Boundary Devices Nitrogen6_Max board") +Signed-off-by: Gary Bisson +Signed-off-by: Shawn Guo +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi ++++ b/arch/arm/boot/dts/imx6qdl-nitrogen6_max.dtsi +@@ -319,8 +319,6 @@ + compatible = "fsl,imx6q-nitrogen6_max-sgtl5000", + "fsl,imx-audio-sgtl5000"; + model = "imx6q-nitrogen6_max-sgtl5000"; +- pinctrl-names = "default"; +- pinctrl-0 = <&pinctrl_sgtl5000>; + ssi-controller = <&ssi1>; + audio-codec = <&codec>; + audio-routing = +@@ -402,6 +400,8 @@ + + codec: sgtl5000@0a { + compatible = "fsl,sgtl5000"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pinctrl_sgtl5000>; + reg = <0x0a>; + clocks = <&clks IMX6QDL_CLK_CKO>; + VDDA-supply = <®_2p5v>; diff --git a/queue-4.9/arm-dts-omap2-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-omap2-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..c2042f6d2a7 --- /dev/null +++ b/queue-4.9/arm-dts-omap2-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 3d37d41a148c32389ed360e10a9f8a7cd37ce166 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:33 -0300 +Subject: ARM: dts: omap2: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 3d37d41a148c32389ed360e10a9f8a7cd37ce166 upstream. + +Commit d1f3156fc8c7 ("ARM: dts: omap2: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: d1f3156fc8c7 ("ARM: dts: omap2: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/omap2.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/omap2.dtsi ++++ b/arch/arm/boot/dts/omap2.dtsi +@@ -17,6 +17,7 @@ + interrupt-parent = <&intc>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + serial0 = &uart1; diff --git a/queue-4.9/arm-dts-omap3-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-omap3-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..ed3d5a36080 --- /dev/null +++ b/queue-4.9/arm-dts-omap3-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 23ab4c6183ac0679d80888b5c4cc1d528fcc21c2 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:34 -0300 +Subject: ARM: dts: omap3: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 23ab4c6183ac0679d80888b5c4cc1d528fcc21c2 upstream. + +Commit 008a2ebcd677 ("ARM: dts: omap3: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 008a2ebcd677 ("ARM: dts: omap3: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/omap3.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/omap3.dtsi ++++ b/arch/arm/boot/dts/omap3.dtsi +@@ -17,6 +17,7 @@ + interrupt-parent = <&intc>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-dts-omap3-fix-card-detect-and-write-protect-on-logic-pd-som-lv.patch b/queue-4.9/arm-dts-omap3-fix-card-detect-and-write-protect-on-logic-pd-som-lv.patch new file mode 100644 index 00000000000..aaa94230862 --- /dev/null +++ b/queue-4.9/arm-dts-omap3-fix-card-detect-and-write-protect-on-logic-pd-som-lv.patch @@ -0,0 +1,56 @@ +From 1ea6af3216b092ec97129ac81bd95cf254c4b140 Mon Sep 17 00:00:00 2001 +From: Adam Ford +Date: Tue, 17 Jan 2017 13:34:06 -0600 +Subject: ARM: dts: omap3: Fix Card Detect and Write Protect on Logic PD SOM-LV + +From: Adam Ford + +commit 1ea6af3216b092ec97129ac81bd95cf254c4b140 upstream. + +This fixes commit ab8dd3aed011 ("ARM: DTS: Add minimal Support for +Logic PD DM3730 SOM-LV") where the Card Detect and Write Protect +pins were improperly configured. + +Fixes: ab8dd3aed011 ("ARM: DTS: Add minimal Support for Logic PD DM3730 SOM-LV") +Signed-off-by: Adam Ford +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +--- a/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts ++++ b/arch/arm/boot/dts/logicpd-som-lv-37xx-devkit.dts +@@ -158,7 +158,7 @@ + &mmc1 { + interrupts-extended = <&intc 83 &omap3_pmx_core 0x11a>; + pinctrl-names = "default"; +- pinctrl-0 = <&mmc1_pins &mmc1_cd>; ++ pinctrl-0 = <&mmc1_pins>; + wp-gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; /* gpio_126 */ + cd-gpios = <&gpio4 14 IRQ_TYPE_LEVEL_LOW>; /* gpio_110 */ + vmmc-supply = <&vmmc1>; +@@ -193,7 +193,8 @@ + OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat1.sdmmc1_dat1 */ + OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat2.sdmmc1_dat2 */ + OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT | MUX_MODE0) /* sdmmc1_dat3.sdmmc1_dat3 */ +- OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 sdmmc1_wp*/ ++ OMAP3_CORE1_IOPAD(0x2132, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_strobe.gpio_126 */ ++ OMAP3_CORE1_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */ + >; + }; + +@@ -242,12 +243,6 @@ + OMAP3_WKUP_IOPAD(0x2a16, PIN_OUTPUT | PIN_OFF_OUTPUT_LOW | MUX_MODE4) /* sys_boot6.gpio_8 */ + >; + }; +- +- mmc1_cd: pinmux_mmc1_cd { +- pinctrl-single,pins = < +- OMAP3_WKUP_IOPAD(0x212c, PIN_INPUT_PULLUP | MUX_MODE4) /* cam_d11.gpio_110 */ +- >; +- }; + }; + + diff --git a/queue-4.9/arm-dts-omap4-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-omap4-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..8ad437a20df --- /dev/null +++ b/queue-4.9/arm-dts-omap4-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From 6c565d1a63ce241a0100f5d327c48dde87b4df76 Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:35 -0300 +Subject: ARM: dts: omap4: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit 6c565d1a63ce241a0100f5d327c48dde87b4df76 upstream. + +Commit da6269e7e3dd ("ARM: dts: omap4: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: da6269e7e3dd ("ARM: dts: omap4: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/omap4.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/omap4.dtsi ++++ b/arch/arm/boot/dts/omap4.dtsi +@@ -15,6 +15,7 @@ + interrupt-parent = <&wakeupgen>; + #address-cells = <1>; + #size-cells = <1>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-dts-omap5-add-an-empty-chosen-node-to-top-level-dtsi.patch b/queue-4.9/arm-dts-omap5-add-an-empty-chosen-node-to-top-level-dtsi.patch new file mode 100644 index 00000000000..34a3bd0645c --- /dev/null +++ b/queue-4.9/arm-dts-omap5-add-an-empty-chosen-node-to-top-level-dtsi.patch @@ -0,0 +1,37 @@ +From c9faa84cb9c34852ad70cb175457ae21fc06f39b Mon Sep 17 00:00:00 2001 +From: Javier Martinez Canillas +Date: Mon, 19 Dec 2016 11:44:36 -0300 +Subject: ARM: dts: omap5: Add an empty chosen node to top level DTSI + +From: Javier Martinez Canillas + +commit c9faa84cb9c34852ad70cb175457ae21fc06f39b upstream. + +Commit 76a8548ea987 ("ARM: dts: omap5: Remove skeleton.dtsi usage") +removed the skeleton.dtsi usage since we want to get rid of it. + +But this can cause issues when booting a kernel with a boot-loader +that doesn't create a chosen node if this isn't present in the DTB +since the decompressor relies on a pre-existing chosen node to be +available to insert the command line and merge other ATAGS info. + +Fixes: 76a8548ea987 ("ARM: dts: omap5: Remove skeleton.dtsi usage") +Reported-by: Pali Rohar +Signed-off-by: Javier Martinez Canillas +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/boot/dts/omap5.dtsi | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/arm/boot/dts/omap5.dtsi ++++ b/arch/arm/boot/dts/omap5.dtsi +@@ -17,6 +17,7 @@ + + compatible = "ti,omap5"; + interrupt-parent = <&wakeupgen>; ++ chosen { }; + + aliases { + i2c0 = &i2c1; diff --git a/queue-4.9/arm-ux500-fix-prcmu_is_cpu_in_wfi-calculation.patch b/queue-4.9/arm-ux500-fix-prcmu_is_cpu_in_wfi-calculation.patch new file mode 100644 index 00000000000..eaa8dca9afd --- /dev/null +++ b/queue-4.9/arm-ux500-fix-prcmu_is_cpu_in_wfi-calculation.patch @@ -0,0 +1,42 @@ +From f0e8faa7a5e894b0fc99d24be1b18685a92ea466 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Wed, 16 Nov 2016 16:20:37 +0100 +Subject: ARM: ux500: fix prcmu_is_cpu_in_wfi() calculation + +From: Arnd Bergmann + +commit f0e8faa7a5e894b0fc99d24be1b18685a92ea466 upstream. + +This function clearly never worked and always returns true, +as pointed out by gcc-7: + +arch/arm/mach-ux500/pm.c: In function 'prcmu_is_cpu_in_wfi': +arch/arm/mach-ux500/pm.c:137:212: error: ?: +using integer constants in boolean context, the expression +will always evaluate to 'true' [-Werror=int-in-bool-context] + +With the added braces, the condition actually makes sense. + +Fixes: 34fe6f107eab ("mfd : Check if the other db8500 core is in WFI") +Signed-off-by: Arnd Bergmann +Acked-by: Daniel Lezcano +Signed-off-by: Linus Walleij +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm/mach-ux500/pm.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/arch/arm/mach-ux500/pm.c ++++ b/arch/arm/mach-ux500/pm.c +@@ -134,8 +134,8 @@ bool prcmu_pending_irq(void) + */ + bool prcmu_is_cpu_in_wfi(int cpu) + { +- return readl(PRCM_ARM_WFI_STANDBY) & cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : +- PRCM_ARM_WFI_STANDBY_WFI0; ++ return readl(PRCM_ARM_WFI_STANDBY) & ++ (cpu ? PRCM_ARM_WFI_STANDBY_WFI1 : PRCM_ARM_WFI_STANDBY_WFI0); + } + + /* diff --git a/queue-4.9/arm64-fix-swiotlb-fallback-allocation.patch b/queue-4.9/arm64-fix-swiotlb-fallback-allocation.patch new file mode 100644 index 00000000000..fe68472583d --- /dev/null +++ b/queue-4.9/arm64-fix-swiotlb-fallback-allocation.patch @@ -0,0 +1,61 @@ +From 524dabe1c68e0bca25ce7b108099e5d89472a101 Mon Sep 17 00:00:00 2001 +From: Alexander Graf +Date: Mon, 16 Jan 2017 12:46:33 +0100 +Subject: arm64: Fix swiotlb fallback allocation + +From: Alexander Graf + +commit 524dabe1c68e0bca25ce7b108099e5d89472a101 upstream. + +Commit b67a8b29df introduced logic to skip swiotlb allocation when all memory +is DMA accessible anyway. + +While this is a great idea, __dma_alloc still calls swiotlb code unconditionally +to allocate memory when there is no CMA memory available. The swiotlb code is +called to ensure that we at least try get_free_pages(). + +Without initialization, swiotlb allocation code tries to access io_tlb_list +which is NULL. That results in a stack trace like this: + + Unable to handle kernel NULL pointer dereference at virtual address 00000000 + [...] + [] swiotlb_tbl_map_single+0xd0/0x2b0 + [] swiotlb_alloc_coherent+0x10c/0x198 + [] __dma_alloc+0x68/0x1a8 + [] drm_gem_cma_create+0x98/0x108 [drm] + [] drm_fbdev_cma_create_with_funcs+0xbc/0x368 [drm_kms_helper] + [] drm_fbdev_cma_create+0x2c/0x40 [drm_kms_helper] + [] drm_fb_helper_initial_config+0x238/0x410 [drm_kms_helper] + [] drm_fbdev_cma_init_with_funcs+0x98/0x160 [drm_kms_helper] + [] drm_fbdev_cma_init+0x40/0x58 [drm_kms_helper] + [] vc4_kms_load+0x90/0xf0 [vc4] + [] vc4_drm_bind+0xec/0x168 [vc4] + [...] + +Thankfully swiotlb code just learned how to not do allocations with the FORCE_NO +option. This patch configures the swiotlb code to use that if we decide not to +initialize the swiotlb framework. + +Fixes: b67a8b29df ("arm64: mm: only initialize swiotlb when necessary") +Signed-off-by: Alexander Graf +CC: Jisheng Zhang +CC: Geert Uytterhoeven +CC: Konrad Rzeszutek Wilk +Signed-off-by: Catalin Marinas +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm64/mm/init.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/arch/arm64/mm/init.c ++++ b/arch/arm64/mm/init.c +@@ -403,6 +403,8 @@ void __init mem_init(void) + { + if (swiotlb_force || max_pfn > (arm64_dma_phys_limit >> PAGE_SHIFT)) + swiotlb_init(1); ++ else ++ swiotlb_force = SWIOTLB_NO_FORCE; + + set_max_mapnr(pfn_to_page(max_pfn) - mem_map); + diff --git a/queue-4.9/arm64-mm-avoid-name-clash-in-__page_to_voff.patch b/queue-4.9/arm64-mm-avoid-name-clash-in-__page_to_voff.patch new file mode 100644 index 00000000000..566874e8ea2 --- /dev/null +++ b/queue-4.9/arm64-mm-avoid-name-clash-in-__page_to_voff.patch @@ -0,0 +1,36 @@ +From 1c8a946bf3754a59cba1fc373949a8114bfe5aaa Mon Sep 17 00:00:00 2001 +From: Oleksandr Andrushchenko +Date: Wed, 18 Jan 2017 09:09:25 +0200 +Subject: arm64: mm: avoid name clash in __page_to_voff() + +From: Oleksandr Andrushchenko + +commit 1c8a946bf3754a59cba1fc373949a8114bfe5aaa upstream. + +The arm64 __page_to_voff() macro takes a parameter called 'page', and +also refers to 'struct page'. Thus, if the value passed in is not +called 'page', we'll refer to the wrong struct name (which might not +exist). + +Fixes: 3fa72fe9c614 ("arm64: mm: fix __page_to_voff definition") +Acked-by: Mark Rutland +Suggested-by: Volodymyr Babchuk +Signed-off-by: Oleksandr Andrushchenko +Signed-off-by: Catalin Marinas +Signed-off-by: Greg Kroah-Hartman + +--- + arch/arm64/include/asm/memory.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/arm64/include/asm/memory.h ++++ b/arch/arm64/include/asm/memory.h +@@ -217,7 +217,7 @@ static inline void *phys_to_virt(phys_ad + #define _virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) + #else + #define __virt_to_pgoff(kaddr) (((u64)(kaddr) & ~PAGE_OFFSET) / PAGE_SIZE * sizeof(struct page)) +-#define __page_to_voff(page) (((u64)(page) & ~VMEMMAP_START) * PAGE_SIZE / sizeof(struct page)) ++#define __page_to_voff(kaddr) (((u64)(kaddr) & ~VMEMMAP_START) * PAGE_SIZE / sizeof(struct page)) + + #define page_to_virt(page) ((void *)((__page_to_voff(page)) | PAGE_OFFSET)) + #define virt_to_page(vaddr) ((struct page *)((__virt_to_pgoff(vaddr)) | VMEMMAP_START)) diff --git a/queue-4.9/blackfin-check-devm_pinctrl_get-for-errors.patch b/queue-4.9/blackfin-check-devm_pinctrl_get-for-errors.patch new file mode 100644 index 00000000000..c8928700dd5 --- /dev/null +++ b/queue-4.9/blackfin-check-devm_pinctrl_get-for-errors.patch @@ -0,0 +1,32 @@ +From c9205e18b41a6ef5ad73e1c4b86a78b2ea3ccb9b Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Thu, 14 Jul 2016 07:18:14 -0300 +Subject: [media] blackfin: check devm_pinctrl_get() for errors + +From: Dan Carpenter + +commit c9205e18b41a6ef5ad73e1c4b86a78b2ea3ccb9b upstream. + +devm_pinctrl_get() can fail so we should check for that. + +Fixes: 0a6824bc10de ('[media] v4l2: blackfin: select proper pinctrl state in ppi_set_params if CONFIG_PINCTRL is enabled') + +Signed-off-by: Dan Carpenter +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/platform/blackfin/ppi.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/media/platform/blackfin/ppi.c ++++ b/drivers/media/platform/blackfin/ppi.c +@@ -214,6 +214,8 @@ static int ppi_set_params(struct ppi_if + if (params->dlen > 24 || params->dlen <= 0) + return -EINVAL; + pctrl = devm_pinctrl_get(ppi->dev); ++ if (IS_ERR(pctrl)) ++ return PTR_ERR(pctrl); + pstate = pinctrl_lookup_state(pctrl, + pin_state[(params->dlen + 7) / 8 - 1]); + if (pinctrl_select_state(pctrl, pstate)) diff --git a/queue-4.9/ceph-fix-ceph_get_caps-interruption.patch b/queue-4.9/ceph-fix-ceph_get_caps-interruption.patch new file mode 100644 index 00000000000..9e53f8364ab --- /dev/null +++ b/queue-4.9/ceph-fix-ceph_get_caps-interruption.patch @@ -0,0 +1,37 @@ +From 6e09d0fb64402cec579f029ca4c7f39f5c48fc60 Mon Sep 17 00:00:00 2001 +From: "Yan, Zheng" +Date: Thu, 22 Dec 2016 16:05:43 +0800 +Subject: ceph: fix ceph_get_caps() interruption + +From: Yan, Zheng + +commit 6e09d0fb64402cec579f029ca4c7f39f5c48fc60 upstream. + +Commit 5c341ee32881 ("ceph: fix scheduler warning due to nested +blocking") causes infinite loop when process is interrupted. Fix it. + +Signed-off-by: Yan, Zheng +Signed-off-by: Ilya Dryomov +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ceph/caps.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +--- a/fs/ceph/caps.c ++++ b/fs/ceph/caps.c +@@ -2511,8 +2511,13 @@ int ceph_get_caps(struct ceph_inode_info + add_wait_queue(&ci->i_cap_wq, &wait); + + while (!try_get_cap_refs(ci, need, want, endoff, +- true, &_got, &err)) ++ true, &_got, &err)) { ++ if (signal_pending(current)) { ++ ret = -ERESTARTSYS; ++ break; ++ } + wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); ++ } + + remove_wait_queue(&ci->i_cap_wq, &wait); + diff --git a/queue-4.9/ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch b/queue-4.9/ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch new file mode 100644 index 00000000000..6362a351995 --- /dev/null +++ b/queue-4.9/ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch @@ -0,0 +1,43 @@ +From fe2ed42517533068ac03eed5630fffafff27eacf Mon Sep 17 00:00:00 2001 +From: Jeff Layton +Date: Thu, 12 Jan 2017 14:42:39 -0500 +Subject: ceph: fix endianness bug in frag_tree_split_cmp + +From: Jeff Layton + +commit fe2ed42517533068ac03eed5630fffafff27eacf upstream. + +sparse says: + + fs/ceph/inode.c:308:36: warning: incorrect type in argument 1 (different base types) + fs/ceph/inode.c:308:36: expected unsigned int [unsigned] [usertype] a + fs/ceph/inode.c:308:36: got restricted __le32 [usertype] frag + fs/ceph/inode.c:308:46: warning: incorrect type in argument 2 (different base types) + fs/ceph/inode.c:308:46: expected unsigned int [unsigned] [usertype] b + fs/ceph/inode.c:308:46: got restricted __le32 [usertype] frag + +We need to convert these values to host-endian before calling the +comparator. + +Fixes: a407846ef7c6 ("ceph: don't assume frag tree splits in mds reply are sorted") +Signed-off-by: Jeff Layton +Reviewed-by: Sage Weil +Signed-off-by: Ilya Dryomov +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ceph/inode.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/fs/ceph/inode.c ++++ b/fs/ceph/inode.c +@@ -305,7 +305,8 @@ static int frag_tree_split_cmp(const voi + { + struct ceph_frag_tree_split *ls = (struct ceph_frag_tree_split*)l; + struct ceph_frag_tree_split *rs = (struct ceph_frag_tree_split*)r; +- return ceph_frag_compare(ls->frag, rs->frag); ++ return ceph_frag_compare(le32_to_cpu(ls->frag), ++ le32_to_cpu(rs->frag)); + } + + static bool is_frag_child(u32 f, struct ceph_inode_frag *frag) diff --git a/queue-4.9/ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch b/queue-4.9/ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch new file mode 100644 index 00000000000..03494d2f84a --- /dev/null +++ b/queue-4.9/ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch @@ -0,0 +1,46 @@ +From 1097680d759918ce4a8705381c0ab2ed7bd60cf1 Mon Sep 17 00:00:00 2001 +From: Jeff Layton +Date: Thu, 12 Jan 2017 14:42:38 -0500 +Subject: ceph: fix endianness of getattr mask in ceph_d_revalidate + +From: Jeff Layton + +commit 1097680d759918ce4a8705381c0ab2ed7bd60cf1 upstream. + +sparse says: + + fs/ceph/dir.c:1248:50: warning: incorrect type in assignment (different base types) + fs/ceph/dir.c:1248:50: expected restricted __le32 [usertype] mask + fs/ceph/dir.c:1248:50: got int [signed] [assigned] mask + +Fixes: 200fd27c8fa2 ("ceph: use lookup request to revalidate dentry") +Signed-off-by: Jeff Layton +Reviewed-by: Sage Weil +Signed-off-by: Ilya Dryomov +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ceph/dir.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/fs/ceph/dir.c ++++ b/fs/ceph/dir.c +@@ -1255,7 +1255,8 @@ static int ceph_d_revalidate(struct dent + struct ceph_mds_client *mdsc = + ceph_sb_to_client(dir->i_sb)->mdsc; + struct ceph_mds_request *req; +- int op, mask, err; ++ int op, err; ++ u32 mask; + + if (flags & LOOKUP_RCU) + return -ECHILD; +@@ -1270,7 +1271,7 @@ static int ceph_d_revalidate(struct dent + mask = CEPH_STAT_CAP_INODE | CEPH_CAP_AUTH_SHARED; + if (ceph_security_xattr_wanted(dir)) + mask |= CEPH_CAP_XATTR_SHARED; +- req->r_args.getattr.mask = mask; ++ req->r_args.getattr.mask = cpu_to_le32(mask); + + err = ceph_mdsc_do_request(mdsc, NULL, req); + switch (err) { diff --git a/queue-4.9/ceph-fix-scheduler-warning-due-to-nested-blocking.patch b/queue-4.9/ceph-fix-scheduler-warning-due-to-nested-blocking.patch new file mode 100644 index 00000000000..4ec8732c0ca --- /dev/null +++ b/queue-4.9/ceph-fix-scheduler-warning-due-to-nested-blocking.patch @@ -0,0 +1,85 @@ +From 5c341ee32881c554727ec14b71ec3e8832f01989 Mon Sep 17 00:00:00 2001 +From: Nikolay Borisov +Date: Tue, 11 Oct 2016 12:04:09 +0300 +Subject: ceph: fix scheduler warning due to nested blocking + +From: Nikolay Borisov + +commit 5c341ee32881c554727ec14b71ec3e8832f01989 upstream. + +try_get_cap_refs can be used as a condition in a wait_event* calls. +This is all fine until it has to call __ceph_do_pending_vmtruncate, +which in turn acquires the i_truncate_mutex. This leads to a situation +in which a task's state is !TASK_RUNNING and at the same time it's +trying to acquire a sleeping primitive. In essence a nested sleeping +primitives are being used. This causes the following warning: + +WARNING: CPU: 22 PID: 11064 at kernel/sched/core.c:7631 __might_sleep+0x9f/0xb0() +do not call blocking ops when !TASK_RUNNING; state=1 set at [] prepare_to_wait_event+0x5d/0x110 + ipmi_msghandler tcp_scalable ib_qib dca ib_mad ib_core ib_addr ipv6 +CPU: 22 PID: 11064 Comm: fs_checker.pl Tainted: G O 4.4.20-clouder2 #6 +Hardware name: Supermicro X10DRi/X10DRi, BIOS 1.1a 10/16/2015 + 0000000000000000 ffff8838b416fa88 ffffffff812f4409 ffff8838b416fad0 + ffffffff81a034f2 ffff8838b416fac0 ffffffff81052b46 ffffffff81a0432c + 0000000000000061 0000000000000000 0000000000000000 ffff88167bda54a0 +Call Trace: + [] dump_stack+0x67/0x9e + [] warn_slowpath_common+0x86/0xc0 + [] warn_slowpath_fmt+0x4c/0x50 + [] ? prepare_to_wait_event+0x5d/0x110 + [] ? prepare_to_wait_event+0x5d/0x110 + [] __might_sleep+0x9f/0xb0 + [] mutex_lock+0x20/0x40 + [] __ceph_do_pending_vmtruncate+0x44/0x1a0 [ceph] + [] try_get_cap_refs+0xa2/0x320 [ceph] + [] ceph_get_caps+0x255/0x2b0 [ceph] + [] ? wait_woken+0xb0/0xb0 + [] ceph_write_iter+0x2b1/0xde0 [ceph] + [] ? schedule_timeout+0x202/0x260 + [] ? kmem_cache_free+0x1ea/0x200 + [] ? iput+0x9e/0x230 + [] ? __might_sleep+0x52/0xb0 + [] ? __might_fault+0x37/0x40 + [] ? cp_new_stat+0x153/0x170 + [] __vfs_write+0xaa/0xe0 + [] vfs_write+0xa9/0x190 + [] ? set_close_on_exec+0x31/0x70 + [] SyS_write+0x46/0xa0 + +This happens since wait_event_interruptible can interfere with the +mutex locking code, since they both fiddle with the task state. + +Fix the issue by using the newly-added nested blocking infrastructure +in 61ada528dea0 ("sched/wait: Provide infrastructure to deal with +nested blocking") + +Link: https://lwn.net/Articles/628628/ +Signed-off-by: Nikolay Borisov +Signed-off-by: Yan, Zheng +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ceph/caps.c | 12 +++++++++--- + 1 file changed, 9 insertions(+), 3 deletions(-) + +--- a/fs/ceph/caps.c ++++ b/fs/ceph/caps.c +@@ -2507,9 +2507,15 @@ int ceph_get_caps(struct ceph_inode_info + if (err < 0) + ret = err; + } else { +- ret = wait_event_interruptible(ci->i_cap_wq, +- try_get_cap_refs(ci, need, want, endoff, +- true, &_got, &err)); ++ DEFINE_WAIT_FUNC(wait, woken_wake_function); ++ add_wait_queue(&ci->i_cap_wq, &wait); ++ ++ while (!try_get_cap_refs(ci, need, want, endoff, ++ true, &_got, &err)) ++ wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); ++ ++ remove_wait_queue(&ci->i_cap_wq, &wait); ++ + if (err == -EAGAIN) + continue; + if (err < 0) diff --git a/queue-4.9/dmaengine-pl330-fix-runtime-pm-support-for-terminated-transfers.patch b/queue-4.9/dmaengine-pl330-fix-runtime-pm-support-for-terminated-transfers.patch new file mode 100644 index 00000000000..ce9e660976c --- /dev/null +++ b/queue-4.9/dmaengine-pl330-fix-runtime-pm-support-for-terminated-transfers.patch @@ -0,0 +1,86 @@ +From 5c9e6c2b2ba3ec3a442e2fb5b4286498f8b4dcb7 Mon Sep 17 00:00:00 2001 +From: Marek Szyprowski +Date: Fri, 16 Dec 2016 11:39:11 +0100 +Subject: dmaengine: pl330: Fix runtime PM support for terminated transfers + +From: Marek Szyprowski + +commit 5c9e6c2b2ba3ec3a442e2fb5b4286498f8b4dcb7 upstream. + +PL330 DMA engine driver is leaking a runtime reference after any terminated +DMA transactions. This patch fixes this issue by tracking runtime PM state +of the device and making additional call to pm_runtime_put() in terminate_all +callback if needed. + +Fixes: ae43b3289186 ("ARM: 8202/1: dmaengine: pl330: Add runtime Power Management support v12") +Signed-off-by: Marek Szyprowski +Reviewed-by: Krzysztof Kozlowski +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/dma/pl330.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +--- a/drivers/dma/pl330.c ++++ b/drivers/dma/pl330.c +@@ -448,6 +448,9 @@ struct dma_pl330_chan { + + /* for cyclic capability */ + bool cyclic; ++ ++ /* for runtime pm tracking */ ++ bool active; + }; + + struct pl330_dmac { +@@ -2031,6 +2034,7 @@ static void pl330_tasklet(unsigned long + _stop(pch->thread); + spin_unlock(&pch->thread->dmac->lock); + power_down = true; ++ pch->active = false; + } else { + /* Make sure the PL330 Channel thread is active */ + spin_lock(&pch->thread->dmac->lock); +@@ -2050,6 +2054,7 @@ static void pl330_tasklet(unsigned long + desc->status = PREP; + list_move_tail(&desc->node, &pch->work_list); + if (power_down) { ++ pch->active = true; + spin_lock(&pch->thread->dmac->lock); + _start(pch->thread); + spin_unlock(&pch->thread->dmac->lock); +@@ -2164,6 +2169,7 @@ static int pl330_terminate_all(struct dm + unsigned long flags; + struct pl330_dmac *pl330 = pch->dmac; + LIST_HEAD(list); ++ bool power_down = false; + + pm_runtime_get_sync(pl330->ddma.dev); + spin_lock_irqsave(&pch->lock, flags); +@@ -2174,6 +2180,8 @@ static int pl330_terminate_all(struct dm + pch->thread->req[0].desc = NULL; + pch->thread->req[1].desc = NULL; + pch->thread->req_running = -1; ++ power_down = pch->active; ++ pch->active = false; + + /* Mark all desc done */ + list_for_each_entry(desc, &pch->submitted_list, node) { +@@ -2191,6 +2199,8 @@ static int pl330_terminate_all(struct dm + list_splice_tail_init(&pch->completed_list, &pl330->desc_pool); + spin_unlock_irqrestore(&pch->lock, flags); + pm_runtime_mark_last_busy(pl330->ddma.dev); ++ if (power_down) ++ pm_runtime_put_autosuspend(pl330->ddma.dev); + pm_runtime_put_autosuspend(pl330->ddma.dev); + + return 0; +@@ -2350,6 +2360,7 @@ static void pl330_issue_pending(struct d + * updated on work_list emptiness status. + */ + WARN_ON(list_empty(&pch->submitted_list)); ++ pch->active = true; + pm_runtime_get_sync(pch->dmac->ddma.dev); + } + list_splice_tail_init(&pch->submitted_list, &pch->work_list); diff --git a/queue-4.9/dmaengine-rcar-dmac-unmap-slave-resource-when-channel-is-freed.patch b/queue-4.9/dmaengine-rcar-dmac-unmap-slave-resource-when-channel-is-freed.patch new file mode 100644 index 00000000000..27a0da278dd --- /dev/null +++ b/queue-4.9/dmaengine-rcar-dmac-unmap-slave-resource-when-channel-is-freed.patch @@ -0,0 +1,51 @@ +From 3139dc8ded6f27552a248d23fe9f086e3027fa12 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Niklas=20S=C3=B6derlund?= +Date: Wed, 11 Jan 2017 15:39:31 +0100 +Subject: dmaengine: rcar-dmac: unmap slave resource when channel is freed +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Niklas Söderlund + +commit 3139dc8ded6f27552a248d23fe9f086e3027fa12 upstream. + +The slave mapping should be removed together with other channel +resources when the channel is freed. If it's not unmapped it will hang +around forever after the channel is freed. + +Fixes: 9f878603dbdb7db3 ("dmaengine: rcar-dmac: add iommu support for slave transfers") +Reported-by: Laurent Pinchart +Signed-off-by: Niklas Söderlund +Reviewed-by: Laurent Pinchart +Signed-off-by: Vinod Koul +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/dma/sh/rcar-dmac.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +--- a/drivers/dma/sh/rcar-dmac.c ++++ b/drivers/dma/sh/rcar-dmac.c +@@ -986,6 +986,7 @@ static void rcar_dmac_free_chan_resource + { + struct rcar_dmac_chan *rchan = to_rcar_dmac_chan(chan); + struct rcar_dmac *dmac = to_rcar_dmac(chan->device); ++ struct rcar_dmac_chan_map *map = &rchan->map; + struct rcar_dmac_desc_page *page, *_page; + struct rcar_dmac_desc *desc; + LIST_HEAD(list); +@@ -1019,6 +1020,13 @@ static void rcar_dmac_free_chan_resource + free_page((unsigned long)page); + } + ++ /* Remove slave mapping if present. */ ++ if (map->slave.xfer_size) { ++ dma_unmap_resource(chan->device->dev, map->addr, ++ map->slave.xfer_size, map->dir, 0); ++ map->slave.xfer_size = 0; ++ } ++ + pm_runtime_put(chan->device->dev); + } + diff --git a/queue-4.9/gs1662-drop-kfree-for-memory-allocated-with-devm_kzalloc.patch b/queue-4.9/gs1662-drop-kfree-for-memory-allocated-with-devm_kzalloc.patch new file mode 100644 index 00000000000..850469be09c --- /dev/null +++ b/queue-4.9/gs1662-drop-kfree-for-memory-allocated-with-devm_kzalloc.patch @@ -0,0 +1,36 @@ +From df94121f02ecce435d6b5277071eb94b764caa89 Mon Sep 17 00:00:00 2001 +From: Wei Yongjun +Date: Wed, 21 Sep 2016 10:09:39 -0300 +Subject: [media] gs1662: drop kfree for memory allocated with devm_kzalloc + +From: Wei Yongjun + +commit df94121f02ecce435d6b5277071eb94b764caa89 upstream. + +It's not necessary to free memory allocated with devm_kzalloc +and using kfree leads to a double free. + +Fixes: 7aae6e2df127 ("[media] Add GS1662 driver, a video serializer") + +Signed-off-by: Wei Yongjun +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/spi/gs1662.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +--- a/drivers/media/spi/gs1662.c ++++ b/drivers/media/spi/gs1662.c +@@ -453,10 +453,9 @@ static int gs_probe(struct spi_device *s + static int gs_remove(struct spi_device *spi) + { + struct v4l2_subdev *sd = spi_get_drvdata(spi); +- struct gs *gs = to_gs(sd); + + v4l2_device_unregister_subdev(sd); +- kfree(gs); ++ + return 0; + } + diff --git a/queue-4.9/ite-cir-initialize-use_demodulator-before-using-it.patch b/queue-4.9/ite-cir-initialize-use_demodulator-before-using-it.patch new file mode 100644 index 00000000000..e5285085231 --- /dev/null +++ b/queue-4.9/ite-cir-initialize-use_demodulator-before-using-it.patch @@ -0,0 +1,38 @@ +From 7ec03e60ef81c19b5d3a46dd070ee966774b860f Mon Sep 17 00:00:00 2001 +From: Nicolas Iooss +Date: Sat, 10 Sep 2016 13:59:49 -0300 +Subject: [media] ite-cir: initialize use_demodulator before using it + +From: Nicolas Iooss + +commit 7ec03e60ef81c19b5d3a46dd070ee966774b860f upstream. + +Function ite_set_carrier_params() uses variable use_demodulator after +having initialized it to false in some if branches, but this variable is +never set to true otherwise. + +This bug has been found using clang -Wsometimes-uninitialized warning +flag. + +Fixes: 620a32bba4a2 ("[media] rc: New rc-based ite-cir driver for +several ITE CIRs") + +Signed-off-by: Nicolas Iooss +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/rc/ite-cir.c | 2 ++ + 1 file changed, 2 insertions(+) + +--- a/drivers/media/rc/ite-cir.c ++++ b/drivers/media/rc/ite-cir.c +@@ -263,6 +263,8 @@ static void ite_set_carrier_params(struc + + if (allowance > ITE_RXDCR_MAX) + allowance = ITE_RXDCR_MAX; ++ ++ use_demodulator = true; + } + } + diff --git a/queue-4.9/libceph-make-sure-ceph_aes_crypt-iv-is-aligned.patch b/queue-4.9/libceph-make-sure-ceph_aes_crypt-iv-is-aligned.patch new file mode 100644 index 00000000000..b4bfab53b59 --- /dev/null +++ b/queue-4.9/libceph-make-sure-ceph_aes_crypt-iv-is-aligned.patch @@ -0,0 +1,30 @@ +From 124f930b8cbc4ac11236e6eb1c5f008318864588 Mon Sep 17 00:00:00 2001 +From: Ilya Dryomov +Date: Mon, 16 Jan 2017 19:16:46 +0100 +Subject: libceph: make sure ceph_aes_crypt() IV is aligned + +From: Ilya Dryomov + +commit 124f930b8cbc4ac11236e6eb1c5f008318864588 upstream. + +... otherwise the crypto stack will align it for us with a GFP_ATOMIC +allocation and a memcpy() -- see skcipher_walk_first(). + +Signed-off-by: Ilya Dryomov +Signed-off-by: Greg Kroah-Hartman + +--- + net/ceph/crypto.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/net/ceph/crypto.c ++++ b/net/ceph/crypto.c +@@ -164,7 +164,7 @@ static int ceph_aes_crypt(const struct c + SKCIPHER_REQUEST_ON_STACK(req, tfm); + struct sg_table sgt; + struct scatterlist prealloc_sg; +- char iv[AES_BLOCK_SIZE]; ++ char iv[AES_BLOCK_SIZE] __aligned(8); + int pad_byte = AES_BLOCK_SIZE - (in_len & (AES_BLOCK_SIZE - 1)); + int crypt_len = encrypt ? in_len + pad_byte : in_len; + int ret; diff --git a/queue-4.9/mtd-spi-nor-fix-some-error-codes-in-cqspi_setup_flash.patch b/queue-4.9/mtd-spi-nor-fix-some-error-codes-in-cqspi_setup_flash.patch new file mode 100644 index 00000000000..82c6e885882 --- /dev/null +++ b/queue-4.9/mtd-spi-nor-fix-some-error-codes-in-cqspi_setup_flash.patch @@ -0,0 +1,41 @@ +From 10ad1d754a434c024ce7eeb1cec9f69fd3ecc863 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Thu, 13 Oct 2016 11:30:39 +0300 +Subject: mtd: spi-nor: Fix some error codes in cqspi_setup_flash() + +From: Dan Carpenter + +commit 10ad1d754a434c024ce7eeb1cec9f69fd3ecc863 upstream. + +We return success or possibly uninitialized values on these error paths +instead of proper error codes. + +Fixes: 140623410536 ("mtd: spi-nor: Add driver for Cadence Quad SPI Flash Controller") +Signed-off-by: Dan Carpenter +Reviewed-by: Marek Vasut +Reviewed-by: Moritz Fischer +Signed-off-by: Cyrille Pitchen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/spi-nor/cadence-quadspi.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +--- a/drivers/mtd/spi-nor/cadence-quadspi.c ++++ b/drivers/mtd/spi-nor/cadence-quadspi.c +@@ -1077,12 +1077,14 @@ static int cqspi_setup_flash(struct cqsp + + /* Get flash device data */ + for_each_available_child_of_node(dev->of_node, np) { +- if (of_property_read_u32(np, "reg", &cs)) { ++ ret = of_property_read_u32(np, "reg", &cs); ++ if (ret) { + dev_err(dev, "Couldn't determine chip select.\n"); + goto err; + } + + if (cs >= CQSPI_MAX_CHIPSELECT) { ++ ret = -EINVAL; + dev_err(dev, "Chip select %d out of range.\n", cs); + goto err; + } diff --git a/queue-4.9/mtd-spi-nor-off-by-one-in-cqspi_setup_flash.patch b/queue-4.9/mtd-spi-nor-off-by-one-in-cqspi_setup_flash.patch new file mode 100644 index 00000000000..f32122bc879 --- /dev/null +++ b/queue-4.9/mtd-spi-nor-off-by-one-in-cqspi_setup_flash.patch @@ -0,0 +1,33 @@ +From 193e87143c290ec16838f5368adc0e0bc94eb931 Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Thu, 13 Oct 2016 11:06:47 +0300 +Subject: mtd: spi-nor: Off by one in cqspi_setup_flash() + +From: Dan Carpenter + +commit 193e87143c290ec16838f5368adc0e0bc94eb931 upstream. + +There are CQSPI_MAX_CHIPSELECT elements in the ->f_pdata array so the > +should be >=. + +Fixes: 140623410536 ('mtd: spi-nor: Add driver for Cadence Quad SPI Flash Controller') +Signed-off-by: Dan Carpenter +Reviewed-by: Marek Vasut +Signed-off-by: Cyrille Pitchen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/mtd/spi-nor/cadence-quadspi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mtd/spi-nor/cadence-quadspi.c ++++ b/drivers/mtd/spi-nor/cadence-quadspi.c +@@ -1082,7 +1082,7 @@ static int cqspi_setup_flash(struct cqsp + goto err; + } + +- if (cs > CQSPI_MAX_CHIPSELECT) { ++ if (cs >= CQSPI_MAX_CHIPSELECT) { + dev_err(dev, "Chip select %d out of range.\n", cs); + goto err; + } diff --git a/queue-4.9/platform-pxa_camera-add-video_v4l2-dependency.patch b/queue-4.9/platform-pxa_camera-add-video_v4l2-dependency.patch new file mode 100644 index 00000000000..6230678a395 --- /dev/null +++ b/queue-4.9/platform-pxa_camera-add-video_v4l2-dependency.patch @@ -0,0 +1,48 @@ +From ff681022c6639c194fbb6893c50ace9e52a44788 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Mon, 19 Sep 2016 09:46:30 -0300 +Subject: [media] platform: pxa_camera: add VIDEO_V4L2 dependency + +From: Arnd Bergmann + +commit ff681022c6639c194fbb6893c50ace9e52a44788 upstream. + +Moving the pxa_camera driver from soc_camera lots the implied +VIDEO_V4L2 Kconfig dependency, and building the driver without +V4L2 results in a kernel that cannot link: + +drivers/media/platform/pxa_camera.o: In function `pxa_camera_remove': +pxa_camera.c:(.text.pxa_camera_remove+0x10): undefined reference to `v4l2_clk_unregister' +pxa_camera.c:(.text.pxa_camera_remove+0x18): undefined reference to `v4l2_device_unregister' +drivers/media/platform/pxa_camera.o: In function `pxa_camera_probe': +pxa_camera.c:(.text.pxa_camera_probe+0x458): undefined reference to `v4l2_of_parse_endpoint' +drivers/media/v4l2-core/videobuf2-core.o: In function `__enqueue_in_driver': +drivers/media/v4l2-core/videobuf2-core.o: In function `vb2_core_streamon': +videobuf2-core.c:(.text.vb2_core_streamon+0x1b4): undefined reference to `v4l_vb2q_enable_media_source' +drivers/media/v4l2-core/videobuf2-v4l2.o: In function `vb2_ioctl_reqbufs': +videobuf2-v4l2.c:(.text.vb2_ioctl_reqbufs+0xc): undefined reference to `video_devdata' + +This adds back an explicit dependency. + +Fixes: 3050b9985024 ("[media] media: platform: pxa_camera: move pxa_camera out of soc_camera") + +Signed-off-by: Arnd Bergmann +Acked-by: Robert Jarzmik +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/platform/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/media/platform/Kconfig ++++ b/drivers/media/platform/Kconfig +@@ -93,7 +93,7 @@ config VIDEO_OMAP3_DEBUG + + config VIDEO_PXA27x + tristate "PXA27x Quick Capture Interface driver" +- depends on VIDEO_DEV && HAS_DMA ++ depends on VIDEO_DEV && VIDEO_V4L2 && HAS_DMA + depends on PXA27x || COMPILE_TEST + select VIDEOBUF2_DMA_SG + select SG_SPLIT diff --git a/queue-4.9/pm-devfreq-exynos-bus-fix-the-wrong-return-value.patch b/queue-4.9/pm-devfreq-exynos-bus-fix-the-wrong-return-value.patch new file mode 100644 index 00000000000..44968b7555a --- /dev/null +++ b/queue-4.9/pm-devfreq-exynos-bus-fix-the-wrong-return-value.patch @@ -0,0 +1,33 @@ +From 32dd7731699765f21dbe6df9020e613d4ed73fc3 Mon Sep 17 00:00:00 2001 +From: Chanwoo Choi +Date: Wed, 28 Dec 2016 20:52:36 +0900 +Subject: PM / devfreq: exynos-bus: Fix the wrong return value + +From: Chanwoo Choi + +commit 32dd7731699765f21dbe6df9020e613d4ed73fc3 upstream. + +This patch fixes the wrong return value. If devfreq driver requires the wrong +and non-available governor, it is fail. So, this patch returns the error +insead of -EPROBE_DEFER. + +Fixes: 403e0689d2a9 (PM / devfreq: exynos: Add support of bus frequency of sub-blocks using passive governor) +Signed-off-by: Chanwoo Choi +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/devfreq/exynos-bus.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/devfreq/exynos-bus.c ++++ b/drivers/devfreq/exynos-bus.c +@@ -498,7 +498,7 @@ passive: + if (IS_ERR(bus->devfreq)) { + dev_err(dev, + "failed to add devfreq dev with passive governor\n"); +- ret = -EPROBE_DEFER; ++ ret = PTR_ERR(bus->devfreq); + goto err; + } + diff --git a/queue-4.9/pm-devfreq-fix-the-bug-of-devfreq_add_device-when-governor-is-null.patch b/queue-4.9/pm-devfreq-fix-the-bug-of-devfreq_add_device-when-governor-is-null.patch new file mode 100644 index 00000000000..409ac4fb36d --- /dev/null +++ b/queue-4.9/pm-devfreq-fix-the-bug-of-devfreq_add_device-when-governor-is-null.patch @@ -0,0 +1,46 @@ +From 73613b16cb5c5d5a659fc8832eff99eead3f9afb Mon Sep 17 00:00:00 2001 +From: Chanwoo Choi +Date: Wed, 28 Dec 2016 20:52:35 +0900 +Subject: PM / devfreq: Fix the bug of devfreq_add_device when governor is NULL + +From: Chanwoo Choi + +commit 73613b16cb5c5d5a659fc8832eff99eead3f9afb upstream. + +This patch fixes the bug of devfreq_add_device(). The devfreq device must +have the default governor. If find_devfreq_governor() returns error, +devfreq_add_device() fail to add the devfreq instance. + +Fixes: 1b5c1be2c88e (PM / devfreq: map devfreq drivers to governor using name) +Signed-off-by: Chanwoo Choi +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/devfreq/devfreq.c | 15 ++++++++++----- + 1 file changed, 10 insertions(+), 5 deletions(-) + +--- a/drivers/devfreq/devfreq.c ++++ b/drivers/devfreq/devfreq.c +@@ -593,11 +593,16 @@ struct devfreq *devfreq_add_device(struc + list_add(&devfreq->node, &devfreq_list); + + governor = find_devfreq_governor(devfreq->governor_name); +- if (!IS_ERR(governor)) +- devfreq->governor = governor; +- if (devfreq->governor) +- err = devfreq->governor->event_handler(devfreq, +- DEVFREQ_GOV_START, NULL); ++ if (IS_ERR(governor)) { ++ dev_err(dev, "%s: Unable to find governor for the device\n", ++ __func__); ++ err = PTR_ERR(governor); ++ goto err_init; ++ } ++ ++ devfreq->governor = governor; ++ err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, ++ NULL); + if (err) { + dev_err(dev, "%s: Unable to start governor for the device\n", + __func__); diff --git a/queue-4.9/rpmsg-virtio_rpmsg_bus-fix-channel-creation.patch b/queue-4.9/rpmsg-virtio_rpmsg_bus-fix-channel-creation.patch new file mode 100644 index 00000000000..f13d6535fb2 --- /dev/null +++ b/queue-4.9/rpmsg-virtio_rpmsg_bus-fix-channel-creation.patch @@ -0,0 +1,44 @@ +From 63447646ac657fde00bb658ce21a3431940ae0ad Mon Sep 17 00:00:00 2001 +From: Loic Pallardy +Date: Thu, 15 Dec 2016 15:49:56 +0100 +Subject: rpmsg: virtio_rpmsg_bus: fix channel creation + +From: Loic Pallardy + +commit 63447646ac657fde00bb658ce21a3431940ae0ad upstream. + +Since commit 4dffed5b3ac796b ("rpmsg: Name rpmsg devices based on +channel id"), it is no more possible for a firmware to register twice +a service (on different endpoints). rpmsg_register_device function +is failing when calling device_add for the second time as second +device has the same name as first one already register. +It is because name is based only on service name and so is not more +unique. Previously name was unique thanks to the use of rpmsg_dev_index. + +This patch adds destination and source endpoint numbers device name to +create an unique identifier. + +Fixes: 4dffed5b3ac7 ("rpmsg: Name rpmsg devices based on channel id") +Acked-by: Peter Griffin +Signed-off-by: Loic Pallardy +[bjorn: flipped name and address in device name] +Signed-off-by: Bjorn Andersson +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/rpmsg/rpmsg_core.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/rpmsg/rpmsg_core.c ++++ b/drivers/rpmsg/rpmsg_core.c +@@ -411,8 +411,8 @@ int rpmsg_register_device(struct rpmsg_d + struct device *dev = &rpdev->dev; + int ret; + +- dev_set_name(&rpdev->dev, "%s:%s", +- dev_name(dev->parent), rpdev->id.name); ++ dev_set_name(&rpdev->dev, "%s.%s.%d.%d", dev_name(dev->parent), ++ rpdev->id.name, rpdev->src, rpdev->dst); + + rpdev->dev.bus = &rpmsg_bus; + rpdev->dev.release = rpmsg_release_device; diff --git a/queue-4.9/s5p-cec-mark-pm-functions-as-__maybe_unused-again.patch b/queue-4.9/s5p-cec-mark-pm-functions-as-__maybe_unused-again.patch new file mode 100644 index 00000000000..f343675fbcc --- /dev/null +++ b/queue-4.9/s5p-cec-mark-pm-functions-as-__maybe_unused-again.patch @@ -0,0 +1,55 @@ +From eadf081146ec327d6fbbb6aff28e3d9aac329dc6 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Thu, 13 Oct 2016 11:39:04 -0300 +Subject: [media] s5p-cec: mark PM functions as __maybe_unused again +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Arnd Bergmann + +commit eadf081146ec327d6fbbb6aff28e3d9aac329dc6 upstream. + +A bugfix removed the two callers of s5p_cec_runtime_suspend +and s5p_cec_runtime_resume, leading to the return of a harmless +warning that I had previously fixed in commit aee8937089b1 +("[media] s5p_cec: mark suspend/resume as __maybe_unused"): + +staging/media/s5p-cec/s5p_cec.c:234:12: error: ‘s5p_cec_runtime_suspend’ defined but not used [-Werror=unused-function] +staging/media/s5p-cec/s5p_cec.c:242:12: error: ‘s5p_cec_runtime_resume’ defined but not used [-Werror=unused-function] + +This adds the __maybe_unused annotations to the function that +were not removed and that are now unused when CONFIG_PM +is disabled. + +Fixes: 57b978ada073 ("[media] s5p-cec: fix system and runtime PM integration") + +Signed-off-by: Arnd Bergmann +Signed-off-by: Hans Verkuil +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/staging/media/s5p-cec/s5p_cec.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/staging/media/s5p-cec/s5p_cec.c ++++ b/drivers/staging/media/s5p-cec/s5p_cec.c +@@ -231,7 +231,7 @@ static int s5p_cec_remove(struct platfor + return 0; + } + +-static int s5p_cec_runtime_suspend(struct device *dev) ++static int __maybe_unused s5p_cec_runtime_suspend(struct device *dev) + { + struct s5p_cec_dev *cec = dev_get_drvdata(dev); + +@@ -239,7 +239,7 @@ static int s5p_cec_runtime_suspend(struc + return 0; + } + +-static int s5p_cec_runtime_resume(struct device *dev) ++static int __maybe_unused s5p_cec_runtime_resume(struct device *dev) + { + struct s5p_cec_dev *cec = dev_get_drvdata(dev); + int ret; diff --git a/queue-4.9/s5p-mfc-fix-clock-management-in-s5p_mfc_release-function.patch b/queue-4.9/s5p-mfc-fix-clock-management-in-s5p_mfc_release-function.patch new file mode 100644 index 00000000000..c5ff8a314af --- /dev/null +++ b/queue-4.9/s5p-mfc-fix-clock-management-in-s5p_mfc_release-function.patch @@ -0,0 +1,54 @@ +From c0026c7bfb95c250c3e34fde59f96ad72fd730d6 Mon Sep 17 00:00:00 2001 +From: Marek Szyprowski +Date: Mon, 14 Nov 2016 12:09:26 -0200 +Subject: [media] s5p-mfc: Fix clock management in s5p_mfc_release() function + +From: Marek Szyprowski + +commit c0026c7bfb95c250c3e34fde59f96ad72fd730d6 upstream. + +Clock control indirectly requires access to MFC device, so call it only +if we are sure that the device exists in s5p_mfc_release function. +s5p_mfc_remove() calls s5p_mfc_final_pm(), which releases all PM related +resources, including clocks, so any call to clocks related functions +is not valid after s5p_mfc_final_pm(). + +Fixes: d695c12 ("[media] media: s5p-mfc fix invalid memory access from +s5p_mfc_release()") + +Signed-off-by: Marek Szyprowski +Signed-off-by: Sylwester Nawrocki +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/platform/s5p-mfc/s5p_mfc.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +--- a/drivers/media/platform/s5p-mfc/s5p_mfc.c ++++ b/drivers/media/platform/s5p-mfc/s5p_mfc.c +@@ -926,10 +926,11 @@ static int s5p_mfc_release(struct file * + mfc_debug_enter(); + if (dev) + mutex_lock(&dev->mfc_mutex); +- s5p_mfc_clock_on(); + vb2_queue_release(&ctx->vq_src); + vb2_queue_release(&ctx->vq_dst); + if (dev) { ++ s5p_mfc_clock_on(); ++ + /* Mark context as idle */ + clear_work_bit_irqsave(ctx); + /* +@@ -951,9 +952,9 @@ static int s5p_mfc_release(struct file * + if (s5p_mfc_power_off() < 0) + mfc_err("Power off failed\n"); + } ++ mfc_debug(2, "Shutting down clock\n"); ++ s5p_mfc_clock_off(); + } +- mfc_debug(2, "Shutting down clock\n"); +- s5p_mfc_clock_off(); + if (dev) + dev->ctx[ctx->num] = NULL; + s5p_mfc_dec_ctrls_delete(ctx); diff --git a/queue-4.9/scsi-mpt3sas-fix-hang-on-ata-passthrough-commands.patch b/queue-4.9/scsi-mpt3sas-fix-hang-on-ata-passthrough-commands.patch new file mode 100644 index 00000000000..feafecc9068 --- /dev/null +++ b/queue-4.9/scsi-mpt3sas-fix-hang-on-ata-passthrough-commands.patch @@ -0,0 +1,149 @@ +From ffb58456589443ca572221fabbdef3db8483a779 Mon Sep 17 00:00:00 2001 +From: James Bottomley +Date: Sun, 1 Jan 2017 09:39:24 -0800 +Subject: scsi: mpt3sas: fix hang on ata passthrough commands + +From: James Bottomley + +commit ffb58456589443ca572221fabbdef3db8483a779 upstream. + +mpt3sas has a firmware failure where it can only handle one pass through +ATA command at a time. If another comes in, contrary to the SAT +standard, it will hang until the first one completes (causing long +commands like secure erase to timeout). The original fix was to block +the device when an ATA command came in, but this caused a regression +with + +commit 669f044170d8933c3d66d231b69ea97cb8447338 +Author: Bart Van Assche +Date: Tue Nov 22 16:17:13 2016 -0800 + + scsi: srp_transport: Move queuecommand() wait code to SCSI core + +So fix the original fix of the secure erase timeout by properly +returning SAM_STAT_BUSY like the SAT recommends. The original patch +also had a concurrency problem since scsih_qcmd is lockless at that +point (this is fixed by using atomic bitops to set and test the flag). + +[mkp: addressed feedback wrt. test_bit and fixed whitespace] + +Fixes: 18f6084a989ba1b (mpt3sas: Fix secure erase premature termination) +Signed-off-by: James Bottomley +Acked-by: Sreekanth Reddy +Reviewed-by: Christoph Hellwig +Reported-by: Ingo Molnar +Tested-by: Ingo Molnar +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/mpt3sas/mpt3sas_base.h | 12 ++++++++++ + drivers/scsi/mpt3sas/mpt3sas_scsih.c | 40 ++++++++++++++++++++++------------- + 2 files changed, 38 insertions(+), 14 deletions(-) + +--- a/drivers/scsi/mpt3sas/mpt3sas_base.h ++++ b/drivers/scsi/mpt3sas/mpt3sas_base.h +@@ -393,6 +393,7 @@ struct MPT3SAS_TARGET { + * @eedp_enable: eedp support enable bit + * @eedp_type: 0(type_1), 1(type_2), 2(type_3) + * @eedp_block_length: block size ++ * @ata_command_pending: SATL passthrough outstanding for device + */ + struct MPT3SAS_DEVICE { + struct MPT3SAS_TARGET *sas_target; +@@ -402,6 +403,17 @@ struct MPT3SAS_DEVICE { + u8 block; + u8 tlr_snoop_check; + u8 ignore_delay_remove; ++ /* ++ * Bug workaround for SATL handling: the mpt2/3sas firmware ++ * doesn't return BUSY or TASK_SET_FULL for subsequent ++ * commands while a SATL pass through is in operation as the ++ * spec requires, it simply does nothing with them until the ++ * pass through completes, causing them possibly to timeout if ++ * the passthrough is a long executing command (like format or ++ * secure erase). This variable allows us to do the right ++ * thing while a SATL command is pending. ++ */ ++ unsigned long ata_command_pending; + }; + + #define MPT3_CMD_NOT_USED 0x8000 /* free */ +--- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c ++++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c +@@ -3885,9 +3885,18 @@ _scsih_temp_threshold_events(struct MPT3 + } + } + +-static inline bool ata_12_16_cmd(struct scsi_cmnd *scmd) ++static int _scsih_set_satl_pending(struct scsi_cmnd *scmd, bool pending) + { +- return (scmd->cmnd[0] == ATA_12 || scmd->cmnd[0] == ATA_16); ++ struct MPT3SAS_DEVICE *priv = scmd->device->hostdata; ++ ++ if (scmd->cmnd[0] != ATA_12 && scmd->cmnd[0] != ATA_16) ++ return 0; ++ ++ if (pending) ++ return test_and_set_bit(0, &priv->ata_command_pending); ++ ++ clear_bit(0, &priv->ata_command_pending); ++ return 0; + } + + /** +@@ -3911,9 +3920,7 @@ _scsih_flush_running_cmds(struct MPT3SAS + if (!scmd) + continue; + count++; +- if (ata_12_16_cmd(scmd)) +- scsi_internal_device_unblock(scmd->device, +- SDEV_RUNNING); ++ _scsih_set_satl_pending(scmd, false); + mpt3sas_base_free_smid(ioc, smid); + scsi_dma_unmap(scmd); + if (ioc->pci_error_recovery) +@@ -4044,13 +4051,6 @@ scsih_qcmd(struct Scsi_Host *shost, stru + if (ioc->logging_level & MPT_DEBUG_SCSI) + scsi_print_command(scmd); + +- /* +- * Lock the device for any subsequent command until command is +- * done. +- */ +- if (ata_12_16_cmd(scmd)) +- scsi_internal_device_block(scmd->device); +- + sas_device_priv_data = scmd->device->hostdata; + if (!sas_device_priv_data || !sas_device_priv_data->sas_target) { + scmd->result = DID_NO_CONNECT << 16; +@@ -4064,6 +4064,19 @@ scsih_qcmd(struct Scsi_Host *shost, stru + return 0; + } + ++ /* ++ * Bug work around for firmware SATL handling. The loop ++ * is based on atomic operations and ensures consistency ++ * since we're lockless at this point ++ */ ++ do { ++ if (test_bit(0, &sas_device_priv_data->ata_command_pending)) { ++ scmd->result = SAM_STAT_BUSY; ++ scmd->scsi_done(scmd); ++ return 0; ++ } ++ } while (_scsih_set_satl_pending(scmd, true)); ++ + sas_target_priv_data = sas_device_priv_data->sas_target; + + /* invalid device handle */ +@@ -4626,8 +4639,7 @@ _scsih_io_done(struct MPT3SAS_ADAPTER *i + if (scmd == NULL) + return 1; + +- if (ata_12_16_cmd(scmd)) +- scsi_internal_device_unblock(scmd->device, SDEV_RUNNING); ++ _scsih_set_satl_pending(scmd, false); + + mpi_request = mpt3sas_base_get_msg_frame(ioc, smid); + diff --git a/queue-4.9/scsi-ses-fix-sas-device-detection-in-enclosure.patch b/queue-4.9/scsi-ses-fix-sas-device-detection-in-enclosure.patch new file mode 100644 index 00000000000..f71cf158a64 --- /dev/null +++ b/queue-4.9/scsi-ses-fix-sas-device-detection-in-enclosure.patch @@ -0,0 +1,34 @@ +From 9373eba6cfae48911b977d14323032cd5d161aae Mon Sep 17 00:00:00 2001 +From: "Ewan D. Milne" +Date: Mon, 9 Jan 2017 16:33:36 -0500 +Subject: scsi: ses: Fix SAS device detection in enclosure + +From: Ewan D. Milne + +commit 9373eba6cfae48911b977d14323032cd5d161aae upstream. + +The call to scsi_is_sas_rphy() needs to be made on the SAS end_device, +not on the SCSI device. + +Fixes: 835831c57e9b ("ses: use scsi_is_sas_rphy instead of is_sas_attached") +Signed-off-by: Ewan D. Milne +Reviewed-by: Johannes Thumshirn +Reviewed-by: James Bottomley +Signed-off-by: Martin K. Petersen +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/scsi/ses.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/scsi/ses.c ++++ b/drivers/scsi/ses.c +@@ -587,7 +587,7 @@ static void ses_match_to_enclosure(struc + + ses_enclosure_data_process(edev, to_scsi_device(edev->edev.parent), 0); + +- if (scsi_is_sas_rphy(&sdev->sdev_gendev)) ++ if (scsi_is_sas_rphy(sdev->sdev_target->dev.parent)) + efd.addr = sas_get_address(sdev); + + if (efd.addr) { diff --git a/queue-4.9/selftest-powerpc-wrong-pmc-initialized-in-pmc56_overflow-test.patch b/queue-4.9/selftest-powerpc-wrong-pmc-initialized-in-pmc56_overflow-test.patch new file mode 100644 index 00000000000..17cca1775c5 --- /dev/null +++ b/queue-4.9/selftest-powerpc-wrong-pmc-initialized-in-pmc56_overflow-test.patch @@ -0,0 +1,32 @@ +From df21d2fa733035e4d414379960f94b2516b41296 Mon Sep 17 00:00:00 2001 +From: Madhavan Srinivasan +Date: Mon, 19 Dec 2016 17:46:53 +0530 +Subject: selftest/powerpc: Wrong PMC initialized in pmc56_overflow test + +From: Madhavan Srinivasan + +commit df21d2fa733035e4d414379960f94b2516b41296 upstream. + +Test uses PMC2 to count the event. But PMC1 is being initialized. +Patch to fix it. + +Fixes: 3752e453f6ba ('selftests/powerpc: Add tests of PMU EBBs') +Signed-off-by: Madhavan Srinivasan +Signed-off-by: Michael Ellerman +Signed-off-by: Greg Kroah-Hartman + +--- + tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c ++++ b/tools/testing/selftests/powerpc/pmu/ebb/pmc56_overflow_test.c +@@ -66,7 +66,7 @@ int pmc56_overflow(void) + + FAIL_IF(ebb_event_enable(&event)); + +- mtspr(SPRN_PMC1, pmc_sample_period(sample_period)); ++ mtspr(SPRN_PMC2, pmc_sample_period(sample_period)); + mtspr(SPRN_PMC5, 0); + mtspr(SPRN_PMC6, 0); + diff --git a/queue-4.9/series b/queue-4.9/series index 0d7c60ab699..907189a9db9 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -82,3 +82,45 @@ libceph-tweak-calcu_signature-a-little.patch libceph-switch-ceph_x_encrypt-to-ceph_crypt.patch libceph-switch-ceph_x_decrypt-to-ceph_crypt.patch libceph-remove-now-unused-ceph_-en-de-crypt-functions.patch +arm-dts-dra7-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-dm816x-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-dm814x-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-am33xx-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-omap4-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-omap5-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-am4372-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-omap3-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-omap2-add-an-empty-chosen-node-to-top-level-dtsi.patch +arm-dts-imx6qdl-nitrogen6_max-fix-sgtl5000-pinctrl-init.patch +arm-dts-omap3-fix-card-detect-and-write-protect-on-logic-pd-som-lv.patch +arm-ux500-fix-prcmu_is_cpu_in_wfi-calculation.patch +arm-8613-1-fix-the-uaccess-crash-on-pb11mpcore.patch +ceph-fix-scheduler-warning-due-to-nested-blocking.patch +ceph-fix-ceph_get_caps-interruption.patch +ceph-fix-endianness-of-getattr-mask-in-ceph_d_revalidate.patch +ceph-fix-endianness-bug-in-frag_tree_split_cmp.patch +libceph-make-sure-ceph_aes_crypt-iv-is-aligned.patch +xprtrdma-make-frwr-send-queue-entry-accounting-more-accurate.patch +xprtrdma-squelch-max-send-max-recv-messages-at-connect-time.patch +arm64-mm-avoid-name-clash-in-__page_to_voff.patch +arm64-fix-swiotlb-fallback-allocation.patch +scsi-ses-fix-sas-device-detection-in-enclosure.patch +scsi-mpt3sas-fix-hang-on-ata-passthrough-commands.patch +pm-devfreq-exynos-bus-fix-the-wrong-return-value.patch +pm-devfreq-fix-the-bug-of-devfreq_add_device-when-governor-is-null.patch +mtd-spi-nor-off-by-one-in-cqspi_setup_flash.patch +mtd-spi-nor-fix-some-error-codes-in-cqspi_setup_flash.patch +rpmsg-virtio_rpmsg_bus-fix-channel-creation.patch +blackfin-check-devm_pinctrl_get-for-errors.patch +platform-pxa_camera-add-video_v4l2-dependency.patch +gs1662-drop-kfree-for-memory-allocated-with-devm_kzalloc.patch +ite-cir-initialize-use_demodulator-before-using-it.patch +st-hva-fix-some-error-handling-in-hva_hw_probe.patch +s5p-cec-mark-pm-functions-as-__maybe_unused-again.patch +s5p-mfc-fix-clock-management-in-s5p_mfc_release-function.patch +dmaengine-rcar-dmac-unmap-slave-resource-when-channel-is-freed.patch +dmaengine-pl330-fix-runtime-pm-support-for-terminated-transfers.patch +spi-pxa2xx-add-missed-break.patch +soc-ti-wkup_m3_ipc-fix-error-return-code-in-wkup_m3_ipc_probe.patch +selftest-powerpc-wrong-pmc-initialized-in-pmc56_overflow-test.patch +tools-virtio-ringtest-fix-run-on-all.sh-for-offline-cpus.patch diff --git a/queue-4.9/soc-ti-wkup_m3_ipc-fix-error-return-code-in-wkup_m3_ipc_probe.patch b/queue-4.9/soc-ti-wkup_m3_ipc-fix-error-return-code-in-wkup_m3_ipc_probe.patch new file mode 100644 index 00000000000..585ba98707b --- /dev/null +++ b/queue-4.9/soc-ti-wkup_m3_ipc-fix-error-return-code-in-wkup_m3_ipc_probe.patch @@ -0,0 +1,31 @@ +From 36b29eb30ee0f6c99f06bea406c23a3fd4cbb80b Mon Sep 17 00:00:00 2001 +From: Wei Yongjun +Date: Thu, 12 Jan 2017 14:53:41 +0000 +Subject: soc: ti: wkup_m3_ipc: Fix error return code in wkup_m3_ipc_probe() + +From: Wei Yongjun + +commit 36b29eb30ee0f6c99f06bea406c23a3fd4cbb80b upstream. + +Fix to return a negative error code from the kthread_run() error +handling case instead of 0, as done elsewhere in this function. + +Fixes: cdd5de500b2c ("soc: ti: Add wkup_m3_ipc driver") +Signed-off-by: Wei Yongjun +Signed-off-by: Tony Lindgren +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/soc/ti/wkup_m3_ipc.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/soc/ti/wkup_m3_ipc.c ++++ b/drivers/soc/ti/wkup_m3_ipc.c +@@ -459,6 +459,7 @@ static int wkup_m3_ipc_probe(struct plat + + if (IS_ERR(task)) { + dev_err(dev, "can't create rproc_boot thread\n"); ++ ret = PTR_ERR(task); + goto err_put_rproc; + } + diff --git a/queue-4.9/spi-pxa2xx-add-missed-break.patch b/queue-4.9/spi-pxa2xx-add-missed-break.patch new file mode 100644 index 00000000000..ac996b64add --- /dev/null +++ b/queue-4.9/spi-pxa2xx-add-missed-break.patch @@ -0,0 +1,35 @@ +From a2dd8af00ca7fff4972425a4a6b19dd1840dc807 Mon Sep 17 00:00:00 2001 +From: Andy Shevchenko +Date: Mon, 2 Jan 2017 13:44:28 +0200 +Subject: spi: pxa2xx: add missed break + +From: Andy Shevchenko + +commit a2dd8af00ca7fff4972425a4a6b19dd1840dc807 upstream. + +The commit 7c7289a40425 ("spi: pxa2xx: Default thresholds to PXA +configuration") while splitting up CE4100 code obviously missed a break +condition in one chunk. Add it here. + +Looks like we have no active user of CE4100, though better to fix this later +than never. + +Fixes: commit 7c7289a40425 ("spi: pxa2xx: Default thresholds to PXA configuration") +Signed-off-by: Andy Shevchenko +Signed-off-by: Mark Brown +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/spi/spi-pxa2xx.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/spi/spi-pxa2xx.c ++++ b/drivers/spi/spi-pxa2xx.c +@@ -1690,6 +1690,7 @@ static int pxa2xx_spi_probe(struct platf + pxa2xx_spi_write(drv_data, SSCR1, tmp); + tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8); + pxa2xx_spi_write(drv_data, SSCR0, tmp); ++ break; + default: + tmp = SSCR1_RxTresh(RX_THRESH_DFLT) | + SSCR1_TxTresh(TX_THRESH_DFLT); diff --git a/queue-4.9/st-hva-fix-some-error-handling-in-hva_hw_probe.patch b/queue-4.9/st-hva-fix-some-error-handling-in-hva_hw_probe.patch new file mode 100644 index 00000000000..1b7696127ea --- /dev/null +++ b/queue-4.9/st-hva-fix-some-error-handling-in-hva_hw_probe.patch @@ -0,0 +1,48 @@ +From 6b2bed891253c08e7f4c17dbd46b71fc87f22eef Mon Sep 17 00:00:00 2001 +From: Dan Carpenter +Date: Fri, 14 Oct 2016 04:32:24 -0300 +Subject: [media] st-hva: fix some error handling in hva_hw_probe() + +From: Dan Carpenter + +commit 6b2bed891253c08e7f4c17dbd46b71fc87f22eef upstream. + +The devm_ioremap_resource() returns error pointers, never NULL. The +platform_get_resource() returns NULL on error, never error pointers. +The error code needs to be set, as well. The current code returns +PTR_ERR(NULL) which is success. + +Fixes: 57b2c0628b60 ("[media] st-hva: multi-format video encoder V4L2 driver") + +Signed-off-by: Dan Carpenter +Acked-by: Jean-Christophe Trotin +Signed-off-by: Hans Verkuil +Signed-off-by: Mauro Carvalho Chehab +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/media/platform/sti/hva/hva-hw.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/media/platform/sti/hva/hva-hw.c ++++ b/drivers/media/platform/sti/hva/hva-hw.c +@@ -305,16 +305,16 @@ int hva_hw_probe(struct platform_device + /* get memory for registers */ + regs = platform_get_resource(pdev, IORESOURCE_MEM, 0); + hva->regs = devm_ioremap_resource(dev, regs); +- if (IS_ERR_OR_NULL(hva->regs)) { ++ if (IS_ERR(hva->regs)) { + dev_err(dev, "%s failed to get regs\n", HVA_PREFIX); + return PTR_ERR(hva->regs); + } + + /* get memory for esram */ + esram = platform_get_resource(pdev, IORESOURCE_MEM, 1); +- if (IS_ERR_OR_NULL(esram)) { ++ if (!esram) { + dev_err(dev, "%s failed to get esram\n", HVA_PREFIX); +- return PTR_ERR(esram); ++ return -ENODEV; + } + hva->esram_addr = esram->start; + hva->esram_size = resource_size(esram); diff --git a/queue-4.9/tools-virtio-ringtest-fix-run-on-all.sh-for-offline-cpus.patch b/queue-4.9/tools-virtio-ringtest-fix-run-on-all.sh-for-offline-cpus.patch new file mode 100644 index 00000000000..a8a57b714b2 --- /dev/null +++ b/queue-4.9/tools-virtio-ringtest-fix-run-on-all.sh-for-offline-cpus.patch @@ -0,0 +1,47 @@ +From 21f5eda9b8671744539c8295b9df62991fffb2ce Mon Sep 17 00:00:00 2001 +From: Halil Pasic +Date: Mon, 29 Aug 2016 18:25:22 +0200 +Subject: tools/virtio/ringtest: fix run-on-all.sh for offline cpus + +From: Halil Pasic + +commit 21f5eda9b8671744539c8295b9df62991fffb2ce upstream. + +Since ef1b144d ("tools/virtio/ringtest: fix run-on-all.sh to work +without /dev/cpu") run-on-all.sh uses seq 0 $HOST_AFFINITY as the list +of ids of the CPUs to run the command on (assuming ids of online CPUs +are consecutive and start from 0), where $HOST_AFFINITY is the highest +CPU id in the system previously determined using lscpu. This can fail +on systems with offline CPUs. + +Instead let's use lscpu to determine the list of online CPUs. + +Signed-off-by: Halil Pasic +Fixes: ef1b144d ("tools/virtio/ringtest: fix run-on-all.sh to work without +/dev/cpu") +Reviewed-by: Sascha Silbe +Signed-off-by: Cornelia Huck +Signed-off-by: Greg Kroah-Hartman + +--- + tools/virtio/ringtest/run-on-all.sh | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/tools/virtio/ringtest/run-on-all.sh ++++ b/tools/virtio/ringtest/run-on-all.sh +@@ -1,12 +1,13 @@ + #!/bin/sh + ++CPUS_ONLINE=$(lscpu --online -p=cpu|grep -v -e '#') + #use last CPU for host. Why not the first? + #many devices tend to use cpu0 by default so + #it tends to be busier +-HOST_AFFINITY=$(lscpu -p=cpu | tail -1) ++HOST_AFFINITY=$(echo "${CPUS_ONLINE}"|tail -n 1) + + #run command on all cpus +-for cpu in $(seq 0 $HOST_AFFINITY) ++for cpu in $CPUS_ONLINE + do + #Don't run guest and host on same CPU + #It actually works ok if using signalling diff --git a/queue-4.9/xprtrdma-make-frwr-send-queue-entry-accounting-more-accurate.patch b/queue-4.9/xprtrdma-make-frwr-send-queue-entry-accounting-more-accurate.patch new file mode 100644 index 00000000000..82e1ff23aa9 --- /dev/null +++ b/queue-4.9/xprtrdma-make-frwr-send-queue-entry-accounting-more-accurate.patch @@ -0,0 +1,150 @@ +From 8d38de65644d900199f035277aa5f3da4aa9fc17 Mon Sep 17 00:00:00 2001 +From: Chuck Lever +Date: Tue, 29 Nov 2016 10:52:16 -0500 +Subject: xprtrdma: Make FRWR send queue entry accounting more accurate + +From: Chuck Lever + +commit 8d38de65644d900199f035277aa5f3da4aa9fc17 upstream. + +Verbs providers may perform house-keeping on the Send Queue during +each signaled send completion. It is necessary therefore for a verbs +consumer (like xprtrdma) to occasionally force a signaled send +completion if it runs unsignaled most of the time. + +xprtrdma does not require signaled completions for Send or FastReg +Work Requests, but does signal some LocalInv Work Requests. To +ensure that Send Queue house-keeping can run before the Send Queue +is more than half-consumed, xprtrdma forces a signaled completion +on occasion by counting the number of Send Queue Entries it +consumes. It currently does this by counting each ib_post_send as +one Entry. + +Commit c9918ff56dfb ("xprtrdma: Add ro_unmap_sync method for FRWR") +introduced the ability for frwr_op_unmap_sync to post more than one +Work Request with a single post_send. Thus the underlying assumption +of one Send Queue Entry per ib_post_send is no longer true. + +Also, FastReg Work Requests are currently never signaled. They +should be signaled once in a while, just as Send is, to keep the +accounting of consumed SQEs accurate. + +While we're here, convert the CQCOUNT macros to the currently +preferred kernel coding style, which is inline functions. + +Fixes: c9918ff56dfb ("xprtrdma: Add ro_unmap_sync method for FRWR") +Signed-off-by: Chuck Lever +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + net/sunrpc/xprtrdma/frwr_ops.c | 13 ++++++++++--- + net/sunrpc/xprtrdma/verbs.c | 10 ++-------- + net/sunrpc/xprtrdma/xprt_rdma.h | 20 ++++++++++++++++++-- + 3 files changed, 30 insertions(+), 13 deletions(-) + +--- a/net/sunrpc/xprtrdma/frwr_ops.c ++++ b/net/sunrpc/xprtrdma/frwr_ops.c +@@ -421,7 +421,7 @@ frwr_op_map(struct rpcrdma_xprt *r_xprt, + IB_ACCESS_REMOTE_WRITE | IB_ACCESS_LOCAL_WRITE : + IB_ACCESS_REMOTE_READ; + +- DECR_CQCOUNT(&r_xprt->rx_ep); ++ rpcrdma_set_signaled(&r_xprt->rx_ep, ®_wr->wr); + rc = ib_post_send(ia->ri_id->qp, ®_wr->wr, &bad_wr); + if (rc) + goto out_senderr; +@@ -486,7 +486,7 @@ frwr_op_unmap_sync(struct rpcrdma_xprt * + struct rpcrdma_ia *ia = &r_xprt->rx_ia; + struct rpcrdma_mw *mw, *tmp; + struct rpcrdma_frmr *f; +- int rc; ++ int count, rc; + + dprintk("RPC: %s: req %p\n", __func__, req); + +@@ -496,6 +496,7 @@ frwr_op_unmap_sync(struct rpcrdma_xprt * + * a single ib_post_send() call. + */ + f = NULL; ++ count = 0; + invalidate_wrs = pos = prev = NULL; + list_for_each_entry(mw, &req->rl_registered, mw_list) { + if ((rep->rr_wc_flags & IB_WC_WITH_INVALIDATE) && +@@ -505,6 +506,7 @@ frwr_op_unmap_sync(struct rpcrdma_xprt * + } + + pos = __frwr_prepare_linv_wr(mw); ++ count++; + + if (!invalidate_wrs) + invalidate_wrs = pos; +@@ -523,7 +525,12 @@ frwr_op_unmap_sync(struct rpcrdma_xprt * + f->fr_invwr.send_flags = IB_SEND_SIGNALED; + f->fr_cqe.done = frwr_wc_localinv_wake; + reinit_completion(&f->fr_linv_done); +- INIT_CQCOUNT(&r_xprt->rx_ep); ++ ++ /* Initialize CQ count, since there is always a signaled ++ * WR being posted here. The new cqcount depends on how ++ * many SQEs are about to be consumed. ++ */ ++ rpcrdma_init_cqcount(&r_xprt->rx_ep, count); + + /* Transport disconnect drains the receive CQ before it + * replaces the QP. The RPC reply handler won't call us +--- a/net/sunrpc/xprtrdma/verbs.c ++++ b/net/sunrpc/xprtrdma/verbs.c +@@ -532,7 +532,7 @@ rpcrdma_ep_create(struct rpcrdma_ep *ep, + ep->rep_cqinit = ep->rep_attr.cap.max_send_wr/2 - 1; + if (ep->rep_cqinit <= 2) + ep->rep_cqinit = 0; /* always signal? */ +- INIT_CQCOUNT(ep); ++ rpcrdma_init_cqcount(ep, 0); + init_waitqueue_head(&ep->rep_connect_wait); + INIT_DELAYED_WORK(&ep->rep_connect_worker, rpcrdma_connect_worker); + +@@ -1311,13 +1311,7 @@ rpcrdma_ep_post(struct rpcrdma_ia *ia, + dprintk("RPC: %s: posting %d s/g entries\n", + __func__, send_wr->num_sge); + +- if (DECR_CQCOUNT(ep) > 0) +- send_wr->send_flags = 0; +- else { /* Provider must take a send completion every now and then */ +- INIT_CQCOUNT(ep); +- send_wr->send_flags = IB_SEND_SIGNALED; +- } +- ++ rpcrdma_set_signaled(ep, send_wr); + rc = ib_post_send(ia->ri_id->qp, send_wr, &send_wr_fail); + if (rc) + goto out_postsend_err; +--- a/net/sunrpc/xprtrdma/xprt_rdma.h ++++ b/net/sunrpc/xprtrdma/xprt_rdma.h +@@ -95,8 +95,24 @@ struct rpcrdma_ep { + struct delayed_work rep_connect_worker; + }; + +-#define INIT_CQCOUNT(ep) atomic_set(&(ep)->rep_cqcount, (ep)->rep_cqinit) +-#define DECR_CQCOUNT(ep) atomic_sub_return(1, &(ep)->rep_cqcount) ++static inline void ++rpcrdma_init_cqcount(struct rpcrdma_ep *ep, int count) ++{ ++ atomic_set(&ep->rep_cqcount, ep->rep_cqinit - count); ++} ++ ++/* To update send queue accounting, provider must take a ++ * send completion every now and then. ++ */ ++static inline void ++rpcrdma_set_signaled(struct rpcrdma_ep *ep, struct ib_send_wr *send_wr) ++{ ++ send_wr->send_flags = 0; ++ if (unlikely(atomic_sub_return(1, &ep->rep_cqcount) <= 0)) { ++ rpcrdma_init_cqcount(ep, 0); ++ send_wr->send_flags = IB_SEND_SIGNALED; ++ } ++} + + /* Pre-allocate extra Work Requests for handling backward receives + * and sends. This is a fixed value because the Work Queues are diff --git a/queue-4.9/xprtrdma-squelch-max-send-max-recv-messages-at-connect-time.patch b/queue-4.9/xprtrdma-squelch-max-send-max-recv-messages-at-connect-time.patch new file mode 100644 index 00000000000..23e02829a31 --- /dev/null +++ b/queue-4.9/xprtrdma-squelch-max-send-max-recv-messages-at-connect-time.patch @@ -0,0 +1,34 @@ +From 6d6bf72de914059b304f7b99530a7856e5c846aa Mon Sep 17 00:00:00 2001 +From: Chuck Lever +Date: Tue, 29 Nov 2016 10:53:13 -0500 +Subject: xprtrdma: Squelch "max send, max recv" messages at connect time + +From: Chuck Lever + +commit 6d6bf72de914059b304f7b99530a7856e5c846aa upstream. + +Clean up: This message was intended to be a dprintk, as it is on the +server-side. + +Fixes: 87cfb9a0c85c ('xprtrdma: Client-side support for ...') +Signed-off-by: Chuck Lever +Signed-off-by: Anna Schumaker +Signed-off-by: Greg Kroah-Hartman + +--- + net/sunrpc/xprtrdma/verbs.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/net/sunrpc/xprtrdma/verbs.c ++++ b/net/sunrpc/xprtrdma/verbs.c +@@ -223,8 +223,8 @@ rpcrdma_update_connect_private(struct rp + cdata->inline_rsize = rsize; + if (wsize < cdata->inline_wsize) + cdata->inline_wsize = wsize; +- pr_info("rpcrdma: max send %u, max recv %u\n", +- cdata->inline_wsize, cdata->inline_rsize); ++ dprintk("RPC: %s: max send %u, max recv %u\n", ++ __func__, cdata->inline_wsize, cdata->inline_rsize); + rpcrdma_set_max_header_sizes(r_xprt); + } +