[kernel] r21640 - in dists/sid/linux/debian: . patches patches/bugfix/s390

Ben Hutchings benh at moszumanska.debian.org
Tue Jul 29 01:30:15 UTC 2014


Author: benh
Date: Tue Jul 29 01:30:15 2014
New Revision: 21640

Log:
[s390,s390x] 3215: fix hanging console issue (Closes: #747922)

Added:
   dists/sid/linux/debian/patches/bugfix/s390/s390-3215-fix-hanging-console-issue.patch
Modified:
   dists/sid/linux/debian/changelog
   dists/sid/linux/debian/patches/series

Modified: dists/sid/linux/debian/changelog
==============================================================================
--- dists/sid/linux/debian/changelog	Sun Jul 27 23:40:39 2014	(r21639)
+++ dists/sid/linux/debian/changelog	Tue Jul 29 01:30:15 2014	(r21640)
@@ -12,6 +12,7 @@
   * [amd64] Make x32 syscall support conditional on a kernel parameter
   * [amd64] Enable X86_X32 (Closes: #708070) and X86_X32_DISABLED.
     Use the kernel parameter "syscall.x32=y" to enable support for x32.
+  * [s390,s390x] 3215: fix hanging console issue (Closes: #747922)
 
  -- Aurelien Jarno <aurel32 at debian.org>  Fri, 25 Jul 2014 23:02:24 +0200
 

Added: dists/sid/linux/debian/patches/bugfix/s390/s390-3215-fix-hanging-console-issue.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/sid/linux/debian/patches/bugfix/s390/s390-3215-fix-hanging-console-issue.patch	Tue Jul 29 01:30:15 2014	(r21640)
@@ -0,0 +1,69 @@
+From: Martin Schwidefsky <schwidefsky at de.ibm.com>
+Date: Tue, 15 Jul 2014 17:53:12 +0200
+Subject: s390/3215: fix hanging console issue
+Origin: https://git.kernel.org/cgit/linux/kernel/git/s390/linux.git/commit?id=26d766c60f4ea08cd14f0f3435a6db3d6cc2ae96
+Bug-Debian: https://bugs.debian.org/747922
+
+The ccw_device_start in raw3215_start_io can fail. raw3215_try_io
+does not check if the request could be started and removes any
+pending timer. This can leave the system in a hanging state.
+Check for pending request after raw3215_start_io and start a
+timer if necessary.
+
+Signed-off-by: Martin Schwidefsky <schwidefsky at de.ibm.com>
+---
+ drivers/s390/char/con3215.c | 32 +++++++++++++++++---------------
+ 1 file changed, 17 insertions(+), 15 deletions(-)
+
+diff --git a/drivers/s390/char/con3215.c b/drivers/s390/char/con3215.c
+index 5af7f0b..a6d47e5 100644
+--- a/drivers/s390/char/con3215.c
++++ b/drivers/s390/char/con3215.c
+@@ -288,12 +288,16 @@ static void raw3215_timeout(unsigned long __data)
+ 	unsigned long flags;
+ 
+ 	spin_lock_irqsave(get_ccwdev_lock(raw->cdev), flags);
+-	if (raw->flags & RAW3215_TIMER_RUNS) {
+-		del_timer(&raw->timer);
+-		raw->flags &= ~RAW3215_TIMER_RUNS;
+-		if (!(raw->port.flags & ASYNC_SUSPENDED)) {
+-			raw3215_mk_write_req(raw);
+-			raw3215_start_io(raw);
++	raw->flags &= ~RAW3215_TIMER_RUNS;
++	if (!(raw->port.flags & ASYNC_SUSPENDED)) {
++		raw3215_mk_write_req(raw);
++		raw3215_start_io(raw);
++		if ((raw->queued_read || raw->queued_write) &&
++		    !(raw->flags & RAW3215_WORKING) &&
++		    !(raw->flags & RAW3215_TIMER_RUNS)) {
++			raw->timer.expires = RAW3215_TIMEOUT + jiffies;
++			add_timer(&raw->timer);
++			raw->flags |= RAW3215_TIMER_RUNS;
+ 		}
+ 	}
+ 	spin_unlock_irqrestore(get_ccwdev_lock(raw->cdev), flags);
+@@ -317,17 +321,15 @@ static inline void raw3215_try_io(struct raw3215_info *raw)
+ 		    (raw->flags & RAW3215_FLUSHING)) {
+ 			/* execute write requests bigger than minimum size */
+ 			raw3215_start_io(raw);
+-			if (raw->flags & RAW3215_TIMER_RUNS) {
+-				del_timer(&raw->timer);
+-				raw->flags &= ~RAW3215_TIMER_RUNS;
+-			}
+-		} else if (!(raw->flags & RAW3215_TIMER_RUNS)) {
+-			/* delay small writes */
+-			raw->timer.expires = RAW3215_TIMEOUT + jiffies;
+-			add_timer(&raw->timer);
+-			raw->flags |= RAW3215_TIMER_RUNS;
+ 		}
+ 	}
++	if ((raw->queued_read || raw->queued_write) &&
++	    !(raw->flags & RAW3215_WORKING) &&
++	    !(raw->flags & RAW3215_TIMER_RUNS)) {
++		raw->timer.expires = RAW3215_TIMEOUT + jiffies;
++		add_timer(&raw->timer);
++		raw->flags |= RAW3215_TIMER_RUNS;
++	}
+ }
+ 
+ /*

Modified: dists/sid/linux/debian/patches/series
==============================================================================
--- dists/sid/linux/debian/patches/series	Sun Jul 27 23:40:39 2014	(r21639)
+++ dists/sid/linux/debian/patches/series	Tue Jul 29 01:30:15 2014	(r21640)
@@ -112,3 +112,4 @@
 features/mips/MIPS-Loongson-3-Add-Loongson-LS3A-RS780E-1-way-machi.patch
 bugfix/x86/x86-reject-x32-executables-if-x32-abi-not-supported.patch
 features/x86/x86-make-x32-syscall-support-conditional.patch
+bugfix/s390/s390-3215-fix-hanging-console-issue.patch



More information about the Kernel-svn-changes mailing list