qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7
@ 2016-04-25 15:18 Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 1/9] s390x: add compat machine " Cornelia Huck
                   ` (8 more replies)
  0 siblings, 9 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Cornelia Huck

Here's the first round of s390x patches for 2.7. We have the new
machine for 2.7 and two features:
- Make use of the runtime instrumentation support introduced in
  the kernel.
- Enhance our ipl (boot) process: We can now start from devices
  in subchannel sets > 0 as well. As a bonus, the conversion to
  diag308 in the bios allows us to get rid of the gr7 hack.

Alexander Yarygin (6):
  s390x/ipl: Extend the IplParameterBlock struct
  s390x/ipl: Add type and length checks for IplParameterBlock values
  s390x/ipl: Provide ipl parameter block
  s390x/ipl: Add ssid field to IplParameterBlock
  pc-bios/s390-ccw: Get device address via diag 308/6
  s390x/ipl: Remove redundant usage of gr7

Cornelia Huck (2):
  s390x: add compat machine for 2.7
  s390-ccw.img: rebuild image

Fan Zhang (1):
  s390x: enable runtime instrumentation

 hw/s390x/ipl.c                     |  63 ++++++++++++++++------------
 hw/s390x/ipl.h                     |  84 ++++++++++++++++++++++++++++++++++---
 hw/s390x/s390-virtio-ccw.c         |  47 ++++++++++++++++++++-
 include/hw/compat.h                |   3 ++
 include/hw/s390x/s390-virtio-ccw.h |   4 ++
 pc-bios/s390-ccw.img               | Bin 26424 -> 26424 bytes
 pc-bios/s390-ccw/iplb.h            |  79 ++++++++++++++++++++++++++++++++++
 pc-bios/s390-ccw/main.c            |  25 ++++++-----
 pc-bios/s390-ccw/s390-ccw.h        |   2 +-
 pc-bios/s390-ccw/start.S           |   2 -
 target-s390x/cpu.h                 |  18 ++++++++
 target-s390x/ioinst.c              |   1 +
 target-s390x/kvm.c                 |  21 ++++++++++
 target-s390x/machine.c             |  12 ++++++
 target-s390x/misc_helper.c         |  20 +++++++--
 15 files changed, 332 insertions(+), 49 deletions(-)
 create mode 100644 pc-bios/s390-ccw/iplb.h

-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 1/9] s390x: add compat machine for 2.7
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 2/9] s390x: enable runtime instrumentation Cornelia Huck
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Cornelia Huck

Also add some of the option cascading we were missing.

Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c | 21 ++++++++++++++++++++-
 include/hw/compat.h        |  3 +++
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index e3df9c7..57f10c5 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -299,7 +299,11 @@ static const TypeInfo ccw_machine_info = {
     }                                                                         \
     type_init(ccw_machine_register_##suffix)
 
+#define CCW_COMPAT_2_6 \
+        HW_COMPAT_2_6
+
 #define CCW_COMPAT_2_5 \
+        CCW_COMPAT_2_6 \
         HW_COMPAT_2_5
 
 #define CCW_COMPAT_2_4 \
@@ -343,21 +347,35 @@ static const TypeInfo ccw_machine_info = {
             .value    = "0",\
         },
 
+static void ccw_machine_2_7_instance_options(MachineState *machine)
+{
+}
+
+static void ccw_machine_2_7_class_options(MachineClass *mc)
+{
+}
+DEFINE_CCW_MACHINE(2_7, "2.7", true);
+
 static void ccw_machine_2_6_instance_options(MachineState *machine)
 {
+    ccw_machine_2_7_instance_options(machine);
 }
 
 static void ccw_machine_2_6_class_options(MachineClass *mc)
 {
+    ccw_machine_2_7_class_options(mc);
+    SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_6);
 }
-DEFINE_CCW_MACHINE(2_6, "2.6", true);
+DEFINE_CCW_MACHINE(2_6, "2.6", false);
 
 static void ccw_machine_2_5_instance_options(MachineState *machine)
 {
+    ccw_machine_2_6_instance_options(machine);
 }
 
 static void ccw_machine_2_5_class_options(MachineClass *mc)
 {
+    ccw_machine_2_6_class_options(mc);
     SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_5);
 }
 DEFINE_CCW_MACHINE(2_5, "2.5", false);
@@ -369,6 +387,7 @@ static void ccw_machine_2_4_instance_options(MachineState *machine)
 
 static void ccw_machine_2_4_class_options(MachineClass *mc)
 {
+    ccw_machine_2_5_class_options(mc);
     SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_4);
 }
 DEFINE_CCW_MACHINE(2_4, "2.4", false);
diff --git a/include/hw/compat.h b/include/hw/compat.h
index a5dbbf8..636befe 100644
--- a/include/hw/compat.h
+++ b/include/hw/compat.h
@@ -1,6 +1,9 @@
 #ifndef HW_COMPAT_H
 #define HW_COMPAT_H
 
+#define HW_COMPAT_2_6 \
+    /* empty */
+
 #define HW_COMPAT_2_5 \
     {\
         .driver   = "isa-fdc",\
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 2/9] s390x: enable runtime instrumentation
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 1/9] s390x: add compat machine " Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct Cornelia Huck
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Fan Zhang, Cornelia Huck

From: Fan Zhang <zhangfan@linux.vnet.ibm.com>

Introduce run-time-instrumentation support when running under kvm for
virtio-ccw 2.7 machine and make sure older machines can not enable it.

The new ri_allowed field in the s390MachineClass serves as an indicator
whether the feature can be used by the machine and should therefore be
activated if available.

riccb_needed() is used to check whether riccb is needed or not in live
migration.

Signed-off-by: Fan Zhang <zhangfan@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/s390-virtio-ccw.c         | 20 ++++++++++++++++++++
 include/hw/s390x/s390-virtio-ccw.h |  4 ++++
 target-s390x/cpu.h                 | 18 ++++++++++++++++++
 target-s390x/kvm.c                 | 21 +++++++++++++++++++++
 target-s390x/machine.c             | 12 ++++++++++++
 5 files changed, 75 insertions(+)

diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 57f10c5..1390a98 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -190,7 +190,9 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
     MachineClass *mc = MACHINE_CLASS(oc);
     NMIClass *nc = NMI_CLASS(oc);
     HotplugHandlerClass *hc = HOTPLUG_HANDLER_CLASS(oc);
+    S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
 
+    s390mc->ri_allowed = true;
     mc->init = ccw_init;
     mc->reset = s390_machine_reset;
     mc->hot_add_cpu = s390_hot_add_cpu;
@@ -237,6 +239,20 @@ static inline void machine_set_dea_key_wrap(Object *obj, bool value,
     ms->dea_key_wrap = value;
 }
 
+bool ri_allowed(void)
+{
+    if (kvm_enabled()) {
+        MachineClass *mc = MACHINE_GET_CLASS(qdev_get_machine());
+        if (object_class_dynamic_cast(OBJECT_CLASS(mc),
+                                      TYPE_S390_CCW_MACHINE)) {
+            S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+
+            return s390mc->ri_allowed;
+        }
+    }
+    return 0;
+}
+
 static inline void s390_machine_initfn(Object *obj)
 {
     object_property_add_bool(obj, "aes-key-wrap",
@@ -262,6 +278,7 @@ static const TypeInfo ccw_machine_info = {
     .abstract      = true,
     .instance_size = sizeof(S390CcwMachineState),
     .instance_init = s390_machine_initfn,
+    .class_size = sizeof(S390CcwMachineClass),
     .class_init    = ccw_machine_class_init,
     .interfaces = (InterfaceInfo[]) {
         { TYPE_NMI },
@@ -363,6 +380,9 @@ static void ccw_machine_2_6_instance_options(MachineState *machine)
 
 static void ccw_machine_2_6_class_options(MachineClass *mc)
 {
+    S390CcwMachineClass *s390mc = S390_MACHINE_CLASS(mc);
+
+    s390mc->ri_allowed = false;
     ccw_machine_2_7_class_options(mc);
     SET_MACHINE_COMPAT(mc, CCW_COMPAT_2_6);
 }
diff --git a/include/hw/s390x/s390-virtio-ccw.h b/include/hw/s390x/s390-virtio-ccw.h
index ab08332..a0c1fc8 100644
--- a/include/hw/s390x/s390-virtio-ccw.h
+++ b/include/hw/s390x/s390-virtio-ccw.h
@@ -35,6 +35,10 @@ typedef struct S390CcwMachineClass {
     MachineClass parent_class;
 
     /*< public >*/
+    bool ri_allowed;
 } S390CcwMachineClass;
 
+/* runtime-instrumentation allowed by the machine */
+bool ri_allowed(void);
+
 #endif
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index 6d97c08..79ed001 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -135,6 +135,8 @@ typedef struct CPUS390XState {
     uint64_t gbea;
     uint64_t pp;
 
+    uint8_t riccb[64];
+
     CPU_COMMON
 
     /* reset does memset(0) up to here */
@@ -1159,6 +1161,7 @@ void kvm_s390_reset_vcpu(S390CPU *cpu);
 int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit);
 void kvm_s390_vcpu_interrupt_pre_save(S390CPU *cpu);
 int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu);
+int kvm_s390_get_ri(void);
 void kvm_s390_crypto_reset(void);
 #else
 static inline void kvm_s390_io_interrupt(uint16_t subchannel_id,
@@ -1209,6 +1212,10 @@ static inline int kvm_s390_vcpu_interrupt_post_load(S390CPU *cpu)
 {
     return 0;
 }
+static inline int kvm_s390_get_ri(void)
+{
+    return 0;
+}
 static inline void kvm_s390_crypto_reset(void)
 {
 }
@@ -1272,11 +1279,22 @@ static inline bool vregs_needed(void *opaque)
     }
     return 0;
 }
+static inline bool riccb_needed(void *opaque)
+{
+    if (kvm_enabled()) {
+        return kvm_s390_get_ri();
+    }
+    return 0;
+}
 #else
 static inline bool vregs_needed(void *opaque)
 {
     return 0;
 }
+static inline bool riccb_needed(void *opaque)
+{
+    return 0;
+}
 #endif
 
 /* machine check interruption code */
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index e1859ca..55ae6d3 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -46,6 +46,7 @@
 #include "hw/s390x/ipl.h"
 #include "hw/s390x/ebcdic.h"
 #include "exec/memattrs.h"
+#include "hw/s390x/s390-virtio-ccw.h"
 
 /* #define DEBUG_KVM */
 
@@ -135,6 +136,7 @@ static int cap_sync_regs;
 static int cap_async_pf;
 static int cap_mem_op;
 static int cap_s390_irq;
+static int cap_ri;
 
 static void *legacy_s390_alloc(size_t size, uint64_t *align);
 
@@ -270,6 +272,11 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
     kvm_vm_enable_cap(s, KVM_CAP_S390_USER_SIGP, 0);
     kvm_vm_enable_cap(s, KVM_CAP_S390_VECTOR_REGISTERS, 0);
     kvm_vm_enable_cap(s, KVM_CAP_S390_USER_STSI, 0);
+    if (ri_allowed()) {
+        if (kvm_vm_enable_cap(s, KVM_CAP_S390_RI, 0) == 0) {
+            cap_ri = 1;
+        }
+    }
 
     return 0;
 }
@@ -386,6 +393,11 @@ int kvm_arch_put_registers(CPUState *cs, int level)
         kvm_set_one_reg(cs, KVM_REG_S390_PP, &env->pp);
     }
 
+    if (can_sync_regs(cs, KVM_SYNC_RICCB)) {
+        memcpy(cs->kvm_run->s.regs.riccb, env->riccb, 64);
+        cs->kvm_run->kvm_dirty_regs |= KVM_SYNC_RICCB;
+    }
+
     /* pfault parameters */
     if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
         cs->kvm_run->s.regs.pft = env->pfault_token;
@@ -528,6 +540,10 @@ int kvm_arch_get_registers(CPUState *cs)
         kvm_get_one_reg(cs, KVM_REG_S390_PP, &env->pp);
     }
 
+    if (can_sync_regs(cs, KVM_SYNC_RICCB)) {
+        memcpy(env->riccb, cs->kvm_run->s.regs.riccb, 64);
+    }
+
     /* pfault parameters */
     if (can_sync_regs(cs, KVM_SYNC_PFAULT)) {
         env->pfault_token = cs->kvm_run->s.regs.pft;
@@ -2136,6 +2152,11 @@ int kvm_s390_get_memslot_count(KVMState *s)
     return kvm_check_extension(s, KVM_CAP_NR_MEMSLOTS);
 }
 
+int kvm_s390_get_ri(void)
+{
+    return cap_ri;
+}
+
 int kvm_s390_set_cpu_state(S390CPU *cpu, uint8_t cpu_state)
 {
     struct kvm_mp_state mp_state = {};
diff --git a/target-s390x/machine.c b/target-s390x/machine.c
index 6b26090..a30b16f 100644
--- a/target-s390x/machine.c
+++ b/target-s390x/machine.c
@@ -135,6 +135,17 @@ static const VMStateDescription vmstate_vregs = {
     }
 };
 
+const VMStateDescription vmstate_riccb = {
+    .name = "cpu/riccb",
+    .version_id = 1,
+    .minimum_version_id = 1,
+    .needed = riccb_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT8_ARRAY(env.riccb, S390CPU, 64),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 const VMStateDescription vmstate_s390_cpu = {
     .name = "cpu",
     .post_load = cpu_post_load,
@@ -166,6 +177,7 @@ const VMStateDescription vmstate_s390_cpu = {
     .subsections = (const VMStateDescription*[]) {
         &vmstate_fpu,
         &vmstate_vregs,
+        &vmstate_riccb,
         NULL
     },
 };
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 1/9] s390x: add compat machine " Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 2/9] s390x: enable runtime instrumentation Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-27 13:43   ` Christian Borntraeger
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 4/9] s390x/ipl: Add type and length checks for IplParameterBlock values Cornelia Huck
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

