From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: peter.maydell@linaro.org
Cc: borntraeger@de.ibm.com, agraf@suse.de, jfrei@linux.vnet.ibm.com,
qemu-devel@nongnu.org,
David Hildenbrand <dahi@linux.vnet.ibm.com>,
Cornelia Huck <cornelia.huck@de.ibm.com>
Subject: [Qemu-devel] [PULL 20/38] s390x/cpumodel: let the CPU model handle feature checks
Date: Tue, 6 Sep 2016 09:46:52 +0200 [thread overview]
Message-ID: <20160906074710.13495-21-cornelia.huck@de.ibm.com> (raw)
In-Reply-To: <20160906074710.13495-1-cornelia.huck@de.ibm.com>
From: David Hildenbrand <dahi@linux.vnet.ibm.com>
If we have certain features enabled, we have to migrate additional state
(e.g. vector registers or runtime-instrumentation registers). Let the
CPU model control that unless we have no "host" CPU model in the KVM
case. This will later on be the case for compatibility machines, so
migration from QEMU versions without the CPU model will still work.
Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <20160905085244.99980-12-dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
target-s390x/cpu_models.c | 25 +++++++++++++++++++++++++
target-s390x/cpu_models.h | 2 ++
target-s390x/kvm.c | 4 ++--
target-s390x/machine.c | 14 ++------------
4 files changed, 31 insertions(+), 14 deletions(-)
diff --git a/target-s390x/cpu_models.c b/target-s390x/cpu_models.c
index 1daa208..d44dab2 100644
--- a/target-s390x/cpu_models.c
+++ b/target-s390x/cpu_models.c
@@ -73,6 +73,31 @@ static S390CPUDef s390_cpu_defs[] = {
CPUDEF_INIT(0x2965, 13, 2, 47, 0x08000000U, "z13s", "IBM z13s GA1"),
};
+bool s390_has_feat(S390Feat feat)
+{
+ static S390CPU *cpu;
+
+ if (!cpu) {
+ cpu = S390_CPU(qemu_get_cpu(0));
+ }
+
+ if (!cpu || !cpu->model) {
+#ifdef CONFIG_KVM
+ if (kvm_enabled()) {
+ if (feat == S390_FEAT_VECTOR) {
+ return kvm_check_extension(kvm_state,
+ KVM_CAP_S390_VECTOR_REGISTERS);
+ }
+ if (feat == S390_FEAT_RUNTIME_INSTRUMENTATION) {
+ return kvm_s390_get_ri();
+ }
+ }
+#endif
+ return 0;
+ }
+ return test_bit(feat, cpu->model->features);
+}
+
struct S390PrintCpuListInfo {
FILE *f;
fprintf_function print;
diff --git a/target-s390x/cpu_models.h b/target-s390x/cpu_models.h
index f3f3f3c..cca865d 100644
--- a/target-s390x/cpu_models.h
+++ b/target-s390x/cpu_models.h
@@ -49,4 +49,6 @@ typedef struct S390CPUModel {
uint8_t cpu_ver; /* CPU version, usually "ff" for kvm */
} S390CPUModel;
+bool s390_has_feat(S390Feat feat);
+
#endif /* TARGET_S390X_CPU_MODELS_H */
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index 4341d54..4f32a6b 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -1539,7 +1539,7 @@ static void sigp_store_adtl_status(void *arg)
{
SigpInfo *si = arg;
- if (!kvm_check_extension(kvm_state, KVM_CAP_S390_VECTOR_REGISTERS)) {
+ if (!s390_has_feat(S390_FEAT_VECTOR)) {
set_sigp_status(si, SIGP_STAT_INVALID_ORDER);
return;
}
@@ -2119,7 +2119,7 @@ static uint64_t build_channel_report_mcic(void)
MCIC_VB_WP | MCIC_VB_MS | MCIC_VB_PM | MCIC_VB_IA | MCIC_VB_FP |
MCIC_VB_GR | MCIC_VB_CR | MCIC_VB_ST | MCIC_VB_AR | MCIC_VB_PR |
MCIC_VB_FC | MCIC_VB_CT | MCIC_VB_CC;
- if (kvm_check_extension(kvm_state, KVM_CAP_S390_VECTOR_REGISTERS)) {
+ if (s390_has_feat(S390_FEAT_VECTOR)) {
mcic |= MCIC_VB_VR;
}
return mcic;
diff --git a/target-s390x/machine.c b/target-s390x/machine.c
index aa39e5d..edc3a47 100644
--- a/target-s390x/machine.c
+++ b/target-s390x/machine.c
@@ -78,12 +78,7 @@ static const VMStateDescription vmstate_fpu = {
static bool vregs_needed(void *opaque)
{
-#ifdef CONFIG_KVM
- if (kvm_enabled()) {
- return kvm_check_extension(kvm_state, KVM_CAP_S390_VECTOR_REGISTERS);
- }
-#endif
- return 0;
+ return s390_has_feat(S390_FEAT_VECTOR);
}
static const VMStateDescription vmstate_vregs = {
@@ -147,12 +142,7 @@ static const VMStateDescription vmstate_vregs = {
static bool riccb_needed(void *opaque)
{
-#ifdef CONFIG_KVM
- if (kvm_enabled()) {
- return kvm_s390_get_ri();
- }
-#endif
- return 0;
+ return s390_has_feat(S390_FEAT_RUNTIME_INSTRUMENTATION);
}
const VMStateDescription vmstate_riccb = {
--
2.9.3
next prev parent reply other threads:[~2016-09-06 7:47 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-06 7:46 [Qemu-devel] [PULL 00/38] First set of s390x patches for 2.8 Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 01/38] s390x: add compat machine " Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 02/38] s390x/pci: return directly if create zpci failed Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 03/38] s390x/pci: assert zpci always existing Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 04/38] s390/sclp: cache the sclp device Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 05/38] s390x: wrap flic savevm calls into vmstate Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 06/38] s390x/ioinst: advertise fcs facility Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 07/38] s390x/css: handle cssid 255 correctly Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 08/38] linux-headers: update Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 09/38] s390x/kvm: 2 byte software breakpoint support Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 10/38] qmp: details about CPU definitions in query-cpu-definitions Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 11/38] s390x/cpumodel: "host" and "qemu" as CPU subclasses Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 12/38] s390x/cpumodel: expose CPU class properties Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 13/38] s390x/cpumodel: introduce CPU features Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 14/38] s390x/cpumodel: generate CPU feature lists for CPU models Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 15/38] s390x/cpumodel: generate CPU feature group lists Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 16/38] s390x/cpumodel: introduce CPU feature group definitions Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 17/38] s390x/cpumodel: register defined CPU models as subclasses Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 18/38] s390x/cpumodel: store the CPU model in the CPU instance Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 19/38] s390x/cpumodel: expose features and feature groups as properties Cornelia Huck
2016-09-06 7:46 ` Cornelia Huck [this message]
2016-09-06 7:46 ` [Qemu-devel] [PULL 21/38] s390x/cpumodel: check and apply the CPU model Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 22/38] s390x/sclp: factor out preparation of cpu entries Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 23/38] s390x/sclp: introduce sclp feature blocks Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 24/38] s390x/sclp: indicate sclp features Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 25/38] s390x/sclp: propagate the ibc val (lowest and unblocked ibc) Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 26/38] s390x/sclp: propagate the mha via sclp Cornelia Huck
2016-09-06 7:46 ` [Qemu-devel] [PULL 27/38] s390x/sclp: propagate hmfai Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 28/38] s390x/kvm: allow runtime-instrumentation for "none" machine Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 29/38] s390x/kvm: implement CPU model support Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 30/38] s390x/kvm: disable host model for problematic compat machines Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 31/38] s390x/kvm: let the CPU model control CMM(A) Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 32/38] s390x/kvm: don't enable key wrapping if msa3 is disabled Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 33/38] qmp: add QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 34/38] qmp: add QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-09-08 14:12 ` Eric Blake
2016-09-09 7:39 ` Christian Borntraeger
2016-09-06 7:47 ` [Qemu-devel] [PULL 35/38] qmp: add QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-09-08 14:15 ` Eric Blake
2016-09-06 7:47 ` [Qemu-devel] [PULL 36/38] s390x/cpumodel: implement QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 37/38] s390x/cpumodel: implement QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-09-06 7:47 ` [Qemu-devel] [PULL 38/38] s390x/cpumodel: implement QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-09-06 8:48 ` [Qemu-devel] [PULL 00/38] First set of s390x patches for 2.8 no-reply
2016-09-06 14:32 ` Peter Maydell
2016-09-06 14:49 ` Cornelia Huck
2016-09-06 15:04 ` Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160906074710.13495-21-cornelia.huck@de.ibm.com \
--to=cornelia.huck@de.ibm.com \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=dahi@linux.vnet.ibm.com \
--cc=jfrei@linux.vnet.ibm.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).