qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Cornelia Huck <cornelia.huck@de.ibm.com>
To: qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, agraf@suse.de, jfrei@linux.vnet.ibm.com,
	David Hildenbrand <dahi@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>
Subject: [Qemu-devel] [PATCH for-2.8 31/38] s390x/kvm: let the CPU model control CMM(A)
Date: Mon, 29 Aug 2016 13:45:23 +0200	[thread overview]
Message-ID: <20160829114530.10842-32-cornelia.huck@de.ibm.com> (raw)
In-Reply-To: <20160829114530.10842-1-cornelia.huck@de.ibm.com>

From: David Hildenbrand <dahi@linux.vnet.ibm.com>

Starting with recent kernels, if the cmma attributes are available, we
actually have hardware support. Enabling CMMA then means providing the
guest VCPU with CMM, therefore enabling its CMM facility.

Let's not blindly enable CMM anymore but let's control it using CPU models.
For disabled CPU models, CMMA will continue to always get enabled.

Also enable it in the applicable default models.

Please note that CMM doesn't work with hugetlbfs, therefore we will
warn the user and keep it disabled. Migrating from/to a hugetlbfs
configuration works, as it will be disabled on both sides.

Acked-by: Cornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com>
Message-Id: <1472062266-53206-24-git-send-email-dahi@linux.vnet.ibm.com>
Signed-off-by: Cornelia Huck <cornelia.huck@de.ibm.com>
---
 target-s390x/gen-features.c |  1 +
 target-s390x/kvm.c          | 47 ++++++++++++++++++++++++++++++++++-----------
 2 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/target-s390x/gen-features.c b/target-s390x/gen-features.c
index 2ae4405..349a047 100644
--- a/target-s390x/gen-features.c
+++ b/target-s390x/gen-features.c
@@ -372,6 +372,7 @@ static uint16_t full_GEN13_GA1[] = {
 static uint16_t default_GEN9_GA1[] = {
     S390_FEAT_STORE_HYPERVISOR_INFO,
     S390_FEAT_GROUP_MSA_EXT_1,
+    S390_FEAT_CMM,
 };
 #define default_GEN9_GA2 EmptyFeat
 #define default_GEN9_GA3 EmptyFeat
diff --git a/target-s390x/kvm.c b/target-s390x/kvm.c
index d40ef09..82a07ae 100644
--- a/target-s390x/kvm.c
+++ b/target-s390x/kvm.c
@@ -175,6 +175,18 @@ int kvm_s390_set_mem_limit(KVMState *s, uint64_t new_limit, uint64_t *hw_limit)
     return kvm_vm_ioctl(s, KVM_SET_DEVICE_ATTR, &attr);
 }
 
+static bool kvm_s390_cmma_available(void)
+{
+    static bool initialized, value;
+
+    if (!initialized) {
+        initialized = true;
+        value = kvm_vm_check_mem_attr(kvm_state, KVM_S390_VM_MEM_ENABLE_CMMA) &&
+                kvm_vm_check_mem_attr(kvm_state, KVM_S390_VM_MEM_CLR_CMMA);
+    }
+    return value;
+}
+
 void kvm_s390_cmma_reset(void)
 {
     int rc;
@@ -183,11 +195,15 @@ void kvm_s390_cmma_reset(void)
         .attr = KVM_S390_VM_MEM_CLR_CMMA,
     };
 
+    if (!mem_path || !kvm_s390_cmma_available()) {
+        return;
+    }
+
     rc = kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
     trace_kvm_clear_cmma(rc);
 }
 
-static void kvm_s390_enable_cmma(KVMState *s)
+static void kvm_s390_enable_cmma(void)
 {
     int rc;
     struct kvm_device_attr attr = {
@@ -195,12 +211,7 @@ static void kvm_s390_enable_cmma(KVMState *s)
         .attr = KVM_S390_VM_MEM_ENABLE_CMMA,
     };
 
-    if (!kvm_vm_check_mem_attr(s, KVM_S390_VM_MEM_ENABLE_CMMA) ||
-        !kvm_vm_check_mem_attr(s, KVM_S390_VM_MEM_CLR_CMMA)) {
-        return;
-    }
-
-    rc = kvm_vm_ioctl(s, KVM_SET_DEVICE_ATTR, &attr);
+    rc = kvm_vm_ioctl(kvm_state, KVM_SET_DEVICE_ATTR, &attr);
     trace_kvm_enable_cmma(rc);
 }
 
@@ -260,10 +271,6 @@ int kvm_arch_init(MachineState *ms, KVMState *s)
     cap_mem_op = kvm_check_extension(s, KVM_CAP_S390_MEM_OP);
     cap_s390_irq = kvm_check_extension(s, KVM_CAP_S390_INJECT_IRQ);
 