The IplParameterBlock struct currently has only 200 bytes filled, but it
can be up to 4K.

This patch converts the struct to union with a fully populated struct
inside it and second struct with old values.

For compatibility reasons we disable migration of the extended iplb
field for pre-2.7 machines. Also a guest still can read/write only the
first 200 bytes of IPLB for now.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c             | 24 ++++++++++++++++++
 hw/s390x/ipl.h             | 61 ++++++++++++++++++++++++++++++++++++++++++----
 hw/s390x/s390-virtio-ccw.c |  8 +++++-
 target-s390x/misc_helper.c |  7 +++---
 4 files changed, 90 insertions(+), 10 deletions(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index f104200..236e2c9 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -30,6 +30,24 @@
 #define ZIPL_IMAGE_START                0x009000UL
 #define IPL_PSW_MASK                    (PSW_MASK_32 | PSW_MASK_64)
 
+static bool iplb_extended_needed(void *opaque)
+{
+    S390IPLState *ipl = S390_IPL(object_resolve_path(TYPE_S390_IPL, NULL));
+
+    return ipl->iplbext_migration;
+}
+
+static const VMStateDescription vmstate_iplb_extended = {
+    .name = "ipl/iplb_extended",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .needed = iplb_extended_needed,
+    .fields = (VMStateField[]) {
+        VMSTATE_UINT8_ARRAY(reserved_ext, IplParameterBlock, 4096 - 200),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static const VMStateDescription vmstate_iplb = {
     .name = "ipl/iplb",
     .version_id = 0,
@@ -39,6 +57,10 @@ static const VMStateDescription vmstate_iplb = {
         VMSTATE_UINT16(devno, IplParameterBlock),
         VMSTATE_UINT8_ARRAY(reserved2, IplParameterBlock, 88),
         VMSTATE_END_OF_LIST()
+    },
+    .subsections = (const VMStateDescription*[]) {
+        &vmstate_iplb_extended,
+        NULL
     }
 };
 
@@ -181,6 +203,8 @@ static Property s390_ipl_properties[] = {
     DEFINE_PROP_STRING("cmdline", S390IPLState, cmdline),
     DEFINE_PROP_STRING("firmware", S390IPLState, firmware),
     DEFINE_PROP_BOOL("enforce_bios", S390IPLState, enforce_bios, false),
+    DEFINE_PROP_BOOL("iplbext_migration", S390IPLState, iplbext_migration,
+                     true),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index 6b48ed7..271a8ca 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -15,11 +15,59 @@
 #include "hw/qdev.h"
 #include "cpu.h"
 
-typedef struct IplParameterBlock {
-      uint8_t  reserved1[110];
-      uint16_t devno;
-      uint8_t  reserved2[88];
-} IplParameterBlock;
+struct IplBlockCcw {
+    uint8_t  reserved0[86];
+    uint16_t devno;
+    uint8_t  vm_flags;
+    uint8_t  reserved3[3];
+    uint32_t vm_parm_len;
+    uint8_t  nss_name[8];
+    uint8_t  vm_parm[64];
+    uint8_t  reserved4[8];
+} QEMU_PACKED;
+typedef struct IplBlockCcw IplBlockCcw;
+
+struct IplBlockFcp {
+    uint8_t  reserved1[305 - 1];
+    uint8_t  opt;
+    uint8_t  reserved2[3];
+    uint16_t reserved3;
+    uint16_t devno;
+    uint8_t  reserved4[4];
+    uint64_t wwpn;
+    uint64_t lun;
+    uint32_t bootprog;
+    uint8_t  reserved5[12];
+    uint64_t br_lba;
+    uint32_t scp_data_len;
+    uint8_t  reserved6[260];
+    uint8_t  scp_data[];
+} QEMU_PACKED;
+typedef struct IplBlockFcp IplBlockFcp;
+
+union IplParameterBlock {
+    struct {
+        uint32_t len;
+        uint8_t  reserved0[3];
+        uint8_t  version;
+        uint32_t blk0_len;
+        uint8_t  pbt;
+        uint8_t  flags;
+        uint16_t reserved01;
+        uint8_t  loadparm[8];
+        union {
+            IplBlockCcw ccw;
+            IplBlockCcw fcp;
+        };
+    } QEMU_PACKED;
+    struct {
+        uint8_t  reserved1[110];
+        uint16_t devno;
+        uint8_t  reserved2[88];
+        uint8_t  reserved_ext[4096 - 200];
+    } QEMU_PACKED;
+} QEMU_PACKED;
+typedef union IplParameterBlock IplParameterBlock;
 
 void s390_ipl_update_diag308(IplParameterBlock *iplb);
 void s390_ipl_prepare_cpu(S390CPU *cpu);
@@ -47,7 +95,10 @@ struct S390IPLState {
     uint8_t cssid;
     uint8_t ssid;
     uint16_t devno;
+    bool iplbext_migration;
 };
 typedef struct S390IPLState S390IPLState;
 
+#define S390_IPLB_MIN_CCW_LEN 200
+
 #endif
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 1390a98..4456fce 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -25,6 +25,7 @@
 #include "s390-pci-bus.h"
 #include "hw/s390x/storage-keys.h"
 #include "hw/compat.h"
+#include "ipl.h"
 #include "hw/s390x/s390-virtio-ccw.h"
 
 static const char *const reset_dev_types[] = {
@@ -317,7 +318,12 @@ static const TypeInfo ccw_machine_info = {
     type_init(ccw_machine_register_##suffix)
 
 #define CCW_COMPAT_2_6 \
-        HW_COMPAT_2_6
+        HW_COMPAT_2_6 \
+        {\
+            .driver   = TYPE_S390_IPL,\
+            .property = "iplbext_migration",\
+            .value    = "off",\
+        },
 
 #define CCW_COMPAT_2_5 \
         CCW_COMPAT_2_6 \
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index 71cbe34..fab7f87 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -232,8 +232,8 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
             program_interrupt(env, PGM_ADDRESSING, ILEN_LATER_INC);
             return;
         }
-        iplb = g_malloc0(sizeof(struct IplParameterBlock));
-        cpu_physical_memory_read(addr, iplb, sizeof(struct IplParameterBlock));
+        iplb = g_malloc0(sizeof(IplParameterBlock));
+        cpu_physical_memory_read(addr, iplb, S390_IPLB_MIN_CCW_LEN);
         s390_ipl_update_diag308(iplb);
         env->regs[r1 + 1] = DIAG_308_RC_OK;
         g_free(iplb);
@@ -250,8 +250,7 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
         }
         iplb = s390_ipl_get_iplb();
         if (iplb) {
-            cpu_physical_memory_write(addr, iplb,
-                                      sizeof(struct IplParameterBlock));
+            cpu_physical_memory_write(addr, iplb, S390_IPLB_MIN_CCW_LEN);
             env->regs[r1 + 1] = DIAG_308_RC_OK;
         } else {
             env->regs[r1 + 1] = DIAG_308_RC_NO_CONF;
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 4/9] s390x/ipl: Add type and length checks for IplParameterBlock values
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (2 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 5/9] s390x/ipl: Provide ipl parameter block Cornelia Huck
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

We can check for valid type and lengths of the IplParameterBlock fields
when receiving the struct from the guest.

Length of the IplParameterBlock can be less than 4K. To play safe we can
read and write only required amount of data.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenband <dahi@linux.vnet.ibm.com>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.h             | 21 +++++++++++++++++++++
 target-s390x/misc_helper.c | 17 +++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index 271a8ca..e3c208a 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -99,6 +99,27 @@ struct S390IPLState {
 };
 typedef struct S390IPLState S390IPLState;
 
+#define S390_IPL_TYPE_FCP 0x00
+#define S390_IPL_TYPE_CCW 0x02
+
 #define S390_IPLB_MIN_CCW_LEN 200
+#define S390_IPLB_MIN_FCP_LEN 384
+
+static inline bool iplb_valid_len(IplParameterBlock *iplb)
+{
+    return be32_to_cpu(iplb->len) <= sizeof(IplParameterBlock);
+}
+
+static inline bool iplb_valid_ccw(IplParameterBlock *iplb)
+{
+    return be32_to_cpu(iplb->len) >= S390_IPLB_MIN_CCW_LEN &&
+           iplb->pbt == S390_IPL_TYPE_CCW;
+}
+
+static inline bool iplb_valid_fcp(IplParameterBlock *iplb)
+{
+    return be32_to_cpu(iplb->len) >= S390_IPLB_MIN_FCP_LEN &&
+           iplb->pbt == S390_IPL_TYPE_FCP;
+}
 
 #endif
diff --git a/target-s390x/misc_helper.c b/target-s390x/misc_helper.c
index fab7f87..462cfc8 100644
--- a/target-s390x/misc_helper.c
+++ b/target-s390x/misc_helper.c
@@ -233,9 +233,22 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
             return;
         }
         iplb = g_malloc0(sizeof(IplParameterBlock));
-        cpu_physical_memory_read(addr, iplb, S390_IPLB_MIN_CCW_LEN);
+        cpu_physical_memory_read(addr, iplb, sizeof(iplb->len));
+        if (!iplb_valid_len(iplb)) {
+            env->regs[r1 + 1] = DIAG_308_RC_INVALID;
+            goto out;
+        }
+
+        cpu_physical_memory_read(addr, iplb, be32_to_cpu(iplb->len));
+
+        if (!iplb_valid_ccw(iplb) && !iplb_valid_fcp(iplb)) {
+            env->regs[r1 + 1] = DIAG_308_RC_INVALID;
+            goto out;
+        }
+
         s390_ipl_update_diag308(iplb);
         env->regs[r1 + 1] = DIAG_308_RC_OK;
+out:
         g_free(iplb);
         return;
     case 6:
@@ -250,7 +263,7 @@ void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3)
         }
         iplb = s390_ipl_get_iplb();
         if (iplb) {
-            cpu_physical_memory_write(addr, iplb, S390_IPLB_MIN_CCW_LEN);
+            cpu_physical_memory_write(addr, iplb, be32_to_cpu(iplb->len));
             env->regs[r1 + 1] = DIAG_308_RC_OK;
         } else {
             env->regs[r1 + 1] = DIAG_308_RC_NO_CONF;
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 5/9] s390x/ipl: Provide ipl parameter block
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (3 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 4/9] s390x/ipl: Add type and length checks for IplParameterBlock values Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 6/9] s390x/ipl: Add ssid field to IplParameterBlock Cornelia Huck
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

Right now we return the ipl parameter block only if the guest
specified one. Let's fill in the parameter block when bootindex
parameter is available and not booting from an external kernel.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c | 7 +++++++
 hw/s390x/ipl.h | 3 ++-
 2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 236e2c9..9a73820 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -238,6 +238,12 @@ static uint64_t s390_update_iplstate(S390IPLState *ipl)
             ipl->cssid = ccw_dev->sch->cssid;
             ipl->ssid = ccw_dev->sch->ssid;
             ipl->devno = ccw_dev->sch->devno;
+            ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_CCW_LEN);
+            ipl->iplb.blk0_len =
+                cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN);
+            ipl->iplb.pbt = S390_IPL_TYPE_CCW;
+            ipl->iplb.ccw.devno = cpu_to_be16(ccw_dev->sch->devno);
+            ipl->iplb_valid = true;
             goto out;
         }
     }
