All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 00/12] next batch of s390x patches
@ 2017-05-02 13:35 Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 01/12] hw/s390x: provide loadparm property for the machine Cornelia Huck
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell; +Cc: borntraeger, agraf, qemu-devel, Cornelia Huck

The following changes since commit 38bb54f323bf7c83496b6a044cfd28896e997a00:

  replication: Make --disable-replication compile again (2017-04-28 16:50:16 +0100)

are available in the git repository at:

  git://github.com/cohuck/qemu tags/s390x-20170502

for you to fetch changes up to 99efaa2696caaf6182958e27d553449674894b27:

  hw/s390x/ipl: Fix crash with virtio-scsi-pci device (2017-05-02 15:08:54 +0200)

----------------------------------------------------------------
More s390x patches, this time boot related:
- LOADPARM machine property, exposed to the guest via SCLP and
  diagnose 308
- Use LOADPARM in the s390-ccw bios to select a boot entry
- Fix a crash in the ipl device code when a virtio-scsi-pci device
  has been specified

----------------------------------------------------------------

Cornelia Huck (1):
  pc-bios/s390-ccw.img: update image

Eugene (jno) Dvurechenski (2):
  pc-bios/s390-ccw: Make ebcdic/ascii conversion public
  pc-bios/s390-ccw: add boot entry selection to El Torito routine

Farhan Ali (8):
  hw/s390x: provide loadparm property for the machine
  hw/s390x/ipl: enable LOADPARM in IPIB for a boot device
  hw/s390x/sclp: update LOADPARM in SCP Info
  util/qemu-config: Add loadparm to qemu machine_opts
  pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info
  pc-bios/s390-ccw: provide a function to interpret LOADPARM value
  pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk
  pc-bios/s390-ccw: add boot entry selection for ECKD DASD

Thomas Huth (1):
  hw/s390x/ipl: Fix crash with virtio-scsi-pci device

 hw/s390x/ipl.c                            |  39 +++++++++++++++++++++++++++---
 hw/s390x/ipl.h                            |   3 +++
 hw/s390x/s390-virtio-ccw.c                |  37 ++++++++++++++++++++++++++++
 hw/s390x/sclp.c                           |   9 +++++++
 include/hw/s390x/s390-virtio-ccw.h        |   1 +
 pc-bios/s390-ccw.img                      | Bin 26456 -> 26472 bytes
 pc-bios/s390-ccw/Makefile                 |   2 +-
 pc-bios/s390-ccw/bootmap.c                |  34 +++++++++++++++++---------
 pc-bios/s390-ccw/bootmap.h                |  24 +-----------------
 pc-bios/s390-ccw/main.c                   |  38 ++++++++++++++++++++++++++++-
 pc-bios/s390-ccw/s390-ccw.h               |  17 ++++++++++++-
 pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} |  12 +++++++++
 pc-bios/s390-ccw/sclp.h                   |   2 ++
 util/qemu-config.c                        |   6 +++++
 14 files changed, 184 insertions(+), 40 deletions(-)
 rename pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} (87%)

-- 
2.11.0

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 01/12] hw/s390x: provide loadparm property for the machine
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 02/12] hw/s390x/ipl: enable LOADPARM in IPIB for a boot device Cornelia Huck
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

In order to specify the LOADPARM value one may now add ",loadparm=xxx"
parameter to the "-machine s390-ccw-virtio" option.

The property setter will normalize and check the value provided much
like the way the HMC does.

The value is stored, but not used at the moment.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c         | 37 +++++++++++++++++++++++++++++++++++++
 include/hw/s390x/s390-virtio-ccw.h |  1 +
 2 files changed, 38 insertions(+)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 04bd0ebe40..fdd4384ff0 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -274,6 +274,36 @@ bool cpu_model_allowed(void)
     return true;
 }
 
+static char *machine_get_loadparm(Object *obj, Error **errp)
+{
+    S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
+
+    return g_memdup(ms->loadparm, sizeof(ms->loadparm));
+}
+
+static void machine_set_loadparm(Object *obj, const char *val, Error **errp)
+{
+    S390CcwMachineState *ms = S390_CCW_MACHINE(obj);
+    int i;
+
+    for (i = 0; i < sizeof(ms->loadparm) && val[i]; i++) {
+        uint8_t c = toupper(val[i]); /* mimic HMC */
+
+        if (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9') || (c == '.') ||
+            (c == ' ')) {
+            ms->loadparm[i] = c;
+        } else {
+            error_setg(errp, "LOADPARM: invalid character '%c' (ASCII 0x%02x)",
+                       c, c);
+            return;
+        }
+    }
+
+    for (; i < sizeof(ms->loadparm); i++) {
+        ms->loadparm[i] = ' '; /* pad right with spaces */
+    }
+}
+
 static inline void s390_machine_initfn(Object *obj)
 {
     object_property_add_bool(obj, "aes-key-wrap",
@@ -291,6 +321,13 @@ static inline void s390_machine_initfn(Object *obj)
             "enable/disable DEA key wrapping using the CPACF wrapping key",
             NULL);
     object_property_set_bool(obj, true, "dea-key-wrap", NULL);
+    object_property_add_str(obj, "loadparm",
+            machine_get_loadparm, machine_set_loadparm, NULL);
+    object_property_set_description(obj, "loadparm",
+            "Up to 8 chars in set of [A-Za-z0-9. ] (lower case chars converted"
+            " to upper case) to pass to machine loader, boot manager,"
+            " and guest kernel",
+            NULL);
 }
 
 static const TypeInfo ccw_machine_info = {
diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
index 6ecae00386..7b8a3e4d74 100644
--- a/include/hw/s390x/s390-virtio-ccw.h
+++ b/include/hw/s390x/s390-virtio-ccw.h
@@ -28,6 +28,7 @@ typedef struct S390CcwMachineState {
     /*< public >*/
     bool aes_key_wrap;
     bool dea_key_wrap;
+    uint8_t loadparm[8];
 } S390CcwMachineState;
 
 typedef struct S390CcwMachineClass {
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 02/12] hw/s390x/ipl: enable LOADPARM in IPIB for a boot device
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 01/12] hw/s390x: provide loadparm property for the machine Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 03/12] hw/s390x/sclp: update LOADPARM in SCP Info Cornelia Huck
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

Insert the LOADPARM value to the IPL Information Parameter Block.

An IPL Information Parameter Block is created when "bootindex" is
specified for a device. If a user specifies "loadparm=", then we
store the loadparm value in the created IPIB for that boot device.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c | 31 +++++++++++++++++++++++++++++--
 hw/s390x/ipl.h |  3 +++
 2 files changed, 32 insertions(+), 2 deletions(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 7978c7d52a..0711ee927a 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -17,8 +17,10 @@
 #include "cpu.h"
 #include "elf.h"
 #include "hw/loader.h"
+#include "hw/boards.h"
 #include "hw/s390x/virtio-ccw.h"
 #include "hw/s390x/css.h"
+#include "hw/s390x/ebcdic.h"
 #include "ipl.h"
 #include "qemu/error-report.h"
 
@@ -243,7 +245,6 @@ static bool s390_gen_initial_iplb(S390IPLState *ipl)
             ipl->iplb.pbt = S390_IPL_TYPE_CCW;
             ipl->iplb.ccw.devno = cpu_to_be16(ccw_dev->sch->devno);
             ipl->iplb.ccw.ssid = ccw_dev->sch->ssid & 3;
-            return true;
         } else if (sd) {
             SCSIBus *bus = scsi_bus_from_device(sd);
             VirtIOSCSI *vdev = container_of(bus, VirtIOSCSI, bus);
@@ -259,13 +260,39 @@ static bool s390_gen_initial_iplb(S390IPLState *ipl)
             ipl->iplb.scsi.channel = cpu_to_be16(sd->channel);
             ipl->iplb.scsi.devno = cpu_to_be16(ccw_dev->sch->devno);
             ipl->iplb.scsi.ssid = ccw_dev->sch->ssid & 3;
-            return true;
+        } else {
+            return false; /* unknown device */
+        }
+
+        if (!s390_ipl_set_loadparm(ipl->iplb.loadparm)) {
+            ipl->iplb.flags |= DIAG308_FLAGS_LP_VALID;
         }
