[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v4 27/33] target-i386: Register X86CPU "feat-kvmcloc
From: |
Eduardo Habkost |
Subject: |
[Qemu-devel] [PATCH v4 27/33] target-i386: Register X86CPU "feat-kvmclock" feature |
Date: |
Thu, 14 Aug 2014 16:25:56 -0300 |
The "kvmclock" feature is special because it affects two bits in the KVM
CPUID leaf, so it has to be handled differently from the other feature
properties that will be added.
Signed-off-by: Eduardo Habkost <address@hidden>
---
target-i386/cpu.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index b005b0d..0eb401b 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -2774,6 +2774,61 @@ uint32_t x86_cpu_apic_id_from_index(unsigned int
cpu_index)
}
}
+typedef struct FeatureProperty {
+ FeatureWord word;
+ uint32_t mask;
+} FeatureProperty;
+
+
+static void x86_cpu_get_feature_prop(Object *obj,
+ struct Visitor *v,
+ void *opaque,
+ const char *name,
+ Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ CPUX86State *env = &cpu->env;
+ FeatureProperty *fp = opaque;
+ bool value = (env->features[fp->word] & fp->mask) == fp->mask;
+ visit_type_bool(v, &value, name, errp);
+}
+
+static void x86_cpu_set_feature_prop(Object *obj,
+ struct Visitor *v,
+ void *opaque,
+ const char *name,
+ Error **errp)
+{
+ X86CPU *cpu = X86_CPU(obj);
+ CPUX86State *env = &cpu->env;
+ FeatureProperty *fp = opaque;
+ bool value;
+ visit_type_bool(v, &value, name, errp);
+ if (value) {
+ env->features[fp->word] |= fp->mask;
+ } else {
+ env->features[fp->word] &= ~fp->mask;
+ }
+}
+
+/* Register a boolean feature-bits property.
+ * If mask has multiple bits, all must be set for the property to return true.
+ */
+static void x86_cpu_register_feature_prop(X86CPU *cpu,
+ const char *prop_name,
+ FeatureWord w,
+ uint32_t mask)
+{
+ FeatureProperty *fp;
+ fp = g_new0(FeatureProperty, 1);
+ fp->word = w;
+ fp->mask = mask;
+ object_property_add(OBJECT(cpu), prop_name, "bool",
+ x86_cpu_set_feature_prop,
+ x86_cpu_get_feature_prop,
+ NULL, fp, &error_abort);
+}
+
static void x86_cpu_initfn(Object *obj)
{
CPUState *cs = CPU(obj);
@@ -2819,6 +2874,12 @@ static void x86_cpu_initfn(Object *obj)
x86_cpu_get_feature_words,
NULL, NULL, (void *)cpu->filtered_features, NULL);
+ /* "feat-kvmclock" will affect both kvmclock feature bits */
+ x86_cpu_register_feature_prop(cpu, "feat-kvmclock", FEAT_KVM,
+ (1UL << KVM_FEATURE_CLOCKSOURCE) |
+ (1UL << KVM_FEATURE_CLOCKSOURCE2));
+
+
cpu->hyperv_spinlock_attempts = HYPERV_SPINLOCK_NEVER_RETRY;
env->cpuid_apic_id = x86_cpu_apic_id_from_index(cs->cpu_index);
--
1.9.3
- [Qemu-devel] [PATCH v4 19/33] pc: Rename pc_machine variable to pcms, (continued)
- [Qemu-devel] [PATCH v4 19/33] pc: Rename pc_machine variable to pcms, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 20/33] pc: Pass PCMachineState argument to pc_cpus_init(), Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 21/33] machine: Add MachineClass.default_cpu_model field, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 22/33] pc: Move globals to PCMachineClass, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 23/33] pc: Move option_rom_has_mr/rom_file_has_mr to MachineClass, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 24/33] pc: Add PCMachineClass.compat_apic_id_mode field, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 25/33] target-i386: Move error handling to end of x86_cpu_parse_featurestr(), Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 26/33] target-i386: Renove underscores from feature names, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 27/33] target-i386: Register X86CPU "feat-kvmclock" feature,
Eduardo Habkost <=
- [Qemu-devel] [PATCH v4 28/33] target-i386: set [+-]feature using QOM properties, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 29/33] pc: Use compat_props for CPUID compat bits, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 30/33] target-i386: Move some declarations to hw/i386/cpu.h, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 31/33] pc: Add default KVM features fields to PCMachineClass, Eduardo Habkost, 2014/08/14
- [Qemu-devel] [PATCH v4 32/33] pc: Eliminate pc_compat_*() functions, Eduardo Habkost, 2014/08/14