@@ -292,6 +298,7 @@ static void s390_ipl_reset(DeviceState *dev)
 
     if (!ipl->reipl_requested) {
         ipl->iplb_valid = false;
+        memset(&ipl->iplb, 0, sizeof(IplParameterBlock));
     }
     ipl->reipl_requested = false;
 }
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index e3c208a..0b7f6cbe 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -57,7 +57,7 @@ union IplParameterBlock {
         uint8_t  loadparm[8];
         union {
             IplBlockCcw ccw;
-            IplBlockCcw fcp;
+            IplBlockFcp fcp;
         };
     } QEMU_PACKED;
     struct {
@@ -102,6 +102,7 @@ typedef struct S390IPLState S390IPLState;
 #define S390_IPL_TYPE_FCP 0x00
 #define S390_IPL_TYPE_CCW 0x02
 
+#define S390_IPLB_HEADER_LEN 8
 #define S390_IPLB_MIN_CCW_LEN 200
 #define S390_IPLB_MIN_FCP_LEN 384
 
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 6/9] s390x/ipl: Add ssid field to IplParameterBlock
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (4 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 5/9] s390x/ipl: Provide ipl parameter block Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 7/9] pc-bios/s390-ccw: Get device address via diag 308/6 Cornelia Huck
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

Add the ssid field to the ipl parameter block struct and fill it when
necessary so the guest can use it.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c        | 1 +
 hw/s390x/ipl.h        | 3 ++-
 target-s390x/ioinst.c | 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 9a73820..2da0f1e 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -243,6 +243,7 @@ static uint64_t s390_update_iplstate(S390IPLState *ipl)
                 cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN);
             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;
             ipl->iplb_valid = true;
             goto out;
         }
