Blame SOURCES/kvm-s390-ccw-force-diag-308-subcode-to-unsigned-long.patch

357786
From 098630a1298aa56f6dfffaeecbddf2d0f39c55a8 Mon Sep 17 00:00:00 2001
357786
From: Thomas Huth <thuth@redhat.com>
357786
Date: Mon, 7 May 2018 07:58:03 +0200
357786
Subject: [PATCH 07/13] s390-ccw: force diag 308 subcode to unsigned long
357786
357786
RH-Author: Thomas Huth <thuth@redhat.com>
357786
Message-id: <1525679888-9234-2-git-send-email-thuth@redhat.com>
357786
Patchwork-id: 80049
357786
O-Subject: [RHEL-7.6 qemu-kvm-ma PATCH 1/6] s390-ccw: force diag 308 subcode to unsigned long
357786
Bugzilla: 1523857
357786
RH-Acked-by: David Hildenbrand <david@redhat.com>
357786
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
357786
RH-Acked-by: Laszlo Ersek <lersek@redhat.com>
357786
357786
From: Cornelia Huck <cohuck@redhat.com>
357786
357786
We currently pass an integer as the subcode parameter. However,
357786
the upper bits of the register containing the subcode need to
357786
be 0, which is not guaranteed unless we explicitly specify the
357786
subcode to be an unsigned long value.
357786
357786
Fixes: d046c51dad3 ("pc-bios/s390-ccw: Get device address via diag 308/6")
357786
Cc: qemu-stable@nongnu.org
357786
Signed-off-by: Cornelia Huck <cohuck@redhat.com>
357786
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
357786
Tested-by: Thomas Huth <thuth@redhat.com>
357786
Signed-off-by: Thomas Huth <thuth@redhat.com>
357786
(cherry picked from commit 63d8b5ace31c1e1f3996fe4cd551d6d377594d5a)
357786
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
357786
---
357786
 pc-bios/s390-ccw/iplb.h | 3 ++-
357786
 1 file changed, 2 insertions(+), 1 deletion(-)
357786
357786
diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h
357786
index 5357a36..ded20c8 100644
357786
--- a/pc-bios/s390-ccw/iplb.h
357786
+++ b/pc-bios/s390-ccw/iplb.h
357786
@@ -101,10 +101,11 @@ static inline bool manage_iplb(IplParameterBlock *iplb, bool store)
357786
 {
357786
     register unsigned long addr asm("0") = (unsigned long) iplb;
357786
     register unsigned long rc asm("1") = 0;
357786
+    unsigned long subcode = store ? 6 : 5;
357786
 
357786
     asm volatile ("diag %0,%2,0x308\n"
357786
                   : "+d" (addr), "+d" (rc)
357786
-                  : "d" (store ? 6 : 5)
357786
+                  : "d" (subcode)
357786
                   : "memory", "cc");
357786
     return rc == 0x01;
357786
 }
357786
-- 
357786
1.8.3.1
357786