Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 89877e42827f16fa5f86b1df0c2860b1 > files > 2004

kernel-2.6.18-128.1.10.el5.src.rpm

From: Hans-Joachim Picht <hpicht@redhat.com>
Date: Fri, 4 Apr 2008 19:48:08 +0200
Subject: [s390] sclp: prevent console lockup during SE warmstart
Message-id: 20080404174808.GA9759@redhat.com
O-Subject: [RHEL5 U3 PATCH 1/7] s390 - sclp: prevent console lockup during SE warmstart
Bugzilla: 436967
RH-Acked-by: Pete Zaitcev <zaitcev@redhat.com>

Description
============

Inconsistencies in the naming of event mask variables lead to
invalid event masks in the case of a state change event (e.g.
triggered by a support element warmstart). Together with a
too strict check for pending input, the result is a complete
lockup of the console, i.e. input and output is no longer
possible. This patch fixes the mask inconsistency for state
change events and loosens the check for pending data.

Bugzilla
=========

BZ 436967
https://bugzilla.redhat.com/show_bug.cgi?id=436967

Upstream status of the patch:
=============================

This patch will be posted upstream in the next merge window.
I'll reply to this message as soon as we have a git commit id

Test status:
============
Kernel with patch was built and successfully tested

Please ACK.

With best regards,

Hans

diff --git a/drivers/s390/char/sclp.c b/drivers/s390/char/sclp.c
index 9952456..86aaad1 100644
--- a/drivers/s390/char/sclp.c
+++ b/drivers/s390/char/sclp.c
@@ -381,7 +381,7 @@ sclp_interrupt_handler(struct pt_regs *regs, __u16 code)
 		}
 		sclp_running_state = sclp_running_state_idle;
 	}
-	if (evbuf_pending && sclp_receive_mask != 0 &&
+	if (evbuf_pending &&
 	    sclp_activation_state == sclp_activation_state_active)
 		__sclp_queue_read_req();
 	spin_unlock(&sclp_lock);
@@ -488,14 +488,14 @@ sclp_dispatch_state_change(void)
 struct sclp_statechangebuf {
 	struct evbuf_header	header;
 	u8		validity_sclp_active_facility_mask : 1;
-	u8		validity_sclp_receive_mask : 1;
 	u8		validity_sclp_send_mask : 1;
+	u8		validity_sclp_receive_mask : 1;
 	u8		validity_read_data_function_mask : 1;
 	u16		_zeros : 12;
 	u16		mask_length;
 	u64		sclp_active_facility_mask;
-	sccb_mask_t	sclp_receive_mask;
 	sccb_mask_t	sclp_send_mask;
+	sccb_mask_t	sclp_receive_mask;
 	u32		read_data_function_mask;
 } __attribute__((packed));