diff --git a/hw/s390x/ipl.h b/hw/s390x/ipl.h
index 0b7f6cbe..9aa4d94 100644
--- a/hw/s390x/ipl.h
+++ b/hw/s390x/ipl.h
@@ -16,7 +16,8 @@
 #include "cpu.h"
 
 struct IplBlockCcw {
-    uint8_t  reserved0[86];
+    uint8_t  reserved0[85];
+    uint8_t  ssid;
     uint16_t devno;
     uint8_t  vm_flags;
     uint8_t  reserved3[3];
diff --git a/target-s390x/ioinst.c b/target-s390x/ioinst.c
index 142ff93..f5498aa 100644
--- a/target-s390x/ioinst.c
+++ b/target-s390x/ioinst.c
@@ -509,6 +509,7 @@ static void ioinst_handle_chsc_scsc(ChscReq *req, ChscResp *res)
 
     general_chars[0] = cpu_to_be32(0x03000000);
     general_chars[1] = cpu_to_be32(0x00059000);
+    general_chars[3] = cpu_to_be32(0x00080000);
 
     chsc_chars[0] = cpu_to_be32(0x40000000);
     chsc_chars[3] = cpu_to_be32(0x00040000);
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 7/9] pc-bios/s390-ccw: Get device address via diag 308/6
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (5 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 6/9] s390x/ipl: Add ssid field to IplParameterBlock Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 8/9] s390-ccw.img: rebuild image Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 9/9] s390x/ipl: Remove redundant usage of gr7 Cornelia Huck
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

