On Mon, 20 Jun 2016 17:12:43 -0300
Eduardo Habkost <ehabkost(a)redhat.com> wrote:
The code that loads host-specific information inside
x86_cpu_realizefn() will be reused by the implementation of
query-host-cpu, so move it to a separate function.
Signed-off-by: Eduardo Habkost <ehabkost(a)redhat.com>
---
target-i386/cpu.c | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/target-i386/cpu.c b/target-i386/cpu.c
index aadd0b9..3d3635d 100644
--- a/target-i386/cpu.c
+++ b/target-i386/cpu.c
@@ -1491,6 +1491,20 @@ void x86_cpu_change_kvm_default(const char
*prop, const char *value) static uint32_t
x86_cpu_get_supported_feature_word(FeatureWord w, bool
migratable_only);
+/* Load host-dependent CPU information, when applicable */
+static void x86_cpu_load_host_data(X86CPU *cpu)
+{
+ CPUX86State *env = &cpu->env;
+ FeatureWord w;
+
+ if (cpu->host_features) {
+ for (w = 0; w < FEATURE_WORDS; w++) {
+ env->features[w] =
+ x86_cpu_get_supported_feature_word(w,
cpu->migratable);
+ }
+ }
+}
+
#ifdef CONFIG_KVM
static int cpu_x86_fill_model_id(char *str)
@@ -3012,18 +3026,13 @@ static void x86_cpu_realizefn(DeviceState
*dev, Error **errp) return;
}
+ x86_cpu_load_host_data(cpu);
this function should be below TODO comment as it
applies to moved
code.
with this fixed
Reviewed-by: Igor Mammedov <imammedo(a)redhat.com>
+
/*TODO: cpu->host_features incorrectly overwrites features
* set using "feat=on|off". Once we fix this, we can convert
* plus_features & minus_features to global properties
* inside x86_cpu_parse_featurestr() too.
*/
- if (cpu->host_features) {
- for (w = 0; w < FEATURE_WORDS; w++) {
- env->features[w] =
- x86_cpu_get_supported_feature_word(w,
cpu->migratable);
- }
- }
-
for (w = 0; w < FEATURE_WORDS; w++) {
cpu->env.features[w] |= plus_features[w];
cpu->env.features[w] &= ~minus_features[w];