+        return true;
     }
 
     return false;
 }
 
+int s390_ipl_set_loadparm(uint8_t *loadparm)
+{
+    MachineState *machine = MACHINE(qdev_get_machine());
+    char *lp = object_property_get_str(OBJECT(machine), "loadparm", NULL);
+
+    if (lp) {
+        int i;
+
+        /* lp is an uppercase string without leading/embedded spaces */
+        for (i = 0; i < 8 && lp[i]; i++) {
+            loadparm[i] = ascii2ebcdic[(uint8_t) lp[i]];
+        }
+
+        g_free(lp);
+        return 0;
+    }
+
+    return -1;
+}
+
 static int load_netboot_image(Error **errp)
 {
     S390IPLState *ipl = get_ipl_device();
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index 46930e4c64..8a705e0428 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -57,6 +57,8 @@ struct IplBlockQemuScsi {
 } QEMU_PACKED;
 typedef struct IplBlockQemuScsi IplBlockQemuScsi;
 
+#define DIAG308_FLAGS_LP_VALID 0x80
+
 union IplParameterBlock {
     struct {
         uint32_t len;
@@ -82,6 +84,7 @@ union IplParameterBlock {
 } QEMU_PACKED;
 typedef union IplParameterBlock IplParameterBlock;
 
+int s390_ipl_set_loadparm(uint8_t *loadparm);
 void s390_ipl_update_diag308(IplParameterBlock *iplb);
 void s390_ipl_prepare_cpu(S390CPU *cpu);
 IplParameterBlock *s390_ipl_get_iplb(void);
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 03/12] hw/s390x/sclp: update LOADPARM in SCP Info
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 01/12] hw/s390x: provide loadparm property for the machine Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 02/12] hw/s390x/ipl: enable LOADPARM in IPIB for a boot device Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 04/12] util/qemu-config: Add loadparm to qemu machine_opts Cornelia Huck
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

LOADPARM has two copies:
1. in SCP Information Block
2. in IPL Information Parameter Block

So, update SCLP intrinsics now. We always store LOADPARM in SCP
information block even if we don't have a valid IPL Information
Parameter Block.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/sclp.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index e741da1141..b4f6dd58dd 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -23,6 +23,7 @@
 #include "hw/s390x/sclp.h"
 #include "hw/s390x/event-facility.h"
 #include "hw/s390x/s390-pci-bus.h"
+#include "hw/s390x/ipl.h"
 
 static inline SCLPDevice *get_sclp_device(void)
 {
@@ -57,6 +58,7 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
     int cpu_count = 0;
     int rnsize, rnmax;
     int slots = MIN(machine->ram_slots, s390_get_memslot_count(kvm_state));
+    IplParameterBlock *ipib = s390_ipl_get_iplb();
 
     CPU_FOREACH(cpu) {
         cpu_count++;
@@ -129,6 +131,13 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
         read_info->rnmax2 = cpu_to_be64(rnmax);
     }
 
+    if (ipib && ipib->flags & DIAG308_FLAGS_LP_VALID) {
+        memcpy(&read_info->loadparm, &ipib->loadparm,
+               sizeof(read_info->loadparm));
+    } else {
+        s390_ipl_set_loadparm(read_info->loadparm);
+    }
+
     sccb->h.response_code = cpu_to_be16(SCLP_RC_NORMAL_READ_COMPLETION);
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 04/12] util/qemu-config: Add loadparm to qemu machine_opts
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (2 preceding siblings ...)
  2017-05-02 13:35 ` [Qemu-devel] [PULL 03/12] hw/s390x/sclp: update LOADPARM in SCP Info Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 05/12] pc-bios/s390-ccw: Make ebcdic/ascii conversion public Cornelia Huck
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell; +Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

Add S390CcwMachineState machine parameter "loadparm" to qemu machine_opts so
libvirt can query for it.

Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 util/qemu-config.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/util/qemu-config.c b/util/qemu-config.c
index 5527100a01..405dd1a1d7 100644
--- a/util/qemu-config.c
+++ b/util/qemu-config.c
@@ -227,6 +227,12 @@ static QemuOptsList machine_opts = {
             .name = "dea-key-wrap",
             .type = QEMU_OPT_BOOL,
             .help = "enable/disable DEA key wrapping using the CPACF wrapping key",
+        },{
+            .name = "loadparm",
+            .type = QEMU_OPT_STRING,
+            .help = "Up to 8 chars in set of [A-Za-z0-9. ](lower case chars"
+                    " converted to upper case) to pass to machine"
+                    " loader, boot manager, and guest kernel",
         },
         { /* End of list */ }
     }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 05/12] pc-bios/s390-ccw: Make ebcdic/ascii conversion public
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (3 preceding siblings ...)
  2017-05-02 13:35 ` [Qemu-devel] [PULL 04/12] util/qemu-config: Add loadparm to qemu machine_opts Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info Cornelia Huck
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Eugene (jno) Dvurechenski,
	Farhan Ali, Cornelia Huck

From: "Eugene (jno) Dvurechenski" <jno@linux.vnet.ibm.com>

Make the ebcdic_to_ascii function public to the rest of the
"bios" code, as the volume label is no more the single thing
to be converted.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/bootmap.h  | 22 ----------------------
 pc-bios/s390-ccw/main.c     | 11 +++++++++++
 pc-bios/s390-ccw/s390-ccw.h | 13 +++++++++++++
 3 files changed, 24 insertions(+), 22 deletions(-)

diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h
index bea168714b..9073de2238 100644
--- a/pc-bios/s390-ccw/bootmap.h
+++ b/pc-bios/s390-ccw/bootmap.h
@@ -264,28 +264,6 @@ typedef enum {
 
 /* utility code below */
 
-static const unsigned char ebc2asc[256] =
-      /* 0123456789abcdef0123456789abcdef */
-        "................................" /* 1F */
-        "................................" /* 3F */
-        " ...........<(+|&.........!$*);." /* 5F first.chr.here.is.real.space */
-        "-/.........,%_>?.........`:#@'=\""/* 7F */
-        ".abcdefghi.......jklmnopqr......" /* 9F */
-        "..stuvwxyz......................" /* BF */
-        ".ABCDEFGHI.......JKLMNOPQR......" /* DF */
-        "..STUVWXYZ......0123456789......";/* FF */
-
-static inline void ebcdic_to_ascii(const char *src,
-                                   char *dst,
-                                   unsigned int size)
-{
-    unsigned int i;
-    for (i = 0; i < size; i++) {
-        unsigned c = src[i];
-        dst[i] = ebc2asc[c];
-    }
-}
-
 static inline void print_volser(const void *volser)
 {
     char ascii[8];
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 0946766d86..393d732353 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -15,6 +15,17 @@ char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
 static SubChannelId blk_schid = { .one = 1 };
 IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
 
+const unsigned char ebc2asc[256] =
+      /* 0123456789abcdef0123456789abcdef */
+        "................................" /* 1F */
+        "................................" /* 3F */
+        " ...........<(+|&.........!$*);." /* 5F first.chr.here.is.real.space */
+        "-/.........,%_>?.........`:#@'=\""/* 7F */
+        ".abcdefghi.......jklmnopqr......" /* 9F */
+        "..stuvwxyz......................" /* BF */
+        ".ABCDEFGHI.......JKLMNOPQR......" /* DF */
+        "..STUVWXYZ......0123456789......";/* FF */
+
 /*
  * Priniciples of Operations (SA22-7832-09) chapter 17 requires that
  * a subsystem-identification is at 184-187 and bytes 188-191 are zero
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index ded67bcbc6..4e0aab27d3 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -189,4 +189,17 @@ static inline void IPL_check(bool term, const char *message)
     }
 }
 
+extern const unsigned char ebc2asc[256];
+static inline void ebcdic_to_ascii(const char *src,
+                                   char *dst,
+                                   unsigned int size)
+{
+    unsigned int i;
+
+    for (i = 0; i < size; i++) {
+        unsigned c = src[i];
+        dst[i] = ebc2asc[c];
+    }
+}
+
 #endif /* S390_CCW_H */
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (4 preceding siblings ...)
  2017-05-02 13:35 ` [Qemu-devel] [PULL 05/12] pc-bios/s390-ccw: Make ebcdic/ascii conversion public Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:35 ` [Qemu-devel] [PULL 07/12] pc-bios/s390-ccw: provide a function to interpret LOADPARM value Cornelia Huck
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell; +Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

Obtain the loadparm value stored in SCP Read Info by performing
a SCLP Read Info request.

Rename sclp-ascii.c to sclp.c to reflect the changed scope of
the file.

Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/Makefile                 |  2 +-
 pc-bios/s390-ccw/s390-ccw.h               |  3 ++-
 pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} | 12 ++++++++++++
 pc-bios/s390-ccw/sclp.h                   |  2 ++
 4 files changed, 17 insertions(+), 2 deletions(-)
 rename pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} (87%)

diff --git a/pc-bios/s390-ccw/Makefile b/pc-bios/s390-ccw/Makefile
index 0339c24789..79a46b6735 100644
--- a/pc-bios/s390-ccw/Makefile
+++ b/pc-bios/s390-ccw/Makefile
@@ -9,7 +9,7 @@ $(call set-vpath, $(SRC_PATH)/pc-bios/s390-ccw)
 
 .PHONY : all clean build-all
 
-OBJECTS = start.o main.o bootmap.o sclp-ascii.o virtio.o virtio-scsi.o
+OBJECTS = start.o main.o bootmap.o sclp.o virtio.o virtio-scsi.o
 QEMU_CFLAGS := $(filter -W%, $(QEMU_CFLAGS))
 QEMU_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -msoft-float
 QEMU_CFLAGS += -march=z900 -fPIE -fno-strict-aliasing
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index 4e0aab27d3..903d2ce816 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -63,9 +63,10 @@ void panic(const char *string);
 void write_subsystem_identification(void);
 extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
 
-/* sclp-ascii.c */
+/* sclp.c */
 void sclp_print(const char *string);
 void sclp_setup(void);
+void sclp_get_loadparm_ascii(char *loadparm);
 
 /* virtio.c */
 unsigned long virtio_load_direct(ulong rec_list1, ulong rec_list2,
diff --git a/pc-bios/s390-ccw/sclp-ascii.c b/pc-bios/s390-ccw/sclp.c
similarity index 87%
rename from pc-bios/s390-ccw/sclp-ascii.c
rename to pc-bios/s390-ccw/sclp.c
index dc1c3e4f4d..a1639baed7 100644
--- a/pc-bios/s390-ccw/sclp-ascii.c
+++ b/pc-bios/s390-ccw/sclp.c
@@ -80,3 +80,15 @@ void sclp_print(const char *str)
 
     sclp_service_call(SCLP_CMD_WRITE_EVENT_DATA, sccb);
 }
+
+void sclp_get_loadparm_ascii(char *loadparm)
+{
+
+    ReadInfo *sccb = (void *)_sccb;
+
+    memset((char *)_sccb, 0, sizeof(ReadInfo));
+    sccb->h.length = sizeof(ReadInfo);
+    if (!sclp_service_call(SCLP_CMDW_READ_SCP_INFO, sccb)) {
+        ebcdic_to_ascii((char *) sccb->loadparm, loadparm, 8);
+    }
+}
diff --git a/pc-bios/s390-ccw/sclp.h b/pc-bios/s390-ccw/sclp.h
index 3cbfb78930..0dd987ff5d 100644
--- a/pc-bios/s390-ccw/sclp.h
+++ b/pc-bios/s390-ccw/sclp.h
@@ -55,6 +55,8 @@ typedef struct ReadInfo {
     SCCBHeader h;
     uint16_t rnmax;
     uint8_t rnsize;
+    uint8_t reserved[13];
+    uint8_t loadparm[8];
 } __attribute__((packed)) ReadInfo;
 
 typedef struct SCCB {
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 07/12] pc-bios/s390-ccw: provide a function to interpret LOADPARM value
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (5 preceding siblings ...)
  2017-05-02 13:35 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info Cornelia Huck
@ 2017-05-02 13:35 ` Cornelia Huck
  2017-05-02 13:36 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk Cornelia Huck
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:35 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

The LOADPARM value is fetched from SCP Read Info, but it's applied
only at the phase of bootmap interpretation. So let's read the LOARPARM
value and store it. Also provide a parsing function to detect numbers in
the LOADPARM which can be used during bootmap interpretation.

Remove a stray whitespace.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/main.c     | 27 ++++++++++++++++++++++++++-
 pc-bios/s390-ccw/s390-ccw.h |  1 +
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 393d732353..1cacc1b46f 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -14,6 +14,7 @@
 char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
 static SubChannelId blk_schid = { .one = 1 };
 IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
+static char loadparm[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
 
 const unsigned char ebc2asc[256] =
       /* 0123456789abcdef0123456789abcdef */
@@ -40,7 +41,6 @@ void write_subsystem_identification(void)
     *zeroes = 0;
 }
 
-
 void panic(const char *string)
 {
     sclp_print(string);
@@ -48,6 +48,26 @@ void panic(const char *string)
     while (1) { }
 }
 
+unsigned int get_loadparm_index(void)
+{
+    const char *lp = loadparm;
+    int i;
+    unsigned int idx = 0;
+
+    for (i = 0; i < 8; i++) {
+        char c = lp[i];
+
+        if (c < '0' || c > '9') {
+            break;
+        }
+
+        idx *= 10;
+        idx += c - '0';
+    }
+
+    return idx;
+}
+
 static bool find_dev(Schib *schib, int dev_no)
 {
     int i, r;
@@ -84,6 +104,7 @@ static void virtio_setup(void)
     int ssid;
     bool found = false;
     uint16_t dev_no;
+    char ldp[] = "LOADPARM=[________]\n";
     VDev *vdev = virtio_get_device();
 
     /*
@@ -93,6 +114,10 @@ static void virtio_setup(void)
      */
     enable_mss_facility();
 
+    sclp_get_loadparm_ascii(loadparm);
+    memcpy(ldp + 10, loadparm, 8);
+    sclp_print(ldp);
+
     if (store_iplb(&iplb)) {
         switch (iplb.pbt) {
         case S390_IPL_TYPE_CCW:
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index 903d2ce816..07d8cbcb20 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -62,6 +62,7 @@ void consume_sclp_int(void);
 void panic(const char *string);
 void write_subsystem_identification(void);
 extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
+unsigned int get_loadparm_index(void);
 
 /* sclp.c */
 void sclp_print(const char *string);
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (6 preceding siblings ...)
  2017-05-02 13:35 ` [Qemu-devel] [PULL 07/12] pc-bios/s390-ccw: provide a function to interpret LOADPARM value Cornelia Huck
