[linux] 03/03: i8042: Revert ABI break in 4.7.3

debian-kernel at lists.debian.org debian-kernel at lists.debian.org
Fri Sep 9 09:10:48 UTC 2016


This is an automated email from the git hooks/post-receive script.

benh pushed a commit to branch sid
in repository linux.

commit 5f7e2d6a982d7783820d8f19e687260fe25d81b4
Author: Ben Hutchings <ben at decadent.org.uk>
Date:   Fri Sep 9 02:26:58 2016 +0100

    i8042: Revert ABI break in 4.7.3
---
 debian/changelog                                   |   3 +-
 .../debian/i8042-revert-abi-break-in-4.7.3.patch   | 155 +++++++++++++++++++++
 debian/patches/series                              |   1 +
 3 files changed, 157 insertions(+), 2 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 844bb9b..48fb132 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -91,8 +91,6 @@ linux (4.7.3-1) UNRELEASED; urgency=medium
     - btrfs: don't create or leak aliased root while cleaning up orphans
     - Revert "floppy: fix open(O_ACCMODE) for ioctl-only open"
     - Input: synaptics-rmi4 - fix register descriptor subpacket map construction
-    - Input: i8042 - break load dependency between atkbd/psmouse and i8042
-    - Input: i8042 - set up shared ps2_cmd_mutex for AUX ports
     - [x86] crypto: qat - fix aes-xts key sizes
     - USB: avoid left shift by -1
     - usb: chipidea: udc: don't touch DP when controller is in host mode
@@ -120,6 +118,7 @@ linux (4.7.3-1) UNRELEASED; urgency=medium
   * [arm64] Add cpu_to_fdt32() when setting Secure Boot flag in FDT
   * [amd64] Enable SIGNED_PE_FILE_VERIFICATION, KEXEC_FILE,
     KEXEC_VERIFY_SIG, KEXEC_BZIMAGE_VERIFY_SIG
+  * i8042: Revert ABI break in 4.7.3
 
  -- Ben Hutchings <ben at decadent.org.uk>  Sat, 03 Sep 2016 18:34:31 +0100
 
diff --git a/debian/patches/debian/i8042-revert-abi-break-in-4.7.3.patch b/debian/patches/debian/i8042-revert-abi-break-in-4.7.3.patch
new file mode 100644
index 0000000..96d9cdd
--- /dev/null
+++ b/debian/patches/debian/i8042-revert-abi-break-in-4.7.3.patch
@@ -0,0 +1,155 @@
+From: Ben Hutchings <ben at decadent.org.uk>
+Date: Fri, 09 Sep 2016 02:13:06 +0100
+Subject: i8042: Revert ABI break in 4.7.3
+Forwarded: not-needed
+
+Revert "Input: i8042 - set up shared ps2_cmd_mutex for AUX ports" and
+"Input: i8042 - break load dependency between atkbd/psmouse and i8042"
+to avoid an ABI break.
+
+CONFIG_SERIO_I8042=m is absurd on x86 so this didn't really deserve a
+stable update.
+
+---
+diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
+index 405252a884dd..454195709a82 100644
+--- a/drivers/input/serio/i8042.c
++++ b/drivers/input/serio/i8042.c
+@@ -1277,7 +1277,6 @@ static int __init i8042_create_kbd_port(void)
+ 	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));
+@@ -1305,7 +1304,6 @@ static int __init i8042_create_aux_port(int idx)
+ 	serio->write		= i8042_aux_write;
+ 	serio->start		= i8042_start;
+ 	serio->stop		= i8042_stop;
+-	serio->ps2_cmd_mutex	= &i8042_mutex;
+ 	serio->port_data	= port;
+ 	serio->dev.parent	= &i8042_platform_device->dev;
+ 	if (idx < 0) {
+@@ -1375,6 +1373,21 @@ 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)
+diff --git a/drivers/input/serio/libps2.c b/drivers/input/serio/libps2.c
+index 83e9c663aa67..316f2c897101 100644
+--- a/drivers/input/serio/libps2.c
++++ b/drivers/input/serio/libps2.c
+@@ -56,17 +56,19 @@ EXPORT_SYMBOL(ps2_sendbyte);
+ 
+ void ps2_begin_command(struct ps2dev *ps2dev)
+ {
+-	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
++	mutex_lock(&ps2dev->cmd_mutex);
+ 
+-	mutex_lock(m);
++	if (i8042_check_port_owner(ps2dev->serio))
++		i8042_lock_chip();
+ }
+ EXPORT_SYMBOL(ps2_begin_command);
+ 
+ void ps2_end_command(struct ps2dev *ps2dev)
+ {
+-	struct mutex *m = ps2dev->serio->ps2_cmd_mutex ?: &ps2dev->cmd_mutex;
++	if (i8042_check_port_owner(ps2dev->serio))
++		i8042_unlock_chip();
+ 
+-	mutex_unlock(m);
++	mutex_unlock(&ps2dev->cmd_mutex);
+ }
+ EXPORT_SYMBOL(ps2_end_command);
+ 
+diff --git a/include/linux/i8042.h b/include/linux/i8042.h
+index d98780ca9604..0f9bafa17a02 100644
+--- a/include/linux/i8042.h
++++ b/include/linux/i8042.h
+@@ -62,6 +62,7 @@ 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,
+@@ -82,6 +83,11 @@ static inline int i8042_command(unsigned char *param, int command)
+ 	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))
+ {
+diff --git a/include/linux/serio.h b/include/linux/serio.h
+index c733cff44e18..df4ab5de1586 100644
+--- a/include/linux/serio.h
++++ b/include/linux/serio.h
+@@ -31,8 +31,7 @@ struct serio {
+ 
+ 	struct serio_device_id id;
+ 
+-	/* Protects critical sections from port's interrupt handler */
+-	spinlock_t lock;
++	spinlock_t lock;		/* protects critical sections from port's interrupt handler */
+ 
+ 	int (*write)(struct serio *, unsigned char);
+ 	int (*open)(struct serio *);
+@@ -41,29 +40,16 @@ struct serio {
+ 	void (*stop)(struct serio *);
+ 
+ 	struct serio *parent;
+-	/* Entry in parent->children list */
+-	struct list_head child_node;
++	struct list_head child_node;	/* Entry in parent->children list */
+ 	struct list_head children;
+-	/* Level of nesting in serio hierarchy */
+-	unsigned int depth;
++	unsigned int depth;		/* level of nesting in serio hierarchy */
+ 
+-	/*
+-	 * 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 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 */
+ 
+ 	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)
+ 
diff --git a/debian/patches/series b/debian/patches/series
index f0e9fab..d1ef409 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -144,3 +144,4 @@ bugfix/all/rtc-initialize-output-parameter-for-read-alarm-to-un.patch
 bugfix/all/rtc-s35390a-fix-reading-out-alarm.patch
 bugfix/all/rtc-s35390a-implement-reset-routine-as-suggested-by-.patch
 bugfix/all/rtc-s35390a-improve-irq-handling.patch
+debian/i8042-revert-abi-break-in-4.7.3.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/linux.git



More information about the Kernel-svn-changes mailing list