Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > fc11cd6e1c513a17304da94a5390f3cd > files > 3076

kernel-2.6.18-194.11.1.el5.src.rpm

From: Hans-Joachim Picht <hpicht@redhat.com>
Date: Wed, 2 Apr 2008 17:28:41 +0200
Subject: [s390] cio: CHPID configuration event is ignored
Message-id: 20080402152841.GD823@blc4eb509856389.ibm.com
O-Subject: [RHEL5 U2 PATCH 1/1] s390 - cio: CHPID configuration event is ignored
Bugzilla: 431858

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

Move check for reporting the source of a hardware event to the
correct position so that CHPID configure events are correctly
processed.

This is required for a feature which is supposed to configure a
CHPID offline when a client uses the "Card Reseat/Replace" dialog at the
Service Element (SE). This feature was introduced in BZ 253076

Without this patch, the hardware event that is generated by the SE dialog
is ignored and Linux behaves as if the kernel code implementing this feature
is not present.

Bugzilla
=========

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

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

Upstream code base does not contain the bug so no patch submission planned.

Test status:
============

The fact that the patch corrects the issue was verified by code review.
Unfortunately it is actually not possible to provide a real test case
because of the intrusive nature of the operation required to trigger event.

Please ACK.

With best regards,

Hans

Acked-by: Pete Zaitcev <zaitcev@redhat.com>

diff --git a/drivers/s390/cio/chsc.c b/drivers/s390/cio/chsc.c
index 3ffc5c8..83e6753 100644
--- a/drivers/s390/cio/chsc.c
+++ b/drivers/s390/cio/chsc.c
@@ -573,16 +573,15 @@ chsc_process_crw(void)
 			CIO_CRW_EVENT(2, "chsc_process_crw: Event information "
 				       "has been lost due to overflow!\n");
 
-		if (sei_area->rs != 4) {
-			CIO_CRW_EVENT(2, "chsc_process_crw: reporting source "
-				      "(%04X) isn't a chpid!\n",
-				      sei_area->rsid);
-			continue;
-		}
-
 		/* which kind of information was stored? */
 		switch (sei_area->cc) {
 		case 1: /* link incident*/
+			if (sei_area->rs != 4) {
+				CIO_CRW_EVENT(2, "chsc_process_crw: reporting "
+					"source (%04X) isn't a chpid!\n",
+					sei_area->rsid);
+				continue;
+			}
 			CIO_CRW_EVENT(4, "chsc_process_crw: "
 				      "channel subsystem reports link incident,"
 				      " reporting source is chpid %x\n",
@@ -599,6 +598,12 @@ chsc_process_crw(void)
 			break;
 
 		case 2: /* i/o resource accessibiliy */
+			if (sei_area->rs != 4) {
+				CIO_CRW_EVENT(2, "chsc_process_crw: reporting "
+					"source (%04X) isn't a chpid!\n",
+					sei_area->rsid);
+				continue;
+			}
 			CIO_CRW_EVENT(4, "chsc_process_crw: "
 				      "channel subsystem reports some I/O "
 				      "devices may have become accessible\n");