@ 2017-05-02 13:36 ` Cornelia Huck
  2017-05-02 13:36 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw: add boot entry selection for ECKD DASD Cornelia Huck
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:36 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

Fix SCSI bootmap interpreter to make use of any specified entry of the
Program Table using the leftmost numeric value from the LOADPARM, if specified.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/bootmap.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
index b21c877b53..e39e67e07b 100644
--- a/pc-bios/s390-ccw/bootmap.c
+++ b/pc-bios/s390-ccw/bootmap.c
@@ -444,7 +444,8 @@ static void ipl_scsi(void)
     uint8_t *ns, *ns_end;
     int program_table_entries = 0;
     const int pte_len = sizeof(ScsiBlockPtr);
-    ScsiBlockPtr *prog_table_entry;
+    ScsiBlockPtr *prog_table_entry = NULL;
+    unsigned int loadparm = get_loadparm_index();
 
     /* Grab the MBR */
     memset(sec, FREE_SPACE_FILLER, sizeof(sec));
@@ -467,6 +468,7 @@ static void ipl_scsi(void)
 
     IPL_assert(magic_match(sec, ZIPL_MAGIC), "No zIPL magic in PT");
 
+    debug_print_int("loadparm index", loadparm);
     ns_end = sec + virtio_get_block_size();
     for (ns = (sec + pte_len); (ns + pte_len) < ns_end; ns += pte_len) {
         prog_table_entry = (ScsiBlockPtr *)ns;
@@ -475,16 +477,15 @@ static void ipl_scsi(void)
         }
 
         program_table_entries++;
+        if (program_table_entries == loadparm + 1) {
+            break; /* selected entry found */
+        }
     }
 
     debug_print_int("program table entries", program_table_entries);
 
     IPL_assert(program_table_entries != 0, "Empty Program Table");
 
-    /* Run the default entry */
-
-    prog_table_entry = (ScsiBlockPtr *)(sec + pte_len);
-
     zipl_run(prog_table_entry); /* no return */
 }
 
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw: add boot entry selection for ECKD DASD
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (7 preceding siblings ...)
  2017-05-02 13:36 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk Cornelia Huck
@ 2017-05-02 13:36 ` Cornelia Huck
  2017-05-02 13:36 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw: add boot entry selection to El Torito routine Cornelia Huck
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:36 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Farhan Ali, Eugene Dvurechenski,
	Cornelia Huck

From: Farhan Ali <alifm@linux.vnet.ibm.com>