To IPL from a device, pc-bios receives from qemu a device address via
general register 7. The better way to do it is to use diag308/6
instruction which returns so called
"IplParameterBlock". IplParameterBlock contains the device address for
IPL and additional parameters that can be used by pc-bios.

This patch allows pc-bios to get device address via diag308/6 and
doesn't use gr7 passed boot information anymore.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 pc-bios/s390-ccw/iplb.h     | 79 +++++++++++++++++++++++++++++++++++++++++++++
 pc-bios/s390-ccw/main.c     | 25 ++++++++------
 pc-bios/s390-ccw/s390-ccw.h |  2 +-
 pc-bios/s390-ccw/start.S    |  2 --
 4 files changed, 95 insertions(+), 13 deletions(-)
 create mode 100644 pc-bios/s390-ccw/iplb.h

diff --git a/pc-bios/s390-ccw/iplb.h b/pc-bios/s390-ccw/iplb.h
new file mode 100644
index 0000000..1cf509f
--- /dev/null
+++ b/pc-bios/s390-ccw/iplb.h
@@ -0,0 +1,79 @@
+/*
+ * QEMU S390 IPL Block
+ *
+ * Copyright 2015 IBM Corp.
+ * Author(s): Alexander Yarygin <yarygin@linux.vnet.ibm.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2 or (at
+ * your option) any later version. See the COPYING file in the top-level
+ * directory.
+ */
+
+#ifndef IPLB_H
+#define IPLB_H
+
+struct IplBlockCcw {
+    uint8_t  reserved0[85];
+    uint8_t  ssid;
+    uint16_t devno;
+    uint8_t  vm_flags;
+    uint8_t  reserved3[3];
+    uint32_t vm_parm_len;
+    uint8_t  nss_name[8];
+    uint8_t  vm_parm[64];
+    uint8_t  reserved4[8];
+} __attribute__ ((packed));
+typedef struct IplBlockCcw IplBlockCcw;
+
+struct IplBlockFcp {
+    uint8_t  reserved1[305 - 1];
+    uint8_t  opt;
+    uint8_t  reserved2[3];
+    uint16_t reserved3;
+    uint16_t devno;
+    uint8_t  reserved4[4];
+    uint64_t wwpn;
+    uint64_t lun;
+    uint32_t bootprog;
+    uint8_t  reserved5[12];
+    uint64_t br_lba;
+    uint32_t scp_data_len;
+    uint8_t  reserved6[260];
+    uint8_t  scp_data[];
+} __attribute__ ((packed));
+typedef struct IplBlockFcp IplBlockFcp;
+
+struct IplParameterBlock {
+    uint32_t len;
+    uint8_t  reserved0[3];
+    uint8_t  version;
+    uint32_t blk0_len;
+    uint8_t  pbt;
+    uint8_t  flags;
+    uint16_t reserved01;
+    uint8_t  loadparm[8];
+    union {
+        IplBlockCcw ccw;
+        IplBlockFcp fcp;
+    };
+} __attribute__ ((packed));
+typedef struct IplParameterBlock IplParameterBlock;
+
+extern IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
+
+#define S390_IPL_TYPE_FCP 0x00
+#define S390_IPL_TYPE_CCW 0x02
+
+static inline bool store_iplb(IplParameterBlock *iplb)
+{
+    register unsigned long addr asm("0") = (unsigned long) iplb;
+    register unsigned long rc asm("1") = 0;
+
+    asm volatile ("diag %0,%2,0x308\n"
+                  : "+d" (addr), "+d" (rc)
+                  : "d" (6)
+                  : "memory", "cc");
+    return rc == 0x01;
+}
+
+#endif /* IPLB_H */
diff --git a/pc-bios/s390-ccw/main.c b/pc-bios/s390-ccw/main.c
index 1c9e079..9446ecc 100644
--- a/pc-bios/s390-ccw/main.c
+++ b/pc-bios/s390-ccw/main.c
@@ -12,8 +12,8 @@
 #include "virtio.h"
 
 char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
