* [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
@ 2018-12-04 22:18 Collin Walling
2018-12-04 22:26 ` Collin Walling
` (3 more replies)
0 siblings, 4 replies; 14+ messages in thread
From: Collin Walling @ 2018-12-04 22:18 UTC (permalink / raw)
To: borntraeger, cornelia.huck, cotte, david, mimu, qemu-s390x,
qemu-devel
Cc: thuth
Add migration and reset support for diagnose 318. This is a new z14 GA2
hardware feature, but we can provide guest support starting with the
zEC12-full CPU model.
Because new hardware introduces a new facility-availability byte in
the Read SCP Info block, we lose one byte in the CPU entries list
and must limit the maximum VCPUs to 247 (down from 248).
Signed-off-by: Collin Walling <walling@linux.ibm.com>
---
Changelog
RFC -> v1
- introduced kvm stubs for set/get cpc
- s/fac134/byte_134
- moved diag318 vmstate description to diag.c
- reduced S390_VCPU_MAX to 247
hw/s390x/ipl.c | 3 +++
hw/s390x/s390-virtio-ccw.c | 3 +++
hw/s390x/sclp.c | 2 ++
include/hw/s390x/sclp.h | 2 ++
| 5 ++++
target/s390x/cpu.h | 2 +-
target/s390x/cpu_features.c | 3 +++
target/s390x/cpu_features.h | 1 +
target/s390x/cpu_features_def.h | 3 +++
target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
target/s390x/gen-features.c | 1 +
target/s390x/internal.h | 4 +++-
target/s390x/kvm-stub.c | 10 ++++++++
target/s390x/kvm.c | 23 ++++++++++++++++++
target/s390x/kvm_s390x.h | 3 +++
15 files changed, 116 insertions(+), 2 deletions(-)
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index 21f64ad..6e3af65 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -27,6 +27,7 @@
#include "qemu/cutils.h"
#include "qemu/option.h"
#include "exec/exec-all.h"
+#include "internal.h"
#define KERN_IMAGE_START 0x010000UL
#define LINUX_MAGIC_ADDR 0x010008UL
@@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
ipl->compat_start_addr = ipl->start_addr;
ipl->compat_bios_start_addr = ipl->bios_start_addr;
qemu_register_reset(qdev_reset_all_fn, dev);
+
+ diag318_register();
error:
error_propagate(errp, err);
}
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index a0615a8..2c670fc 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -37,6 +37,7 @@
#include "cpu_models.h"
#include "hw/nmi.h"
#include "hw/s390x/tod.h"
+#include "internal.h"
S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
{
@@ -357,6 +358,7 @@ static void s390_machine_reset(void)
}
subsystem_reset();
s390_crypto_reset();
+ diag318_reset();
run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
break;
case S390_RESET_LOAD_NORMAL:
@@ -364,6 +366,7 @@ static void s390_machine_reset(void)
run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
}
subsystem_reset();
+ diag318_reset();
run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
break;
diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
index 4510a80..183c627 100644
--- a/hw/s390x/sclp.c
+++ b/hw/s390x/sclp.c
@@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
read_info->conf_char);
s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
read_info->conf_char_ext);
+ /* Read Info byte 134 */
+ s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
SCLP_HAS_IOA_RECONFIG);
diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
index f9db243..eb12ba2 100644
--- a/include/hw/s390x/sclp.h
+++ b/include/hw/s390x/sclp.h
@@ -133,6 +133,8 @@ typedef struct ReadInfo {
uint16_t highest_cpu;
uint8_t _reserved5[124 - 122]; /* 122-123 */
uint32_t hmfai;
+ uint8_t _reserved7[134 - 128]; /* 128-133 */
+ uint8_t byte_134[1];
struct CPUEntry entries[0];
} QEMU_PACKED ReadInfo;
--git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
index 0265482..8c206d2 100644
--- a/linux-headers/asm-s390/kvm.h
+++ b/linux-headers/asm-s390/kvm.h
@@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
#define KVM_S390_VM_CRYPTO 2
#define KVM_S390_VM_CPU_MODEL 3
#define KVM_S390_VM_MIGRATION 4
+#define KVM_S390_VM_MISC 5
/* kvm attributes for mem_ctrl */
#define KVM_S390_VM_MEM_ENABLE_CMMA 0
@@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
#define KVM_S390_VM_CPU_FEAT_PFMFI 11
#define KVM_S390_VM_CPU_FEAT_SIGPIF 12
#define KVM_S390_VM_CPU_FEAT_KSS 13
+#define KVM_S390_VM_CPU_FEAT_DIAG318 14
struct kvm_s390_vm_cpu_feat {
__u64 feat[16];
};
@@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
#define KVM_S390_VM_MIGRATION_START 1
#define KVM_S390_VM_MIGRATION_STATUS 2
+/* kvm attributes for KVM_S390_VM_MISC */
+#define KVM_S390_VM_MISC_CPC 0
+
/* for KVM_GET_REGS and KVM_SET_REGS */
struct kvm_regs {
/* general purpose regs for s390 */
diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
index 8c2320e..594b4a4 100644
--- a/target/s390x/cpu.h
+++ b/target/s390x/cpu.h
@@ -52,7 +52,7 @@
#define MMU_USER_IDX 0
-#define S390_MAX_CPUS 248
+#define S390_MAX_CPUS 247
typedef struct PSW {
uint64_t mask;
diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
index 60cfeba..d05afa5 100644
--- a/target/s390x/cpu_features.c
+++ b/target/s390x/cpu_features.c
@@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
+ /* SCLP SCCB Byte 134 */
+ FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
+
FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
index effe790..e7248df 100644
--- a/target/s390x/cpu_features.h
+++ b/target/s390x/cpu_features.h
@@ -23,6 +23,7 @@ typedef enum {
S390_FEAT_TYPE_STFL,
S390_FEAT_TYPE_SCLP_CONF_CHAR,
S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
+ S390_FEAT_TYPE_SCLP_BYTE_134,
S390_FEAT_TYPE_SCLP_CPU,
S390_FEAT_TYPE_MISC,
S390_FEAT_TYPE_PLO,
diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
index 5fc7e7b..d99da1d 100644
--- a/target/s390x/cpu_features_def.h
+++ b/target/s390x/cpu_features_def.h
@@ -109,6 +109,9 @@ typedef enum {
S390_FEAT_SIE_PFMFI,
S390_FEAT_SIE_IBS,
+ /* Read Info Byte 134 */
+ S390_FEAT_DIAG318,
+
/* Sclp Cpu */
S390_FEAT_SIE_F2,
S390_FEAT_SIE_SKEY,
diff --git a/target/s390x/diag.c b/target/s390x/diag.c
index acb0f3d..2207c08 100644
--- a/target/s390x/diag.c
+++ b/target/s390x/diag.c
@@ -20,6 +20,8 @@
#include "sysemu/cpus.h"
#include "hw/s390x/ipl.h"
#include "hw/s390x/s390-virtio-ccw.h"
+#include "kvm_s390x.h"
+#include "sysemu/kvm.h"
int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
{
@@ -134,3 +136,54 @@ out:
break;
}
}
+
+typedef struct Diag318Data {
+ uint64_t cpc;
+} Diag318Data;
+static Diag318Data diag318data;
+
+void diag318_reset(void)
+{
+ if (s390_has_feat(S390_FEAT_DIAG318)) {
+ kvm_s390_set_cpc(0);
+ }
+}
+
+static int diag318_post_load(void *opaque, int version_id)
+{
+ Diag318Data *d = opaque;
+
+ kvm_s390_set_cpc(d->cpc);
+ return 0;
+}
+
+static int diag318_pre_save(void *opaque)
+{
+ Diag318Data *d = opaque;
+
+ kvm_s390_get_cpc(&d->cpc);
+ return 0;
+}
+
+static bool diag318_needed(void *opaque)
+{
+ return s390_has_feat(S390_FEAT_DIAG318);
+}
+
+const VMStateDescription vmstate_diag318 = {
+ .name = "diag318",
+ .post_load = diag318_post_load,
+ .pre_save = diag318_pre_save,
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = diag318_needed,
+ .fields = (VMStateField[]) {
+ VMSTATE_UINT64(cpc, Diag318Data),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
+void diag318_register(void)
+{
+ vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
+}
\ No newline at end of file
diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
index 70015ea..a3d1457 100644
--- a/target/s390x/gen-features.c
+++ b/target/s390x/gen-features.c
@@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
S390_FEAT_AP_QUERY_CONFIG_INFO,
S390_FEAT_AP_FACILITIES_TEST,
S390_FEAT_AP,
+ S390_FEAT_DIAG318,
};
static uint16_t full_GEN12_GA2[] = {
diff --git a/target/s390x/internal.h b/target/s390x/internal.h
index f2a771e..d53b1d0 100644
--- a/target/s390x/internal.h
+++ b/target/s390x/internal.h
@@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
target_ulong *addr, int *flags);
-/* misc_helper.c */
+/* diag.c */
int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
uintptr_t ra);
+void diag318_register(void);
+void diag318_reset(void);
/* translate.c */
diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
index bf7795e..1f0bee3 100644
--- a/target/s390x/kvm-stub.c
+++ b/target/s390x/kvm-stub.c
@@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
void kvm_s390_restart_interrupt(S390CPU *cpu)
{
}
+
+int kvm_s390_get_cpc(uint64_t *cpc)
+{
+ return 0;
+}
+
+int kvm_s390_set_cpc(uint64_t cpc)
+{
+ return 0;
+}
\ No newline at end of file
diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
index 2ebf26a..9ed4cea 100644
--- a/target/s390x/kvm.c
+++ b/target/s390x/kvm.c
@@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
}
+int kvm_s390_get_cpc(uint64_t *cpc)
+{
+ struct kvm_device_attr attr = {
+ .group = KVM_S390_VM_MISC,
+ .attr = KVM_S390_VM_MISC_CPC,
+ .addr = (uint64_t)cpc,
+ };
+
+ return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
+}
+
+int kvm_s390_set_cpc(uint64_t cpc)
+{
+ struct kvm_device_attr attr = {
+ .group = KVM_S390_VM_MISC,
+ .attr = KVM_S390_VM_MISC_CPC,
+ .addr = (uint64_t)&cpc,
+ };
+
+ return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
+}
+
/**
* kvm_s390_mem_op:
* @addr: the logical start address in guest memory
@@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
{ KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
{ KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
{ KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
+ { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
};
static int query_cpu_feat(S390FeatBitmap features)
diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
index 6e52287..53f165f 100644
--- a/target/s390x/kvm_s390x.h
+++ b/target/s390x/kvm_s390x.h
@@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
+int kvm_s390_get_cpc(uint64_t *cpc);
+int kvm_s390_set_cpc(uint64_t cpc);
+bool kvm_s390_has_diag318(void);
void kvm_s390_enable_css_support(S390CPU *cpu);
int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
int vq, bool assign);
--
2.7.4
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-04 22:18 [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247 Collin Walling
@ 2018-12-04 22:26 ` Collin Walling
2018-12-05 11:07 ` Cornelia Huck
2018-12-04 23:50 ` [Qemu-devel] " no-reply
` (2 subsequent siblings)
3 siblings, 1 reply; 14+ messages in thread
From: Collin Walling @ 2018-12-04 22:26 UTC (permalink / raw)
To: borntraeger, cohuck, cotte, david, mimu, qemu-s390x, qemu-devel; +Cc: thuth
I screen-scraped the @ibm address again (Conny was the victim this time)
Reply to this thread to avoid any delivery failures.
On 12/4/18 5:18 PM, Collin Walling wrote:
> Add migration and reset support for diagnose 318. This is a new z14 GA2
> hardware feature, but we can provide guest support starting with the
> zEC12-full CPU model.
>
> Because new hardware introduces a new facility-availability byte in
> the Read SCP Info block, we lose one byte in the CPU entries list
> and must limit the maximum VCPUs to 247 (down from 248).
>
> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> ---
>
> Changelog
>
> RFC -> v1
> - introduced kvm stubs for set/get cpc
> - s/fac134/byte_134
> - moved diag318 vmstate description to diag.c
> - reduced S390_VCPU_MAX to 247
>
> hw/s390x/ipl.c | 3 +++
> hw/s390x/s390-virtio-ccw.c | 3 +++
> hw/s390x/sclp.c | 2 ++
> include/hw/s390x/sclp.h | 2 ++
> linux-headers/asm-s390/kvm.h | 5 ++++
> target/s390x/cpu.h | 2 +-
> target/s390x/cpu_features.c | 3 +++
> target/s390x/cpu_features.h | 1 +
> target/s390x/cpu_features_def.h | 3 +++
> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
> target/s390x/gen-features.c | 1 +
> target/s390x/internal.h | 4 +++-
> target/s390x/kvm-stub.c | 10 ++++++++
> target/s390x/kvm.c | 23 ++++++++++++++++++
> target/s390x/kvm_s390x.h | 3 +++
> 15 files changed, 116 insertions(+), 2 deletions(-)
>
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 21f64ad..6e3af65 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -27,6 +27,7 @@
> #include "qemu/cutils.h"
> #include "qemu/option.h"
> #include "exec/exec-all.h"
> +#include "internal.h"
>
> #define KERN_IMAGE_START 0x010000UL
> #define LINUX_MAGIC_ADDR 0x010008UL
> @@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
> ipl->compat_start_addr = ipl->start_addr;
> ipl->compat_bios_start_addr = ipl->bios_start_addr;
> qemu_register_reset(qdev_reset_all_fn, dev);
> +
> + diag318_register();
> error:
> error_propagate(errp, err);
> }
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index a0615a8..2c670fc 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -37,6 +37,7 @@
> #include "cpu_models.h"
> #include "hw/nmi.h"
> #include "hw/s390x/tod.h"
> +#include "internal.h"
>
> S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
> {
> @@ -357,6 +358,7 @@ static void s390_machine_reset(void)
> }
> subsystem_reset();
> s390_crypto_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
> case S390_RESET_LOAD_NORMAL:
> @@ -364,6 +366,7 @@ static void s390_machine_reset(void)
> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
> }
> subsystem_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> index 4510a80..183c627 100644
> --- a/hw/s390x/sclp.c
> +++ b/hw/s390x/sclp.c
> @@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
> read_info->conf_char);
> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> read_info->conf_char_ext);
> + /* Read Info byte 134 */
> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
>
> read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
> SCLP_HAS_IOA_RECONFIG);
> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> index f9db243..eb12ba2 100644
> --- a/include/hw/s390x/sclp.h
> +++ b/include/hw/s390x/sclp.h
> @@ -133,6 +133,8 @@ typedef struct ReadInfo {
> uint16_t highest_cpu;
> uint8_t _reserved5[124 - 122]; /* 122-123 */
> uint32_t hmfai;
> + uint8_t _reserved7[134 - 128]; /* 128-133 */
> + uint8_t byte_134[1];
> struct CPUEntry entries[0];
> } QEMU_PACKED ReadInfo;
>
> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
> index 0265482..8c206d2 100644
> --- a/linux-headers/asm-s390/kvm.h
> +++ b/linux-headers/asm-s390/kvm.h
> @@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
> #define KVM_S390_VM_CRYPTO 2
> #define KVM_S390_VM_CPU_MODEL 3
> #define KVM_S390_VM_MIGRATION 4
> +#define KVM_S390_VM_MISC 5
>
> /* kvm attributes for mem_ctrl */
> #define KVM_S390_VM_MEM_ENABLE_CMMA 0
> @@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
> #define KVM_S390_VM_CPU_FEAT_PFMFI 11
> #define KVM_S390_VM_CPU_FEAT_SIGPIF 12
> #define KVM_S390_VM_CPU_FEAT_KSS 13
> +#define KVM_S390_VM_CPU_FEAT_DIAG318 14
> struct kvm_s390_vm_cpu_feat {
> __u64 feat[16];
> };
> @@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
> #define KVM_S390_VM_MIGRATION_START 1
> #define KVM_S390_VM_MIGRATION_STATUS 2
>
> +/* kvm attributes for KVM_S390_VM_MISC */
> +#define KVM_S390_VM_MISC_CPC 0
> +
> /* for KVM_GET_REGS and KVM_SET_REGS */
> struct kvm_regs {
> /* general purpose regs for s390 */
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 8c2320e..594b4a4 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -52,7 +52,7 @@
>
> #define MMU_USER_IDX 0
>
> -#define S390_MAX_CPUS 248
> +#define S390_MAX_CPUS 247
>
> typedef struct PSW {
> uint64_t mask;
> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
> index 60cfeba..d05afa5 100644
> --- a/target/s390x/cpu_features.c
> +++ b/target/s390x/cpu_features.c
> @@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
> FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
> FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
>
> + /* SCLP SCCB Byte 134 */
> + FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
> +
> FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
> FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
> FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
> diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
> index effe790..e7248df 100644
> --- a/target/s390x/cpu_features.h
> +++ b/target/s390x/cpu_features.h
> @@ -23,6 +23,7 @@ typedef enum {
> S390_FEAT_TYPE_STFL,
> S390_FEAT_TYPE_SCLP_CONF_CHAR,
> S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> + S390_FEAT_TYPE_SCLP_BYTE_134,
> S390_FEAT_TYPE_SCLP_CPU,
> S390_FEAT_TYPE_MISC,
> S390_FEAT_TYPE_PLO,
> diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
> index 5fc7e7b..d99da1d 100644
> --- a/target/s390x/cpu_features_def.h
> +++ b/target/s390x/cpu_features_def.h
> @@ -109,6 +109,9 @@ typedef enum {
> S390_FEAT_SIE_PFMFI,
> S390_FEAT_SIE_IBS,
>
> + /* Read Info Byte 134 */
> + S390_FEAT_DIAG318,
> +
> /* Sclp Cpu */
> S390_FEAT_SIE_F2,
> S390_FEAT_SIE_SKEY,
> diff --git a/target/s390x/diag.c b/target/s390x/diag.c
> index acb0f3d..2207c08 100644
> --- a/target/s390x/diag.c
> +++ b/target/s390x/diag.c
> @@ -20,6 +20,8 @@
> #include "sysemu/cpus.h"
> #include "hw/s390x/ipl.h"
> #include "hw/s390x/s390-virtio-ccw.h"
> +#include "kvm_s390x.h"
> +#include "sysemu/kvm.h"
>
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
> {
> @@ -134,3 +136,54 @@ out:
> break;
> }
> }
> +
> +typedef struct Diag318Data {
> + uint64_t cpc;
> +} Diag318Data;
> +static Diag318Data diag318data;
> +
> +void diag318_reset(void)
> +{
> + if (s390_has_feat(S390_FEAT_DIAG318)) {
> + kvm_s390_set_cpc(0);
> + }
> +}
> +
> +static int diag318_post_load(void *opaque, int version_id)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_set_cpc(d->cpc);
> + return 0;
> +}
> +
> +static int diag318_pre_save(void *opaque)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_get_cpc(&d->cpc);
> + return 0;
> +}
> +
> +static bool diag318_needed(void *opaque)
> +{
> + return s390_has_feat(S390_FEAT_DIAG318);
> +}
> +
> +const VMStateDescription vmstate_diag318 = {
> + .name = "diag318",
> + .post_load = diag318_post_load,
> + .pre_save = diag318_pre_save,
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .needed = diag318_needed,
> + .fields = (VMStateField[]) {
> + VMSTATE_UINT64(cpc, Diag318Data),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> +void diag318_register(void)
> +{
> + vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
> +}
> \ No newline at end of file
> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
> index 70015ea..a3d1457 100644
> --- a/target/s390x/gen-features.c
> +++ b/target/s390x/gen-features.c
> @@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
> S390_FEAT_AP_QUERY_CONFIG_INFO,
> S390_FEAT_AP_FACILITIES_TEST,
> S390_FEAT_AP,
> + S390_FEAT_DIAG318,
> };
>
> static uint16_t full_GEN12_GA2[] = {
> diff --git a/target/s390x/internal.h b/target/s390x/internal.h
> index f2a771e..d53b1d0 100644
> --- a/target/s390x/internal.h
> +++ b/target/s390x/internal.h
> @@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
> target_ulong *addr, int *flags);
>
>
> -/* misc_helper.c */
> +/* diag.c */
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
> void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
> uintptr_t ra);
> +void diag318_register(void);
> +void diag318_reset(void);
>
>
> /* translate.c */
> diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
> index bf7795e..1f0bee3 100644
> --- a/target/s390x/kvm-stub.c
> +++ b/target/s390x/kvm-stub.c
> @@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
> void kvm_s390_restart_interrupt(S390CPU *cpu)
> {
> }
> +
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + return 0;
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + return 0;
> +}
> \ No newline at end of file
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 2ebf26a..9ed4cea 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
> return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> }
>
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)&cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> +}
> +
> /**
> * kvm_s390_mem_op:
> * @addr: the logical start address in guest memory
> @@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
> { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
> { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
> { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
> + { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
> };
>
> static int query_cpu_feat(S390FeatBitmap features)
> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
> index 6e52287..53f165f 100644
> --- a/target/s390x/kvm_s390x.h
> +++ b/target/s390x/kvm_s390x.h
> @@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
> int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
> +int kvm_s390_get_cpc(uint64_t *cpc);
> +int kvm_s390_set_cpc(uint64_t cpc);
> +bool kvm_s390_has_diag318(void);
> void kvm_s390_enable_css_support(S390CPU *cpu);
> int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
> int vq, bool assign);
>
--
Respectfully,
- Collin Walling
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-04 22:18 [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247 Collin Walling
2018-12-04 22:26 ` Collin Walling
@ 2018-12-04 23:50 ` no-reply
2018-12-05 8:26 ` David Hildenbrand
2018-12-05 8:29 ` [Qemu-devel] " Christian Borntraeger
3 siblings, 0 replies; 14+ messages in thread
From: no-reply @ 2018-12-04 23:50 UTC (permalink / raw)
To: walling
Cc: famz, borntraeger, cornelia.huck, cotte, david, mimu, qemu-s390x,
qemu-devel, thuth
Patchew URL: https://patchew.org/QEMU/1543961939-2419-1-git-send-email-walling@linux.ibm.com/
Hi,
This series seems to have some coding style problems. See output below for
more information:
Type: series
Subject: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
Message-id: 1543961939-2419-1-git-send-email-walling@linux.ibm.com
=== TEST SCRIPT BEGIN ===
#!/bin/bash
BASE=base
n=1
total=$(git log --oneline $BASE.. | wc -l)
failed=0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
commits="$(git log --format=%H --reverse $BASE..)"
for c in $commits; do
echo "Checking PATCH $n/$total: $(git log -n 1 --format=%s $c)..."
if ! git show $c --format=email | ./scripts/checkpatch.pl --mailback -; then
failed=1
echo
fi
n=$((n+1))
done
exit $failed
=== TEST SCRIPT END ===
Updating 3c8cf5a9c21ff8782164d1def7f44bd888713384
Switched to a new branch 'test'
b5218a7 s390: guest support for diagnose 318 and limit max VCPUs to 247
=== OUTPUT BEGIN ===
Checking PATCH 1/1: s390: guest support for diagnose 318 and limit max VCPUs to 247...
ERROR: adding a line without newline at end of file
#243: FILE: target/s390x/diag.c:189:
+}
ERROR: adding a line without newline at end of file
#292: FILE: target/s390x/kvm-stub.c:116:
+}
total: 2 errors, 0 warnings, 247 lines checked
Your patch has style problems, please review. If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===
Test command exited with code: 1
The full log is available at
http://patchew.org/logs/1543961939-2419-1-git-send-email-walling@linux.ibm.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [http://patchew.org/].
Please send your feedback to patchew-devel@redhat.com
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-04 22:18 [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247 Collin Walling
2018-12-04 22:26 ` Collin Walling
2018-12-04 23:50 ` [Qemu-devel] " no-reply
@ 2018-12-05 8:26 ` David Hildenbrand
2018-12-05 8:27 ` Christian Borntraeger
2018-12-05 8:29 ` [Qemu-devel] " Christian Borntraeger
3 siblings, 1 reply; 14+ messages in thread
From: David Hildenbrand @ 2018-12-05 8:26 UTC (permalink / raw)
To: Collin Walling, borntraeger, cornelia.huck, cotte, mimu,
qemu-s390x, qemu-devel
Cc: thuth
On 04.12.18 23:18, Collin Walling wrote:
> Add migration and reset support for diagnose 318. This is a new z14 GA2
> hardware feature, but we can provide guest support starting with the
> zEC12-full CPU model.
>
> Because new hardware introduces a new facility-availability byte in
> the Read SCP Info block, we lose one byte in the CPU entries list
> and must limit the maximum VCPUs to 247 (down from 248).
This could break setups that upgrade/migrate. At least forward migration
can be broken. Do we care about that?
Can you split off
1. linux-header changes
2. CPU model changes? (introduction and definition of new feature, but
not when it is used?)
>
> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> ---
>
> Changelog
>
> RFC -> v1
> - introduced kvm stubs for set/get cpc
> - s/fac134/byte_134
> - moved diag318 vmstate description to diag.c
> - reduced S390_VCPU_MAX to 247
>
> hw/s390x/ipl.c | 3 +++
> hw/s390x/s390-virtio-ccw.c | 3 +++
> hw/s390x/sclp.c | 2 ++
> include/hw/s390x/sclp.h | 2 ++
> linux-headers/asm-s390/kvm.h | 5 ++++
> target/s390x/cpu.h | 2 +-
> target/s390x/cpu_features.c | 3 +++
> target/s390x/cpu_features.h | 1 +
> target/s390x/cpu_features_def.h | 3 +++
> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
> target/s390x/gen-features.c | 1 +
> target/s390x/internal.h | 4 +++-
> target/s390x/kvm-stub.c | 10 ++++++++
> target/s390x/kvm.c | 23 ++++++++++++++++++
> target/s390x/kvm_s390x.h | 3 +++
> 15 files changed, 116 insertions(+), 2 deletions(-)
>
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 21f64ad..6e3af65 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -27,6 +27,7 @@
> #include "qemu/cutils.h"
> #include "qemu/option.h"
> #include "exec/exec-all.h"
> +#include "internal.h"
>
> #define KERN_IMAGE_START 0x010000UL
> #define LINUX_MAGIC_ADDR 0x010008UL
> @@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
> ipl->compat_start_addr = ipl->start_addr;
> ipl->compat_bios_start_addr = ipl->bios_start_addr;
> qemu_register_reset(qdev_reset_all_fn, dev);
> +
> + diag318_register();
> error:
> error_propagate(errp, err);
> }
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index a0615a8..2c670fc 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -37,6 +37,7 @@
> #include "cpu_models.h"
> #include "hw/nmi.h"
> #include "hw/s390x/tod.h"
> +#include "internal.h"
>
> S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
> {
> @@ -357,6 +358,7 @@ static void s390_machine_reset(void)
> }
> subsystem_reset();
> s390_crypto_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
> case S390_RESET_LOAD_NORMAL:
> @@ -364,6 +366,7 @@ static void s390_machine_reset(void)
> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
> }
> subsystem_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
Why don't we have to reset this during reipl or external reset
("system_reset")?
> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> index 4510a80..183c627 100644
> --- a/hw/s390x/sclp.c
> +++ b/hw/s390x/sclp.c
> @@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
> read_info->conf_char);
> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> read_info->conf_char_ext);
> + /* Read Info byte 134 */
> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
>
> read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
> SCLP_HAS_IOA_RECONFIG);
> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> index f9db243..eb12ba2 100644
> --- a/include/hw/s390x/sclp.h
> +++ b/include/hw/s390x/sclp.h
> @@ -133,6 +133,8 @@ typedef struct ReadInfo {
> uint16_t highest_cpu;
> uint8_t _reserved5[124 - 122]; /* 122-123 */
> uint32_t hmfai;
> + uint8_t _reserved7[134 - 128]; /* 128-133 */
> + uint8_t byte_134[1];
> struct CPUEntry entries[0];
> } QEMU_PACKED ReadInfo;
>
> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
> index 0265482..8c206d2 100644
> --- a/linux-headers/asm-s390/kvm.h
> +++ b/linux-headers/asm-s390/kvm.h
> @@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
> #define KVM_S390_VM_CRYPTO 2
> #define KVM_S390_VM_CPU_MODEL 3
> #define KVM_S390_VM_MIGRATION 4
> +#define KVM_S390_VM_MISC 5
>
> /* kvm attributes for mem_ctrl */
> #define KVM_S390_VM_MEM_ENABLE_CMMA 0
> @@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
> #define KVM_S390_VM_CPU_FEAT_PFMFI 11
> #define KVM_S390_VM_CPU_FEAT_SIGPIF 12
> #define KVM_S390_VM_CPU_FEAT_KSS 13
> +#define KVM_S390_VM_CPU_FEAT_DIAG318 14
> struct kvm_s390_vm_cpu_feat {
> __u64 feat[16];
> };
> @@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
> #define KVM_S390_VM_MIGRATION_START 1
> #define KVM_S390_VM_MIGRATION_STATUS 2
>
> +/* kvm attributes for KVM_S390_VM_MISC */
> +#define KVM_S390_VM_MISC_CPC 0
> +
> /* for KVM_GET_REGS and KVM_SET_REGS */
> struct kvm_regs {
> /* general purpose regs for s390 */
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 8c2320e..594b4a4 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -52,7 +52,7 @@
>
> #define MMU_USER_IDX 0
>
> -#define S390_MAX_CPUS 248
> +#define S390_MAX_CPUS 247
>
> typedef struct PSW {
> uint64_t mask;
> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
> index 60cfeba..d05afa5 100644
> --- a/target/s390x/cpu_features.c
> +++ b/target/s390x/cpu_features.c
> @@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
> FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
> FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
>
> + /* SCLP SCCB Byte 134 */
> + FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
Is this bit "SIE: Diagnose 318" or "SIE: SCLP Byte 14" ?
Or both?
> +
> FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
> FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
> FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
> diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
> index effe790..e7248df 100644
> --- a/target/s390x/cpu_features.h
> +++ b/target/s390x/cpu_features.h
> @@ -23,6 +23,7 @@ typedef enum {
> S390_FEAT_TYPE_STFL,
> S390_FEAT_TYPE_SCLP_CONF_CHAR,
> S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> + S390_FEAT_TYPE_SCLP_BYTE_134,
> S390_FEAT_TYPE_SCLP_CPU,
> S390_FEAT_TYPE_MISC,
> S390_FEAT_TYPE_PLO,
> diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
> index 5fc7e7b..d99da1d 100644
> --- a/target/s390x/cpu_features_def.h
> +++ b/target/s390x/cpu_features_def.h
> @@ -109,6 +109,9 @@ typedef enum {
> S390_FEAT_SIE_PFMFI,
> S390_FEAT_SIE_IBS,
>
> + /* Read Info Byte 134 */
> + S390_FEAT_DIAG318,
> +
> /* Sclp Cpu */
> S390_FEAT_SIE_F2,
> S390_FEAT_SIE_SKEY,
> diff --git a/target/s390x/diag.c b/target/s390x/diag.c
> index acb0f3d..2207c08 100644
> --- a/target/s390x/diag.c
> +++ b/target/s390x/diag.c
> @@ -20,6 +20,8 @@
> #include "sysemu/cpus.h"
> #include "hw/s390x/ipl.h"
> #include "hw/s390x/s390-virtio-ccw.h"
> +#include "kvm_s390x.h"
> +#include "sysemu/kvm.h"
>
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
> {
> @@ -134,3 +136,54 @@ out:
> break;
> }
> }
> +
> +typedef struct Diag318Data {
> + uint64_t cpc;
> +} Diag318Data;
> +static Diag318Data diag318data;
> +
> +void diag318_reset(void)
please name this function
s390_diag318_reset()
or even (my preference, as we actually reset the CPC value)
s390_cpc_reset()
> +{
> + if (s390_has_feat(S390_FEAT_DIAG318)) {
> + kvm_s390_set_cpc(0);
> + }
> +}
> +
> +static int diag318_post_load(void *opaque, int version_id)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_set_cpc(d->cpc);
> + return 0;
> +}
> +
> +static int diag318_pre_save(void *opaque)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_get_cpc(&d->cpc);
> + return 0;
> +}
> +
> +static bool diag318_needed(void *opaque)
> +{
> + return s390_has_feat(S390_FEAT_DIAG318);
> +}
> +
> +const VMStateDescription vmstate_diag318 = {
> + .name = "diag318",
> + .post_load = diag318_post_load,
> + .pre_save = diag318_pre_save,
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .needed = diag318_needed,
> + .fields = (VMStateField[]) {
> + VMSTATE_UINT64(cpc, Diag318Data),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> +void diag318_register(void)
That somehow does not feel right nor look nice.
This code smells like it should go into hw/s390x/ ... as it is a machine
specific property. Registering the vmstate can than be done in a nicer
way than via this function.
> +{
> + vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
> +}
> \ No newline at end of file
> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
> index 70015ea..a3d1457 100644
> --- a/target/s390x/gen-features.c
> +++ b/target/s390x/gen-features.c
> @@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
> S390_FEAT_AP_QUERY_CONFIG_INFO,
> S390_FEAT_AP_FACILITIES_TEST,
> S390_FEAT_AP,
> + S390_FEAT_DIAG318,
> };
>
> static uint16_t full_GEN12_GA2[] = {
> diff --git a/target/s390x/internal.h b/target/s390x/internal.h
> index f2a771e..d53b1d0 100644
> --- a/target/s390x/internal.h
> +++ b/target/s390x/internal.h
> @@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
> target_ulong *addr, int *flags);
>
>
> -/* misc_helper.c */
> +/* diag.c */
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
> void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
> uintptr_t ra);
> +void diag318_register(void);
> +void diag318_reset(void);
>
>
> /* translate.c */
> diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
> index bf7795e..1f0bee3 100644
> --- a/target/s390x/kvm-stub.c
> +++ b/target/s390x/kvm-stub.c
> @@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
> void kvm_s390_restart_interrupt(S390CPU *cpu)
> {
> }
> +
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + return 0;
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + return 0;
> +}
> \ No newline at end of file
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 2ebf26a..9ed4cea 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
> return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> }
>
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)&cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> +}
> +
> /**
> * kvm_s390_mem_op:
> * @addr: the logical start address in guest memory
> @@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
> { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
> { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
> { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
> + { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
> };
>
> static int query_cpu_feat(S390FeatBitmap features)
> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
> index 6e52287..53f165f 100644
> --- a/target/s390x/kvm_s390x.h
> +++ b/target/s390x/kvm_s390x.h
> @@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
> int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
> +int kvm_s390_get_cpc(uint64_t *cpc);
> +int kvm_s390_set_cpc(uint64_t cpc);
> +bool kvm_s390_has_diag318(void);
> void kvm_s390_enable_css_support(S390CPU *cpu);
> int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
> int vq, bool assign);
>
--
Thanks,
David / dhildenb
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 8:26 ` David Hildenbrand
@ 2018-12-05 8:27 ` Christian Borntraeger
2018-12-05 11:54 ` [Qemu-devel] [qemu-s390x] " Cornelia Huck
0 siblings, 1 reply; 14+ messages in thread
From: Christian Borntraeger @ 2018-12-05 8:27 UTC (permalink / raw)
To: David Hildenbrand, Collin Walling, cornelia.huck, cotte, mimu,
qemu-s390x, qemu-devel
Cc: thuth
On 05.12.2018 09:26, David Hildenbrand wrote:
> On 04.12.18 23:18, Collin Walling wrote:
>> Add migration and reset support for diagnose 318. This is a new z14 GA2
>> hardware feature, but we can provide guest support starting with the
>> zEC12-full CPU model.
>>
>> Because new hardware introduces a new facility-availability byte in
>> the Read SCP Info block, we lose one byte in the CPU entries list
>> and must limit the maximum VCPUs to 247 (down from 248).
>
> This could break setups that upgrade/migrate. At least forward migration
> can be broken. Do we care about that?
Can we maybe bind this feature and the cpu limit to the 4.0 machine?
>
> Can you split off
>
> 1. linux-header changes
> 2. CPU model changes? (introduction and definition of new feature, but
> not when it is used?)
>
>>
>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>> ---
>>
>> Changelog
>>
>> RFC -> v1
>> - introduced kvm stubs for set/get cpc
>> - s/fac134/byte_134
>> - moved diag318 vmstate description to diag.c
>> - reduced S390_VCPU_MAX to 247
>>
>> hw/s390x/ipl.c | 3 +++
>> hw/s390x/s390-virtio-ccw.c | 3 +++
>> hw/s390x/sclp.c | 2 ++
>> include/hw/s390x/sclp.h | 2 ++
>> linux-headers/asm-s390/kvm.h | 5 ++++
>> target/s390x/cpu.h | 2 +-
>> target/s390x/cpu_features.c | 3 +++
>> target/s390x/cpu_features.h | 1 +
>> target/s390x/cpu_features_def.h | 3 +++
>> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
>> target/s390x/gen-features.c | 1 +
>> target/s390x/internal.h | 4 +++-
>> target/s390x/kvm-stub.c | 10 ++++++++
>> target/s390x/kvm.c | 23 ++++++++++++++++++
>> target/s390x/kvm_s390x.h | 3 +++
>> 15 files changed, 116 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
>> index 21f64ad..6e3af65 100644
>> --- a/hw/s390x/ipl.c
>> +++ b/hw/s390x/ipl.c
>> @@ -27,6 +27,7 @@
>> #include "qemu/cutils.h"
>> #include "qemu/option.h"
>> #include "exec/exec-all.h"
>> +#include "internal.h"
>>
>> #define KERN_IMAGE_START 0x010000UL
>> #define LINUX_MAGIC_ADDR 0x010008UL
>> @@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
>> ipl->compat_start_addr = ipl->start_addr;
>> ipl->compat_bios_start_addr = ipl->bios_start_addr;
>> qemu_register_reset(qdev_reset_all_fn, dev);
>> +
>> + diag318_register();
>> error:
>> error_propagate(errp, err);
>> }
>> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
>> index a0615a8..2c670fc 100644
>> --- a/hw/s390x/s390-virtio-ccw.c
>> +++ b/hw/s390x/s390-virtio-ccw.c
>> @@ -37,6 +37,7 @@
>> #include "cpu_models.h"
>> #include "hw/nmi.h"
>> #include "hw/s390x/tod.h"
>> +#include "internal.h"
>>
>> S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
>> {
>> @@ -357,6 +358,7 @@ static void s390_machine_reset(void)
>> }
>> subsystem_reset();
>> s390_crypto_reset();
>> + diag318_reset();
>> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
>> break;
>> case S390_RESET_LOAD_NORMAL:
>> @@ -364,6 +366,7 @@ static void s390_machine_reset(void)
>> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
>> }
>> subsystem_reset();
>> + diag318_reset();
>> run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
>> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
>> break;
>
> Why don't we have to reset this during reipl or external reset
> ("system_reset")?
>
>
>> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
>> index 4510a80..183c627 100644
>> --- a/hw/s390x/sclp.c
>> +++ b/hw/s390x/sclp.c
>> @@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
>> read_info->conf_char);
>> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
>> read_info->conf_char_ext);
>> + /* Read Info byte 134 */
>> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
>>
>> read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
>> SCLP_HAS_IOA_RECONFIG);
>> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
>> index f9db243..eb12ba2 100644
>> --- a/include/hw/s390x/sclp.h
>> +++ b/include/hw/s390x/sclp.h
>> @@ -133,6 +133,8 @@ typedef struct ReadInfo {
>> uint16_t highest_cpu;
>> uint8_t _reserved5[124 - 122]; /* 122-123 */
>> uint32_t hmfai;
>> + uint8_t _reserved7[134 - 128]; /* 128-133 */
>> + uint8_t byte_134[1];
>> struct CPUEntry entries[0];
>> } QEMU_PACKED ReadInfo;
>>
>> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
>> index 0265482..8c206d2 100644
>> --- a/linux-headers/asm-s390/kvm.h
>> +++ b/linux-headers/asm-s390/kvm.h
>> @@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
>> #define KVM_S390_VM_CRYPTO 2
>> #define KVM_S390_VM_CPU_MODEL 3
>> #define KVM_S390_VM_MIGRATION 4
>> +#define KVM_S390_VM_MISC 5
>>
>> /* kvm attributes for mem_ctrl */
>> #define KVM_S390_VM_MEM_ENABLE_CMMA 0
>> @@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
>> #define KVM_S390_VM_CPU_FEAT_PFMFI 11
>> #define KVM_S390_VM_CPU_FEAT_SIGPIF 12
>> #define KVM_S390_VM_CPU_FEAT_KSS 13
>> +#define KVM_S390_VM_CPU_FEAT_DIAG318 14
>> struct kvm_s390_vm_cpu_feat {
>> __u64 feat[16];
>> };
>> @@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
>> #define KVM_S390_VM_MIGRATION_START 1
>> #define KVM_S390_VM_MIGRATION_STATUS 2
>>
>> +/* kvm attributes for KVM_S390_VM_MISC */
>> +#define KVM_S390_VM_MISC_CPC 0
>> +
>> /* for KVM_GET_REGS and KVM_SET_REGS */
>> struct kvm_regs {
>> /* general purpose regs for s390 */
>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>> index 8c2320e..594b4a4 100644
>> --- a/target/s390x/cpu.h
>> +++ b/target/s390x/cpu.h
>> @@ -52,7 +52,7 @@
>>
>> #define MMU_USER_IDX 0
>>
>> -#define S390_MAX_CPUS 248
>> +#define S390_MAX_CPUS 247
>>
>> typedef struct PSW {
>> uint64_t mask;
>> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
>> index 60cfeba..d05afa5 100644
>> --- a/target/s390x/cpu_features.c
>> +++ b/target/s390x/cpu_features.c
>> @@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
>> FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
>> FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
>>
>> + /* SCLP SCCB Byte 134 */
>> + FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
>
> Is this bit "SIE: Diagnose 318" or "SIE: SCLP Byte 14" ?
>
> Or both?
>
>> +
>> FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
>> FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
>> FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
>> diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
>> index effe790..e7248df 100644
>> --- a/target/s390x/cpu_features.h
>> +++ b/target/s390x/cpu_features.h
>> @@ -23,6 +23,7 @@ typedef enum {
>> S390_FEAT_TYPE_STFL,
>> S390_FEAT_TYPE_SCLP_CONF_CHAR,
>> S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
>> + S390_FEAT_TYPE_SCLP_BYTE_134,
>> S390_FEAT_TYPE_SCLP_CPU,
>> S390_FEAT_TYPE_MISC,
>> S390_FEAT_TYPE_PLO,
>> diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
>> index 5fc7e7b..d99da1d 100644
>> --- a/target/s390x/cpu_features_def.h
>> +++ b/target/s390x/cpu_features_def.h
>> @@ -109,6 +109,9 @@ typedef enum {
>> S390_FEAT_SIE_PFMFI,
>> S390_FEAT_SIE_IBS,
>>
>> + /* Read Info Byte 134 */
>> + S390_FEAT_DIAG318,
>> +
>> /* Sclp Cpu */
>> S390_FEAT_SIE_F2,
>> S390_FEAT_SIE_SKEY,
>> diff --git a/target/s390x/diag.c b/target/s390x/diag.c
>> index acb0f3d..2207c08 100644
>> --- a/target/s390x/diag.c
>> +++ b/target/s390x/diag.c
>> @@ -20,6 +20,8 @@
>> #include "sysemu/cpus.h"
>> #include "hw/s390x/ipl.h"
>> #include "hw/s390x/s390-virtio-ccw.h"
>> +#include "kvm_s390x.h"
>> +#include "sysemu/kvm.h"
>>
>> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
>> {
>> @@ -134,3 +136,54 @@ out:
>> break;
>> }
>> }
>> +
>> +typedef struct Diag318Data {
>> + uint64_t cpc;
>> +} Diag318Data;
>> +static Diag318Data diag318data;
>> +
>> +void diag318_reset(void)
>
> please name this function
>
> s390_diag318_reset()
>
> or even (my preference, as we actually reset the CPC value)
>
> s390_cpc_reset()
>
>> +{
>> + if (s390_has_feat(S390_FEAT_DIAG318)) {
>> + kvm_s390_set_cpc(0);
>> + }
>> +}
>> +
>> +static int diag318_post_load(void *opaque, int version_id)
>> +{
>> + Diag318Data *d = opaque;
>> +
>> + kvm_s390_set_cpc(d->cpc);
>> + return 0;
>> +}
>> +
>> +static int diag318_pre_save(void *opaque)
>> +{
>> + Diag318Data *d = opaque;
>> +
>> + kvm_s390_get_cpc(&d->cpc);
>> + return 0;
>> +}
>> +
>> +static bool diag318_needed(void *opaque)
>> +{
>> + return s390_has_feat(S390_FEAT_DIAG318);
>> +}
>> +
>> +const VMStateDescription vmstate_diag318 = {
>> + .name = "diag318",
>> + .post_load = diag318_post_load,
>> + .pre_save = diag318_pre_save,
>> + .version_id = 1,
>> + .minimum_version_id = 1,
>> + .needed = diag318_needed,
>> + .fields = (VMStateField[]) {
>> + VMSTATE_UINT64(cpc, Diag318Data),
>> + VMSTATE_END_OF_LIST()
>> + }
>> +};
>> +
>> +void diag318_register(void)
>
> That somehow does not feel right nor look nice.
>
> This code smells like it should go into hw/s390x/ ... as it is a machine
> specific property. Registering the vmstate can than be done in a nicer
> way than via this function.
>
>> +{
>> + vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
>> +}
>> \ No newline at end of file
>> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
>> index 70015ea..a3d1457 100644
>> --- a/target/s390x/gen-features.c
>> +++ b/target/s390x/gen-features.c
>> @@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
>> S390_FEAT_AP_QUERY_CONFIG_INFO,
>> S390_FEAT_AP_FACILITIES_TEST,
>> S390_FEAT_AP,
>> + S390_FEAT_DIAG318,
>> };
>>
>> static uint16_t full_GEN12_GA2[] = {
>> diff --git a/target/s390x/internal.h b/target/s390x/internal.h
>> index f2a771e..d53b1d0 100644
>> --- a/target/s390x/internal.h
>> +++ b/target/s390x/internal.h
>> @@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
>> target_ulong *addr, int *flags);
>>
>>
>> -/* misc_helper.c */
>> +/* diag.c */
>> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
>> void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
>> uintptr_t ra);
>> +void diag318_register(void);
>> +void diag318_reset(void);
>>
>>
>> /* translate.c */
>> diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
>> index bf7795e..1f0bee3 100644
>> --- a/target/s390x/kvm-stub.c
>> +++ b/target/s390x/kvm-stub.c
>> @@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
>> void kvm_s390_restart_interrupt(S390CPU *cpu)
>> {
>> }
>> +
>> +int kvm_s390_get_cpc(uint64_t *cpc)
>> +{
>> + return 0;
>> +}
>> +
>> +int kvm_s390_set_cpc(uint64_t cpc)
>> +{
>> + return 0;
>> +}
>> \ No newline at end of file
>> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
>> index 2ebf26a..9ed4cea 100644
>> --- a/target/s390x/kvm.c
>> +++ b/target/s390x/kvm.c
>> @@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
>> return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
>> }
>>
>> +int kvm_s390_get_cpc(uint64_t *cpc)
>> +{
>> + struct kvm_device_attr attr = {
>> + .group = KVM_S390_VM_MISC,
>> + .attr = KVM_S390_VM_MISC_CPC,
>> + .addr = (uint64_t)cpc,
>> + };
>> +
>> + return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
>> +}
>> +
>> +int kvm_s390_set_cpc(uint64_t cpc)
>> +{
>> + struct kvm_device_attr attr = {
>> + .group = KVM_S390_VM_MISC,
>> + .attr = KVM_S390_VM_MISC_CPC,
>> + .addr = (uint64_t)&cpc,
>> + };
>> +
>> + return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
>> +}
>> +
>> /**
>> * kvm_s390_mem_op:
>> * @addr: the logical start address in guest memory
>> @@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
>> { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
>> { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
>> { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
>> + { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
>> };
>>
>> static int query_cpu_feat(S390FeatBitmap features)
>> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
>> index 6e52287..53f165f 100644
>> --- a/target/s390x/kvm_s390x.h
>> +++ b/target/s390x/kvm_s390x.h
>> @@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
>> int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
>> int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
>> int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
>> +int kvm_s390_get_cpc(uint64_t *cpc);
>> +int kvm_s390_set_cpc(uint64_t cpc);
>> +bool kvm_s390_has_diag318(void);
>> void kvm_s390_enable_css_support(S390CPU *cpu);
>> int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
>> int vq, bool assign);
>>
>
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-04 22:18 [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247 Collin Walling
` (2 preceding siblings ...)
2018-12-05 8:26 ` David Hildenbrand
@ 2018-12-05 8:29 ` Christian Borntraeger
2018-12-05 14:59 ` Collin Walling
3 siblings, 1 reply; 14+ messages in thread
From: Christian Borntraeger @ 2018-12-05 8:29 UTC (permalink / raw)
To: Collin Walling, Cornelia Huck, david, mimu, qemu-s390x,
qemu-devel; +Cc: thuth
You should clearly review your email list.....
Adding the "new" Conny, removing Carsten.
On 04.12.2018 23:18, Collin Walling wrote:
> Add migration and reset support for diagnose 318. This is a new z14 GA2
> hardware feature, but we can provide guest support starting with the
> zEC12-full CPU model.
>
> Because new hardware introduces a new facility-availability byte in
> the Read SCP Info block, we lose one byte in the CPU entries list
> and must limit the maximum VCPUs to 247 (down from 248).
>
> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> ---
>
> Changelog
>
> RFC -> v1
> - introduced kvm stubs for set/get cpc
> - s/fac134/byte_134
> - moved diag318 vmstate description to diag.c
> - reduced S390_VCPU_MAX to 247
>
> hw/s390x/ipl.c | 3 +++
> hw/s390x/s390-virtio-ccw.c | 3 +++
> hw/s390x/sclp.c | 2 ++
> include/hw/s390x/sclp.h | 2 ++
> linux-headers/asm-s390/kvm.h | 5 ++++
> target/s390x/cpu.h | 2 +-
> target/s390x/cpu_features.c | 3 +++
> target/s390x/cpu_features.h | 1 +
> target/s390x/cpu_features_def.h | 3 +++
> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
> target/s390x/gen-features.c | 1 +
> target/s390x/internal.h | 4 +++-
> target/s390x/kvm-stub.c | 10 ++++++++
> target/s390x/kvm.c | 23 ++++++++++++++++++
> target/s390x/kvm_s390x.h | 3 +++
> 15 files changed, 116 insertions(+), 2 deletions(-)
>
> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
> index 21f64ad..6e3af65 100644
> --- a/hw/s390x/ipl.c
> +++ b/hw/s390x/ipl.c
> @@ -27,6 +27,7 @@
> #include "qemu/cutils.h"
> #include "qemu/option.h"
> #include "exec/exec-all.h"
> +#include "internal.h"
>
> #define KERN_IMAGE_START 0x010000UL
> #define LINUX_MAGIC_ADDR 0x010008UL
> @@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
> ipl->compat_start_addr = ipl->start_addr;
> ipl->compat_bios_start_addr = ipl->bios_start_addr;
> qemu_register_reset(qdev_reset_all_fn, dev);
> +
> + diag318_register();
> error:
> error_propagate(errp, err);
> }
> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
> index a0615a8..2c670fc 100644
> --- a/hw/s390x/s390-virtio-ccw.c
> +++ b/hw/s390x/s390-virtio-ccw.c
> @@ -37,6 +37,7 @@
> #include "cpu_models.h"
> #include "hw/nmi.h"
> #include "hw/s390x/tod.h"
> +#include "internal.h"
>
> S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
> {
> @@ -357,6 +358,7 @@ static void s390_machine_reset(void)
> }
> subsystem_reset();
> s390_crypto_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
> case S390_RESET_LOAD_NORMAL:
> @@ -364,6 +366,7 @@ static void s390_machine_reset(void)
> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
> }
> subsystem_reset();
> + diag318_reset();
> run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
> break;
> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
> index 4510a80..183c627 100644
> --- a/hw/s390x/sclp.c
> +++ b/hw/s390x/sclp.c
> @@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
> read_info->conf_char);
> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> read_info->conf_char_ext);
> + /* Read Info byte 134 */
> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
>
> read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
> SCLP_HAS_IOA_RECONFIG);
> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
> index f9db243..eb12ba2 100644
> --- a/include/hw/s390x/sclp.h
> +++ b/include/hw/s390x/sclp.h
> @@ -133,6 +133,8 @@ typedef struct ReadInfo {
> uint16_t highest_cpu;
> uint8_t _reserved5[124 - 122]; /* 122-123 */
> uint32_t hmfai;
> + uint8_t _reserved7[134 - 128]; /* 128-133 */
> + uint8_t byte_134[1];
> struct CPUEntry entries[0];
> } QEMU_PACKED ReadInfo;
>
> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
> index 0265482..8c206d2 100644
> --- a/linux-headers/asm-s390/kvm.h
> +++ b/linux-headers/asm-s390/kvm.h
> @@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
> #define KVM_S390_VM_CRYPTO 2
> #define KVM_S390_VM_CPU_MODEL 3
> #define KVM_S390_VM_MIGRATION 4
> +#define KVM_S390_VM_MISC 5
>
> /* kvm attributes for mem_ctrl */
> #define KVM_S390_VM_MEM_ENABLE_CMMA 0
> @@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
> #define KVM_S390_VM_CPU_FEAT_PFMFI 11
> #define KVM_S390_VM_CPU_FEAT_SIGPIF 12
> #define KVM_S390_VM_CPU_FEAT_KSS 13
> +#define KVM_S390_VM_CPU_FEAT_DIAG318 14
> struct kvm_s390_vm_cpu_feat {
> __u64 feat[16];
> };
> @@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
> #define KVM_S390_VM_MIGRATION_START 1
> #define KVM_S390_VM_MIGRATION_STATUS 2
>
> +/* kvm attributes for KVM_S390_VM_MISC */
> +#define KVM_S390_VM_MISC_CPC 0
> +
> /* for KVM_GET_REGS and KVM_SET_REGS */
> struct kvm_regs {
> /* general purpose regs for s390 */
> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
> index 8c2320e..594b4a4 100644
> --- a/target/s390x/cpu.h
> +++ b/target/s390x/cpu.h
> @@ -52,7 +52,7 @@
>
> #define MMU_USER_IDX 0
>
> -#define S390_MAX_CPUS 248
> +#define S390_MAX_CPUS 247
>
> typedef struct PSW {
> uint64_t mask;
> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
> index 60cfeba..d05afa5 100644
> --- a/target/s390x/cpu_features.c
> +++ b/target/s390x/cpu_features.c
> @@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
> FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
> FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
>
> + /* SCLP SCCB Byte 134 */
> + FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
> +
> FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
> FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
> FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
> diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
> index effe790..e7248df 100644
> --- a/target/s390x/cpu_features.h
> +++ b/target/s390x/cpu_features.h
> @@ -23,6 +23,7 @@ typedef enum {
> S390_FEAT_TYPE_STFL,
> S390_FEAT_TYPE_SCLP_CONF_CHAR,
> S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
> + S390_FEAT_TYPE_SCLP_BYTE_134,
> S390_FEAT_TYPE_SCLP_CPU,
> S390_FEAT_TYPE_MISC,
> S390_FEAT_TYPE_PLO,
> diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
> index 5fc7e7b..d99da1d 100644
> --- a/target/s390x/cpu_features_def.h
> +++ b/target/s390x/cpu_features_def.h
> @@ -109,6 +109,9 @@ typedef enum {
> S390_FEAT_SIE_PFMFI,
> S390_FEAT_SIE_IBS,
>
> + /* Read Info Byte 134 */
> + S390_FEAT_DIAG318,
> +
> /* Sclp Cpu */
> S390_FEAT_SIE_F2,
> S390_FEAT_SIE_SKEY,
> diff --git a/target/s390x/diag.c b/target/s390x/diag.c
> index acb0f3d..2207c08 100644
> --- a/target/s390x/diag.c
> +++ b/target/s390x/diag.c
> @@ -20,6 +20,8 @@
> #include "sysemu/cpus.h"
> #include "hw/s390x/ipl.h"
> #include "hw/s390x/s390-virtio-ccw.h"
> +#include "kvm_s390x.h"
> +#include "sysemu/kvm.h"
>
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
> {
> @@ -134,3 +136,54 @@ out:
> break;
> }
> }
> +
> +typedef struct Diag318Data {
> + uint64_t cpc;
> +} Diag318Data;
> +static Diag318Data diag318data;
> +
> +void diag318_reset(void)
> +{
> + if (s390_has_feat(S390_FEAT_DIAG318)) {
> + kvm_s390_set_cpc(0);
> + }
> +}
> +
> +static int diag318_post_load(void *opaque, int version_id)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_set_cpc(d->cpc);
> + return 0;
> +}
> +
> +static int diag318_pre_save(void *opaque)
> +{
> + Diag318Data *d = opaque;
> +
> + kvm_s390_get_cpc(&d->cpc);
> + return 0;
> +}
> +
> +static bool diag318_needed(void *opaque)
> +{
> + return s390_has_feat(S390_FEAT_DIAG318);
> +}
> +
> +const VMStateDescription vmstate_diag318 = {
> + .name = "diag318",
> + .post_load = diag318_post_load,
> + .pre_save = diag318_pre_save,
> + .version_id = 1,
> + .minimum_version_id = 1,
> + .needed = diag318_needed,
> + .fields = (VMStateField[]) {
> + VMSTATE_UINT64(cpc, Diag318Data),
> + VMSTATE_END_OF_LIST()
> + }
> +};
> +
> +void diag318_register(void)
> +{
> + vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
> +}
> \ No newline at end of file
> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
> index 70015ea..a3d1457 100644
> --- a/target/s390x/gen-features.c
> +++ b/target/s390x/gen-features.c
> @@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
> S390_FEAT_AP_QUERY_CONFIG_INFO,
> S390_FEAT_AP_FACILITIES_TEST,
> S390_FEAT_AP,
> + S390_FEAT_DIAG318,
> };
>
> static uint16_t full_GEN12_GA2[] = {
> diff --git a/target/s390x/internal.h b/target/s390x/internal.h
> index f2a771e..d53b1d0 100644
> --- a/target/s390x/internal.h
> +++ b/target/s390x/internal.h
> @@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
> target_ulong *addr, int *flags);
>
>
> -/* misc_helper.c */
> +/* diag.c */
> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
> void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
> uintptr_t ra);
> +void diag318_register(void);
> +void diag318_reset(void);
>
>
> /* translate.c */
> diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
> index bf7795e..1f0bee3 100644
> --- a/target/s390x/kvm-stub.c
> +++ b/target/s390x/kvm-stub.c
> @@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
> void kvm_s390_restart_interrupt(S390CPU *cpu)
> {
> }
> +
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + return 0;
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + return 0;
> +}
> \ No newline at end of file
> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
> index 2ebf26a..9ed4cea 100644
> --- a/target/s390x/kvm.c
> +++ b/target/s390x/kvm.c
> @@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
> return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> }
>
> +int kvm_s390_get_cpc(uint64_t *cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
> +}
> +
> +int kvm_s390_set_cpc(uint64_t cpc)
> +{
> + struct kvm_device_attr attr = {
> + .group = KVM_S390_VM_MISC,
> + .attr = KVM_S390_VM_MISC_CPC,
> + .addr = (uint64_t)&cpc,
> + };
> +
> + return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
> +}
> +
> /**
> * kvm_s390_mem_op:
> * @addr: the logical start address in guest memory
> @@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
> { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
> { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
> { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
> + { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
> };
>
> static int query_cpu_feat(S390FeatBitmap features)
> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
> index 6e52287..53f165f 100644
> --- a/target/s390x/kvm_s390x.h
> +++ b/target/s390x/kvm_s390x.h
> @@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
> int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
> int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
> +int kvm_s390_get_cpc(uint64_t *cpc);
> +int kvm_s390_set_cpc(uint64_t cpc);
> +bool kvm_s390_has_diag318(void);
> void kvm_s390_enable_css_support(S390CPU *cpu);
> int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
> int vq, bool assign);
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-04 22:26 ` Collin Walling
@ 2018-12-05 11:07 ` Cornelia Huck
2018-12-05 14:52 ` [Qemu-devel] [qemu-s390x] " Collin Walling
0 siblings, 1 reply; 14+ messages in thread
From: Cornelia Huck @ 2018-12-05 11:07 UTC (permalink / raw)
To: Collin Walling
Cc: borntraeger, cotte, david, mimu, qemu-s390x, qemu-devel, thuth
On Tue, 4 Dec 2018 17:26:36 -0500
Collin Walling <walling@linux.ibm.com> wrote:
> I screen-scraped the @ibm address again (Conny was the victim this time)
>
> Reply to this thread to avoid any delivery failures.
>
> On 12/4/18 5:18 PM, Collin Walling wrote:
> > Add migration and reset support for diagnose 318. This is a new z14 GA2
> > hardware feature, but we can provide guest support starting with the
> > zEC12-full CPU model.
> >
> > Because new hardware introduces a new facility-availability byte in
> > the Read SCP Info block, we lose one byte in the CPU entries list
> > and must limit the maximum VCPUs to 247 (down from 248).
> >
> > Signed-off-by: Collin Walling <walling@linux.ibm.com>
> > ---
> >
> > Changelog
> >
> > RFC -> v1
> > - introduced kvm stubs for set/get cpc
> > - s/fac134/byte_134
> > - moved diag318 vmstate description to diag.c
> > - reduced S390_VCPU_MAX to 247
> >
> > hw/s390x/ipl.c | 3 +++
> > hw/s390x/s390-virtio-ccw.c | 3 +++
> > hw/s390x/sclp.c | 2 ++
> > include/hw/s390x/sclp.h | 2 ++
> > linux-headers/asm-s390/kvm.h | 5 ++++
> > target/s390x/cpu.h | 2 +-
> > target/s390x/cpu_features.c | 3 +++
> > target/s390x/cpu_features.h | 1 +
> > target/s390x/cpu_features_def.h | 3 +++
> > target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
> > target/s390x/gen-features.c | 1 +
> > target/s390x/internal.h | 4 +++-
> > target/s390x/kvm-stub.c | 10 ++++++++
> > target/s390x/kvm.c | 23 ++++++++++++++++++
> > target/s390x/kvm_s390x.h | 3 +++
> > 15 files changed, 116 insertions(+), 2 deletions(-)
> > diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
> > index 0265482..8c206d2 100644
> > --- a/linux-headers/asm-s390/kvm.h
> > +++ b/linux-headers/asm-s390/kvm.h
Please split this out into a dummy headers update patch, which will be
replaced with a real headers update when applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [qemu-s390x] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 8:27 ` Christian Borntraeger
@ 2018-12-05 11:54 ` Cornelia Huck
2018-12-05 11:57 ` David Hildenbrand
0 siblings, 1 reply; 14+ messages in thread
From: Cornelia Huck @ 2018-12-05 11:54 UTC (permalink / raw)
To: Christian Borntraeger
Cc: David Hildenbrand, Collin Walling, cornelia.huck, cotte, mimu,
qemu-s390x, qemu-devel, thuth
On Wed, 5 Dec 2018 09:27:44 +0100
Christian Borntraeger <borntraeger@de.ibm.com> wrote:
> On 05.12.2018 09:26, David Hildenbrand wrote:
> > On 04.12.18 23:18, Collin Walling wrote:
> >> Add migration and reset support for diagnose 318. This is a new z14 GA2
> >> hardware feature, but we can provide guest support starting with the
> >> zEC12-full CPU model.
> >>
> >> Because new hardware introduces a new facility-availability byte in
> >> the Read SCP Info block, we lose one byte in the CPU entries list
> >> and must limit the maximum VCPUs to 247 (down from 248).
> >
> > This could break setups that upgrade/migrate. At least forward migration
> > can be broken. Do we care about that?
>
> Can we maybe bind this feature and the cpu limit to the 4.0 machine?
I think that would make sense.
> >
> > Can you split off
> >
> > 1. linux-header changes
> > 2. CPU model changes? (introduction and definition of new feature, but
> > not when it is used?)
> >
> >>
> >> Signed-off-by: Collin Walling <walling@linux.ibm.com>
> >> ---
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [qemu-s390x] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 11:54 ` [Qemu-devel] [qemu-s390x] " Cornelia Huck
@ 2018-12-05 11:57 ` David Hildenbrand
2018-12-05 14:58 ` Collin Walling
0 siblings, 1 reply; 14+ messages in thread
From: David Hildenbrand @ 2018-12-05 11:57 UTC (permalink / raw)
To: Cornelia Huck, Christian Borntraeger
Cc: Collin Walling, cornelia.huck, cotte, mimu, qemu-s390x,
qemu-devel, thuth
On 05.12.18 12:54, Cornelia Huck wrote:
> On Wed, 5 Dec 2018 09:27:44 +0100
> Christian Borntraeger <borntraeger@de.ibm.com> wrote:
>
>> On 05.12.2018 09:26, David Hildenbrand wrote:
>>> On 04.12.18 23:18, Collin Walling wrote:
>>>> Add migration and reset support for diagnose 318. This is a new z14 GA2
>>>> hardware feature, but we can provide guest support starting with the
>>>> zEC12-full CPU model.
>>>>
>>>> Because new hardware introduces a new facility-availability byte in
>>>> the Read SCP Info block, we lose one byte in the CPU entries list
>>>> and must limit the maximum VCPUs to 247 (down from 248).
>>>
>>> This could break setups that upgrade/migrate. At least forward migration
>>> can be broken. Do we care about that?
>>
>> Can we maybe bind this feature and the cpu limit to the 4.0 machine?
>
> I think that would make sense.
Won't be that easy, as we'll have different sizes of the struct size.
Something that might uglify the code quite a bit.
Also we'll get a dependence between the cpu model features (e.g. probed
via the NULL machine) and the compat machine. Have to think about this.
>
>>>
>>> Can you split off
>>>
>>> 1. linux-header changes
>>> 2. CPU model changes? (introduction and definition of new feature, but
>>> not when it is used?)
>>>
>>>>
>>>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>>>> ---
--
Thanks,
David / dhildenb
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [qemu-s390x] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 11:07 ` Cornelia Huck
@ 2018-12-05 14:52 ` Collin Walling
0 siblings, 0 replies; 14+ messages in thread
From: Collin Walling @ 2018-12-05 14:52 UTC (permalink / raw)
To: Cornelia Huck
Cc: cotte, thuth, david, qemu-devel, borntraeger, qemu-s390x, mimu
On 12/5/18 6:07 AM, Cornelia Huck wrote:
> On Tue, 4 Dec 2018 17:26:36 -0500
> Collin Walling <walling@linux.ibm.com> wrote:
>
>> I screen-scraped the @ibm address again (Conny was the victim this time)
>>
>> Reply to this thread to avoid any delivery failures.
>>
>> On 12/4/18 5:18 PM, Collin Walling wrote:
>>> Add migration and reset support for diagnose 318. This is a new z14 GA2
>>> hardware feature, but we can provide guest support starting with the
>>> zEC12-full CPU model.
>>>
>>> Because new hardware introduces a new facility-availability byte in
>>> the Read SCP Info block, we lose one byte in the CPU entries list
>>> and must limit the maximum VCPUs to 247 (down from 248).
>>>
>>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>>> ---
>>>
>>> Changelog
>>>
>>> RFC -> v1
>>> - introduced kvm stubs for set/get cpc
>>> - s/fac134/byte_134
>>> - moved diag318 vmstate description to diag.c
>>> - reduced S390_VCPU_MAX to 247
>>>
>>> hw/s390x/ipl.c | 3 +++
>>> hw/s390x/s390-virtio-ccw.c | 3 +++
>>> hw/s390x/sclp.c | 2 ++
>>> include/hw/s390x/sclp.h | 2 ++
>>> linux-headers/asm-s390/kvm.h | 5 ++++
>>> target/s390x/cpu.h | 2 +-
>>> target/s390x/cpu_features.c | 3 +++
>>> target/s390x/cpu_features.h | 1 +
>>> target/s390x/cpu_features_def.h | 3 +++
>>> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
>>> target/s390x/gen-features.c | 1 +
>>> target/s390x/internal.h | 4 +++-
>>> target/s390x/kvm-stub.c | 10 ++++++++
>>> target/s390x/kvm.c | 23 ++++++++++++++++++
>>> target/s390x/kvm_s390x.h | 3 +++
>>> 15 files changed, 116 insertions(+), 2 deletions(-)
>
>>> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
>>> index 0265482..8c206d2 100644
>>> --- a/linux-headers/asm-s390/kvm.h
>>> +++ b/linux-headers/asm-s390/kvm.h
>
> Please split this out into a dummy headers update patch, which will be
> replaced with a real headers update when applied.
>
>
Will do.
--
Respectfully,
- Collin Walling
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [qemu-s390x] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 11:57 ` David Hildenbrand
@ 2018-12-05 14:58 ` Collin Walling
0 siblings, 0 replies; 14+ messages in thread
From: Collin Walling @ 2018-12-05 14:58 UTC (permalink / raw)
To: David Hildenbrand, Cornelia Huck, Christian Borntraeger
Cc: cotte, qemu-devel, thuth, qemu-s390x, cornelia.huck, mimu
On 12/5/18 6:57 AM, David Hildenbrand wrote:
> On 05.12.18 12:54, Cornelia Huck wrote:
>> On Wed, 5 Dec 2018 09:27:44 +0100
>> Christian Borntraeger <borntraeger@de.ibm.com> wrote:
>>
>>> On 05.12.2018 09:26, David Hildenbrand wrote:
>>>> On 04.12.18 23:18, Collin Walling wrote:
>>>>> Add migration and reset support for diagnose 318. This is a new z14 GA2
>>>>> hardware feature, but we can provide guest support starting with the
>>>>> zEC12-full CPU model.
>>>>>
>>>>> Because new hardware introduces a new facility-availability byte in
>>>>> the Read SCP Info block, we lose one byte in the CPU entries list
>>>>> and must limit the maximum VCPUs to 247 (down from 248).
>>>>
>>>> This could break setups that upgrade/migrate. At least forward migration
>>>> can be broken. Do we care about that?
>>>
>>> Can we maybe bind this feature and the cpu limit to the 4.0 machine?
>>
>> I think that would make sense.
>
> Won't be that easy, as we'll have different sizes of the struct size.
> Something that might uglify the code quite a bit.
>
> Also we'll get a dependence between the cpu model features (e.g. probed
> via the NULL machine) and the compat machine. Have to think about this.
>
Are you referring to the struct CPUS390XState? Could we get away by adding
a one-byte "unused" field after the bitmap?
>>
>>>>
>>>> Can you split off
>>>>
>>>> 1. linux-header changes
>>>> 2. CPU model changes? (introduction and definition of new feature, but
>>>> not when it is used?)
>>>>
>>>>>
>>>>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>>>>> ---
>
>
I'll split the patches into:
1) linux-header changes
2) CPU model changes
3) diag318 usages / migration
--
Respectfully,
- Collin Walling
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 8:29 ` [Qemu-devel] " Christian Borntraeger
@ 2018-12-05 14:59 ` Collin Walling
2018-12-05 15:22 ` Cornelia Huck
0 siblings, 1 reply; 14+ messages in thread
From: Collin Walling @ 2018-12-05 14:59 UTC (permalink / raw)
To: Christian Borntraeger, Cornelia Huck, david, mimu, qemu-s390x,
qemu-devel
Cc: thuth
On 12/5/18 3:29 AM, Christian Borntraeger wrote:
> You should clearly review your email list.....
>
> Adding the "new" Conny, removing Carsten.
>
Thanks for taking care of that. I'll be more careful when using the
addresses at the top of the files.
>
> On 04.12.2018 23:18, Collin Walling wrote:
>> Add migration and reset support for diagnose 318. This is a new z14 GA2
>> hardware feature, but we can provide guest support starting with the
>> zEC12-full CPU model.
>>
>> Because new hardware introduces a new facility-availability byte in
>> the Read SCP Info block, we lose one byte in the CPU entries list
>> and must limit the maximum VCPUs to 247 (down from 248).
>>
>> Signed-off-by: Collin Walling <walling@linux.ibm.com>
>> ---
>>
>> Changelog
>>
>> RFC -> v1
>> - introduced kvm stubs for set/get cpc
>> - s/fac134/byte_134
>> - moved diag318 vmstate description to diag.c
>> - reduced S390_VCPU_MAX to 247
>>
>> hw/s390x/ipl.c | 3 +++
>> hw/s390x/s390-virtio-ccw.c | 3 +++
>> hw/s390x/sclp.c | 2 ++
>> include/hw/s390x/sclp.h | 2 ++
>> linux-headers/asm-s390/kvm.h | 5 ++++
>> target/s390x/cpu.h | 2 +-
>> target/s390x/cpu_features.c | 3 +++
>> target/s390x/cpu_features.h | 1 +
>> target/s390x/cpu_features_def.h | 3 +++
>> target/s390x/diag.c | 53 +++++++++++++++++++++++++++++++++++++++++
>> target/s390x/gen-features.c | 1 +
>> target/s390x/internal.h | 4 +++-
>> target/s390x/kvm-stub.c | 10 ++++++++
>> target/s390x/kvm.c | 23 ++++++++++++++++++
>> target/s390x/kvm_s390x.h | 3 +++
>> 15 files changed, 116 insertions(+), 2 deletions(-)
>>
>> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
>> index 21f64ad..6e3af65 100644
>> --- a/hw/s390x/ipl.c
>> +++ b/hw/s390x/ipl.c
>> @@ -27,6 +27,7 @@
>> #include "qemu/cutils.h"
>> #include "qemu/option.h"
>> #include "exec/exec-all.h"
>> +#include "internal.h"
>>
>> #define KERN_IMAGE_START 0x010000UL
>> #define LINUX_MAGIC_ADDR 0x010008UL
>> @@ -230,6 +231,8 @@ static void s390_ipl_realize(DeviceState *dev, Error **errp)
>> ipl->compat_start_addr = ipl->start_addr;
>> ipl->compat_bios_start_addr = ipl->bios_start_addr;
>> qemu_register_reset(qdev_reset_all_fn, dev);
>> +
>> + diag318_register();
>> error:
>> error_propagate(errp, err);
>> }
>> diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
>> index a0615a8..2c670fc 100644
>> --- a/hw/s390x/s390-virtio-ccw.c
>> +++ b/hw/s390x/s390-virtio-ccw.c
>> @@ -37,6 +37,7 @@
>> #include "cpu_models.h"
>> #include "hw/nmi.h"
>> #include "hw/s390x/tod.h"
>> +#include "internal.h"
>>
>> S390CPU *s390_cpu_addr2state(uint16_t cpu_addr)
>> {
>> @@ -357,6 +358,7 @@ static void s390_machine_reset(void)
>> }
>> subsystem_reset();
>> s390_crypto_reset();
>> + diag318_reset();
>> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
>> break;
>> case S390_RESET_LOAD_NORMAL:
>> @@ -364,6 +366,7 @@ static void s390_machine_reset(void)
>> run_on_cpu(t, s390_do_cpu_reset, RUN_ON_CPU_NULL);
>> }
>> subsystem_reset();
>> + diag318_reset();
>> run_on_cpu(cs, s390_do_cpu_initial_reset, RUN_ON_CPU_NULL);
>> run_on_cpu(cs, s390_do_cpu_load_normal, RUN_ON_CPU_NULL);
>> break;
>> diff --git a/hw/s390x/sclp.c b/hw/s390x/sclp.c
>> index 4510a80..183c627 100644
>> --- a/hw/s390x/sclp.c
>> +++ b/hw/s390x/sclp.c
>> @@ -73,6 +73,8 @@ static void read_SCP_info(SCLPDevice *sclp, SCCB *sccb)
>> read_info->conf_char);
>> s390_get_feat_block(S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
>> read_info->conf_char_ext);
>> + /* Read Info byte 134 */
>> + s390_get_feat_block(S390_FEAT_TYPE_SCLP_BYTE_134, read_info->byte_134);
>>
>> read_info->facilities = cpu_to_be64(SCLP_HAS_CPU_INFO |
>> SCLP_HAS_IOA_RECONFIG);
>> diff --git a/include/hw/s390x/sclp.h b/include/hw/s390x/sclp.h
>> index f9db243..eb12ba2 100644
>> --- a/include/hw/s390x/sclp.h
>> +++ b/include/hw/s390x/sclp.h
>> @@ -133,6 +133,8 @@ typedef struct ReadInfo {
>> uint16_t highest_cpu;
>> uint8_t _reserved5[124 - 122]; /* 122-123 */
>> uint32_t hmfai;
>> + uint8_t _reserved7[134 - 128]; /* 128-133 */
>> + uint8_t byte_134[1];
>> struct CPUEntry entries[0];
>> } QEMU_PACKED ReadInfo;
>>
>> diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h
>> index 0265482..8c206d2 100644
>> --- a/linux-headers/asm-s390/kvm.h
>> +++ b/linux-headers/asm-s390/kvm.h
>> @@ -74,6 +74,7 @@ struct kvm_s390_io_adapter_req {
>> #define KVM_S390_VM_CRYPTO 2
>> #define KVM_S390_VM_CPU_MODEL 3
>> #define KVM_S390_VM_MIGRATION 4
>> +#define KVM_S390_VM_MISC 5
>>
>> /* kvm attributes for mem_ctrl */
>> #define KVM_S390_VM_MEM_ENABLE_CMMA 0
>> @@ -130,6 +131,7 @@ struct kvm_s390_vm_cpu_machine {
>> #define KVM_S390_VM_CPU_FEAT_PFMFI 11
>> #define KVM_S390_VM_CPU_FEAT_SIGPIF 12
>> #define KVM_S390_VM_CPU_FEAT_KSS 13
>> +#define KVM_S390_VM_CPU_FEAT_DIAG318 14
>> struct kvm_s390_vm_cpu_feat {
>> __u64 feat[16];
>> };
>> @@ -168,6 +170,9 @@ struct kvm_s390_vm_cpu_subfunc {
>> #define KVM_S390_VM_MIGRATION_START 1
>> #define KVM_S390_VM_MIGRATION_STATUS 2
>>
>> +/* kvm attributes for KVM_S390_VM_MISC */
>> +#define KVM_S390_VM_MISC_CPC 0
>> +
>> /* for KVM_GET_REGS and KVM_SET_REGS */
>> struct kvm_regs {
>> /* general purpose regs for s390 */
>> diff --git a/target/s390x/cpu.h b/target/s390x/cpu.h
>> index 8c2320e..594b4a4 100644
>> --- a/target/s390x/cpu.h
>> +++ b/target/s390x/cpu.h
>> @@ -52,7 +52,7 @@
>>
>> #define MMU_USER_IDX 0
>>
>> -#define S390_MAX_CPUS 248
>> +#define S390_MAX_CPUS 247
>>
>> typedef struct PSW {
>> uint64_t mask;
>> diff --git a/target/s390x/cpu_features.c b/target/s390x/cpu_features.c
>> index 60cfeba..d05afa5 100644
>> --- a/target/s390x/cpu_features.c
>> +++ b/target/s390x/cpu_features.c
>> @@ -121,6 +121,9 @@ static const S390FeatDef s390_features[] = {
>> FEAT_INIT("pfmfi", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 9, "SIE: PFMF interpretation facility"),
>> FEAT_INIT("ibs", S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT, 10, "SIE: Interlock-and-broadcast-suppression facility"),
>>
>> + /* SCLP SCCB Byte 134 */
>> + FEAT_INIT("diag318", S390_FEAT_TYPE_SCLP_BYTE_134, 0, "SIE: Diagnose 318"),
>> +
>> FEAT_INIT("sief2", S390_FEAT_TYPE_SCLP_CPU, 4, "SIE: interception format 2 (Virtual SIE)"),
>> FEAT_INIT("skey", S390_FEAT_TYPE_SCLP_CPU, 5, "SIE: Storage-key facility"),
>> FEAT_INIT("gpereh", S390_FEAT_TYPE_SCLP_CPU, 10, "SIE: Guest-PER enhancement facility"),
>> diff --git a/target/s390x/cpu_features.h b/target/s390x/cpu_features.h
>> index effe790..e7248df 100644
>> --- a/target/s390x/cpu_features.h
>> +++ b/target/s390x/cpu_features.h
>> @@ -23,6 +23,7 @@ typedef enum {
>> S390_FEAT_TYPE_STFL,
>> S390_FEAT_TYPE_SCLP_CONF_CHAR,
>> S390_FEAT_TYPE_SCLP_CONF_CHAR_EXT,
>> + S390_FEAT_TYPE_SCLP_BYTE_134,
>> S390_FEAT_TYPE_SCLP_CPU,
>> S390_FEAT_TYPE_MISC,
>> S390_FEAT_TYPE_PLO,
>> diff --git a/target/s390x/cpu_features_def.h b/target/s390x/cpu_features_def.h
>> index 5fc7e7b..d99da1d 100644
>> --- a/target/s390x/cpu_features_def.h
>> +++ b/target/s390x/cpu_features_def.h
>> @@ -109,6 +109,9 @@ typedef enum {
>> S390_FEAT_SIE_PFMFI,
>> S390_FEAT_SIE_IBS,
>>
>> + /* Read Info Byte 134 */
>> + S390_FEAT_DIAG318,
>> +
>> /* Sclp Cpu */
>> S390_FEAT_SIE_F2,
>> S390_FEAT_SIE_SKEY,
>> diff --git a/target/s390x/diag.c b/target/s390x/diag.c
>> index acb0f3d..2207c08 100644
>> --- a/target/s390x/diag.c
>> +++ b/target/s390x/diag.c
>> @@ -20,6 +20,8 @@
>> #include "sysemu/cpus.h"
>> #include "hw/s390x/ipl.h"
>> #include "hw/s390x/s390-virtio-ccw.h"
>> +#include "kvm_s390x.h"
>> +#include "sysemu/kvm.h"
>>
>> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3)
>> {
>> @@ -134,3 +136,54 @@ out:
>> break;
>> }
>> }
>> +
>> +typedef struct Diag318Data {
>> + uint64_t cpc;
>> +} Diag318Data;
>> +static Diag318Data diag318data;
>> +
>> +void diag318_reset(void)
>> +{
>> + if (s390_has_feat(S390_FEAT_DIAG318)) {
>> + kvm_s390_set_cpc(0);
>> + }
>> +}
>> +
>> +static int diag318_post_load(void *opaque, int version_id)
>> +{
>> + Diag318Data *d = opaque;
>> +
>> + kvm_s390_set_cpc(d->cpc);
>> + return 0;
>> +}
>> +
>> +static int diag318_pre_save(void *opaque)
>> +{
>> + Diag318Data *d = opaque;
>> +
>> + kvm_s390_get_cpc(&d->cpc);
>> + return 0;
>> +}
>> +
>> +static bool diag318_needed(void *opaque)
>> +{
>> + return s390_has_feat(S390_FEAT_DIAG318);
>> +}
>> +
>> +const VMStateDescription vmstate_diag318 = {
>> + .name = "diag318",
>> + .post_load = diag318_post_load,
>> + .pre_save = diag318_pre_save,
>> + .version_id = 1,
>> + .minimum_version_id = 1,
>> + .needed = diag318_needed,
>> + .fields = (VMStateField[]) {
>> + VMSTATE_UINT64(cpc, Diag318Data),
>> + VMSTATE_END_OF_LIST()
>> + }
>> +};
>> +
>> +void diag318_register(void)
>> +{
>> + vmstate_register(NULL, 0, &vmstate_diag318, &diag318data);
>> +}
>> \ No newline at end of file
>> diff --git a/target/s390x/gen-features.c b/target/s390x/gen-features.c
>> index 70015ea..a3d1457 100644
>> --- a/target/s390x/gen-features.c
>> +++ b/target/s390x/gen-features.c
>> @@ -450,6 +450,7 @@ static uint16_t full_GEN12_GA1[] = {
>> S390_FEAT_AP_QUERY_CONFIG_INFO,
>> S390_FEAT_AP_FACILITIES_TEST,
>> S390_FEAT_AP,
>> + S390_FEAT_DIAG318,
>> };
>>
>> static uint16_t full_GEN12_GA2[] = {
>> diff --git a/target/s390x/internal.h b/target/s390x/internal.h
>> index f2a771e..d53b1d0 100644
>> --- a/target/s390x/internal.h
>> +++ b/target/s390x/internal.h
>> @@ -383,10 +383,12 @@ int mmu_translate_real(CPUS390XState *env, target_ulong raddr, int rw,
>> target_ulong *addr, int *flags);
>>
>>
>> -/* misc_helper.c */
>> +/* diag.c */
>> int handle_diag_288(CPUS390XState *env, uint64_t r1, uint64_t r3);
>> void handle_diag_308(CPUS390XState *env, uint64_t r1, uint64_t r3,
>> uintptr_t ra);
>> +void diag318_register(void);
>> +void diag318_reset(void);
>>
>>
>> /* translate.c */
>> diff --git a/target/s390x/kvm-stub.c b/target/s390x/kvm-stub.c
>> index bf7795e..1f0bee3 100644
>> --- a/target/s390x/kvm-stub.c
>> +++ b/target/s390x/kvm-stub.c
>> @@ -104,3 +104,13 @@ void kvm_s390_stop_interrupt(S390CPU *cpu)
>> void kvm_s390_restart_interrupt(S390CPU *cpu)
>> {
>> }
>> +
>> +int kvm_s390_get_cpc(uint64_t *cpc)
>> +{
>> + return 0;
>> +}
>> +
>> +int kvm_s390_set_cpc(uint64_t cpc)
>> +{
>> + return 0;
>> +}
>> \ No newline at end of file
>> diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c
>> index 2ebf26a..9ed4cea 100644
>> --- a/target/s390x/kvm.c
>> +++ b/target/s390x/kvm.c
>> @@ -749,6 +749,28 @@ int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_low)
>> return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
>> }
>>
>> +int kvm_s390_get_cpc(uint64_t *cpc)
>> +{
>> + struct kvm_device_attr attr = {
>> + .group = KVM_S390_VM_MISC,
>> + .attr = KVM_S390_VM_MISC_CPC,
>> + .addr = (uint64_t)cpc,
>> + };
>> +
>> + return kvm_vm_ioctl(kvm_state, KVM_GET_DEVICE_ATTR, &attr);
>> +}
>> +
>> +int kvm_s390_set_cpc(uint64_t cpc)
>> +{
>> + struct kvm_device_attr attr = {
>> + .group = KVM_S390_VM_MISC,
>> + .attr = KVM_S390_VM_MISC_CPC,
>> + .addr = (uint64_t)&cpc,
>> + };
>> +
>> + return kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
>> +}
>> +
>> /**
>> * kvm_s390_mem_op:
>> * @addr: the logical start address in guest memory
>> @@ -2142,6 +2164,7 @@ static int kvm_to_feat[][2] = {
>> { KVM_S390_VM_CPU_FEAT_PFMFI, S390_FEAT_SIE_PFMFI},
>> { KVM_S390_VM_CPU_FEAT_SIGPIF, S390_FEAT_SIE_SIGPIF},
>> { KVM_S390_VM_CPU_FEAT_KSS, S390_FEAT_SIE_KSS},
>> + { KVM_S390_VM_CPU_FEAT_DIAG318, S390_FEAT_DIAG318},
>> };
>>
>> static int query_cpu_feat(S390FeatBitmap features)
>> diff --git a/target/s390x/kvm_s390x.h b/target/s390x/kvm_s390x.h
>> index 6e52287..53f165f 100644
>> --- a/target/s390x/kvm_s390x.h
>> +++ b/target/s390x/kvm_s390x.h
>> @@ -29,6 +29,9 @@ int kvm_s390_get_clock(uint8_t *tod_high, uint64_t *tod_clock);
>> int kvm_s390_get_clock_ext(uint8_t *tod_high, uint64_t *tod_clock);
>> int kvm_s390_set_clock(uint8_t tod_high, uint64_t tod_clock);
>> int kvm_s390_set_clock_ext(uint8_t tod_high, uint64_t tod_clock);
>> +int kvm_s390_get_cpc(uint64_t *cpc);
>> +int kvm_s390_set_cpc(uint64_t cpc);
>> +bool kvm_s390_has_diag318(void);
>> void kvm_s390_enable_css_support(S390CPU *cpu);
>> int kvm_s390_assign_subch_ioeventfd(EventNotifier *notifier, uint32_t sch,
>> int vq, bool assign);
>>
>
>
--
Respectfully,
- Collin Walling
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 14:59 ` Collin Walling
@ 2018-12-05 15:22 ` Cornelia Huck
2018-12-05 15:27 ` [Qemu-devel] [qemu-s390x] " Collin Walling
0 siblings, 1 reply; 14+ messages in thread
From: Cornelia Huck @ 2018-12-05 15:22 UTC (permalink / raw)
To: Collin Walling
Cc: Christian Borntraeger, david, mimu, qemu-s390x, qemu-devel, thuth
On Wed, 5 Dec 2018 09:59:54 -0500
Collin Walling <walling@linux.ibm.com> wrote:
> On 12/5/18 3:29 AM, Christian Borntraeger wrote:
> > You should clearly review your email list.....
> >
> > Adding the "new" Conny, removing Carsten.
> >
>
> Thanks for taking care of that. I'll be more careful when using the
> addresses at the top of the files.
scripts/get_maintainer.pl -f <file> is probably more useful to get
current addresses :)
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [qemu-s390x] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247
2018-12-05 15:22 ` Cornelia Huck
@ 2018-12-05 15:27 ` Collin Walling
0 siblings, 0 replies; 14+ messages in thread
From: Collin Walling @ 2018-12-05 15:27 UTC (permalink / raw)
To: Cornelia Huck
Cc: thuth, david, qemu-devel, Christian Borntraeger, qemu-s390x, mimu
On 12/5/18 10:22 AM, Cornelia Huck wrote:
> On Wed, 5 Dec 2018 09:59:54 -0500
> Collin Walling <walling@linux.ibm.com> wrote:
>
>> On 12/5/18 3:29 AM, Christian Borntraeger wrote:
>>> You should clearly review your email list.....
>>>
>>> Adding the "new" Conny, removing Carsten.
>>>
>>
>> Thanks for taking care of that. I'll be more careful when using the
>> addresses at the top of the files.
>
> scripts/get_maintainer.pl -f <file> is probably more useful to get
> current addresses :)
>
I'll give it a whirl next time. I appreciate the advice! :)
--
Respectfully,
- Collin Walling
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2018-12-05 15:27 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-04 22:18 [Qemu-devel] [PATCH v1] s390: guest support for diagnose 318 and limit max VCPUs to 247 Collin Walling
2018-12-04 22:26 ` Collin Walling
2018-12-05 11:07 ` Cornelia Huck
2018-12-05 14:52 ` [Qemu-devel] [qemu-s390x] " Collin Walling
2018-12-04 23:50 ` [Qemu-devel] " no-reply
2018-12-05 8:26 ` David Hildenbrand
2018-12-05 8:27 ` Christian Borntraeger
2018-12-05 11:54 ` [Qemu-devel] [qemu-s390x] " Cornelia Huck
2018-12-05 11:57 ` David Hildenbrand
2018-12-05 14:58 ` Collin Walling
2018-12-05 8:29 ` [Qemu-devel] " Christian Borntraeger
2018-12-05 14:59 ` Collin Walling
2018-12-05 15:22 ` Cornelia Huck
2018-12-05 15:27 ` [Qemu-devel] [qemu-s390x] " Collin Walling
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).