Sophie

Sophie

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

kernel-2.6.18-194.11.1.el5.src.rpm

From: Hans-Joachim Picht <hpicht@redhat.com>
Date: Thu, 7 Aug 2008 13:17:09 +0200
Subject: [s390] ipl: file boot then boot from alt dev won't work
Message-id: 20080807111709.GC6319@redhat.com
O-Subject: [RHEL5 U3 PATCH 3/5] s390 - kernel: Reboot from alternate device does not work when booting from file
Bugzilla: 458115
RH-Acked-by: Jarod Wilson <jwilson@redhat.com>
RH-Acked-by: Pete Zaitcev <zaitcev@redhat.com>

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

During startup we check if diag308 works using diag 308 subcode 6,
which stores the actual ipl information. This fails with rc = 0x102, if
the system has been ipled from the HMC using load from CD or load from
file.

In the case of rc = 0x102 we have to assume that diag 308 is working,
since it still can be used to ipl from an alternative device.

Bugzilla
=========

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

Upstream status of the patch:
=============================
Patch is contained in linux-2.6 as of git commit
3a95e8eb34f595a0144adb6e5513d456319bd8a5

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

The patch has been tested and fixes the problem.
The fix has been verified by the IBM test department.

Please ACK.

With best regards,

	-Hans

diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index a06f364..55b0a0d 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -821,11 +821,13 @@ static int __init ipl_init(void)
 static void __init reipl_probe(void)
 {
 	void *buffer;
+	int rc;
 
 	buffer = (void *) get_zeroed_page(GFP_KERNEL);
 	if (!buffer)
 		return;
-	if (diag308(DIAG308_STORE, buffer) == DIAG308_RC_OK)
+	rc = diag308(DIAG308_STORE, buffer);
+	if ((rc == DIAG308_RC_OK) || (rc == DIAG308_RC_NOCONFIG))
 		diag308_set_works = 1;
 	free_page((unsigned long)buffer);
 }
diff --git a/include/asm-s390/ipl.h b/include/asm-s390/ipl.h
index 452a50d..c0241d9 100644
--- a/include/asm-s390/ipl.h
+++ b/include/asm-s390/ipl.h
@@ -139,6 +139,7 @@ enum diag308_opt {
 
 enum diag308_rc {
 	DIAG308_RC_OK	= 1,
+	DIAG308_RC_NOCONFIG = 0x0102,
 };
 
 extern int diag308(unsigned long subcode, void *addr);