From: Igor Mammedov <imammedo@redhat.com>
To: pbonzini@redhat.com
Cc: aliguori@us.ibm.com, ehabkost@redhat.com, jan.kiszka@siemens.com,
Don@cloudswitch.com, mtosatti@redhat.com, qemu-devel@nongnu.org,
eblake@redhat.com, mdroth@linux.vnet.ibm.com,
blauwirbel@gmail.com, lersek@redhat.com, afaerber@suse.de,
stefanha@linux.vnet.ibm.com
Subject: [Qemu-devel] [PATCH 18/22 v3] target-i386: parse cpu_model string into set of stringified properties
Date: Tue, 2 Oct 2012 15:08:37 +0200 [thread overview]
Message-ID: <1349183317-8134-1-git-send-email-imammedo@redhat.com> (raw)
In-Reply-To: <506AD1AB.4040605@redhat.com>
cpu_model string does represent features in following format:
([+-]feat)|(feat=foo)|(feat)
which makes it impossible directly use property infrastructure
to set features on CPU.
This patch introduces parser that splits CPU name from cpu_model and
converts legacy features string into canonized set of strings that
is compatible with property manipulation infrastructure.
PS:
* later it could be used as a hook to convert legacy command line
features to global properties. Then marked as deprecated and
removed with -cpu option in the future.
Signed-off-by: Igor Mammedov <imammedo@redhat.com>
---
v2:
* compiler complains that it's unused function but I guess it is
easier for review this way, for pull req I'll squash it into next
patch
* fix spelling error
* initialize sptr, due to a CentOS6 compiler warning, that
breakes build when -Werror is set. Suggested-by: Don Slutz
v3:
* Mingw doesn't have strtok_r(), use g_strsplit() instead of it.
Suggested-by: Blue Swirl
---
target-i386/cpu.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 51 insertions(+), 0 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index ad1f088..9cf25f6 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1339,6 +1339,57 @@ static void cpudef_2_x86_cpu(X86CPU *cpu, x86_def_t *def, Error **errp)
}
}
+/* convert legacy cpumodel string to string cpu_name and
+ * a uniform set of custom features that will be applied to CPU
+ * using object_property_parse()
+ */
+static void compat_normalize_cpu_model(const char *cpu_model, char **cpu_name,
+ QDict **features, Error **errp)
+{
+ int i;
+ gchar **feat_array = g_strsplit(cpu_model, ",", 0);
+ *features = qdict_new();
+
+ g_assert(feat_array[0] != NULL);
+ *cpu_name = g_strdup(feat_array[0]);
+
+ for (i = 1; feat_array[i]; ++i) {
+ gchar *featurestr = feat_array[i];
+ char *val;
+ if (featurestr[0] == '+') {
+ /*
+ * preseve legacy behaviour, if feature was disabled once
+ * do not allow to enable it again
+ */
+ if (!qdict_haskey(*features, featurestr + 1)) {
+ qdict_put(*features, featurestr + 1, qstring_from_str("on"));
+ }
+ } else if (featurestr[0] == '-') {
+ qdict_put(*features, featurestr + 1, qstring_from_str("off"));
+ } else {
+ val = strchr(featurestr, '=');
+ if (val) {
+ *val = 0; val++;
+ if (!strcmp(featurestr, "vendor")) {
+ qdict_put(*features, "vendor-override",
+ qstring_from_str("on"));
+ qdict_put(*features, featurestr, qstring_from_str(val));
+ } else if (!strcmp(featurestr, "tsc_freq")) {
+ qdict_put(*features, "tsc-frequency",
+ qstring_from_str(val));
+ } else {
+ qdict_put(*features, featurestr, qstring_from_str(val));
+ }
+ } else {
+ qdict_put(*features, featurestr, qstring_from_str("on"));
+ }
+ }
+ }
+
+ g_strfreev(feat_array);
+ return;
+}
+
static int cpu_x86_find_by_name(X86CPU *cpu, x86_def_t *x86_cpu_def,
const char *cpu_model, Error **errp)
{
--
1.7.1
next prev parent reply other threads:[~2012-10-02 13:09 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-26 20:32 [Qemu-devel] [PATCH 00/22 v3] target-i386: convert CPU features into properties Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 01/22] target-i386: return Error from cpu_x86_find_by_name() Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 02/22] target-i386: cpu_x86_register(): report error from property setter Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 03/22] target-i386: if x86_cpu_realize() failed report error and do cleanup Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 04/22] target-i386: filter out not TCG features if running without kvm at realize time Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 05/22] target-i386: move out CPU features initialization in separate func Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 06/22] target-i386: xlevel should be more than 0x80000000, move fixup into setter Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 07/22] target-i386: convert cpuid features into properties Igor Mammedov
2012-09-26 21:31 ` H. Peter Anvin
2012-09-26 21:39 ` Eduardo Habkost
2012-10-01 12:53 ` [Qemu-devel] [PATCH 07/22 v4] " Igor Mammedov
2012-10-01 12:54 ` [Qemu-devel] [PATCH 18/22 v3] target-i386: parse cpu_model string into set of stringified properties Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 08/22] target-i386: add stubs for hyperv_(vapic_recommended|relaxed_timing_enabled|get_spinlock_retries)() Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 09/22] target-i386: convert 'hv_spinlocks' feature into property Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 10/22] target-i386: convert 'hv_relaxed' " Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 11/22] target-i386: convert 'hv_vapic' " Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 12/22] target-i386: convert 'check' and 'enforce' features into properties Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 13/22] add visitor for parsing hz[KMG] input string Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 14/22] target-i386: use visit_type_hz to parse tsc_freq property value Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 15/22] target-i386: introduce vendor-override property Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 16/22] target-i386: use define for cpuid vendor string size Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 17/22] target-i386: replace uint32_t vendor fields by vendor string in x86_def_t Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 18/22] target-i386: parse cpu_model string into set of stringified properties Igor Mammedov
2012-09-30 12:16 ` Blue Swirl
2012-10-01 12:46 ` Igor Mammedov
2012-10-02 11:28 ` Eric Blake
2012-10-02 11:36 ` Paolo Bonzini
2012-10-02 13:08 ` Igor Mammedov [this message]
2012-10-03 20:09 ` Blue Swirl
2012-10-03 20:17 ` Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 19/22] target-i386: use properties to set/unset user specified features on CPU Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 20/22] target-i386: move init of "hypervisor" feature into CPU initializer from cpudef Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 21/22] target-i386: move default init of cpuid_kvm_features bitmap " Igor Mammedov
2012-09-26 20:32 ` [Qemu-devel] [PATCH 22/22] target-i386: cleanup cpu_x86_find_by_name(), only fill x86_def_t in it Igor Mammedov
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=1349183317-8134-1-git-send-email-imammedo@redhat.com \
--to=imammedo@redhat.com \
--cc=Don@cloudswitch.com \
--cc=afaerber@suse.de \
--cc=aliguori@us.ibm.com \
--cc=blauwirbel@gmail.com \
--cc=eblake@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jan.kiszka@siemens.com \
--cc=lersek@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.com \
/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.