-    if (!mem_path) {
-        kvm_s390_enable_cmma(s);
-    }
-
     if (!kvm_check_extension(s, KVM_CAP_S390_GMAP)
         || !kvm_check_extension(s, KVM_CAP_S390_COW)) {
         phys_mem_set_alloc(legacy_s390_alloc);
@@ -2550,6 +2557,11 @@ void kvm_s390_get_host_cpu_model(S390CPUModel *model, Error **errp)
         return;
     }
 
+    /* with cpu model support, CMM is only indicated if really available */
+    if (kvm_s390_cmma_available()) {
+        set_bit(S390_FEAT_CMM, model->features);
+    }
+
     if (s390_known_cpu_type(cpu_type)) {
         /* we want the exact model, even if some features are missing */
         model->def = s390_find_cpu_def(cpu_type, ibc_gen(unblocked_ibc),
@@ -2582,6 +2594,10 @@ void kvm_s390_apply_cpu_model(const S390CPUModel *model, Error **errp)
     int rc;
 
     if (!model) {
+        /* compatibility handling if cpu models are disabled */
+        if (kvm_s390_cmma_available() && !mem_path) {
+            kvm_s390_enable_cmma();
+        }
         return;
     }
     if (!kvm_s390_cpu_models_supported()) {
@@ -2610,4 +2626,13 @@ void kvm_s390_apply_cpu_model(const S390CPUModel *model, Error **errp)
         error_setg(errp, "KVM: Error configuring CPU subfunctions: %d", rc);
         return;
     }
+    /* enable CMM via CMMA - disable on hugetlbfs */
+    if (test_bit(S390_FEAT_CMM, model->features)) {
+        if (mem_path) {
+            error_report("Warning: CMM will not be enabled because it is not "
+                         "compatible to hugetlbfs.");
+        } else {
+            kvm_s390_enable_cmma();
+        }
+    }
 }
-- 
2.9.3

  parent reply	other threads:[~2016-08-29 11:46 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-29 11:44 [Qemu-devel] [PATCH for-2.8 00/38] s390x patches for 2.8 Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 01/38] s390x: add compat machine " Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 02/38] s390x/pci: return directly if create zpci failed Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 03/38] s390x/pci: assert zpci always existing Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 04/38] s390/sclp: cache the sclp device Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 05/38] s390x: wrap flic savevm calls into vmstate Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 06/38] s390x/ioinst: advertise fcs facility Cornelia Huck
2016-08-29 11:44 ` [Qemu-devel] [PATCH for-2.8 07/38] s390x/css: handle cssid 255 correctly Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 08/38] linux-headers: update Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 09/38] s390x/kvm: 2 byte software breakpoint support Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 10/38] qmp: details about CPU definitions in query-cpu-definitions Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 11/38] s390x/cpumodel: "host" and "qemu" as CPU subclasses Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 12/38] s390x/cpumodel: expose CPU class properties Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 13/38] s390x/cpumodel: introduce CPU features Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 14/38] s390x/cpumodel: generate CPU feature lists for CPU models Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 15/38] s390x/cpumodel: generate CPU feature group lists Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 16/38] s390x/cpumodel: introduce CPU feature group definitions Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 17/38] s390x/cpumodel: register defined CPU models as subclasses Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 18/38] s390x/cpumodel: store the CPU model in the CPU instance Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 19/38] s390x/cpumodel: expose features and feature groups as properties Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 20/38] s390x/cpumodel: let the CPU model handle feature checks Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 21/38] s390x/cpumodel: check and apply the CPU model Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 22/38] s390x/sclp: factor out preparation of cpu entries Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 23/38] s390x/sclp: introduce sclp feature blocks Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 24/38] s390x/sclp: indicate sclp features Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 25/38] s390x/sclp: propagate the ibc val (lowest and unblocked ibc) Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 26/38] s390x/sclp: propagate the mha via sclp Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 27/38] s390x/sclp: propagate hmfai Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 28/38] s390x/kvm: allow runtime-instrumentation for "none" machine Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 29/38] s390x/kvm: implement CPU model support Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 30/38] s390x/kvm: disable host model for problematic compat machines Cornelia Huck
2016-08-29 11:45 ` Cornelia Huck [this message]
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 32/38] s390x/kvm: don't enable key wrapping if msa3 is disabled Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 33/38] qmp: add QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 34/38] qmp: add QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 35/38] qmp: add QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 36/38] s390x/cpumodel: implement QMP interface "query-cpu-model-expansion" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 37/38] s390x/cpumodel: implement QMP interface "query-cpu-model-comparison" Cornelia Huck
2016-08-29 11:45 ` [Qemu-devel] [PATCH for-2.8 38/38] s390x/cpumodel: implement QMP interface "query-cpu-model-baseline" Cornelia Huck
2016-08-29 15:39 ` [Qemu-devel] [PATCH for-2.8 00/38] s390x patches for 2.8 no-reply
2016-09-05  7:28 ` David Hildenbrand

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=20160829114530.10842-32-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=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).