]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
moved i8042 patch to "postponed"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Aug 2016 07:36:15 +0000 (09:36 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 19 Aug 2016 07:36:15 +0000 (09:36 +0200)
postponed/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch [moved from queue-4.4/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch with 100% similarity]
queue-3.14/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch [deleted file]
queue-3.14/series
queue-4.4/random-initialize-the-non-blocking-pool-via-add_hwgenerator_randomness.patch
queue-4.4/series
queue-4.7/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch [deleted file]
queue-4.7/series

diff --git a/queue-3.14/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch b/queue-3.14/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch
deleted file mode 100644 (file)
index 3b32c4b..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-From 4097461897df91041382ff6fcd2bfa7ee6b2448c Mon Sep 17 00:00:00 2001
-From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-Date: Mon, 25 Jul 2016 11:36:54 -0700
-Subject: Input: i8042 - break load dependency between atkbd/psmouse and i8042
-
-From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-
-commit 4097461897df91041382ff6fcd2bfa7ee6b2448c upstream.
-
-As explained in 1407814240-4275-1-git-send-email-decui@microsoft.com we
-have a hard load dependency between i8042 and atkbd which prevents
-keyboard from working on Gen2 Hyper-V VMs.
-
-> hyperv_keyboard invokes serio_interrupt(), which needs a valid serio
-> driver like atkbd.c.  atkbd.c depends on libps2.c because it invokes
-> ps2_command().  libps2.c depends on i8042.c because it invokes
-> i8042_check_port_owner().  As a result, hyperv_keyboard actually
-> depends on i8042.c.
->
-> For a Generation 2 Hyper-V VM (meaning no i8042 device emulated), if a
-> Linux VM (like Arch Linux) happens to configure CONFIG_SERIO_I8042=m
-> rather than =y, atkbd.ko can't load because i8042.ko can't load(due to
-> no i8042 device emulated) and finally hyperv_keyboard can't work and
-> the user can't input: https://bugs.archlinux.org/task/39820
-> (Ubuntu/RHEL/SUSE aren't affected since they use CONFIG_SERIO_I8042=y)
-
-To break the dependency we move away from using i8042_check_port_owner()
-and instead allow serio port owner specify a mutex that clients should use
-to serialize PS/2 command stream.
-
-Reported-by: Mark Laws <mdl@60hz.org>
-Tested-by: Mark Laws <mdl@60hz.org>
-Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/input/serio/i8042.c  |   16 +---------------
- drivers/input/serio/libps2.c |   10 ++++------
- include/linux/i8042.h        |    6 ------
- include/linux/serio.h        |   24 +++++++++++++++++++-----
- 4 files changed, 24 insertions(+), 32 deletions(-)
-
---- a/drivers/input/serio/i8042.c
-+++ b/drivers/input/serio/i8042.c
-@@ -1230,6 +1230,7 @@ static int __init i8042_create_kbd_port(
-       serio->start            = i8042_start;
-       serio->stop             = i8042_stop;
-       serio->close            = i8042_port_close;
-+      serio->ps2_cmd_mutex    = &i8042_mutex;
-       serio->port_data        = port;
-       serio->dev.parent       = &i8042_platform_device->dev;
-       strlcpy(serio->name, "i8042 KBD port", sizeof(serio->name));
-@@ -1321,21 +1322,6 @@ static void i8042_unregister_ports(void)
-       }
- }
--/*
-- * Checks whether port belongs to i8042 controller.
-- */
--bool i8042_check_port_owner(const struct serio *port)
--{
--      int i;
--
--      for (i = 0; i < I8042_NUM_PORTS; i++)
--              if (i8042_ports[i].serio == port)
--                      return true;
--
--      return false;
--}
--EXPORT_SYMBOL(i8042_check_port_owner);
--
- static void i8042_free_irqs(void)
- {
-       if (i8042_aux_irq_registered)
---- a/drivers/input/serio/libps2.c
-+++ b/drivers/input/serio/libps2.c
-@@ -56,19 +56,17 @@ EXPORT_SYMBOL(ps2_sendbyte);
- void ps2_begin_command(struct ps2dev *ps2dev)
- {
--      mutex_lock(&ps2dev->cmd_mutex);
-+      struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
--      if (i8042_check_port_owner(ps2dev->serio))
--              i8042_lock_chip();
-+      mutex_lock(m);
- }
- EXPORT_SYMBOL(ps2_begin_command);
- void ps2_end_command(struct ps2dev *ps2dev)
- {
--      if (i8042_check_port_owner(ps2dev->serio))
--              i8042_unlock_chip();
-+      struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
--      mutex_unlock(&ps2dev->cmd_mutex);
-+      mutex_unlock(m);
- }
- EXPORT_SYMBOL(ps2_end_command);
---- a/include/linux/i8042.h
-+++ b/include/linux/i8042.h
-@@ -62,7 +62,6 @@ struct serio;
- void i8042_lock_chip(void);
- void i8042_unlock_chip(void);
- int i8042_command(unsigned char *param, int command);
--bool i8042_check_port_owner(const struct serio *);
- int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
-                                       struct serio *serio));
- int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str,
-@@ -83,11 +82,6 @@ static inline int i8042_command(unsigned
-       return -ENODEV;
- }
--static inline bool i8042_check_port_owner(const struct serio *serio)
--{
--      return false;
--}
--
- static inline int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
-                                       struct serio *serio))
- {
---- a/include/linux/serio.h
-+++ b/include/linux/serio.h
-@@ -29,7 +29,8 @@ struct serio {
-       struct serio_device_id id;
--      spinlock_t lock;                /* protects critical sections from port's interrupt handler */
-+      /* Protects critical sections from port's interrupt handler */
-+      spinlock_t lock;
-       int (*write)(struct serio *, unsigned char);
-       int (*open)(struct serio *);
-@@ -38,16 +39,29 @@ struct serio {
-       void (*stop)(struct serio *);
-       struct serio *parent;
--      struct list_head child_node;    /* Entry in parent->children list */
-+      /* Entry in parent->children list */
-+      struct list_head child_node;
-       struct list_head children;
--      unsigned int depth;             /* level of nesting in serio hierarchy */
-+      /* Level of nesting in serio hierarchy */
-+      unsigned int depth;
--      struct serio_driver *drv;       /* accessed from interrupt, must be protected by serio->lock and serio->sem */
--      struct mutex drv_mutex;         /* protects serio->drv so attributes can pin driver */
-+      /*
-+       * serio->drv is accessed from interrupt handlers; when modifying
-+       * caller should acquire serio->drv_mutex and serio->lock.
-+       */
-+      struct serio_driver *drv;
-+      /* Protects serio->drv so attributes can pin current driver */
-+      struct mutex drv_mutex;
-       struct device dev;
-       struct list_head node;
-+
-+      /*
-+       * For use by PS/2 layer when several ports share hardware and
-+       * may get indigestion when exposed to concurrent access (i8042).
-+       */
-+      struct mutex *ps2_cmd_mutex;
- };
- #define to_serio_port(d)      container_of(d, struct serio, dev)
index 3e98c84704524b88da87d53c95a595fcb466ed55..a0b7ad055644e4ea15b98a6278fbf523df1b09a0 100644 (file)
@@ -11,7 +11,6 @@ bluetooth-fix-l2cap_sock_setsockopt-with-optname-bt_rcvmtu.patch
 cifs-check-for-existing-directory-when-opening-file-with-o_creat.patch
 cifs-fix-crash-due-to-race-in-hmac-md5-handling.patch
 cifs-fix-a-possible-invalid-memory-access-in-smb2_query_symlink.patch
-random-properly-align-get_random_int_hash.patch
 random-print-a-warning-for-the-first-ten-uninitialized-random-users.patch
 mips-kvm-fix-mapped-fault-broken-commpage-handling.patch
 mips-kvm-add-missing-gfn-range-check.patch
@@ -39,7 +38,6 @@ ubi-make-volume-resize-power-cut-aware.patch
 ubi-fix-race-condition-between-ubi-device-creation-and-udev.patch
 target-fix-race-between-iscsi-target-connection-shutdown-abort_task.patch
 target-fix-max_unmap_lba_count-calc-overflow.patch
-input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch
 pci-mark-atheros-ar9485-and-qca9882-to-avoid-bus-reset.patch
 dm-flakey-error-read-bios-during-the-down_interval.patch
 module-invalidate-signatures-on-force-loaded-modules.patch
index 5f8f79d764771f4024f7ebfc293789a1e9f1d3d8..64f04d4c0b5b22d4bca521e2c418ddf02b33c529 100644 (file)
@@ -20,7 +20,7 @@ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
 
 --- a/drivers/char/random.c
 +++ b/drivers/char/random.c
-@@ -1849,12 +1849,18 @@ void add_hwgenerator_randomness(const ch
+@@ -1847,12 +1847,18 @@ void add_hwgenerator_randomness(const ch
  {
        struct entropy_store *poolp = &input_pool;
  
index 3edac0c3251b654a94f2e13c0f63924b1ca0dbed..8e19091b6dc19b05999c97319cee175b75b7770d 100644 (file)
@@ -51,7 +51,6 @@ fs-cifs-make-share-unaccessible-at-root-level-mountable.patch
 cifs-check-for-existing-directory-when-opening-file-with-o_creat.patch
 cifs-fix-crash-due-to-race-in-hmac-md5-handling.patch
 cifs-fix-a-possible-invalid-memory-access-in-smb2_query_symlink.patch
-random-properly-align-get_random_int_hash.patch
 random-initialize-the-non-blocking-pool-via-add_hwgenerator_randomness.patch
 random-print-a-warning-for-the-first-ten-uninitialized-random-users.patch
 random-add-interrupt-callback-to-vmbus-irq-handler.patch
@@ -123,7 +122,6 @@ target-fix-race-between-iscsi-target-connection-shutdown-abort_task.patch
 target-fix-max_unmap_lba_count-calc-overflow.patch
 target-fix-ordered-task-check_condition-early-exception-handling.patch
 input-elan_i2c-properly-wake-up-touchpad-on-asus-laptops.patch
-input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch
 sunrpc-don-t-allocate-a-full-sockaddr_storage-for-tracing.patch
 mips-mm-fix-definition-of-r6-cache-instruction.patch
 mips-don-t-register-r4k-sched-clock-when-cpufreq-enabled.patch
diff --git a/queue-4.7/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch b/queue-4.7/input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch
deleted file mode 100644 (file)
index 6e3215b..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-From 4097461897df91041382ff6fcd2bfa7ee6b2448c Mon Sep 17 00:00:00 2001
-From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-Date: Mon, 25 Jul 2016 11:36:54 -0700
-Subject: Input: i8042 - break load dependency between atkbd/psmouse and i8042
-
-From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-
-commit 4097461897df91041382ff6fcd2bfa7ee6b2448c upstream.
-
-As explained in 1407814240-4275-1-git-send-email-decui@microsoft.com we
-have a hard load dependency between i8042 and atkbd which prevents
-keyboard from working on Gen2 Hyper-V VMs.
-
-> hyperv_keyboard invokes serio_interrupt(), which needs a valid serio
-> driver like atkbd.c.  atkbd.c depends on libps2.c because it invokes
-> ps2_command().  libps2.c depends on i8042.c because it invokes
-> i8042_check_port_owner().  As a result, hyperv_keyboard actually
-> depends on i8042.c.
->
-> For a Generation 2 Hyper-V VM (meaning no i8042 device emulated), if a
-> Linux VM (like Arch Linux) happens to configure CONFIG_SERIO_I8042=m
-> rather than =y, atkbd.ko can't load because i8042.ko can't load(due to
-> no i8042 device emulated) and finally hyperv_keyboard can't work and
-> the user can't input: https://bugs.archlinux.org/task/39820
-> (Ubuntu/RHEL/SUSE aren't affected since they use CONFIG_SERIO_I8042=y)
-
-To break the dependency we move away from using i8042_check_port_owner()
-and instead allow serio port owner specify a mutex that clients should use
-to serialize PS/2 command stream.
-
-Reported-by: Mark Laws <mdl@60hz.org>
-Tested-by: Mark Laws <mdl@60hz.org>
-Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/input/serio/i8042.c  |   16 +---------------
- drivers/input/serio/libps2.c |   10 ++++------
- include/linux/i8042.h        |    6 ------
- include/linux/serio.h        |   24 +++++++++++++++++++-----
- 4 files changed, 24 insertions(+), 32 deletions(-)
-
---- a/drivers/input/serio/i8042.c
-+++ b/drivers/input/serio/i8042.c
-@@ -1277,6 +1277,7 @@ static int __init i8042_create_kbd_port(
-       serio->start            = i8042_start;
-       serio->stop             = i8042_stop;
-       serio->close            = i8042_port_close;
-+      serio->ps2_cmd_mutex    = &i8042_mutex;
-       serio->port_data        = port;
-       serio->dev.parent       = &i8042_platform_device->dev;
-       strlcpy(serio->name, "i8042 KBD port", sizeof(serio->name));
-@@ -1373,21 +1374,6 @@ static void i8042_unregister_ports(void)
-       }
- }
--/*
-- * Checks whether port belongs to i8042 controller.
-- */
--bool i8042_check_port_owner(const struct serio *port)
--{
--      int i;
--
--      for (i = 0; i < I8042_NUM_PORTS; i++)
--              if (i8042_ports[i].serio == port)
--                      return true;
--
--      return false;
--}
--EXPORT_SYMBOL(i8042_check_port_owner);
--
- static void i8042_free_irqs(void)
- {
-       if (i8042_aux_irq_registered)
---- a/drivers/input/serio/libps2.c
-+++ b/drivers/input/serio/libps2.c
-@@ -56,19 +56,17 @@ EXPORT_SYMBOL(ps2_sendbyte);
- void ps2_begin_command(struct ps2dev *ps2dev)
- {
--      mutex_lock(&ps2dev->cmd_mutex);
-+      struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
--      if (i8042_check_port_owner(ps2dev->serio))
--              i8042_lock_chip();
-+      mutex_lock(m);
- }
- EXPORT_SYMBOL(ps2_begin_command);
- void ps2_end_command(struct ps2dev *ps2dev)
- {
--      if (i8042_check_port_owner(ps2dev->serio))
--              i8042_unlock_chip();
-+      struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
--      mutex_unlock(&ps2dev->cmd_mutex);
-+      mutex_unlock(m);
- }
- EXPORT_SYMBOL(ps2_end_command);
---- a/include/linux/i8042.h
-+++ b/include/linux/i8042.h
-@@ -62,7 +62,6 @@ struct serio;
- void i8042_lock_chip(void);
- void i8042_unlock_chip(void);
- int i8042_command(unsigned char *param, int command);
--bool i8042_check_port_owner(const struct serio *);
- int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
-                                       struct serio *serio));
- int i8042_remove_filter(bool (*filter)(unsigned char data, unsigned char str,
-@@ -83,11 +82,6 @@ static inline int i8042_command(unsigned
-       return -ENODEV;
- }
--static inline bool i8042_check_port_owner(const struct serio *serio)
--{
--      return false;
--}
--
- static inline int i8042_install_filter(bool (*filter)(unsigned char data, unsigned char str,
-                                       struct serio *serio))
- {
---- a/include/linux/serio.h
-+++ b/include/linux/serio.h
-@@ -31,7 +31,8 @@ struct serio {
-       struct serio_device_id id;
--      spinlock_t lock;                /* protects critical sections from port's interrupt handler */
-+      /* Protects critical sections from port's interrupt handler */
-+      spinlock_t lock;
-       int (*write)(struct serio *, unsigned char);
-       int (*open)(struct serio *);
-@@ -40,16 +41,29 @@ struct serio {
-       void (*stop)(struct serio *);
-       struct serio *parent;
--      struct list_head child_node;    /* Entry in parent->children list */
-+      /* Entry in parent->children list */
-+      struct list_head child_node;
-       struct list_head children;
--      unsigned int depth;             /* level of nesting in serio hierarchy */
-+      /* Level of nesting in serio hierarchy */
-+      unsigned int depth;
--      struct serio_driver *drv;       /* accessed from interrupt, must be protected by serio->lock and serio->sem */
--      struct mutex drv_mutex;         /* protects serio->drv so attributes can pin driver */
-+      /*
-+       * serio->drv is accessed from interrupt handlers; when modifying
-+       * caller should acquire serio->drv_mutex and serio->lock.
-+       */
-+      struct serio_driver *drv;
-+      /* Protects serio->drv so attributes can pin current driver */
-+      struct mutex drv_mutex;
-       struct device dev;
-       struct list_head node;
-+
-+      /*
-+       * For use by PS/2 layer when several ports share hardware and
-+       * may get indigestion when exposed to concurrent access (i8042).
-+       */
-+      struct mutex *ps2_cmd_mutex;
- };
- #define to_serio_port(d)      container_of(d, struct serio, dev)
index dbc08392bd51aa78310c551dc8620b7084728ff1..7da6e248a6bfbffe53e0f209cd12b7a80459b8e9 100644 (file)
@@ -169,7 +169,6 @@ target-fix-max_unmap_lba_count-calc-overflow.patch
 target-fix-ordered-task-check_condition-early-exception-handling.patch
 um-fix-possible-deadlock-in-sig_handler_common.patch
 input-elan_i2c-properly-wake-up-touchpad-on-asus-laptops.patch
-input-i8042-break-load-dependency-between-atkbd-psmouse-and-i8042.patch
 sunrpc-don-t-allocate-a-full-sockaddr_storage-for-tracing.patch
 mips-mm-fix-definition-of-r6-cache-instruction.patch
 mips-fix-r4k-clockevents-registration.patch