]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Apr 2018 07:51:50 +0000 (09:51 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 6 Apr 2018 07:51:50 +0000 (09:51 +0200)
added patches:
arm-dts-dra7-add-power-hold-and-power-controller-properties-to-palmas.patch
documentation-pinctrl-palmas-add-ti-palmas-powerhold-override-property-definition.patch
fs-proc-stop-trying-to-report-thread-stacks.patch
input-i8042-add-lenovo-thinkpad-l460-to-i8042-reset-list.patch
input-i8042-enable-mux-on-sony-vaio-vgn-cs-series-to-fix-touchpad.patch
md-raid10-reset-the-first-at-the-end-of-loop.patch
proc-revert-proc-pid-maps-annotation.patch
vt-change-sgr-21-to-follow-the-standards.patch

queue-3.18/arm-dts-dra7-add-power-hold-and-power-controller-properties-to-palmas.patch [new file with mode: 0644]
queue-3.18/documentation-pinctrl-palmas-add-ti-palmas-powerhold-override-property-definition.patch [new file with mode: 0644]
queue-3.18/fs-proc-stop-trying-to-report-thread-stacks.patch [new file with mode: 0644]
queue-3.18/input-i8042-add-lenovo-thinkpad-l460-to-i8042-reset-list.patch [new file with mode: 0644]
queue-3.18/input-i8042-enable-mux-on-sony-vaio-vgn-cs-series-to-fix-touchpad.patch [new file with mode: 0644]
queue-3.18/md-raid10-reset-the-first-at-the-end-of-loop.patch [new file with mode: 0644]
queue-3.18/proc-revert-proc-pid-maps-annotation.patch [new file with mode: 0644]
queue-3.18/series
queue-3.18/vt-change-sgr-21-to-follow-the-standards.patch [new file with mode: 0644]

diff --git a/queue-3.18/arm-dts-dra7-add-power-hold-and-power-controller-properties-to-palmas.patch b/queue-3.18/arm-dts-dra7-add-power-hold-and-power-controller-properties-to-palmas.patch
new file mode 100644 (file)
index 0000000..8ab6a50
--- /dev/null
@@ -0,0 +1,33 @@
+From 7c62de5f3fc92291decc0dac5f36949bdc3fb575 Mon Sep 17 00:00:00 2001
+From: Keerthy <j-keerthy@ti.com>
+Date: Thu, 13 Apr 2017 10:21:21 +0530
+Subject: ARM: dts: dra7: Add power hold and power controller properties to palmas
+
+From: Keerthy <j-keerthy@ti.com>
+
+commit 7c62de5f3fc92291decc0dac5f36949bdc3fb575 upstream.
+
+Add power hold and power controller properties to palmas node.
+This is needed to shutdown pmic correctly on boards with
+powerhold set.
+
+Signed-off-by: Keerthy <j-keerthy@ti.com>
+Signed-off-by: Tony Lindgren <tony@atomide.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/arm/boot/dts/dra7-evm.dts |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/arch/arm/boot/dts/dra7-evm.dts
++++ b/arch/arm/boot/dts/dra7-evm.dts
+@@ -182,6 +182,8 @@
+       tps659038: tps659038@58 {
+               compatible = "ti,tps659038";
+               reg = <0x58>;
++              ti,palmas-override-powerhold;
++              ti,system-power-controller;
+               tps659038_pmic {
+                       compatible = "ti,tps659038-pmic";
diff --git a/queue-3.18/documentation-pinctrl-palmas-add-ti-palmas-powerhold-override-property-definition.patch b/queue-3.18/documentation-pinctrl-palmas-add-ti-palmas-powerhold-override-property-definition.patch
new file mode 100644 (file)
index 0000000..80525db
--- /dev/null
@@ -0,0 +1,43 @@
+From 0ea66f76ba17a4b229caaadd77de694111b21769 Mon Sep 17 00:00:00 2001
+From: Keerthy <j-keerthy@ti.com>
+Date: Mon, 28 Nov 2016 09:31:58 +0530
+Subject: Documentation: pinctrl: palmas: Add ti,palmas-powerhold-override property definition
+
+From: Keerthy <j-keerthy@ti.com>
+
+commit 0ea66f76ba17a4b229caaadd77de694111b21769 upstream.
+
+GPIO7 is configured in POWERHOLD mode which has higher priority
+over DEV_ON bit and keeps the PMIC supplies on even after the DEV_ON
+bit is turned off. This property enables driver to over ride the
+POWERHOLD value to GPIO7 so as to turn off the PMIC in power off
+scenarios.
+
+Signed-off-by: Keerthy <j-keerthy@ti.com>
+Acked-by: Rob Herring <robh@kernel.org>
+Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/devicetree/bindings/pinctrl/pinctrl-palmas.txt |    9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+--- a/Documentation/devicetree/bindings/pinctrl/pinctrl-palmas.txt
++++ b/Documentation/devicetree/bindings/pinctrl/pinctrl-palmas.txt
+@@ -35,6 +35,15 @@ Optional properties:
+ - ti,palmas-enable-dvfs2: Enable DVFS2. Configure pins for DVFS2 mode.
+       Selection primary or secondary function associated to GPADC_START
+       and SYSEN2 pin/pad for DVFS2 interface
++- ti,palmas-override-powerhold: This is applicable for PMICs for which
++      GPIO7 is configured in POWERHOLD mode which has higher priority
++      over DEV_ON bit and keeps the PMIC supplies on even after the DEV_ON
++      bit is turned off. This property enables driver to over ride the
++      POWERHOLD value to GPIO7 so as to turn off the PMIC in power off
++      scenarios. So for GPIO7 if ti,palmas-override-powerhold is set
++      then the GPIO_7 field should never be muxed to anything else.
++      It should be set to POWERHOLD by default and only in case of
++      power off scenarios the driver will over ride the mux value.
+ This binding uses the following generic properties as defined in
+ pinctrl-bindings.txt:
diff --git a/queue-3.18/fs-proc-stop-trying-to-report-thread-stacks.patch b/queue-3.18/fs-proc-stop-trying-to-report-thread-stacks.patch
new file mode 100644 (file)
index 0000000..1efd000
--- /dev/null
@@ -0,0 +1,190 @@
+From b18cb64ead400c01bf1580eeba330ace51f8087d Mon Sep 17 00:00:00 2001
+From: Andy Lutomirski <luto@kernel.org>
+Date: Fri, 30 Sep 2016 10:58:57 -0700
+Subject: fs/proc: Stop trying to report thread stacks
+
+From: Andy Lutomirski <luto@kernel.org>
+
+commit b18cb64ead400c01bf1580eeba330ace51f8087d upstream.
+
+This reverts more of:
+
+  b76437579d13 ("procfs: mark thread stack correctly in proc/<pid>/maps")
+
+... which was partially reverted by:
+
+  65376df58217 ("proc: revert /proc/<pid>/maps [stack:TID] annotation")
+
+Originally, /proc/PID/task/TID/maps was the same as /proc/TID/maps.
+
+In current kernels, /proc/PID/maps (or /proc/TID/maps even for
+threads) shows "[stack]" for VMAs in the mm's stack address range.
+
+In contrast, /proc/PID/task/TID/maps uses KSTK_ESP to guess the
+target thread's stack's VMA.  This is racy, probably returns garbage
+and, on arches with CONFIG_TASK_INFO_IN_THREAD=y, is also crash-prone:
+KSTK_ESP is not safe to use on tasks that aren't known to be running
+ordinary process-context kernel code.
+
+This patch removes the difference and just shows "[stack]" for VMAs
+in the mm's stack range.  This is IMO much more sensible -- the
+actual "stack" address really is treated specially by the VM code,
+and the current thread stack isn't even well-defined for programs
+that frequently switch stacks on their own.
+
+Reported-by: Jann Horn <jann@thejh.net>
+Signed-off-by: Andy Lutomirski <luto@kernel.org>
+Acked-by: Thomas Gleixner <tglx@linutronix.de>
+Cc: Al Viro <viro@zeniv.linux.org.uk>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Cc: Borislav Petkov <bp@alien8.de>
+Cc: Brian Gerst <brgerst@gmail.com>
+Cc: Johannes Weiner <hannes@cmpxchg.org>
+Cc: Kees Cook <keescook@chromium.org>
+Cc: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Linux API <linux-api@vger.kernel.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Tycho Andersen <tycho.andersen@canonical.com>
+Link: http://lkml.kernel.org/r/3e678474ec14e0a0ec34c611016753eea2e1b8ba.1475257877.git.luto@kernel.org
+Signed-off-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/filesystems/proc.txt |   26 --------------------------
+ fs/proc/task_mmu.c                 |   29 ++++++++++-------------------
+ fs/proc/task_nommu.c               |   26 +++++++++-----------------
+ 3 files changed, 19 insertions(+), 62 deletions(-)
+
+--- a/Documentation/filesystems/proc.txt
++++ b/Documentation/filesystems/proc.txt
+@@ -371,32 +371,6 @@ is not associated with a file:
+  or if empty, the mapping is anonymous.
+-The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint
+-of the individual tasks of a process. In this file you will see a mapping marked
+-as [stack] if that task sees it as a stack. Hence, for the example above, the
+-task-level map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:
+-
+-08048000-08049000 r-xp 00000000 03:00 8312       /opt/test
+-08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test
+-0804a000-0806b000 rw-p 00000000 00:00 0          [heap]
+-a7cb1000-a7cb2000 ---p 00000000 00:00 0
+-a7cb2000-a7eb2000 rw-p 00000000 00:00 0
+-a7eb2000-a7eb3000 ---p 00000000 00:00 0
+-a7eb3000-a7ed5000 rw-p 00000000 00:00 0          [stack]
+-a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6
+-a8008000-a800a000 r--p 00133000 03:00 4222       /lib/libc.so.6
+-a800a000-a800b000 rw-p 00135000 03:00 4222       /lib/libc.so.6
+-a800b000-a800e000 rw-p 00000000 00:00 0
+-a800e000-a8022000 r-xp 00000000 03:00 14462      /lib/libpthread.so.0
+-a8022000-a8023000 r--p 00013000 03:00 14462      /lib/libpthread.so.0
+-a8023000-a8024000 rw-p 00014000 03:00 14462      /lib/libpthread.so.0
+-a8024000-a8027000 rw-p 00000000 00:00 0
+-a8027000-a8043000 r-xp 00000000 03:00 8317       /lib/ld-linux.so.2
+-a8043000-a8044000 r--p 0001b000 03:00 8317       /lib/ld-linux.so.2
+-a8044000-a8045000 rw-p 0001c000 03:00 8317       /lib/ld-linux.so.2
+-aff35000-aff4a000 rw-p 00000000 00:00 0
+-ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
+-
+ The /proc/PID/smaps is an extension based on maps, showing the memory
+ consumption for each of the process's mappings. For each of mappings there
+ is a series of lines such as the following:
+--- a/fs/proc/task_mmu.c
++++ b/fs/proc/task_mmu.c
+@@ -248,24 +248,15 @@ static int do_maps_open(struct inode *in
+  * /proc/PID/maps that is the stack of the main task.
+  */
+ static int is_stack(struct proc_maps_private *priv,
+-                  struct vm_area_struct *vma, int is_pid)
++                  struct vm_area_struct *vma)
+ {
+-      int stack = 0;
+-
+-      if (is_pid) {
+-              stack = vma->vm_start <= vma->vm_mm->start_stack &&
+-                      vma->vm_end >= vma->vm_mm->start_stack;
+-      } else {
+-              struct inode *inode = priv->inode;
+-              struct task_struct *task;
+-
+-              rcu_read_lock();
+-              task = pid_task(proc_pid(inode), PIDTYPE_PID);
+-              if (task)
+-                      stack = vma_is_stack_for_task(vma, task);
+-              rcu_read_unlock();
+-      }
+-      return stack;
++      /*
++       * We make no effort to guess what a given thread considers to be
++       * its "stack".  It's not even well-defined for programs written
++       * languages like Go.
++       */
++      return vma->vm_start <= vma->vm_mm->start_stack &&
++              vma->vm_end >= vma->vm_mm->start_stack;
+ }
+ static void
+@@ -332,7 +323,7 @@ show_map_vma(struct seq_file *m, struct
+                       goto done;
+               }
+-              if (is_stack(priv, vma, is_pid))
++              if (is_stack(priv, vma))
+                       name = "[stack]";
+       }
+@@ -1501,7 +1492,7 @@ static int show_numa_map(struct seq_file
+               seq_path(m, &file->f_path, "\n\t= ");
+       } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
+               seq_puts(m, " heap");
+-      } else if (is_stack(proc_priv, vma, is_pid)) {
++      } else if (is_stack(proc_priv, vma)) {
+               seq_puts(m, " stack");
+       }
+--- a/fs/proc/task_nommu.c
++++ b/fs/proc/task_nommu.c
+@@ -124,25 +124,17 @@ unsigned long task_statm(struct mm_struc
+ }
+ static int is_stack(struct proc_maps_private *priv,
+-                  struct vm_area_struct *vma, int is_pid)
++                  struct vm_area_struct *vma)
+ {
+       struct mm_struct *mm = vma->vm_mm;
+-      int stack = 0;
+-      if (is_pid) {
+-              stack = vma->vm_start <= mm->start_stack &&
+-                      vma->vm_end >= mm->start_stack;
+-      } else {
+-              struct inode *inode = priv->inode;
+-              struct task_struct *task;
+-
+-              rcu_read_lock();
+-              task = pid_task(proc_pid(inode), PIDTYPE_PID);
+-              if (task)
+-                      stack = vma_is_stack_for_task(vma, task);
+-              rcu_read_unlock();
+-      }
+-      return stack;
++      /*
++       * We make no effort to guess what a given thread considers to be
++       * its "stack".  It's not even well-defined for programs written
++       * languages like Go.
++       */
++      return vma->vm_start <= mm->start_stack &&
++              vma->vm_end >= mm->start_stack;
+ }
+ /*
+@@ -184,7 +176,7 @@ static int nommu_vma_show(struct seq_fil
+       if (file) {
+               seq_pad(m, ' ');
+               seq_path(m, &file->f_path, "");
+-      } else if (mm && is_stack(priv, vma, is_pid)) {
++      } else if (mm && is_stack(priv, vma)) {
+               seq_pad(m, ' ');
+               seq_printf(m, "[stack]");
+       }
diff --git a/queue-3.18/input-i8042-add-lenovo-thinkpad-l460-to-i8042-reset-list.patch b/queue-3.18/input-i8042-add-lenovo-thinkpad-l460-to-i8042-reset-list.patch
new file mode 100644 (file)
index 0000000..9f27373
--- /dev/null
@@ -0,0 +1,39 @@
+From b56af54ac78c54a519d82813836f305d7f76ef27 Mon Sep 17 00:00:00 2001
+From: Dennis Wassenberg <dennis.wassenberg@secunet.com>
+Date: Thu, 8 Mar 2018 15:32:09 -0800
+Subject: Input: i8042 - add Lenovo ThinkPad L460 to i8042 reset list
+
+From: Dennis Wassenberg <dennis.wassenberg@secunet.com>
+
+commit b56af54ac78c54a519d82813836f305d7f76ef27 upstream.
+
+Reset i8042 before probing because of insufficient BIOS initialisation of
+the i8042 serial controller. This makes Synaptics touchpad detection
+possible. Without resetting the Synaptics touchpad is not detected because
+there are always NACK messages from AUX port.
+
+Signed-off-by: Dennis Wassenberg <dennis.wassenberg@secunet.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h |    7 +++++++
+ 1 file changed, 7 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -603,6 +603,13 @@ static const struct dmi_system_id __init
+               },
+       },
+       {
++              /* Lenovo ThinkPad L460 */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
++                      DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L460"),
++              },
++      },
++      {
+               /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
diff --git a/queue-3.18/input-i8042-enable-mux-on-sony-vaio-vgn-cs-series-to-fix-touchpad.patch b/queue-3.18/input-i8042-enable-mux-on-sony-vaio-vgn-cs-series-to-fix-touchpad.patch
new file mode 100644 (file)
index 0000000..ec99842
--- /dev/null
@@ -0,0 +1,71 @@
+From 04bb1719c4de94700056241d4c0fe3c1413f5aff Mon Sep 17 00:00:00 2001
+From: Ondrej Zary <linux@rainbow-software.org>
+Date: Tue, 3 Apr 2018 10:24:34 -0700
+Subject: Input: i8042 - enable MUX on Sony VAIO VGN-CS series to fix touchpad
+
+From: Ondrej Zary <linux@rainbow-software.org>
+
+commit 04bb1719c4de94700056241d4c0fe3c1413f5aff upstream.
+
+The touch sensor buttons on Sony VAIO VGN-CS series laptops (e.g.
+VGN-CS31S) are a separate PS/2 device. As the MUX is disabled for all
+VAIO machines by the nomux blacklist, the data from touch sensor
+buttons and touchpad are combined. The protocol used by the buttons is
+probably similar to the touchpad protocol (both are Synaptics) so both
+devices get enabled. The controller combines the data, creating a mess
+which results in random button clicks, touchpad stopping working and
+lost sync error messages:
+psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 4
+psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
+psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
+psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
+psmouse serio1: TouchPad at isa0060/serio1/input0 lost sync at byte 1
+psmouse serio1: issuing reconnect request
+
+Add a new i8042_dmi_forcemux_table whitelist with VGN-CS.
+With MUX enabled, touch sensor buttons are detected as separate device
+(and left disabled as there's currently no driver), fixing all touchpad
+problems.
+
+Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
+Cc: stable@vger.kernel.org
+Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/input/serio/i8042-x86ia64io.h |   17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+--- a/drivers/input/serio/i8042-x86ia64io.h
++++ b/drivers/input/serio/i8042-x86ia64io.h
+@@ -712,6 +712,20 @@ static const struct dmi_system_id __init
+       { }
+ };
++static const struct dmi_system_id i8042_dmi_forcemux_table[] __initconst = {
++      {
++              /*
++               * Sony Vaio VGN-CS series require MUX or the touch sensor
++               * buttons will disturb touchpad operation
++               */
++              .matches = {
++                      DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
++                      DMI_MATCH(DMI_PRODUCT_NAME, "VGN-CS"),
++              },
++      },
++      { }
++};
++
+ /*
+  * Some Wistron based laptops need us to explicitly enable the 'Dritek
+  * keyboard extension' to make their extra keys start generating scancodes.
+@@ -1124,6 +1138,9 @@ static int __init i8042_platform_init(vo
+       if (dmi_check_system(i8042_dmi_nomux_table))
+               i8042_nomux = true;
++      if (dmi_check_system(i8042_dmi_forcemux_table))
++              i8042_nomux = false;
++
+       if (dmi_check_system(i8042_dmi_notimeout_table))
+               i8042_notimeout = true;
diff --git a/queue-3.18/md-raid10-reset-the-first-at-the-end-of-loop.patch b/queue-3.18/md-raid10-reset-the-first-at-the-end-of-loop.patch
new file mode 100644 (file)
index 0000000..f594cd9
--- /dev/null
@@ -0,0 +1,38 @@
+From 6f287ca6046edd34ed83aafb7f9033c9c2e809e2 Mon Sep 17 00:00:00 2001
+From: Guoqing Jiang <gqjiang@suse.com>
+Date: Thu, 6 Apr 2017 09:12:18 +0800
+Subject: md/raid10: reset the 'first' at the end of loop
+
+From: Guoqing Jiang <gqjiang@suse.com>
+
+commit 6f287ca6046edd34ed83aafb7f9033c9c2e809e2 upstream.
+
+We need to set "first = 0' at the end of rdev_for_each
+loop, so we can get the array's min_offset_diff correctly
+otherwise min_offset_diff just means the last rdev's
+offset diff.
+
+[only the first chunk, due to b506335e5d2b ("md/raid10: skip spare disk as
+'first' disk") being already applied - gregkh]
+
+Suggested-by: NeilBrown <neilb@suse.com>
+Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
+Reviewed-by: NeilBrown <neilb@suse.com>
+Signed-off-by: Shaohua Li <shli@fb.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/md/raid10.c |    1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/md/raid10.c
++++ b/drivers/md/raid10.c
+@@ -3717,6 +3717,7 @@ static int run(struct mddev *mddev)
+               if (blk_queue_discard(bdev_get_queue(rdev->bdev)))
+                       discard_supported = true;
++              first = 0;
+       }
+       if (mddev->queue) {
diff --git a/queue-3.18/proc-revert-proc-pid-maps-annotation.patch b/queue-3.18/proc-revert-proc-pid-maps-annotation.patch
new file mode 100644 (file)
index 0000000..9935659
--- /dev/null
@@ -0,0 +1,305 @@
+From 65376df582174ffcec9e6471bf5b0dd79ba05e4a Mon Sep 17 00:00:00 2001
+From: Johannes Weiner <hannes@cmpxchg.org>
+Date: Tue, 2 Feb 2016 16:57:29 -0800
+Subject: proc: revert /proc/<pid>/maps [stack:TID] annotation
+
+From: Johannes Weiner <hannes@cmpxchg.org>
+
+commit 65376df582174ffcec9e6471bf5b0dd79ba05e4a upstream.
+
+Commit b76437579d13 ("procfs: mark thread stack correctly in
+proc/<pid>/maps") added [stack:TID] annotation to /proc/<pid>/maps.
+
+Finding the task of a stack VMA requires walking the entire thread list,
+turning this into quadratic behavior: a thousand threads means a
+thousand stacks, so the rendering of /proc/<pid>/maps needs to look at a
+million combinations.
+
+The cost is not in proportion to the usefulness as described in the
+patch.
+
+Drop the [stack:TID] annotation to make /proc/<pid>/maps (and
+/proc/<pid>/numa_maps) usable again for higher thread counts.
+
+The [stack] annotation inside /proc/<pid>/task/<tid>/maps is retained, as
+identifying the stack VMA there is an O(1) operation.
+
+Siddesh said:
+ "The end users needed a way to identify thread stacks programmatically and
+  there wasn't a way to do that.  I'm afraid I no longer remember (or have
+  access to the resources that would aid my memory since I changed
+  employers) the details of their requirement.  However, I did do this on my
+  own time because I thought it was an interesting project for me and nobody
+  really gave any feedback then as to its utility, so as far as I am
+  concerned you could roll back the main thread maps information since the
+  information is available in the thread-specific files"
+
+Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
+Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
+Cc: Siddhesh Poyarekar <siddhesh.poyarekar@gmail.com>
+Cc: Shaohua Li <shli@fb.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/filesystems/proc.txt |    9 +----
+ fs/proc/task_mmu.c                 |   66 ++++++++++++-------------------------
+ fs/proc/task_nommu.c               |   49 +++++++++++----------------
+ include/linux/mm.h                 |    3 -
+ mm/util.c                          |   27 ---------------
+ 5 files changed, 48 insertions(+), 106 deletions(-)
+
+--- a/Documentation/filesystems/proc.txt
++++ b/Documentation/filesystems/proc.txt
+@@ -334,7 +334,7 @@ address           perms offset  dev   in
+ a7cb1000-a7cb2000 ---p 00000000 00:00 0
+ a7cb2000-a7eb2000 rw-p 00000000 00:00 0
+ a7eb2000-a7eb3000 ---p 00000000 00:00 0
+-a7eb3000-a7ed5000 rw-p 00000000 00:00 0          [stack:1001]
++a7eb3000-a7ed5000 rw-p 00000000 00:00 0
+ a7ed5000-a8008000 r-xp 00000000 03:00 4222       /lib/libc.so.6
+ a8008000-a800a000 r--p 00133000 03:00 4222       /lib/libc.so.6
+ a800a000-a800b000 rw-p 00135000 03:00 4222       /lib/libc.so.6
+@@ -366,7 +366,6 @@ is not associated with a file:
+  [heap]                   = the heap of the program
+  [stack]                  = the stack of the main process
+- [stack:1001]             = the stack of the thread with tid 1001
+  [vdso]                   = the "virtual dynamic shared object",
+                             the kernel system call handler
+@@ -374,10 +373,8 @@ is not associated with a file:
+ The /proc/PID/task/TID/maps is a view of the virtual memory from the viewpoint
+ of the individual tasks of a process. In this file you will see a mapping marked
+-as [stack] if that task sees it as a stack. This is a key difference from the
+-content of /proc/PID/maps, where you will see all mappings that are being used
+-as stack by all of those tasks. Hence, for the example above, the task-level
+-map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:
++as [stack] if that task sees it as a stack. Hence, for the example above, the
++task-level map, i.e. /proc/PID/task/TID/maps for thread 1001 will look like this:
+ 08048000-08049000 r-xp 00000000 03:00 8312       /opt/test
+ 08049000-0804a000 rw-p 00001000 03:00 8312       /opt/test
+--- a/fs/proc/task_mmu.c
++++ b/fs/proc/task_mmu.c
+@@ -243,23 +243,29 @@ static int do_maps_open(struct inode *in
+                               sizeof(struct proc_maps_private));
+ }
+-static pid_t pid_of_stack(struct proc_maps_private *priv,
+-                              struct vm_area_struct *vma, bool is_pid)
++/*
++ * Indicate if the VMA is a stack for the given task; for
++ * /proc/PID/maps that is the stack of the main task.
++ */
++static int is_stack(struct proc_maps_private *priv,
++                  struct vm_area_struct *vma, int is_pid)
+ {
+-      struct inode *inode = priv->inode;
+-      struct task_struct *task;
+-      pid_t ret = 0;
++      int stack = 0;
++
++      if (is_pid) {
++              stack = vma->vm_start <= vma->vm_mm->start_stack &&
++                      vma->vm_end >= vma->vm_mm->start_stack;
++      } else {
++              struct inode *inode = priv->inode;
++              struct task_struct *task;
+-      rcu_read_lock();
+-      task = pid_task(proc_pid(inode), PIDTYPE_PID);
+-      if (task) {
+-              task = task_of_stack(task, vma, is_pid);
++              rcu_read_lock();
++              task = pid_task(proc_pid(inode), PIDTYPE_PID);
+               if (task)
+-                      ret = task_pid_nr_ns(task, inode->i_sb->s_fs_info);
++                      stack = vma_is_stack_for_task(vma, task);
++              rcu_read_unlock();
+       }
+-      rcu_read_unlock();
+-
+-      return ret;
++      return stack;
+ }
+ static void
+@@ -315,8 +321,6 @@ show_map_vma(struct seq_file *m, struct
+       name = arch_vma_name(vma);
+       if (!name) {
+-              pid_t tid;
+-
+               if (!mm) {
+                       name = "[vdso]";
+                       goto done;
+@@ -328,21 +332,8 @@ show_map_vma(struct seq_file *m, struct
+                       goto done;
+               }
+-              tid = pid_of_stack(priv, vma, is_pid);
+-              if (tid != 0) {
+-                      /*
+-                       * Thread stack in /proc/PID/task/TID/maps or
+-                       * the main process stack.
+-                       */
+-                      if (!is_pid || (vma->vm_start <= mm->start_stack &&
+-                          vma->vm_end >= mm->start_stack)) {
+-                              name = "[stack]";
+-                      } else {
+-                              /* Thread stack in /proc/PID/maps */
+-                              seq_pad(m, ' ');
+-                              seq_printf(m, "[stack:%d]", tid);
+-                      }
+-              }
++              if (is_stack(priv, vma, is_pid))
++                      name = "[stack]";
+       }
+ done:
+@@ -1510,19 +1501,8 @@ static int show_numa_map(struct seq_file
+               seq_path(m, &file->f_path, "\n\t= ");
+       } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) {
+               seq_puts(m, " heap");
+-      } else {
+-              pid_t tid = pid_of_stack(proc_priv, vma, is_pid);
+-              if (tid != 0) {
+-                      /*
+-                       * Thread stack in /proc/PID/task/TID/maps or
+-                       * the main process stack.
+-                       */
+-                      if (!is_pid || (vma->vm_start <= mm->start_stack &&
+-                          vma->vm_end >= mm->start_stack))
+-                              seq_puts(m, " stack");
+-                      else
+-                              seq_printf(m, " stack:%d", tid);
+-              }
++      } else if (is_stack(proc_priv, vma, is_pid)) {
++              seq_puts(m, " stack");
+       }
+       if (is_vm_hugetlb_page(vma))
+--- a/fs/proc/task_nommu.c
++++ b/fs/proc/task_nommu.c
+@@ -123,23 +123,26 @@ unsigned long task_statm(struct mm_struc
+       return size;
+ }
+-static pid_t pid_of_stack(struct proc_maps_private *priv,
+-                              struct vm_area_struct *vma, bool is_pid)
++static int is_stack(struct proc_maps_private *priv,
++                  struct vm_area_struct *vma, int is_pid)
+ {
+-      struct inode *inode = priv->inode;
+-      struct task_struct *task;
+-      pid_t ret = 0;
+-
+-      rcu_read_lock();
+-      task = pid_task(proc_pid(inode), PIDTYPE_PID);
+-      if (task) {
+-              task = task_of_stack(task, vma, is_pid);
++      struct mm_struct *mm = vma->vm_mm;
++      int stack = 0;
++
++      if (is_pid) {
++              stack = vma->vm_start <= mm->start_stack &&
++                      vma->vm_end >= mm->start_stack;
++      } else {
++              struct inode *inode = priv->inode;
++              struct task_struct *task;
++
++              rcu_read_lock();
++              task = pid_task(proc_pid(inode), PIDTYPE_PID);
+               if (task)
+-                      ret = task_pid_nr_ns(task, inode->i_sb->s_fs_info);
++                      stack = vma_is_stack_for_task(vma, task);
++              rcu_read_unlock();
+       }
+-      rcu_read_unlock();
+-
+-      return ret;
++      return stack;
+ }
+ /*
+@@ -181,21 +184,9 @@ static int nommu_vma_show(struct seq_fil
+       if (file) {
+               seq_pad(m, ' ');
+               seq_path(m, &file->f_path, "");
+-      } else if (mm) {
+-              pid_t tid = pid_of_stack(priv, vma, is_pid);
+-
+-              if (tid != 0) {
+-                      seq_pad(m, ' ');
+-                      /*
+-                       * Thread stack in /proc/PID/task/TID/maps or
+-                       * the main process stack.
+-                       */
+-                      if (!is_pid || (vma->vm_start <= mm->start_stack &&
+-                          vma->vm_end >= mm->start_stack))
+-                              seq_printf(m, "[stack]");
+-                      else
+-                              seq_printf(m, "[stack:%d]", tid);
+-              }
++      } else if (mm && is_stack(priv, vma, is_pid)) {
++              seq_pad(m, ' ');
++              seq_printf(m, "[stack]");
+       }
+       seq_putc(m, '\n');
+--- a/include/linux/mm.h
++++ b/include/linux/mm.h
+@@ -1242,8 +1242,7 @@ int set_page_dirty_lock(struct page *pag
+ int clear_page_dirty_for_io(struct page *page);
+ int get_cmdline(struct task_struct *task, char *buffer, int buflen);
+-extern struct task_struct *task_of_stack(struct task_struct *task,
+-                              struct vm_area_struct *vma, bool in_group);
++int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t);
+ extern unsigned long move_page_tables(struct vm_area_struct *vma,
+               unsigned long old_addr, struct vm_area_struct *new_vma,
+--- a/mm/util.c
++++ b/mm/util.c
+@@ -185,36 +185,11 @@ void __vma_link_list(struct mm_struct *m
+ }
+ /* Check if the vma is being used as a stack by this task */
+-static int vm_is_stack_for_task(struct task_struct *t,
+-                              struct vm_area_struct *vma)
++int vma_is_stack_for_task(struct vm_area_struct *vma, struct task_struct *t)
+ {
+       return (vma->vm_start <= KSTK_ESP(t) && vma->vm_end >= KSTK_ESP(t));
+ }
+-/*
+- * Check if the vma is being used as a stack.
+- * If is_group is non-zero, check in the entire thread group or else
+- * just check in the current task. Returns the task_struct of the task
+- * that the vma is stack for. Must be called under rcu_read_lock().
+- */
+-struct task_struct *task_of_stack(struct task_struct *task,
+-                              struct vm_area_struct *vma, bool in_group)
+-{
+-      if (vm_is_stack_for_task(task, vma))
+-              return task;
+-
+-      if (in_group) {
+-              struct task_struct *t;
+-
+-              for_each_thread(task, t) {
+-                      if (vm_is_stack_for_task(t, vma))
+-                              return t;
+-              }
+-      }
+-
+-      return NULL;
+-}
+-
+ #if defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT)
+ void arch_pick_mmap_layout(struct mm_struct *mm)
+ {
index 43f2dd396f6eb684c1c58758ea4a2d115f55a129..c05ae94d8f41cd7574a5053fe3a9dda07d612b4c 100644 (file)
@@ -80,3 +80,11 @@ media-usbtv-prevent-double-free-in-error-case.patch
 parport_pc-add-support-for-wch-ch382l-pci-e-single-parallel-port-card.patch
 crypto-ahash-fix-early-termination-in-hash-walk.patch
 crypto-x86-cast5-avx-fix-ecb-encryption-when-long-sg-follows-short-one.patch
+proc-revert-proc-pid-maps-annotation.patch
+fs-proc-stop-trying-to-report-thread-stacks.patch
+input-i8042-add-lenovo-thinkpad-l460-to-i8042-reset-list.patch
+input-i8042-enable-mux-on-sony-vaio-vgn-cs-series-to-fix-touchpad.patch
+vt-change-sgr-21-to-follow-the-standards.patch
+documentation-pinctrl-palmas-add-ti-palmas-powerhold-override-property-definition.patch
+arm-dts-dra7-add-power-hold-and-power-controller-properties-to-palmas.patch
+md-raid10-reset-the-first-at-the-end-of-loop.patch
diff --git a/queue-3.18/vt-change-sgr-21-to-follow-the-standards.patch b/queue-3.18/vt-change-sgr-21-to-follow-the-standards.patch
new file mode 100644 (file)
index 0000000..e5c82fc
--- /dev/null
@@ -0,0 +1,66 @@
+From 65d9982d7e523a1a8e7c9af012da0d166f72fc56 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@chromium.org>
+Date: Mon, 29 Jan 2018 17:08:21 -0500
+Subject: vt: change SGR 21 to follow the standards
+
+From: Mike Frysinger <vapier@chromium.org>
+
+commit 65d9982d7e523a1a8e7c9af012da0d166f72fc56 upstream.
+
+ECMA-48 [1] (aka ISO 6429) has defined SGR 21 as "doubly underlined"
+since at least March 1984.  The Linux kernel has treated it as SGR 22
+"normal intensity" since it was added in Linux-0.96b in June 1992.
+Before that, it was simply ignored.  Other terminal emulators have
+either ignored it, or treat it as double underline now.  xterm for
+example added support in its 304 release (May 2014) [2] where it was
+previously ignoring it.
+
+Changing this behavior shouldn't be an issue:
+- It isn't a named capability in ncurses's terminfo database, so no
+  script is using libtinfo/libcurses to look this up, or using tput
+  to query & output the right sequence.
+- Any script assuming SGR 21 will reset intensity in all terminals
+  already do not work correctly on non-Linux VTs (including running
+  under screen/tmux/etc...).
+- If someone has written a script that only runs in the Linux VT, and
+  they're using SGR 21 (instead of SGR 22), the output should still
+  be readable.
+
+imo it's important to change this as the Linux VT's non-conformance
+is sometimes used as an argument for other terminal emulators to not
+implement SGR 21 at all, or do so incorrectly.
+
+[1]: https://www.ecma-international.org/publications/standards/Ecma-048.htm
+[2]: https://github.com/ThomasDickey/xterm-snapshots/commit/2fd29cb98d214cb536bcafbee00bc73b3f1eeb9d
+
+Signed-off-by: Mike Frysinger <vapier@chromium.org>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/vt/vt.c |    6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+--- a/drivers/tty/vt/vt.c
++++ b/drivers/tty/vt/vt.c
+@@ -1303,6 +1303,11 @@ static void csi_m(struct vc_data *vc)
+                       case 3:
+                               vc->vc_italic = 1;
+                               break;
++                      case 21:
++                              /*
++                               * No console drivers support double underline, so
++                               * convert it to a single underline.
++                               */
+                       case 4:
+                               vc->vc_underline = 1;
+                               break;
+@@ -1339,7 +1344,6 @@ static void csi_m(struct vc_data *vc)
+                               vc->vc_disp_ctrl = 1;
+                               vc->vc_toggle_meta = 1;
+                               break;
+-                      case 21:
+                       case 22:
+                               vc->vc_intensity = 1;
+                               break;