]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.3-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Feb 2016 18:11:43 +0000 (10:11 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 15 Feb 2016 18:11:43 +0000 (10:11 -0800)
added patches:
hid-multitouch-fix-input-mode-switching-on-some-elan-panels.patch
mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesn-t-make-any-progress.patch

queue-4.3/hid-multitouch-fix-input-mode-switching-on-some-elan-panels.patch [new file with mode: 0644]
queue-4.3/mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesn-t-make-any-progress.patch [new file with mode: 0644]
queue-4.3/series

diff --git a/queue-4.3/hid-multitouch-fix-input-mode-switching-on-some-elan-panels.patch b/queue-4.3/hid-multitouch-fix-input-mode-switching-on-some-elan-panels.patch
new file mode 100644 (file)
index 0000000..462aefe
--- /dev/null
@@ -0,0 +1,95 @@
+From 73e7d63efb4d774883a338997943bfa59e127085 Mon Sep 17 00:00:00 2001
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Date: Tue, 1 Dec 2015 12:41:38 +0100
+Subject: HID: multitouch: fix input mode switching on some Elan panels
+
+From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+
+commit 73e7d63efb4d774883a338997943bfa59e127085 upstream.
+
+as reported by https://bugzilla.kernel.org/show_bug.cgi?id=108481
+
+This bug reports mentions 6d4f5440 ("HID: multitouch: Fetch feature
+reports on demand for Win8 devices") as the origin of the problem but this
+commit actually masked 2 firmware bugs that are annihilating each other:
+
+The report descriptor declares two features in reports 3 and 5:
+
+0x05, 0x0d,                    // Usage Page (Digitizers)             318
+0x09, 0x0e,                    // Usage (Device Configuration)        320
+0xa1, 0x01,                    // Collection (Application)            322
+0x85, 0x03,                    //  Report ID (3)                      324
+0x09, 0x22,                    //  Usage (Finger)                     326
+0xa1, 0x00,                    //  Collection (Physical)              328
+0x09, 0x52,                    //   Usage (Inputmode)                 330
+0x15, 0x00,                    //   Logical Minimum (0)               332
+0x25, 0x0a,                    //   Logical Maximum (10)              334
+0x75, 0x08,                    //   Report Size (8)                   336
+0x95, 0x02,                    //   Report Count (2)                  338
+0xb1, 0x02,                    //   Feature (Data,Var,Abs)            340
+0xc0,                          //  End Collection                     342
+0x09, 0x22,                    //  Usage (Finger)                     343
+0xa1, 0x00,                    //  Collection (Physical)              345
+0x85, 0x05,                    //   Report ID (5)                     347
+0x09, 0x57,                    //   Usage (Surface Switch)            349
+0x09, 0x58,                    //   Usage (Button Switch)             351
+0x15, 0x00,                    //   Logical Minimum (0)               353
+0x75, 0x01,                    //   Report Size (1)                   355
+0x95, 0x02,                    //   Report Count (2)                  357
+0x25, 0x03,                    //   Logical Maximum (3)               359
+0xb1, 0x02,                    //   Feature (Data,Var,Abs)            361
+0x95, 0x0e,                    //   Report Count (14)                 363
+0xb1, 0x03,                    //   Feature (Cnst,Var,Abs)            365
+0xc0,                          //  End Collection                     367
+
+The report ID 3 presents 2 input mode features, while only the first one
+is handled by the device. Given that we did not checked if one was
+previously assigned, we were dealing with the ignored featured and we
+should never have been able to switch this panel into the multitouch mode.
+
+However, the firmware presents an other bugs which allowed 6d4f5440
+to counteract the faulty report descriptor. When we request the values
+of the feature 5, the firmware answers "03 03 00". The fields are correct
+but the report id is wrong. Before 6d4f5440, we retrieved all the features
+and injected them in the system. So when we called report 5, we injected
+in the system the report 3 with the values "03 00".
+Setting the second input mode to 03 in this report changed it to "03 03"
+and the touchpad switched to the mt mode. We could have set anything
+in the second field because the actual value (the first 03 in this report)
+was given by the query of report ID 5.
+
+To sum up: 2 bugs in the firmware were hiding that we were accessing the
+wrong feature.
+
+Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-multitouch.c |   15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -357,8 +357,19 @@ static void mt_feature_mapping(struct hi
+                       break;
+               }
+-              td->inputmode = field->report->id;
+-              td->inputmode_index = usage->usage_index;
++              if (td->inputmode < 0) {
++                      td->inputmode = field->report->id;
++                      td->inputmode_index = usage->usage_index;
++              } else {
++                      /*
++                       * Some elan panels wrongly declare 2 input mode
++                       * features, and silently ignore when we set the
++                       * value in the second field. Skip the second feature
++                       * and hope for the best.
++                       */
++                      dev_info(&hdev->dev,
++                               "Ignoring the extra HID_DG_INPUTMODE\n");
++              }
+               break;
+       case HID_DG_CONTACTMAX:
diff --git a/queue-4.3/mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesn-t-make-any-progress.patch b/queue-4.3/mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesn-t-make-any-progress.patch
new file mode 100644 (file)
index 0000000..94adfe4
--- /dev/null
@@ -0,0 +1,52 @@
+From 564e81a57f9788b1475127012e0fd44e9049e342 Mon Sep 17 00:00:00 2001
+From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
+Date: Fri, 5 Feb 2016 15:36:30 -0800
+Subject: mm, vmstat: fix wrong WQ sleep when memory reclaim doesn't make any progress
+
+From: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
+
+commit 564e81a57f9788b1475127012e0fd44e9049e342 upstream.
+
+Jan Stancek has reported that system occasionally hanging after "oom01"
+testcase from LTP triggers OOM.  Guessing from a result that there is a
+kworker thread doing memory allocation and the values between "Node 0
+Normal free:" and "Node 0 Normal:" differs when hanging, vmstat is not
+up-to-date for some reason.
+
+According to commit 373ccbe59270 ("mm, vmstat: allow WQ concurrency to
+discover memory reclaim doesn't make any progress"), it meant to force
+the kworker thread to take a short sleep, but it by error used
+schedule_timeout(1).  We missed that schedule_timeout() in state
+TASK_RUNNING doesn't do anything.
+
+Fix it by using schedule_timeout_uninterruptible(1) which forces the
+kworker thread to take a short sleep in order to make sure that vmstat
+is up-to-date.
+
+Fixes: 373ccbe59270 ("mm, vmstat: allow WQ concurrency to discover memory reclaim doesn't make any progress")
+Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
+Reported-by: Jan Stancek <jstancek@redhat.com>
+Acked-by: Michal Hocko <mhocko@suse.com>
+Cc: Tejun Heo <tj@kernel.org>
+Cc: Cristopher Lameter <clameter@sgi.com>
+Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
+Cc: Arkadiusz Miskiewicz <arekm@maven.pl>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ mm/backing-dev.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/mm/backing-dev.c
++++ b/mm/backing-dev.c
+@@ -989,7 +989,7 @@ long wait_iff_congested(struct zone *zon
+                * here rather than calling cond_resched().
+                */
+               if (current->flags & PF_WQ_WORKER)
+-                      schedule_timeout(1);
++                      schedule_timeout_uninterruptible(1);
+               else
+                       cond_resched();
index 3a2b4e8681050efcd453fe5ea661c4a4f2637c34..01acae08f617f47eb8c16ecf577c0e9001ffa3d9 100644 (file)
@@ -197,3 +197,5 @@ zram-don-t-call-idr_remove-from-zram_remove.patch
 zsmalloc-fix-migrate_zspage-zs_free-race-condition.patch
 fs-pipe.c-return-error-code-rather-than-0-in-pipe_write.patch
 binfmt_elf-don-t-clobber-passed-executable-s-file-header.patch
+mm-vmstat-fix-wrong-wq-sleep-when-memory-reclaim-doesn-t-make-any-progress.patch
+hid-multitouch-fix-input-mode-switching-on-some-elan-panels.patch