[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/13] cpuid: Replace strtok with get_opt_name
From: |
Andre Przywara |
Subject: |
[Qemu-devel] [PATCH 04/13] cpuid: Replace strtok with get_opt_name |
Date: |
Tue, 2 Feb 2010 11:08:12 +0100 |
To avoid the non-reentrant capable strtok() use the QEMU defined
get_opt_name() to parse the -cpu parameter list. Since there is a
name clash between linux-user/mmap.c:qemu_malloc() and
qemu-malloc.c:qemu_malloc() I copied the small function from
qemu-option.c into cpuid.c. Not the best solution, bit IMO the
least intrusive and smallest one.
Signed-off-by: Andre Przywara <address@hidden>
---
target-i386/cpuid.c | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
index cc080f4..0238718 100644
--- a/target-i386/cpuid.c
+++ b/target-i386/cpuid.c
@@ -24,6 +24,23 @@
#include "cpu.h"
#include "kvm.h"
+static const char *get_opt_name(char *buf, int buf_size,
+ const char *p, char delim)
+{
+ char *q;
+
+ q = buf;
+ while (*p != '\0' && *p != delim) {
+ if (q && (q - buf) < buf_size - 1)
+ *q++ = *p;
+ p++;
+ }
+ if (q)
+ *q = '\0';
+
+ return p;
+}
+
/* feature flags taken from "Intel Processor Identification and the CPUID
* Instruction" and AMD's "CPUID Specification". In cases of disagreement
* about feature names, the Linux name is used. */
@@ -423,8 +440,8 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def,
const char *cpu_model)
unsigned int i;
x86_def_t *def;
- char *s = strdup(cpu_model);
- char *featurestr, *name = strtok(s, ",");
+ const char* s;
+ char featurestr[64];
uint32_t plus_features = 0, plus_ext_features = 0,
plus_ext2_features = 0, plus_ext3_features = 0, plus_kvm_features = 0;
uint32_t minus_features = 0, minus_ext_features = 0,
@@ -432,14 +449,15 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def,
const char *cpu_model)
minus_kvm_features = 0;
uint32_t numvalue;
+ s = get_opt_name(featurestr, 64, cpu_model, ',');
def = NULL;
for (i = 0; i < ARRAY_SIZE(x86_defs); i++) {
- if (strcmp(name, x86_defs[i].name) == 0) {
+ if (strcmp(featurestr, x86_defs[i].name) == 0) {
def = &x86_defs[i];
break;
}
}
- if (kvm_enabled() && strcmp(name, "host") == 0) {
+ if (kvm_enabled() && strcmp(featurestr, "host") == 0) {
cpu_x86_fill_host(x86_cpu_def);
} else if (!def) {
goto error;
@@ -453,10 +471,9 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def,
const char *cpu_model)
&plus_ext_features, &plus_ext2_features, &plus_ext3_features,
&plus_kvm_features);
- featurestr = strtok(NULL, ",");
-
- while (featurestr) {
+ while (*s != 0) {
char *val;
+ s = get_opt_name(featurestr, 64, s + 1, ',');
if (featurestr[0] == '+') {
add_flagname_to_bitmaps(featurestr + 1, &plus_features,
&plus_ext_features, &plus_ext2_features,
@@ -536,7 +553,6 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def,
const char *cpu_model)
"(+feature|-feature|feature=xyz)\n", featurestr);
goto error;
}
- featurestr = strtok(NULL, ",");
}
x86_cpu_def->features |= plus_features;
x86_cpu_def->ext_features |= plus_ext_features;
@@ -548,11 +564,9 @@ static int cpu_x86_find_by_name(x86_def_t *x86_cpu_def,
const char *cpu_model)
x86_cpu_def->ext2_features &= ~minus_ext2_features;
x86_cpu_def->ext3_features &= ~minus_ext3_features;
x86_cpu_def->kvm_features &= ~minus_kvm_features;
- free(s);
return 0;
error:
- free(s);
return -1;
}
--
1.6.4
- [Qemu-devel] [PATCH 00/13] i386 cpuid: cleanup and fixes, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 02/13] cpuid: replace magic number with named constant, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 05/13] cpuid: add missing CPUID feature flag names, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 08/13] cpuid: simplify CPUID flag search function, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 11/13] cpuid: Always expose 32 and 64-bit CPUs, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 10/13] cpuid: add TCG feature bit trimming, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 03/13] cpuid: moved host_cpuid function and remove prototype, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 09/13] cpuid: propagate further CPUID leafs when -cpu host, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 04/13] cpuid: Replace strtok with get_opt_name,
Andre Przywara <=
- [Qemu-devel] [PATCH 01/13] cpuid: move CPUID functions into separate file, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 07/13] cpuid: remove unnecessary kvm_trim function, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 06/13] cpuid: list all known x86 CPUID feature flags, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 12/13] cpuid: Add kvm32 CPU model, Andre Przywara, 2010/02/02
- [Qemu-devel] [PATCH 13/13] cpuid: fix CPUID levels, Andre Przywara, 2010/02/02