-uint64_t boot_value;
 static SubChannelId blk_schid = { .one = 1 };
+IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
 
 /*
  * Priniciples of Operations (SA22-7832-09) chapter 17 requires that
@@ -61,7 +61,7 @@ static bool find_dev(Schib *schib, int dev_no)
     return false;
 }
 
-static void virtio_setup(uint64_t dev_info)
+static void virtio_setup(void)
 {
     Schib schib;
     int ssid;
@@ -75,12 +75,18 @@ static void virtio_setup(uint64_t dev_info)
      */
     enable_mss_facility();
 
-    if (dev_info != -1) {
-        dev_no = dev_info & 0xffff;
-        debug_print_int("device no. ", dev_no);
-        blk_schid.ssid = (dev_info >> 16) & 0x3;
-        debug_print_int("ssid ", blk_schid.ssid);
-        found = find_dev(&schib, dev_no);
+    if (store_iplb(&iplb)) {
+        switch (iplb.pbt) {
+        case S390_IPL_TYPE_CCW:
+            dev_no = iplb.ccw.devno;
+            debug_print_int("device no. ", dev_no);
+            blk_schid.ssid = iplb.ccw.ssid & 0x3;
+            debug_print_int("ssid ", blk_schid.ssid);
+            found = find_dev(&schib, dev_no);
+            break;
+        default:
+            panic("List-directed IPL not supported yet!\n");
+        }
     } else {
         for (ssid = 0; ssid < 0x3; ssid++) {
             blk_schid.ssid = ssid;
@@ -101,8 +107,7 @@ static void virtio_setup(uint64_t dev_info)
 int main(void)
 {
     sclp_setup();
-    debug_print_int("boot reg[7] ", boot_value);
-    virtio_setup(boot_value);
+    virtio_setup();
 
     zipl_load(); /* no return */
 
diff --git a/pc-bios/s390-ccw/s390-ccw.h b/pc-bios/s390-ccw/s390-ccw.h
index 616d967..ded67bc 100644
--- a/pc-bios/s390-ccw/s390-ccw.h
+++ b/pc-bios/s390-ccw/s390-ccw.h
@@ -44,6 +44,7 @@ typedef unsigned long long __u64;
 #endif
 
 #include "cio.h"
+#include "iplb.h"
 
 typedef struct irb Irb;
 typedef struct ccw1 Ccw1;
@@ -61,7 +62,6 @@ 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)));
-extern uint64_t boot_value;
 
 /* sclp-ascii.c */
 void sclp_print(const char *string);
diff --git a/pc-bios/s390-ccw/start.S b/pc-bios/s390-ccw/start.S
index b6dd8c2..43f9bd2 100644
--- a/pc-bios/s390-ccw/start.S
+++ b/pc-bios/s390-ccw/start.S
@@ -14,8 +14,6 @@
 _start:
 
 larl	%r15, stack + 0x8000    /* Set up stack */
-larl    %r6, boot_value
-stg     %r7, 0(%r6)     /* save the boot_value before any function calls */
 j	main                    /* And call C */
 
 /*
-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 8/9] s390-ccw.img: rebuild image
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (6 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 7/9] pc-bios/s390-ccw: Get device address via diag 308/6 Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 9/9] s390x/ipl: Remove redundant usage of gr7 Cornelia Huck
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Cornelia Huck

Contains the following change:

pc-bios/s390-ccw: Get device address via diag 308/6

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

diff --git a/pc-bios/s390-ccw.img b/pc-bios/s390-ccw.img
index d3978ba0506cb24050f596b2e4e710dec3486fba..ea5fd9a4797530e79e88f591f66c4de8e93a604e 100644
GIT binary patch
delta 5377
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

delta 5310
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
aJGjS>F6@E&)zgD%(($u6t*?8vQ~n1|+<-Cw

-- 
2.8.1

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

* [Qemu-devel] [PATCH for-2.7 9/9] s390x/ipl: Remove redundant usage of gr7
  2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
                   ` (7 preceding siblings ...)
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 8/9] s390-ccw.img: rebuild image Cornelia Huck
@ 2016-04-25 15:18 ` Cornelia Huck
  8 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-25 15:18 UTC (permalink / raw)
  To: qemu-devel; +Cc: borntraeger, agraf, jfrei, Alexander Yarygin, Cornelia Huck

From: Alexander Yarygin <yarygin@linux.vnet.ibm.com>

We don't need to pass device address for pc-bios using gr7 anymore as
the pcbios completely relies on diag308 now, so we can remove it from
qemu. devno, ssid and cssid are migrated but the value was never reused,
so we can safely ignore these fields and migrate 0.

Signed-off-by: Alexander Yarygin <yarygin@linux.vnet.ibm.com>
Reviewed-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 hw/s390x/ipl.c | 33 ++++++---------------------------
 1 file changed, 6 insertions(+), 27 deletions(-)

diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 2da0f1e..5786b5e 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -208,50 +208,27 @@ static Property s390_ipl_properties[] = {
     DEFINE_PROP_END_OF_LIST(),
 };
 
-/*
- * In addition to updating the iplstate, this function returns:
- * - 0 if system was ipled with external kernel
- * - -1 if no valid boot device was found
- * - ccw id of the boot device otherwise
- */
-static uint64_t s390_update_iplstate(S390IPLState *ipl)
+static bool s390_gen_initial_iplb(S390IPLState *ipl)
 {
     DeviceState *dev_st;
 
-    if (ipl->iplb_valid) {
-        ipl->cssid = 0;
-        ipl->ssid = 0;
-        ipl->devno = ipl->iplb.devno;
-        goto out;
-    }
-
-    if (ipl->kernel) {
-        return 0;
-    }
-
     dev_st = get_boot_device(0);
     if (dev_st) {
         VirtioCcwDevice *ccw_dev = (VirtioCcwDevice *) object_dynamic_cast(
             OBJECT(qdev_get_parent_bus(dev_st)->parent),
                 TYPE_VIRTIO_CCW_DEVICE);
         if (ccw_dev) {
-            ipl->cssid = ccw_dev->sch->cssid;
-            ipl->ssid = ccw_dev->sch->ssid;
-            ipl->devno = ccw_dev->sch->devno;
             ipl->iplb.len = cpu_to_be32(S390_IPLB_MIN_CCW_LEN);
             ipl->iplb.blk0_len =
                 cpu_to_be32(S390_IPLB_MIN_CCW_LEN - S390_IPLB_HEADER_LEN);
             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;
-            ipl->iplb_valid = true;
-            goto out;
+            return true;
         }
     }
 
-    return -1;
-out:
-    return (uint32_t) (ipl->cssid << 24 | ipl->ssid << 16 | ipl->devno);
+    return false;
 }
 
 void s390_ipl_update_diag308(IplParameterBlock *iplb)
@@ -289,7 +266,9 @@ void s390_ipl_prepare_cpu(S390CPU *cpu)
 
     if (!ipl->kernel || ipl->iplb_valid) {
         cpu->env.psw.addr = ipl->bios_start_addr;
-        cpu->env.regs[7] = s390_update_iplstate(ipl);
+        if (!ipl->iplb_valid) {
+            ipl->iplb_valid = s390_gen_initial_iplb(ipl);
+        }
     }
 }
 
