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));