Blame SOURCES/kvm-pc-bios-s390x-Ensure-Read-IPL-memory-is-clean.patch

a19a21
From 6b19062226ecebf63d2d0b0ff05b5bcfa7a05818 Mon Sep 17 00:00:00 2001
a19a21
From: Thomas Huth <thuth@redhat.com>
a19a21
Date: Thu, 10 Dec 2020 08:32:40 -0500
a19a21
Subject: [PATCH 4/5] pc-bios: s390x: Ensure Read IPL memory is clean
a19a21
a19a21
RH-Author: Thomas Huth <thuth@redhat.com>
a19a21
Message-id: <20201210083241.173509-4-thuth@redhat.com>
a19a21
Patchwork-id: 100372
a19a21
O-Subject: [RHEL-8.4.0 qemu-kvm PATCH 3/4] pc-bios: s390x: Ensure Read IPL memory is clean
a19a21
Bugzilla: 1903135
a19a21
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
a19a21
RH-Acked-by: Jens Freimann <jfreimann@redhat.com>
a19a21
RH-Acked-by: David Hildenbrand <david@redhat.com>
a19a21
a19a21
From: Eric Farman <farman@linux.ibm.com>
a19a21
a19a21
If, for example, we boot off a virtio device and chreipl to a vfio-ccw
a19a21
device, the space at lowcore will be non-zero. We build a Read IPL CCW
a19a21
at address zero, but it will have leftover PSW data that will conflict
a19a21
with the Format-0 CCW being generated:
a19a21
a19a21
0x0: 00080000 80010000
a19a21
       ------ Ccw0.cda
a19a21
              -- Ccw0.chainData
a19a21
                -- Reserved bits
a19a21
a19a21
The data address will be overwritten with the correct value (0x0), but
a19a21
the apparent data chain bit will cause subsequent memory to be used as
a19a21
the target of the data store, which may not be where we expect (0x0).
a19a21
a19a21
Clear out this space when we boot from DASD, so that we know it exists
a19a21
exactly as we expect.
a19a21
a19a21
Signed-off-by: Eric Farman <farman@linux.ibm.com>
a19a21
Reviewed-by: Jason J. Herne <jjherne@linux.ibm.com>
a19a21
Reviewed-by: Janosch Frank <frankja@de.ibm.com>
a19a21
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
a19a21
Acked-by: Cornelia Huck <cohuck@redhat.com>
a19a21
Message-Id: <20201120160117.59366-2-farman@linux.ibm.com>
a19a21
Signed-off-by: Thomas Huth <thuth@redhat.com>
a19a21
(cherry picked from commit d8e5bbdd0d6fa8d9b5ac15de62c87105d92ff558)
a19a21
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
a19a21
---
a19a21
 pc-bios/s390-ccw/dasd-ipl.c | 3 +++
a19a21
 1 file changed, 3 insertions(+)
a19a21
a19a21
diff --git a/pc-bios/s390-ccw/dasd-ipl.c b/pc-bios/s390-ccw/dasd-ipl.c
a19a21
index 0fc879bb8e8..71cbae2f16e 100644
a19a21
--- a/pc-bios/s390-ccw/dasd-ipl.c
a19a21
+++ b/pc-bios/s390-ccw/dasd-ipl.c
a19a21
@@ -100,6 +100,9 @@ static void make_readipl(void)
a19a21
 {
a19a21
     Ccw0 *ccwIplRead = (Ccw0 *)0x00;
a19a21
 
a19a21
+    /* Clear out any existing data */
a19a21
+    memset(ccwIplRead, 0, sizeof(Ccw0));
a19a21
+
a19a21
     /* Create Read IPL ccw at address 0 */
a19a21
     ccwIplRead->cmd_code = CCW_CMD_READ_IPL;
a19a21
     ccwIplRead->cda = 0x00; /* Read into address 0x00 in main memory */
a19a21
-- 
a19a21
2.27.0
a19a21