All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Mueller <mimu@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org, kvm@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Gleb Natapov <gleb@kernel.org>, Alexander Graf <agraf@suse.de>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	"Jason J. Herne" <jjherne@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andreas Faerber <afaerber@suse.de>,
	Richard Henderson <rth@twiddle.net>,
	Michael Mueller <mimu@linux.vnet.ibm.com>
Subject: [RFC PATCH v2 01/15] cpu-model: Introduce probe mode for machine none
Date: Tue, 17 Feb 2015 15:23:59 +0100	[thread overview]
Message-ID: <1424183053-4310-2-git-send-email-mimu@linux.vnet.ibm.com> (raw)
In-Reply-To: <1424183053-4310-1-git-send-email-mimu@linux.vnet.ibm.com>

QEMU now switches into "probe mode" when the selected machine is "none" and no
specific accelerator(s) has been requested (i.e.: "-machine none").

In probe mode a by "<ARCH>_CONFIG" defines predefined list of accelerators run
their init() methods.

Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com>
---
 accel.c              | 31 +++++++++++++++++++++++++------
 include/hw/boards.h  |  1 +
 include/sysemu/kvm.h | 10 ++++++++++
 kvm-all.c            |  3 +++
 4 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/accel.c b/accel.c
index 74e41da..260b009 100644
--- a/accel.c
+++ b/accel.c
@@ -36,6 +36,9 @@
 
 int tcg_tb_size;
 static bool tcg_allowed = true;
+static const char *probe_mode_accels =
+    "kvm:"
+    "tcg";
 
 static int tcg_init(MachineState *ms)
 {
@@ -59,13 +62,15 @@ static AccelClass *accel_find(const char *opt_name)
     return ac;
 }
 