1. change a bit definition of ScsiMbr to allow an array of pointers
2. add loadparm fetch to boot script processing
3. apply loadparm index to boot entry selection, if any

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/bootmap.c | 16 +++++++++++-----
 pc-bios/s390-ccw/bootmap.h |  2 +-
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
index e39e67e07b..e974350b6f 100644
--- a/pc-bios/s390-ccw/bootmap.c
+++ b/pc-bios/s390-ccw/bootmap.c
@@ -183,15 +183,21 @@ static block_number_t load_eckd_segments(block_number_t blk, uint64_t *address)
 static void run_eckd_boot_script(block_number_t mbr_block_nr)
 {
     int i;
+    unsigned int loadparm = get_loadparm_index();
     block_number_t block_nr;
     uint64_t address;
-    ScsiMbr *scsi_mbr = (void *)sec;
+    ScsiMbr *bte = (void *)sec; /* Eckd bootmap table entry */
     BootMapScript *bms = (void *)sec;
 
+    debug_print_int("loadparm", loadparm);
+    IPL_assert(loadparm < 31, "loadparm value greater than"
+               " maximum number of boot entries allowed");
+
     memset(sec, FREE_SPACE_FILLER, sizeof(sec));
     read_block(mbr_block_nr, sec, "Cannot read MBR");
 
-    block_nr = eckd_block_num((void *)&(scsi_mbr->blockptr));
+    block_nr = eckd_block_num((void *)&(bte->blockptr[loadparm]));
+    IPL_assert(block_nr != -1, "No Boot Map");
 
     memset(sec, FREE_SPACE_FILLER, sizeof(sec));
     read_block(block_nr, sec, "Cannot read Boot Map Script");
@@ -459,11 +465,11 @@ static void ipl_scsi(void)
     debug_print_int("MBR Version", mbr->version_id);
     IPL_check(mbr->version_id == 1,
               "Unknown MBR layout version, assuming version 1");
-    debug_print_int("program table", mbr->blockptr.blockno);
-    IPL_assert(mbr->blockptr.blockno, "No Program Table");
+    debug_print_int("program table", mbr->blockptr[0].blockno);
+    IPL_assert(mbr->blockptr[0].blockno, "No Program Table");
 
     /* Parse the program table */
-    read_block(mbr->blockptr.blockno, sec,
+    read_block(mbr->blockptr[0].blockno, sec,
                "Error reading Program Table");
 
     IPL_assert(magic_match(sec, ZIPL_MAGIC), "No zIPL magic in PT");
diff --git a/pc-bios/s390-ccw/bootmap.h b/pc-bios/s390-ccw/bootmap.h
index 9073de2238..7f367820f3 100644
--- a/pc-bios/s390-ccw/bootmap.h
+++ b/pc-bios/s390-ccw/bootmap.h
@@ -70,7 +70,7 @@ typedef struct ScsiMbr {
     uint8_t magic[4];
     uint32_t version_id;
     uint8_t reserved[8];
-    ScsiBlockPtr blockptr;
+    ScsiBlockPtr blockptr[];
 } __attribute__ ((packed)) ScsiMbr;
 
 #define ZIPL_MAGIC              "zIPL"
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw: add boot entry selection to El Torito routine
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (8 preceding siblings ...)
  2017-05-02 13:36 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw: add boot entry selection for ECKD DASD Cornelia Huck
@ 2017-05-02 13:36 ` Cornelia Huck
  2017-05-02 13:36 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw.img: update image Cornelia Huck
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:36 UTC (permalink / raw)
  To: peter.maydell
  Cc: borntraeger, agraf, qemu-devel, Eugene (jno) Dvurechenski,
	Farhan Ali, Cornelia Huck

From: "Eugene (jno) Dvurechenski" <jno@linux.vnet.ibm.com>

If there is no LOADPARM given or '0' specified, then IPL the first
matched entry. Otherwise IPL the matching entry of that number.

Signed-off-by: Eugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: Farhan Ali <alifm@linux.vnet.ibm.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/bootmap.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
index e974350b6f..523fa78c5f 100644
--- a/pc-bios/s390-ccw/bootmap.c
+++ b/pc-bios/s390-ccw/bootmap.c
@@ -655,6 +655,7 @@ static IsoBcSection *find_iso_bc_entry(void)
     IsoBcEntry *e = (IsoBcEntry *)sec;
     uint32_t offset = find_iso_bc();
     int i;
+    unsigned int loadparm = get_loadparm_index();
 
     if (!offset) {
         return NULL;
@@ -675,7 +676,11 @@ static IsoBcSection *find_iso_bc_entry(void)
     for (i = 1; i < ISO_BC_ENTRY_PER_SECTOR; i++) {
         if (e[i].id == ISO_BC_BOOTABLE_SECTION) {
             if (is_iso_bc_entry_compatible(&e[i].body.sect)) {
-                return &e[i].body.sect;
+                if (loadparm <= 1) {
+                    /* found, default, or unspecified */
+                    return &e[i].body.sect;
+                }
+                loadparm--;
             }
         }
     }
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw.img: update image
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (9 preceding siblings ...)
  2017-05-02 13:36 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw: add boot entry selection to El Torito routine Cornelia Huck
@ 2017-05-02 13:36 ` Cornelia Huck
  2017-05-02 13:36 ` [Qemu-devel] [PULL 12/12] hw/s390x/ipl: Fix crash with virtio-scsi-pci device Cornelia Huck
  2017-05-05 14:58 ` [Qemu-devel] [PULL 00/12] next batch of s390x patches Stefan Hajnoczi
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:36 UTC (permalink / raw)
  To: peter.maydell; +Cc: borntraeger, agraf, qemu-devel, Cornelia Huck

Contains the following commits:

- pc-bios/s390-ccw: Make ebcdic/ascii conversion public
- pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info
- pc-bios/s390-ccw: provide a function to interpret LOADPARM value
- pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk
- pc-bios/s390-ccw: add boot entry selection for ECKD DASD
- pc-bios/s390-ccw: add boot entry selection to El Torito routine

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw.img | Bin 26456 -> 26472 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img
index 2a4adfa654844040dbc84e90a9c2e0af56fdb9fa..0b01d49495c607b67d3f1b2359395534631deb88 100644
GIT binary patch
delta 10797
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

delta 10116
zcmZ`<3wTpi@;~<`P15v1`c7Z;wiGC@l0GR9AqB(&1yd+k6xk{WJ`k!_<#X|$qI@g9
zu=LQy^<&p6;6+pn!YU|gbXgP?i6|?&D69b&Eo!P2%gS>9znLUZ*xh_zGjr$6>&%%m
zcg{&qeyAM&P-*R(Z1IWk#~lXOA70~n#y&d~ewrOxb8NV+iXYU!$PDFyg4z$lLzhBj
zd6=#&mwx4O_n<Rt_vf6LKk=QD*2}ca0@M00-`2wn{B4Thwg|LDpg96#<VVWDS=Pvt
z8i7$MdL*3a3jQpyibKR`o<}0I7(na91m6><4qZNed0X(coQB&DFMoV>f<t@11e!Hj
zYqDpVcY-bY$#e)2amKPoHkmT6D~b*Qred@YKbuNd^`hI()5Yz*`CUop`CSoqbtRC&
z$>*)uY|?4Ym-XfXd51YA%d#iT*Q7=G<HHba9p*HzDXON)ebKnu8hLE;Ttr7a!k^m$
z7tz%X%@O*sOX#*vZ>UNX`oW+3mj0_z<nIuo!skCBL}Efc0ms-~W^o^3=_~Y1A%X%N
zX1z#Q?pIAVJx?h5N-<JjCWPMy(RJ0Wp^Xg=pU|s>X;Zp!CUwMvE|HX;;sFhs2Fae7
z!hX5qNMXXyehqd<GyVhN+8n}_x}c*&j<e)>SG3e<j=pYf#Y(^&z~41!4yQ+3v5JjN
z3~G*BMJt)B*8+mfJ*dH0a?nLilF4c<v@z&%EfH%-vv@AKKwoKWC%n%ty_lUJ(V+PR
zQBwT$o!m}5Vghili0{KLT4_L>sc|`$z%{65^D#m9dGqdwc{j|bZmJY)cvq?@BPUpT
ziQaAeg|y|oP0tB8hc#gePGJseD_TV%INo87R+f0Hm>>Sg>@ykP!T2=7^Il=57yTij
ztlbPzMLuL*queQTYzq^UALNOCM=Xg4WUH-QE!X5;o7Oj8`cD{!QKxrfx9}(Ez#d2^
zm9?32ZfrmA0YCDn)_gDyK=>Wt{)$HX9`Xc)&EvrAp*6k{*`VB?WU>)=*?!{4{xaym
zgSqo)mra<hU7at6JmKWZyBur(G!m?lWRq6o=_STy)rbzYvp`gdgrK`ah&7$b@?32F
zyu4Wb*YA7$Ekew^vD(#T3u-M9!+m-%wPxi}GMl~Tkf{sX5$l!84pflRxK74@$M^|$
z{Yswn744!c9<tZSE%p&Z%&g(zpw<YNgT6*A!@=UvXAa?Sg64HWE#!yuE_jeAljG{I
zo)IL4eU@>0q>$RI*V)7!NV3luTSC;_!({AS04|eaR<lbLlvJzz$Ap;ij{XOs1doL}
zpx%S$SEN5~zS3V7#y4tNBS?|`J66A*@qe<?I#xPay5h6toAE=64Wakt^yP_X{+n61
zv)D4mUtqBe7V9IO2?gHFBh`(K8V|NIV=dzk5uVdcjQ>7`Jo3|X=3X9K&V2nCzl-^f
zG2dam`&>Ko@iN+PWc)PqUC(?UFy9{V%@3zpXT#EvD^hA^Arq?fLBc`dt=p<k77B?b
z(AH}fMYJ$=8&G4Cf{xH;$aEm83z0KxXy4^70CpSIB7LNYnNZgu`y}RgV}tIlDx}`h
zP!CeCJLqT?qIH%d5U&>+-N{K%J3b<!O;Au5>YA*tD<0u@!_@T{Ez`3R&Jo5>!6q^p
z)ZAByzPyPJ?MfE~?CA9Kj#jXv)mYrk*bZ>lTjy?9G)lyo^jI>Pf{^t{WIu$R>e5#U
zCF?#`HHeg+SC`1@Vw^<?KQD*#EX5=CB@XM8j6cs|P3N#CGUuH{asHD>y?<m@t`)KC
zm=z&4jI(Dh_~`k8U2HbCwW|&Vae1MAmZPuUY&_e(#gPZN>CG~S3iuR-*>jS@9Q5%5
zGzw84sBY2n{RnIQ0sUDqj<#^nP4jPG<rZGdJd;<;j6iDPb<=gDi=yG;x|ey|#nFI*
z)LpS6Lmy-uuTE+a)dddGE)c_J;|tJE(DR!!DW=9DJ=^#v#jSod>Lp4MMUIyRQHpOu
z^t_P@;Jl8*k-^az%y<&v*}vsz+(9`&igJpOe$EMXE>T_GDqgR1li8;^2L>9a;aWD&
z+#H@rjpkEpTt15jo7v+E?FssPHqqDP3+;#|vDY&`x|;EWC~d+8$(cni*aGZM9OLh?
zJLT-oP%3a${lj6T&{hqn;!`!I!R>xpZxBLvVj<j3!sBTX9;CFs8E@d0&`u<1D=iEh
zeR)@w*p}=~g2`Khnh#me=AYL4+9)0W6!iF1VV>iGuPc@LcqL7NIh3BP<j#rcr4l@;
zt)ij4MP!$H@V!R$WkPDbzExPkKNhcXp>ILC;!KCM9nw3o&m1Hh6r{;h*Cf225>0qY
z+=7*xJ9p4<Lw2jc7PRSmjIA{5jI|trDTF&8XM7^zSz9R@zdjT6P&zead#F<g&kGyZ
zSVv}i8>9uC`7p&hnBRoP1e&}eZs~=vXYgyr#xFJJU2Mp~hVEfQw_`RPm_sr<S<)hs
z%P{8`qS0$eLZF+C>tXil&i>3(+9dQ*s1G(Q2XHuwc{h||QP7L&qk4oltHgsxC~7uV
z=vxefh0{1l%*;NQUgWcgOYh|}_ZZgKIX1cEvh@{qIiFq5)VCT2bkA&Xg!XJoNBl}w
z;k}LC%9c*=q7>n*bZ*=9vJk6$LS^yCW#5$Iq4vN98|iQHz};+vUj)|M2+#aG+4$GT
za#>2Q_t+-1Md32)?*{d7(B(r?HDH?{Kz3oynvmTO>r;umD@SXEF`{^AoKwS-kImG5
z?n}~~p|izO1Pn>j;PT|4!d;2&13k&FVQ1f?ziKtYoNydF#EXe%gXw;HYru`jD<dnH
z3d!`_@#1j9cuAzdWV%J$7MIXRV{I~wvlQg%y!Q5=drf;3IbjL0nU@*=mZx3M)2=0a
z`ZUJd{8LHAIQ_pV#-7Eid0#KZiL7i7D{f=_4OU#l$~3toE$jN}eQ6VO017=0?805B
zKutnamIhsv?wzlR80;jC0u-F@s}g9h5cUa}<<q3Bvag=0VV0WEhlFQ|k-;?6$|QE^
zF8OWR0QFy4GC94!*PD4CQki>#G~R6%-fbDf**o5CPTp;2o`HF6f|?eW8f*y&(Lx+?
zQ^UO&f5-327x(EC#lz%A+O4diAJ3Irc1ted&IicdGv2T^`Eq)xw_^4G^0;CJDT)1>
zLTKF1YKIUd<{yNof5iCTS?%Sl_A+F`Jmy0q13qpu)1PIWTV-bn^9=&u6pBl=+dWwU
zQb{ba78t^dAIXB520I*9(MrWke>L21*bcrlLk!;K6xTz17;kEGu*G8*+<)7H(wC7p
zEsk^;OT#6Djg>+_pNQ;d!VxkWA<t=)%1wF9tvsE@?B*iEGcYy7=-DT8oKpwcqAQeo
zFLRVJ_gKb<G50#=eoVGHbCvaSt21NfqPB6NjcvuDO>OqjGi@TIhYv4G7R&Mhu67=2
zF#p07t{~>Fpcc3ib9M?NH5vV)8zsFM@JD!XMmjV5rG3ONL=V<6ndEARqo=aS*_nO4
zX(w3S4$d}G{30==9cAjXI6lPqku|k8%Ea23OE(POi~OFQ+C%)dM=xxel!L5c6>EEy
z@%z~2Q#9#cj_Yp-6WsGIrwyO#XuyeLjw8?%jadpG-pn_#I7iz&pT+mH_+Q(VK=XNC
zZimb>nfC=YHH~>82U9P$i@=@8kGlZx0-OigyQ8w+6fX-@u<-MY4`<;&u<)8-AaHN^
zRB633^I%jgWdU>YvZOu1IB&-E|6?icp{G8__-^_>+l9VWLlt<j3n8|4`+Ycv{{E0D
z;BE5JOXw#yKZX>ULVT|7Hh$Yy8rq1A<5yam9kuo(ait7ot}j?(D&wEB!_{nVBqZ9H
zFNMeUG2bx8xj#z>j;Qnp-#u+5UNUj+Xygb-D?bgjx53{b#8d|hJxiGpUiS;N3G1#<
zMoc+JJXU#O-IH-F!X#F+S?<hC;T-sp%%1+1mOCZukf~#?gZdUPhb{RH7HVdp0>=4_
zl?G)H3IqckH-#6$viiazByV8OIV_dIcsK`MXQ@B8iw<h}|3KqYjxg;Pc6uYG^ip_A
z-V1LP%t__pc2Z>>+-putS$TgpL~V#L<uU#sD_uczO3P^oAcX@RG^_BW@ZJHZojJp?
zG&8=0r51wMtdEW|k0oZcn;GI6|DN#%X7<qjtqz1b=p>mwkVd9VlCInWZ_2-zc^{_4
zi>&f%Dy5sLZ-9!*i>7N6^3O^67d|(Uf~3>T!v~I3E_CWMY!bdA=r$zCRgp8@lcAdM
zkuL37-mYKJ!S3LI&{HV2q$K8Lc`$dUck&w6IQV~L3|ETDyx%OT7owZQw?Qgj!K89Q
zS7XVK)H}$JpKoD{Rmd2@8FMp@O`iK-GSbV-HyM`z@aT9i1A~a79A%}PC(37x<MIav
zMzeu5+LDt?&YLOb>mn>{YTO)+4JRQ%OeAsk8TvkFiX26s?823WwOb#AK9h&noo8&5
zPvqr#?<ZA=<^dZ0_Yq+2m&P^qDMXYz8q*_`oNwmkHzIXcljEibA~#s;=;%=M3C$cl
zgL?N0u*lJ^`72NU>I;*1Jjnr9X3>mOxHD9)WPBI7)4i?1*NWR8+yEZ+cR>B7IX<54
zO>BA!Osh!fk$^Th#Cy|xjb6-$j;~qI&m7(U%#V~pWF8=WMXelTbI^;@j?8;9bP{3e
zVv$ZZ-OOzFGNmhWXpC~vyjw7fX7M8No_?Cu-%ax}0*D~y3F<nQy@It(BM$XPj#aa9
zYf#(P8t$>Y-E$#u1GCl=lL(;j+OYYW#cZDQ&^Pm1Q!&f=L9K(XpInGTc&4vh2xK2V
ztK&Y4;&?Ud;jNQ`f`B+C&OscbTffiOJieZJy)*dX_xynEVi-U1+tRd)=6}Vx>H;hP
zOkVK~+KhaCkElLm4G5P5%J4#f>RaLd7?Mu@g*9<ApUgVMElfYe^c%qU1U>iRc3fP`
zV`q8&#Z~-(^@sUg;dz4nQ4&<o0Q1nu&mmx$tb(uA-~gEo&%BcH4%YBE_;!Som?~0A
z2nWa<n$DsJ+%Dt~+S>-rBY@j=`AtDT=fGv*1-5ost-(O(#&9`F*(VG84OJISku&-g
zsEfwQyZRNT4=iB@oXMe&G6n_~WlLW_Ej}0uErTRkyls1P;Uq;({z&fbU!V@SW&5%I
zrxdM!v-KRg(Z2~72xX$xdJd<Hqfv87Z^=^w1IdMFF<2zhX^@x;yXA*PlhnchfKwI^
zDpm`hm-7Z~RSWB7;$V+jI7BuM9%$v)`44C1>cIolLb3hj!4sAAgg<tEAv6)c>2E^l
zpHsVuTKlnd3@tC{!>6quauKN?F1XO=QQqjV+OJ419C~jO-H~DAW7o8jF9rXQ-9tmR
z#3TH0gFH3tI?MBn%g$ki^6ug}YW|P%VDW8r6;!bDUnX&n<{L^p`S0k16wxNI0CdYW
z5GN%pU;e9T_KwpHSpF;e9ECIR*Mq#b?1vOzNr10*^Vi6=!xuUd{sDzGZRXGhRzF+X
zU7DJIjU4LAsm!lLPl;-vd<;n4?GaL+faEib?;LcGfzvS8nfwtjS->WD$p3RW)ux~1
z<E}4N?ay*qNxiB)BtI<4%^OOBJzuesFwP3&CK3JASZOcK@oLwS&Zstx`+<Mm$z@;w
z31YcP$qvHfzhRv3AmW^?#DVB@$7}soe-3@|&EX~LS<n2)Ysm7(jN`C$_5@o4=ws(J
z`h-5wxZfWGwOWqc0#B^yQNYbTO8l3MbB|(YpE?6UhYtxydh@;t$4S(4oSMZ1)SJ}&
ziP7p{<<_!?t8o0stcmXt?dW+8qw_g%JGRxF=f00QhE%c3@9{$^;r8{+zLx3lGo3?{
zw?Q_QWtP3oqrb&VstDD0DOX=^FXFMaF%b)WpZ%5cAbjz!rODl8S!&)=dAMw3UM3Cy
za)6Y_p_u^Aous{t@XjI9RX)tRo66Rr1i7HRNL|<?SC>z-4njdys#eLb%9p8CX>x9b
zw`?1wX52CT*K;90{ubh#=I1*tKKNSp(0Ja|gO1Q)jecEHM(mb}mD7|pa&BdgnrD~y
zR93l0+=OcVyP$B#BgSs%n~z(F9#L2?0#4i@8>t!!Kb;;9vB$rWUsaagXv6)rv4IFN
zIJV<`QG*NmEnrH=>HHXVDb=rqg#Mba@#siB)94B2`%rcGBEQ+_Cf9PGA`P~6kvEjL
zt0wv$i&?~SxpMi49PM;sSiH5jI0>S8G>mT+$(<vr)V^cok0aXSR>7}fG!66T+uN$r
zl`)l(px~^fRGdWp3!uzFIF?_i#w|fdz%E*GfQdsGEbxx*0d36jtvo(*p!Hdbd!=0_
zkE%_q*oRX(B8)nzR6Hsdk8;^6wxD-V%D$5uN0q7-SINVpHYl}n`RK`UuT;B2C#j;E
zK9_;fGly{V_tW0+MFn~O6aP?P<M#dRd(iB|8&ZQZr<^{fNG*$#%f^hg**G!3J}%!F
zGf~anB+Zu%P|JtOp_eVnYhW#j97HsT(8!L*+)nt{H_MkU+nQCD9PH?7z;$N_-MGOB
zZb?|+GI`I~VJSG~qOPvRPiZFJVoK@P^3}1UmBsS(Sj}c--+ru>eaGp_-E!}^fr^yh
zkDI57UrDZO8)>p8F#a6j<}|`jB*?|?%*(Tx-p)KK<Bt(;I>Y#bSgFf9GlWYdbSB|D
z9?2U*XptAzQ3xF_iqTqLE8lZplftKguFEfku4|mEs@A-wZLDetskL0jI3FcUk1?KC
zqjjjS_uDpI-*fgxHqG^+D~0)azjY-r{ch&BqDM7v^MHFcQ@K8bxYS$l6OLhoPGesx
zrAa(`Z7?pJ3^eeq{HnTA7ES1&pXBi)`}QLfR;qm_T(@M&(q`@U8?IZRO&dQ$zB%cy
z>b3Um_g&F$l4(=366x1?`t(ugTV6hOkt`WsCf(z)^T+RTh-J9hqR(Anxc%L!znZ+u
zKqxkhS5Be7h&PN^7a&Y)4db;!z)t|j0G<Mzi}7+m{B*6>0)7J6Y#6)i0XG`Pn|lC{
z8^+#=aCoj^yhm`oVeB^pLeBx{F+=}H&||JQj8Ad^G4B0jF_0aGai|awjE7bNo;8fW
zfgY1%7@r;iTwoZ7L62Dr_z2+hfa?MG0Ma-d{0xp+!2cQeEaiY70K(DFQvo6W`5wUK
zhVl1!K<GKL0I=Ke8b=^#g=b%2z&ZwSE#P9q_;N1b^MEj9Jz^L~&4As2i%~1Uf3zEL
zqG23+9<Ui{3PUzHbm9>}@P7>$Yeq$>2doE#1F;(o<J;YU#}Re#W0gF0S?bPr<>I=r
zV|Uen;3R6~lLH9NOwSUNR$Cs6nV9HTqr;*Q*jmH*^I@z}Puq<20X;NEdUr!gi{JqK
zA?{CzF2~F$u!yrj8{~o+Lt=*l+l*zpSvJmeO5cp^gk~s22zEoUWjRqBPpaze_5&a8
z|KR=i_PzVg-oy@Ne4N^LDaEAN|AS;YaxrOAT*RL-Fml{5-aZD?=U^n=>PbANnoM8G
zduL|F79y8AkW+ryF*9}KfQSyZ8<7Vn2g6*$*jEHtDrz6HKOFmr?NMtuQ17ZHrAK}@
zGmFyZ{URA(Ki;ciVfI5%eN{|)Fs?WM6a-d1X5aVT`ycH8@BrIc5Ow?#s|c_O?j2YL
zMbj@hBd}biF`)ZE+bJeJYE@U-_t!+Hi~dzud2a-2q<L1qn3aYRXpuu_Wyfs9zNnG4
zv&LIYrwrp@lUzG%NJS2?lh9=AWdWAW<)C9-L}D*GmeyPgdO&tVaWhHEoY_OXQ2a6K
z-bK8mV>jqEpik_jgXl<)k7-ty(&5#|n?c`lF@KC18`*sc|6J@x`2I-~l6&v$Il0TR
zr*8z0y_f7z@L*96HOetp4YtrWK7=hmXg7AgCf8pzI;I@hW_jeQAr%XN?S%C8y)?jE
z+RdL*bb8av!@K*_205mo)MEJnESqI>!(hARENX=db6mh#?r#{Li-;YeC^Yxdi%42w
z@5p8uKc`>pBPa(g$d<jbsV-I4&MCEXCFp^`V#-+gr#U6GeU3Rn>1N9JbMj*sgA%~X
zB@<<P@zwjx+Z(TLFv%z9TjjZVNhOCP2E*l8n4-^-f50-4Hu^+ERw3QL8J^?_6VE5a
zX4&$a;fht(T|HY`8l6d&Jz)kL#RRG7lH(dPl3K&W=(pn7zNpcwByFHcm*J1!6++#x
z{g>+wE6R;BFn@Sb#2+>4*BI$oFgz*Z)p_sy(zBpAIqG~AiVE2Z=7_WAsMDKe0L;<<
z_KLz$C#B<t;^c81VfUgiVW{+g{Gb2bCR;(CPHTow6xyKs2Cw{OVIMhfVScPDJlg1z
gs}_#474eh$l02}mN-2`IMdM=KVFuAAJ@cLa4?6=!p#T5?

-- 
2.11.0

^ permalink raw reply	[flat|nested] 14+ messages in thread

* [Qemu-devel] [PULL 12/12] hw/s390x/ipl: Fix crash with virtio-scsi-pci device
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (10 preceding siblings ...)
  2017-05-02 13:36 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw.img: update image Cornelia Huck
@ 2017-05-02 13:36 ` Cornelia Huck
  2017-05-05 14:58 ` [Qemu-devel] [PULL 00/12] next batch of s390x patches Stefan Hajnoczi
  12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2017-05-02 13:36 UTC (permalink / raw)
  To: peter.maydell; +Cc: borntraeger, agraf, qemu-devel, Thomas Huth, Cornelia Huck

From: Thomas Huth <thuth@redhat.com>

qemu-system-s390x currently crashes when it is started with a
virtio-scsi-pci device, e.g.:

 qemu-system-s390x -nographic -enable-kvm -device virtio-scsi-pci \
                   -drive file=/tmp/disk.dat,if=none,id=d1,format=raw \
                   -device scsi-cd,drive=d1,bootindex=1

The problem is that the code in s390_gen_initial_iplb() currently assumes
that all SCSI devices are also CCW devices, which is not the case for
virtio-scsi-pci of course. Fix it by adding an appropriate check for
TYPE_CCW_DEVICE here.

Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Message-Id: <1493126327-13162-1-git-send-email-thuth@redhat.com>
Reviewed-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 0711ee927a..75d3c681a4 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -249,7 +249,13 @@ static bool s390_gen_initial_iplb(S390IPLState *ipl)
             SCSIBus *bus = scsi_bus_from_device(sd);
             VirtIOSCSI *vdev = container_of(bus, VirtIOSCSI, bus);
             VirtIOSCSICcw *scsi_ccw = container_of(vdev, VirtIOSCSICcw, vdev);
-            CcwDevice *ccw_dev = CCW_DEVICE(scsi_ccw);
+            CcwDevice *ccw_dev;
+
+            ccw_dev = (CcwDevice *)object_dynamic_cast(OBJECT(scsi_ccw),
+                                                       TYPE_CCW_DEVICE);
+            if (!ccw_dev) {       /* It might be a PCI device instead */
+                return false;
+            }
 
             ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_QEMU_SCSI_LEN);
             ipl->iplb.blk0_len =
-- 
2.11.0

^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [Qemu-devel] [PULL 00/12] next batch of s390x patches
  2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
                   ` (11 preceding siblings ...)
  2017-05-02 13:36 ` [Qemu-devel] [PULL 12/12] hw/s390x/ipl: Fix crash with virtio-scsi-pci device Cornelia Huck
@ 2017-05-05 14:58 ` Stefan Hajnoczi
  12 siblings, 0 replies; 14+ messages in thread
From: Stefan Hajnoczi @ 2017-05-05 14:58 UTC (permalink / raw)
  To: Cornelia Huck; +Cc: peter.maydell, borntraeger, agraf, qemu-devel

[-- Attachment #1: Type: text/plain, Size: 2947 bytes --]

On Tue, May 02, 2017 at 03:35:52PM +0200, Cornelia Huck wrote:
> The following changes since commit 38bb54f323bf7c83496b6a044cfd28896e997a00:
> 
>   replication: Make --disable-replication compile again (2017-04-28 16:50:16 +0100)
> 
> are available in the git repository at:
> 
>   git://github.com/cohuck/qemu tags/s390x-20170502
> 
> for you to fetch changes up to 99efaa2696caaf6182958e27d553449674894b27:
> 
>   hw/s390x/ipl: Fix crash with virtio-scsi-pci device (2017-05-02 15:08:54 +0200)
> 
> ----------------------------------------------------------------
> More s390x patches, this time boot related:
> - LOADPARM machine property, exposed to the guest via SCLP and
>   diagnose 308
> - Use LOADPARM in the s390-ccw bios to select a boot entry
> - Fix a crash in the ipl device code when a virtio-scsi-pci device
>   has been specified
> 
> ----------------------------------------------------------------
> 
> Cornelia Huck (1):
>   pc-bios/s390-ccw.img: update image
> 
> Eugene (jno) Dvurechenski (2):
>   pc-bios/s390-ccw: Make ebcdic/ascii conversion public
>   pc-bios/s390-ccw: add boot entry selection to El Torito routine
> 
> Farhan Ali (8):
>   hw/s390x: provide loadparm property for the machine
>   hw/s390x/ipl: enable LOADPARM in IPIB for a boot device
>   hw/s390x/sclp: update LOADPARM in SCP Info
>   util/qemu-config: Add loadparm to qemu machine_opts
>   pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info
>   pc-bios/s390-ccw: provide a function to interpret LOADPARM value
>   pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk
>   pc-bios/s390-ccw: add boot entry selection for ECKD DASD
> 
> Thomas Huth (1):
>   hw/s390x/ipl: Fix crash with virtio-scsi-pci device
> 
>  hw/s390x/ipl.c                            |  39 +++++++++++++++++++++++++++---
>  hw/s390x/ipl.h                            |   3 +++
>  hw/s390x/s390-virtio-ccw.c                |  37 ++++++++++++++++++++++++++++
>  hw/s390x/sclp.c                           |   9 +++++++
>  include/hw/s390x/s390-virtio-ccw.h        |   1 +
>  pc-bios/s390-ccw.img                      | Bin 26456 -> 26472 bytes
>  pc-bios/s390-ccw/Makefile                 |   2 +-
>  pc-bios/s390-ccw/bootmap.c                |  34 +++++++++++++++++---------
>  pc-bios/s390-ccw/bootmap.h                |  24 +-----------------
>  pc-bios/s390-ccw/main.c                   |  38 ++++++++++++++++++++++++++++-
>  pc-bios/s390-ccw/s390-ccw.h               |  17 ++++++++++++-
>  pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} |  12 +++++++++
>  pc-bios/s390-ccw/sclp.h                   |   2 ++
>  util/qemu-config.c                        |   6 +++++
>  14 files changed, 184 insertions(+), 40 deletions(-)
>  rename pc-bios/s390-ccw/{sclp-ascii.c => sclp.c} (87%)
> 
> -- 
> 2.11.0
> 
> 

Thanks, applied to my staging tree:
https://github.com/stefanha/qemu/commits/staging

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 455 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2017-05-05 14:58 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-02 13:35 [Qemu-devel] [PULL 00/12] next batch of s390x patches Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 01/12] hw/s390x: provide loadparm property for the machine Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 02/12] hw/s390x/ipl: enable LOADPARM in IPIB for a boot device Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 03/12] hw/s390x/sclp: update LOADPARM in SCP Info Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 04/12] util/qemu-config: Add loadparm to qemu machine_opts Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 05/12] pc-bios/s390-ccw: Make ebcdic/ascii conversion public Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 06/12] pc-bios/s390-ccw: get LOADPARM stored in SCP Read Info Cornelia Huck
2017-05-02 13:35 ` [Qemu-devel] [PULL 07/12] pc-bios/s390-ccw: provide a function to interpret LOADPARM value Cornelia Huck
2017-05-02 13:36 ` [Qemu-devel] [PULL 08/12] pc-bios/s390-ccw: provide entry selection on LOADPARM for SCSI disk Cornelia Huck
2017-05-02 13:36 ` [Qemu-devel] [PULL 09/12] pc-bios/s390-ccw: add boot entry selection for ECKD DASD Cornelia Huck
2017-05-02 13:36 ` [Qemu-devel] [PULL 10/12] pc-bios/s390-ccw: add boot entry selection to El Torito routine Cornelia Huck
2017-05-02 13:36 ` [Qemu-devel] [PULL 11/12] pc-bios/s390-ccw.img: update image Cornelia Huck
2017-05-02 13:36 ` [Qemu-devel] [PULL 12/12] hw/s390x/ipl: Fix crash with virtio-scsi-pci device Cornelia Huck
2017-05-05 14:58 ` [Qemu-devel] [PULL 00/12] next batch of s390x patches Stefan Hajnoczi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.