-- 
2.8.1

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

* Re: [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct
  2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct Cornelia Huck
@ 2016-04-27 13:43   ` Christian Borntraeger
  2016-04-27 15:05     ` Cornelia Huck
  0 siblings, 1 reply; 12+ messages in thread
From: Christian Borntraeger @ 2016-04-27 13:43 UTC (permalink / raw)
  To: Cornelia Huck, qemu-devel; +Cc: agraf, jfrei, Alexander Yarygin

On 04/25/2016 05:18 PM, Cornelia Huck wrote:


> +        union {
> +            IplBlockCcw ccw;
> +            IplBlockCcw fcp;

you later fix this up in patch 
 s390x/ipl: Provide ipl parameter block

-            IplBlockCcw fcp;
+            IplBlockFcp fcp;


Maybe just move this hunk to patch 3.

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

* Re: [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct
  2016-04-27 13:43   ` Christian Borntraeger
@ 2016-04-27 15:05     ` Cornelia Huck
  0 siblings, 0 replies; 12+ messages in thread
From: Cornelia Huck @ 2016-04-27 15:05 UTC (permalink / raw)
  To: Christian Borntraeger; +Cc: qemu-devel, agraf, jfrei, Alexander Yarygin

On Wed, 27 Apr 2016 15:43:45 +0200
Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> On 04/25/2016 05:18 PM, Cornelia Huck wrote:
> 
> 
> > +        union {
> > +            IplBlockCcw ccw;
> > +            IplBlockCcw fcp;
> 
> you later fix this up in patch 
>  s390x/ipl: Provide ipl parameter block
> 
> -            IplBlockCcw fcp;
> +            IplBlockFcp fcp;
> 
> 
> Maybe just move this hunk to patch 3.
> 

Oops, definetly :)

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

end of thread, other threads:[~2016-04-27 15:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-25 15:18 [Qemu-devel] [PATCH for-2.7 0/9] First s390x batch for 2.7 Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 1/9] s390x: add compat machine " Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 2/9] s390x: enable runtime instrumentation Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 3/9] s390x/ipl: Extend the IplParameterBlock struct Cornelia Huck
2016-04-27 13:43   ` Christian Borntraeger
2016-04-27 15:05     ` Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 4/9] s390x/ipl: Add type and length checks for IplParameterBlock values Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 5/9] s390x/ipl: Provide ipl parameter block Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 6/9] s390x/ipl: Add ssid field to IplParameterBlock Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 7/9] pc-bios/s390-ccw: Get device address via diag 308/6 Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 8/9] s390-ccw.img: rebuild image Cornelia Huck
2016-04-25 15:18 ` [Qemu-devel] [PATCH for-2.7 9/9] s390x/ipl: Remove redundant usage of gr7 Cornelia Huck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).