summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin M. Forbes <jforbes@redhat.com>2016-10-28 14:04:33 -0500
committerJustin M. Forbes <jforbes@redhat.com>2016-10-28 14:04:33 -0500
commit1fb17f8293b0dfdfcd5ca5b3839ddddc077e6b6e (patch)
tree2964738acef55c1d98870f8507cfa679ae15842a
parent4873da81719c30a1baa519e5cf5be23bd030c5d3 (diff)
downloadkernel-1fb17f8293b0dfdfcd5ca5b3839ddddc077e6b6e.tar.gz
kernel-1fb17f8293b0dfdfcd5ca5b3839ddddc077e6b6e.tar.xz
kernel-1fb17f8293b0dfdfcd5ca5b3839ddddc077e6b6e.zip
Linux v4.8.5
-rw-r--r--i8042-skip-selftest-asus-laptops.patch373
-rw-r--r--kernel.spec9
-rw-r--r--sources2
3 files changed, 6 insertions, 378 deletions
diff --git a/i8042-skip-selftest-asus-laptops.patch b/i8042-skip-selftest-asus-laptops.patch
deleted file mode 100644
index 351556e04..000000000
--- a/i8042-skip-selftest-asus-laptops.patch
+++ /dev/null
@@ -1,373 +0,0 @@
-From 930e19248e9b61da36c967687ca79c4d5f977919 Mon Sep 17 00:00:00 2001
-From: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
-Date: Sat, 1 Oct 2016 12:07:35 -0700
-Subject: Input: i8042 - skip selftest on ASUS laptops
-
-On suspend/resume cycle, selftest is executed to reset i8042 controller.
-But when this is done in Asus devices, subsequent calls to detect/init
-functions to elantech driver fails. Skipping selftest fixes this problem.
-
-An easier step to reproduce this problem is adding i8042.reset=1 as a
-kernel parameter. On Asus laptops, it'll make the system to start with the
-touchpad already stuck, since psmouse_probe forcibly calls the selftest
-function.
-
-This patch was inspired by John Hiesey's change[1], but, since this problem
-affects a lot of models of Asus, let's avoid running selftests on them.
-
-All models affected by this problem:
-A455LD
-K401LB
-K501LB
-K501LX
-R409L
-V502LX
-X302LA
-X450LCP
-X450LD
-X455LAB
-X455LDB
-X455LF
-Z450LA
-
-[1]: https://marc.info/?l=linux-input&m=144312209020616&w=2
-
-Fixes: "ETPS/2 Elantech Touchpad dies after resume from suspend"
-(https://bugzilla.kernel.org/show_bug.cgi?id=107971)
-
-Signed-off-by: Marcos Paulo de Souza <marcos.souza.org@gmail.com>
-Cc: stable@vger.kernel.org
-Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
----
- Documentation/kernel-parameters.txt | 9 +++-
- drivers/input/serio/i8042-io.h | 2 +-
- drivers/input/serio/i8042-ip22io.h | 2 +-
- drivers/input/serio/i8042-ppcio.h | 2 +-
- drivers/input/serio/i8042-sparcio.h | 2 +-
- drivers/input/serio/i8042-unicore32io.h | 2 +-
- drivers/input/serio/i8042-x86ia64io.h | 96 +++++++++++++++++++++++++++++++--
- drivers/input/serio/i8042.c | 55 +++++++++++++++----
- 8 files changed, 150 insertions(+), 20 deletions(-)
-
-diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
-index 0b3de80..3475b32 100644
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -1409,7 +1409,14 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
- i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
- controllers
- i8042.notimeout [HW] Ignore timeout condition signalled by controller
-- i8042.reset [HW] Reset the controller during init and cleanup
-+ i8042.reset [HW] Reset the controller during init, cleanup and
-+ suspend-to-ram transitions, only during s2r
-+ transitions, or never reset
-+ Format: { 1 | Y | y | 0 | N | n }
-+ 1, Y, y: always reset controller
-+ 0, N, n: don't ever reset controller
-+ Default: only on s2r transitions on x86; most other
-+ architectures force reset to be always executed
- i8042.unlock [HW] Unlock (ignore) the keylock
- i8042.kbdreset [HW] Reset device connected to KBD port
-
-diff --git a/drivers/input/serio/i8042-io.h b/drivers/input/serio/i8042-io.h
-index a5eed2a..34da81c 100644
---- a/drivers/input/serio/i8042-io.h
-+++ b/drivers/input/serio/i8042-io.h
-@@ -81,7 +81,7 @@ static inline int i8042_platform_init(void)
- return -EBUSY;
- #endif
-
-- i8042_reset = 1;
-+ i8042_reset = I8042_RESET_ALWAYS;
- return 0;
- }
-
-diff --git a/drivers/input/serio/i8042-ip22io.h b/drivers/input/serio/i8042-ip22io.h
-index ee1ad27..08a1c10 100644
---- a/drivers/input/serio/i8042-ip22io.h
-+++ b/drivers/input/serio/i8042-ip22io.h
-@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void)
- return -EBUSY;
- #endif
-
-- i8042_reset = 1;
-+ i8042_reset = I8042_RESET_ALWAYS;
-
- return 0;
- }
-diff --git a/drivers/input/serio/i8042-ppcio.h b/drivers/input/serio/i8042-ppcio.h
-index f708c75..1aabea4 100644
---- a/drivers/input/serio/i8042-ppcio.h
-+++ b/drivers/input/serio/i8042-ppcio.h
-@@ -44,7 +44,7 @@ static inline void i8042_write_command(int val)
-
- static inline int i8042_platform_init(void)
- {
-- i8042_reset = 1;
-+ i8042_reset = I8042_RESET_ALWAYS;
- return 0;
- }
-
-diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h
-index afcd1c1..6231d63 100644
---- a/drivers/input/serio/i8042-sparcio.h
-+++ b/drivers/input/serio/i8042-sparcio.h
-@@ -130,7 +130,7 @@ static int __init i8042_platform_init(void)
- }
- }
-
-- i8042_reset = 1;
-+ i8042_reset = I8042_RESET_ALWAYS;
-
- return 0;
- }
-diff --git a/drivers/input/serio/i8042-unicore32io.h b/drivers/input/serio/i8042-unicore32io.h
-index 73f5cc1..4557475 100644
---- a/drivers/input/serio/i8042-unicore32io.h
-+++ b/drivers/input/serio/i8042-unicore32io.h
-@@ -61,7 +61,7 @@ static inline int i8042_platform_init(void)
- if (!request_mem_region(I8042_REGION_START, I8042_REGION_SIZE, "i8042"))
- return -EBUSY;
-
-- i8042_reset = 1;
-+ i8042_reset = I8042_RESET_ALWAYS;
- return 0;
- }
-
-diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
-index 68f5f4a..f4bfb4b 100644
---- a/drivers/input/serio/i8042-x86ia64io.h
-+++ b/drivers/input/serio/i8042-x86ia64io.h
-@@ -510,6 +510,90 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
- { }
- };
-
-+/*
-+ * On some Asus laptops, just running self tests cause problems.
-+ */
-+static const struct dmi_system_id i8042_dmi_noselftest_table[] = {
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "A455LD"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "K401LB"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "K501LB"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "K501LX"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "R409L"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "V502LX"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X302LA"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X450LD"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LAB"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LDB"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "X455LF"),
-+ },
-+ },
-+ {
-+ .matches = {
-+ DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
-+ DMI_MATCH(DMI_PRODUCT_NAME, "Z450LA"),
-+ },
-+ },
-+ { }
-+};
- static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
- {
- /* MSI Wind U-100 */
-@@ -1072,12 +1156,18 @@ static int __init i8042_platform_init(void)
- return retval;
-
- #if defined(__ia64__)
-- i8042_reset = true;
-+ i8042_reset = I8042_RESET_ALWAYS;
- #endif
-
- #ifdef CONFIG_X86
-- if (dmi_check_system(i8042_dmi_reset_table))
-- i8042_reset = true;
-+ /* Honor module parameter when value is not default */
-+ if (i8042_reset == I8042_RESET_DEFAULT) {
-+ if (dmi_check_system(i8042_dmi_reset_table))
-+ i8042_reset = I8042_RESET_ALWAYS;
-+
-+ if (dmi_check_system(i8042_dmi_noselftest_table))
-+ i8042_reset = I8042_RESET_NEVER;
-+ }
-
- if (dmi_check_system(i8042_dmi_noloop_table))
- i8042_noloop = true;
-diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
-index b4d3408..674a760 100644
---- a/drivers/input/serio/i8042.c
-+++ b/drivers/input/serio/i8042.c
-@@ -48,9 +48,39 @@ static bool i8042_unlock;
- module_param_named(unlock, i8042_unlock, bool, 0);
- MODULE_PARM_DESC(unlock, "Ignore keyboard lock.");
-
--static bool i8042_reset;
--module_param_named(reset, i8042_reset, bool, 0);
--MODULE_PARM_DESC(reset, "Reset controller during init and cleanup.");
-+enum i8042_controller_reset_mode {
-+ I8042_RESET_NEVER,
-+ I8042_RESET_ALWAYS,
-+ I8042_RESET_ON_S2RAM,
-+#define I8042_RESET_DEFAULT I8042_RESET_ON_S2RAM
-+};
-+static enum i8042_controller_reset_mode i8042_reset = I8042_RESET_DEFAULT;
-+static int i8042_set_reset(const char *val, const struct kernel_param *kp)
-+{
-+ enum i8042_controller_reset_mode *arg = kp->arg;
-+ int error;
-+ bool reset;
-+
-+ if (val) {
-+ error = kstrtobool(val, &reset);
-+ if (error)
-+ return error;
-+ } else {
-+ reset = true;
-+ }
-+
-+ *arg = reset ? I8042_RESET_ALWAYS : I8042_RESET_NEVER;
-+ return 0;
-+}
-+
-+static const struct kernel_param_ops param_ops_reset_param = {
-+ .flags = KERNEL_PARAM_OPS_FL_NOARG,
-+ .set = i8042_set_reset,
-+};
-+#define param_check_reset_param(name, p) \
-+ __param_check(name, p, enum i8042_controller_reset_mode)
-+module_param_named(reset, i8042_reset, reset_param, 0);
-+MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both");
-
- static bool i8042_direct;
- module_param_named(direct, i8042_direct, bool, 0);
-@@ -1019,7 +1049,7 @@ static int i8042_controller_init(void)
- * Reset the controller and reset CRT to the original value set by BIOS.
- */
-
--static void i8042_controller_reset(bool force_reset)
-+static void i8042_controller_reset(bool s2r_wants_reset)
- {
- i8042_flush();
-
-@@ -1044,8 +1074,10 @@ static void i8042_controller_reset(bool force_reset)
- * Reset the controller if requested.
- */
-
-- if (i8042_reset || force_reset)
-+ if (i8042_reset == I8042_RESET_ALWAYS ||
-+ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) {
- i8042_controller_selftest();
-+ }
-
- /*
- * Restore the original control register setting.
-@@ -1110,7 +1142,7 @@ static void i8042_dritek_enable(void)
- * before suspending.
- */
-
--static int i8042_controller_resume(bool force_reset)
-+static int i8042_controller_resume(bool s2r_wants_reset)
- {
- int error;
-
-@@ -1118,7 +1150,8 @@ static int i8042_controller_resume(bool force_reset)
- if (error)
- return error;
-
-- if (i8042_reset || force_reset) {
-+ if (i8042_reset == I8042_RESET_ALWAYS ||
-+ (i8042_reset == I8042_RESET_ON_S2RAM && s2r_wants_reset)) {
- error = i8042_controller_selftest();
- if (error)
- return error;
-@@ -1195,7 +1228,7 @@ static int i8042_pm_resume_noirq(struct device *dev)
-
- static int i8042_pm_resume(struct device *dev)
- {
-- bool force_reset;
-+ bool want_reset;
- int i;
-
- for (i = 0; i < I8042_NUM_PORTS; i++) {
-@@ -1218,9 +1251,9 @@ static int i8042_pm_resume(struct device *dev)
- * off control to the platform firmware, otherwise we can simply restore
- * the mode.
- */
-- force_reset = pm_resume_via_firmware();
-+ want_reset = pm_resume_via_firmware();
-
-- return i8042_controller_resume(force_reset);
-+ return i8042_controller_resume(want_reset);
- }
-
- static int i8042_pm_thaw(struct device *dev)
-@@ -1481,7 +1514,7 @@ static int __init i8042_probe(struct platform_device *dev)
-
- i8042_platform_device = dev;
-
-- if (i8042_reset) {
-+ if (i8042_reset == I8042_RESET_ALWAYS) {
- error = i8042_controller_selftest();
- if (error)
- return error;
---
-cgit v0.12
-
diff --git a/kernel.spec b/kernel.spec
index 1ab02ab2c..292756742 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -42,7 +42,7 @@ Summary: The Linux kernel
# For non-released -rc kernels, this will be appended after the rcX and
# gitX tags, so a 3 here would become part of release "0.rcX.gitX.3"
#
-%global baserelease 301
+%global baserelease 300
%global fedora_build %{baserelease}
# base_sublevel is the kernel version we're starting with and patching
@@ -54,7 +54,7 @@ Summary: The Linux kernel
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 4
+%define stable_update 5
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev %{stable_update}
@@ -600,8 +600,6 @@ Patch502: firmware-Drop-WARN-from-usermodehelper_read_trylock-.patch
# Patch503: drm-i915-turn-off-wc-mmaps.patch
-Patch504: i8042-skip-selftest-asus-laptops.patch
-
Patch508: kexec-uefi-copy-secure_boot-flag-in-boot-params.patch
#CVE-2016-3134 rhbz 1317383 1317384
@@ -2170,6 +2168,9 @@ fi
#
#
%changelog
+* Fri Oct 28 2016 Justin M. Forbes <jforbes@fedoraproject.org> - 4.8.5-300
+- Linux v4.8.5
+
* Thu Oct 27 2016 Justin M. Forbes <jforbes@fedoraproject.org>
- CVE-2016-9083 CVE-2016-9084 vfio multiple flaws (rhbz 1389258 1389259 1389285)
- Skylake i915 fixes from 4.9
diff --git a/sources b/sources
index 1c4346db9..bfe1e002b 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,3 @@
c1af0afbd3df35c1ccdc7a5118cd2d07 linux-4.8.tar.xz
0dad03f586e835d538d3e0d2cbdb9a28 perf-man-4.8.tar.gz
-4d85e2c59ec33dd7766e18d079e75114 patch-4.8.4.xz
+3b00c3fcfbe05e3cb7702e8db6fee28b patch-4.8.5.xz