-static int accel_init_machine(AccelClass *acc, MachineState *ms)
+static int accel_init_machine(AccelClass *acc, MachineState *ms,
+                              bool probe_mode)
 {
     ObjectClass *oc = OBJECT_CLASS(acc);
     const char *cname = object_class_get_name(oc);
     AccelState *accel = ACCEL(object_new(cname));
     int ret;
     ms->accelerator = accel;
+    ms->probe_mode = probe_mode;
     *(acc->allowed) = true;
     ret = acc->init_machine(ms);
     if (ret < 0) {
@@ -78,20 +83,30 @@ static int accel_init_machine(AccelClass *acc, MachineState *ms)
 
 int configure_accelerator(MachineState *ms)
 {
-    const char *p;
+    const char *p, *name;
     char buf[10];
     int ret;
     bool accel_initialised = false;
     bool init_failed = false;
     AccelClass *acc = NULL;
+    ObjectClass *oc;
+    bool probe_mode = false;
 
     p = qemu_opt_get(qemu_get_machine_opts(), "accel");
     if (p == NULL) {
-        /* Use the default "accelerator", tcg */
-        p = "tcg";
+        oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
+        name = object_class_get_name(oc);
+        probe_mode = !strcmp(name, "none" TYPE_MACHINE_SUFFIX);
+        if (probe_mode) {
+            /* Use these accelerators in probe mode, tcg should be last */
+            p = probe_mode_accels;
+        } else {
+            /* Use the default "accelerator", tcg */
+            p = "tcg";
+        }
     }
 
-    while (!accel_initialised && *p != '\0') {
+    while ((probe_mode || !accel_initialised) && *p != '\0') {
         if (*p == ':') {
             p++;
         }
@@ -106,7 +121,7 @@ int configure_accelerator(MachineState *ms)
                    acc->name);
             continue;
         }
-        ret = accel_init_machine(acc, ms);
+        ret = accel_init_machine(acc, ms, probe_mode);
         if (ret < 0) {
             init_failed = true;
             fprintf(stderr, "failed to initialize %s: %s\n",
@@ -128,6 +143,10 @@ int configure_accelerator(MachineState *ms)
         fprintf(stderr, "Back to %s accelerator.\n", acc->name);
     }
 
+    if (probe_mode) {
+        accel_initialised = false;
+    }
+
     return !accel_initialised;
 }
 
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3ddc449..3253fa5 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -135,6 +135,7 @@ struct MachineState {
     bool usb;
     char *firmware;
     bool iommu;
+    bool probe_mode;
 
     ram_addr_t ram_size;
     ram_addr_t maxram_size;
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 30cb84d..fbc18c8 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -50,6 +50,7 @@ extern bool kvm_msi_via_irqfd_allowed;
 extern bool kvm_gsi_routing_allowed;
 extern bool kvm_gsi_direct_mapping;
 extern bool kvm_readonly_mem_allowed;
+extern bool kvm_probe_mode;
 
 #if defined CONFIG_KVM || !defined NEED_CPU_H
 #define kvm_enabled()           (kvm_allowed)
@@ -143,6 +144,15 @@ extern bool kvm_readonly_mem_allowed;
  */
 #define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed)
 
+/**
+ * kvm_probe_mode_enabled:
+ *
+ * Returns: true if KVM is initialized for a machine type that
+ * has its probe_mode attribute set (ie QEMU was started in probe
+ * mode)
+ */
+#define kvm_probe_mode_enabled() (kvm_probe_mode)
+
 #else
 #define kvm_enabled()           (0)
 #define kvm_irqchip_in_kernel() (false)
diff --git a/kvm-all.c b/kvm-all.c
index 05a79c2..f9e4434 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -126,6 +126,7 @@ bool kvm_gsi_routing_allowed;
 bool kvm_gsi_direct_mapping;
 bool kvm_allowed;
 bool kvm_readonly_mem_allowed;
+bool kvm_probe_mode;
 
 static const KVMCapabilityInfo kvm_required_capabilites[] = {
     KVM_CAP_INFO(USER_MEMORY),
@@ -1471,6 +1472,8 @@ static int kvm_init(MachineState *ms)
         goto err;
     }
 
+    kvm_probe_mode = ms->probe_mode;
+
     s->nr_slots = kvm_check_extension(s, KVM_CAP_NR_MEMSLOTS);
 
     /* If unspecified, use the default value */
-- 
1.8.3.1


WARNING: multiple messages have this Message-ID (diff)
From: Michael Mueller <mimu@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org, kvm@vger.kernel.org,
	linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Michael Mueller <mimu@linux.vnet.ibm.com>,
	Gleb Natapov <gleb@kernel.org>, Alexander Graf <agraf@suse.de>,
	Christian Borntraeger <borntraeger@de.ibm.com>,
	"Jason J. Herne" <jjherne@linux.vnet.ibm.com>,
	Cornelia Huck <cornelia.huck@de.ibm.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Andreas Faerber <afaerber@suse.de>,
	Richard Henderson <rth@twiddle.net>
Subject: [Qemu-devel] [RFC PATCH v2 01/15] cpu-model: Introduce probe mode for machine none
Date: Tue, 17 Feb 2015 15:23:59 +0100	[thread overview]
Message-ID: <1424183053-4310-2-git-send-email-mimu@linux.vnet.ibm.com> (raw)
In-Reply-To: <1424183053-4310-1-git-send-email-mimu@linux.vnet.ibm.com>

QEMU now switches into "probe mode" when the selected machine is "none" and no
specific accelerator(s) has been requested (i.e.: "-machine none").

In probe mode a by "<ARCH>_CONFIG" defines predefined list of accelerators run
their init() methods.

Signed-off-by: Michael Mueller <mimu@linux.vnet.ibm.com>
---
 accel.c              | 31 +++++++++++++++++++++++++------
 include/hw/boards.h  |  1 +
 include/sysemu/kvm.h | 10 ++++++++++
 kvm-all.c            |  3 +++
 4 files changed, 39 insertions(+), 6 deletions(-)

diff --git a/accel.c b/accel.c
index 74e41da..260b009 100644
--- a/accel.c
+++ b/accel.c
@@ -36,6 +36,9 @@
 
 int tcg_tb_size;
 static bool tcg_allowed = true;
+static const char *probe_mode_accels =
+    "kvm:"
+    "tcg";
 
 static int tcg_init(MachineState *ms)
 {
@@ -59,13 +62,15 @@ static AccelClass *accel_find(const char *opt_name)
     return ac;
 }
 
-static int accel_init_machine(AccelClass *acc, MachineState *ms)
+static int accel_init_machine(AccelClass *acc, MachineState *ms,
+                              bool probe_mode)
 {
     ObjectClass *oc = OBJECT_CLASS(acc);
     const char *cname = object_class_get_name(oc);
     AccelState *accel = ACCEL(object_new(cname));
     int ret;
     ms->accelerator = accel;
+    ms->probe_mode = probe_mode;
     *(acc->allowed) = true;
     ret = acc->init_machine(ms);
     if (ret < 0) {
@@ -78,20 +83,30 @@ static int accel_init_machine(AccelClass *acc, MachineState *ms)
 
 int configure_accelerator(MachineState *ms)
 {
-    const char *p;
+    const char *p, *name;
     char buf[10];
     int ret;
     bool accel_initialised = false;
     bool init_failed = false;
     AccelClass *acc = NULL;
+    ObjectClass *oc;
+    bool probe_mode = false;
 
     p = qemu_opt_get(qemu_get_machine_opts(), "accel");
     if (p == NULL) {
-        /* Use the default "accelerator", tcg */
-        p = "tcg";
+        oc = (ObjectClass *) MACHINE_GET_CLASS(current_machine);
+        name = object_class_get_name(oc);
+        probe_mode = !strcmp(name, "none" TYPE_MACHINE_SUFFIX);
+        if (probe_mode) {
+            /* Use these accelerators in probe mode, tcg should be last */
+            p = probe_mode_accels;
+        } else {
+            /* Use the default "accelerator", tcg */
+            p = "tcg";
+        }
     }
 
-    while (!accel_initialised && *p != '\0') {
+    while ((probe_mode || !accel_initialised) && *p != '\0') {
         if (*p == ':') {
             p++;
         }
@@ -106,7 +121,7 @@ int configure_accelerator(MachineState *ms)
                    acc->name);
             continue;
         }
-        ret = accel_init_machine(acc, ms);
+        ret = accel_init_machine(acc, ms, probe_mode);
         if (ret < 0) {
             init_failed = true;
             fprintf(stderr, "failed to initialize %s: %s\n",
@@ -128,6 +143,10 @@ int configure_accelerator(MachineState *ms)
         fprintf(stderr, "Back to %s accelerator.\n", acc->name);
     }
 
+    if (probe_mode) {
+        accel_initialised = false;
+    }
+
     return !accel_initialised;
 }
 
diff --git a/include/hw/boards.h b/include/hw/boards.h
index 3ddc449..3253fa5 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -135,6 +135,7 @@ struct MachineState {
     bool usb;
     char *firmware;
     bool iommu;
+    bool probe_mode;
 
     ram_addr_t ram_size;
     ram_addr_t maxram_size;
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index 30cb84d..fbc18c8 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -50,6 +50,7 @@ extern bool kvm_msi_via_irqfd_allowed;
 extern bool kvm_gsi_routing_allowed;
 extern bool kvm_gsi_direct_mapping;
 extern bool kvm_readonly_mem_allowed;
+extern bool kvm_probe_mode;
 
 #if defined CONFIG_KVM || !defined NEED_CPU_H
 #define kvm_enabled()           (kvm_allowed)
@@ -143,6 +144,15 @@ extern bool kvm_readonly_mem_allowed;
  */
 #define kvm_readonly_mem_enabled() (kvm_readonly_mem_allowed)
 
+/**
+ * kvm_probe_mode_enabled:
+ *
+ * Returns: true if KVM is initialized for a machine type that
+ * has its probe_mode attribute set (ie QEMU was started in probe
+ * mode)
+ */
+#define kvm_probe_mode_enabled() (kvm_probe_mode)
+
 #else
 #define kvm_enabled()           (0)
 #define kvm_irqchip_in_kernel() (false)
diff --git a/kvm-all.c b/kvm-all.c
index 05a79c2..f9e4434 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -126,6 +126,7 @@ bool kvm_gsi_routing_allowed;
 bool kvm_gsi_direct_mapping;
 bool kvm_allowed;
 bool kvm_readonly_mem_allowed;
+bool kvm_probe_mode;
 
 static const KVMCapabilityInfo kvm_required_capabilites[] = {
     KVM_CAP_INFO(USER_MEMORY),
@@ -1471,6 +1472,8 @@ static int kvm_init(MachineState *ms)
         goto err;
     }
 
+    kvm_probe_mode = ms->probe_mode;
+
     s->nr_slots = kvm_check_extension(s, KVM_CAP_NR_MEMSLOTS);
 
     /* If unspecified, use the default value */
-- 
1.8.3.1

  reply	other threads:[~2015-02-17 14:25 UTC|newest]

Thread overview: 120+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-17 14:23 [RFC PATCH v2 00/15] QEMU: s390: cpu model implementation Michael Mueller
2015-02-17 14:23 ` [Qemu-devel] " Michael Mueller
2015-02-17 14:23 ` Michael Mueller [this message]
2015-02-17 14:23   ` [Qemu-devel] [RFC PATCH v2 01/15] cpu-model: Introduce probe mode for machine none Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 02/15] cpu-model: Introduce option --probe to switch into probe mode Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24   ` Michael Mueller
2015-02-17 19:16   ` [Qemu-devel] " Eric Blake
2015-02-17 19:16     ` Eric Blake
2015-02-18  9:08     ` [Qemu-devel] " Michael Mueller
2015-02-18  9:08       ` Michael Mueller
2015-02-18  9:08       ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 03/15] cpu-model: Introduce stub routine cpu_desc_avail Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24   ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 04/15] cpu-model/s390: Introduce S390 CPU models Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24   ` Michael Mueller
2015-02-20 13:54   ` Alexander Graf
2015-02-20 13:54     ` [Qemu-devel] " Alexander Graf
2015-02-20 15:00     ` Michael Mueller
2015-02-20 15:00       ` Michael Mueller
2015-02-20 15:22       ` Alexander Graf
2015-02-20 15:22         ` Alexander Graf
2015-02-20 15:49         ` Michael Mueller
2015-02-20 15:49           ` Michael Mueller
2015-02-20 16:57           ` Alexander Graf
2015-02-20 16:57             ` Alexander Graf
2015-02-20 17:37             ` Michael Mueller
2015-02-20 17:37               ` Michael Mueller
2015-02-20 17:50               ` Alexander Graf
2015-02-20 17:50                 ` Alexander Graf
2015-02-20 19:43                 ` Michael Mueller
2015-02-20 19:43                   ` Michael Mueller
2015-02-20 19:55                   ` Alexander Graf
2015-02-20 19:55                     ` Alexander Graf
2015-02-23 12:56         ` Christian Borntraeger
2015-02-23 12:56           ` Christian Borntraeger
2015-02-23 13:27           ` Christian Borntraeger
2015-02-23 13:27             ` Christian Borntraeger
2015-02-20 13:55   ` Alexander Graf
2015-02-20 13:55     ` [Qemu-devel] " Alexander Graf
2015-02-20 15:02     ` Michael Mueller
2015-02-20 15:02       ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 05/15] cpu-model/s390: Introduce S390 CPU facilities Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 06/15] cpu-model/s390: Define cpu model specific facility lists Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 07/15] cpu-model/s390: Add cpu model alias definition routines Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 08/15] cpu-model/s390: Update linux-headers/asm-s390/kvm.h Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 09/15] cpu-model/s390: Add KVM VM attribute interface routines Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-20 13:59   ` Alexander Graf
2015-02-20 13:59     ` [Qemu-devel] " Alexander Graf
2015-02-20 15:18     ` Michael Mueller
2015-02-20 15:18       ` Michael Mueller
2015-02-20 16:59       ` Alexander Graf
2015-02-20 16:59         ` Alexander Graf
2015-02-20 18:42         ` Michael Mueller
2015-02-20 18:42           ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 10/15] cpu-model/s390: Add cpu class initialization routines Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24   ` Michael Mueller
2015-02-20 16:02   ` Richard Henderson
2015-02-20 16:02     ` [Qemu-devel] " Richard Henderson
2015-02-20 16:12     ` Michael Mueller
2015-02-20 16:12       ` Michael Mueller
2015-02-20 16:12       ` Michael Mueller
2015-02-20 16:27       ` [Qemu-devel] " Michael Mueller
2015-02-20 16:27         ` Michael Mueller
2015-02-20 16:34       ` Andreas Färber
2015-02-20 16:34         ` Andreas Färber
2015-02-20 16:55         ` Michael Mueller
2015-02-20 18:11   ` Richard Henderson
2015-02-20 18:11     ` [Qemu-devel] " Richard Henderson
2015-02-20 18:59     ` Michael Mueller
2015-02-20 18:59       ` Michael Mueller
2015-02-20 19:21       ` Alexander Graf
2015-02-20 19:21         ` Alexander Graf
2015-02-20 19:35         ` Michael Mueller
2015-02-20 19:35           ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 11/15] cpu-model/s390: Add QMP command query-cpu-model Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24   ` Michael Mueller
2015-02-17 18:03   ` [Qemu-devel] " Eric Blake
2015-02-18  8:39     ` Michael Mueller
2015-02-18  8:39       ` Michael Mueller
2015-02-18  8:39       ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 12/15] cpu-model/s390: Extend QMP command query-cpu-definitions Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 18:09   ` Eric Blake
2015-02-18  9:29     ` Michael Mueller
2015-02-18  9:29       ` Michael Mueller
2015-02-18  9:29       ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 13/15] cpu-model/s390: Add processor property routines Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-20 14:03   ` Alexander Graf
2015-02-20 14:03     ` [Qemu-devel] " Alexander Graf
2015-02-20 15:32     ` Michael Mueller
2015-02-20 15:32       ` Michael Mueller
2015-02-20 15:41       ` Andreas Färber
2015-02-20 15:41         ` Andreas Färber
2015-02-20 16:04         ` Michael Mueller
2015-02-20 16:04           ` Michael Mueller
2015-02-20 16:28           ` Andreas Färber
2015-02-20 16:28             ` Andreas Färber
2015-02-20 16:53             ` Michael Mueller
2015-02-20 16:53               ` Michael Mueller
2015-02-20 16:05         ` Michael Mueller
2015-02-20 16:05           ` Michael Mueller
2015-02-20 17:00       ` Alexander Graf
2015-02-20 17:00         ` Alexander Graf
2015-02-20 19:29         ` Michael Mueller
2015-02-20 19:29           ` Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 14/15] cpu-model/s390: Add cpu model selection routine Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller
2015-02-17 14:24 ` [RFC PATCH v2 15/15] cpu-model/s390: Enable S390 cpu model Michael Mueller
2015-02-17 14:24   ` [Qemu-devel] " Michael Mueller

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=1424183053-4310-2-git-send-email-mimu@linux.vnet.ibm.com \
    --to=mimu@linux.vnet.ibm.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=borntraeger@de.ibm.com \
    --cc=cornelia.huck@de.ibm.com \
    --cc=gleb@kernel.org \
    --cc=jjherne@linux.vnet.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.