mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-15 15:32:51 +00:00
s390x/cpu_models: make "max" match the unmodified "qemu" CPU model under TCG
Before we were able to bump up the qemu CPU model to a z13, we included some experimental features during development in the "max" model only. Nowadays, the "max" model corresponds exactly to the "qemu" CPU model of the latest QEMU machine under TCG. Let's remove all the special casing, effectively making both models match completely from now on, and clean up. Signed-off-by: David Hildenbrand <david@redhat.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20220428094708.84835-4-david@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
4756b106b3
commit
d98ed7d96e
|
@ -89,7 +89,6 @@ static S390CPUDef s390_cpu_defs[] = {
|
||||||
#define QEMU_MAX_CPU_TYPE 0x8561
|
#define QEMU_MAX_CPU_TYPE 0x8561
|
||||||
#define QEMU_MAX_CPU_GEN 15
|
#define QEMU_MAX_CPU_GEN 15
|
||||||
#define QEMU_MAX_CPU_EC_GA 1
|
#define QEMU_MAX_CPU_EC_GA 1
|
||||||
static const S390FeatInit qemu_max_cpu_feat_init = { S390_FEAT_LIST_QEMU_MAX };
|
|
||||||
static S390FeatBitmap qemu_max_cpu_feat;
|
static S390FeatBitmap qemu_max_cpu_feat;
|
||||||
|
|
||||||
/* features part of a base model but not relevant for finding a base model */
|
/* features part of a base model but not relevant for finding a base model */
|
||||||
|
@ -728,7 +727,6 @@ static void s390_cpu_model_initfn(Object *obj)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static S390CPUDef s390_qemu_cpu_def;
|
|
||||||
static S390CPUModel s390_qemu_cpu_model;
|
static S390CPUModel s390_qemu_cpu_model;
|
||||||
|
|
||||||
/* Set the qemu CPU model (on machine initialization). Must not be called
|
/* Set the qemu CPU model (on machine initialization). Must not be called
|
||||||
|
@ -742,17 +740,8 @@ void s390_set_qemu_cpu_model(uint16_t type, uint8_t gen, uint8_t ec_ga,
|
||||||
g_assert(def);
|
g_assert(def);
|
||||||
g_assert(QTAILQ_EMPTY_RCU(&cpus));
|
g_assert(QTAILQ_EMPTY_RCU(&cpus));
|
||||||
|
|
||||||
/* TCG emulates some features that can usually not be enabled with
|
|
||||||
* the emulated machine generation. Make sure they can be enabled
|
|
||||||
* when using the QEMU model by adding them to full_feat. We have
|
|
||||||
* to copy the definition to do that.
|
|
||||||
*/
|
|
||||||
memcpy(&s390_qemu_cpu_def, def, sizeof(s390_qemu_cpu_def));
|
|
||||||
bitmap_or(s390_qemu_cpu_def.full_feat, s390_qemu_cpu_def.full_feat,
|
|
||||||
qemu_max_cpu_feat, S390_FEAT_MAX);
|
|
||||||
|
|
||||||
/* build the CPU model */
|
/* build the CPU model */
|
||||||
s390_qemu_cpu_model.def = &s390_qemu_cpu_def;
|
s390_qemu_cpu_model.def = def;
|
||||||
bitmap_zero(s390_qemu_cpu_model.features, S390_FEAT_MAX);
|
bitmap_zero(s390_qemu_cpu_model.features, S390_FEAT_MAX);
|
||||||
s390_init_feat_bitmap(feat_init, s390_qemu_cpu_model.features);
|
s390_init_feat_bitmap(feat_init, s390_qemu_cpu_model.features);
|
||||||
}
|
}
|
||||||
|
@ -885,9 +874,8 @@ static void s390_max_cpu_model_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The "max" model is neither static nor migration safe. Under KVM
|
* The "max" model is neither static nor migration safe. Under KVM
|
||||||
* it represents the "host" model. Under TCG it represents some kind of
|
* it represents the "host" model. Under TCG it represents the "qemu" CPU
|
||||||
* "qemu" CPU model without compat handling and maybe with some additional
|
* model of the latest QEMU machine.
|
||||||
* CPU features that are not yet unlocked in the "qemu" model.
|
|
||||||
*/
|
*/
|
||||||
xcc->desc =
|
xcc->desc =
|
||||||
"Enables all features supported by the accelerator in the current host";
|
"Enables all features supported by the accelerator in the current host";
|
||||||
|
@ -966,13 +954,13 @@ static void init_ignored_base_feat(void)
|
||||||
|
|
||||||
static void register_types(void)
|
static void register_types(void)
|
||||||
{
|
{
|
||||||
static const S390FeatInit qemu_latest_init = { S390_FEAT_LIST_QEMU_LATEST };
|
static const S390FeatInit qemu_max_init = { S390_FEAT_LIST_QEMU_MAX };
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
init_ignored_base_feat();
|
init_ignored_base_feat();
|
||||||
|
|
||||||
/* init all bitmaps from gnerated data initially */
|
/* init all bitmaps from gnerated data initially */
|
||||||
s390_init_feat_bitmap(qemu_max_cpu_feat_init, qemu_max_cpu_feat);
|
s390_init_feat_bitmap(qemu_max_init, qemu_max_cpu_feat);
|
||||||
for (i = 0; i < ARRAY_SIZE(s390_cpu_defs); i++) {
|
for (i = 0; i < ARRAY_SIZE(s390_cpu_defs); i++) {
|
||||||
s390_init_feat_bitmap(s390_cpu_defs[i].base_init,
|
s390_init_feat_bitmap(s390_cpu_defs[i].base_init,
|
||||||
s390_cpu_defs[i].base_feat);
|
s390_cpu_defs[i].base_feat);
|
||||||
|
@ -982,9 +970,9 @@ static void register_types(void)
|
||||||
s390_cpu_defs[i].full_feat);
|
s390_cpu_defs[i].full_feat);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* initialize the qemu model with latest definition */
|
/* initialize the qemu model with the maximum definition ("max" model) */
|
||||||
s390_set_qemu_cpu_model(QEMU_MAX_CPU_TYPE, QEMU_MAX_CPU_GEN,
|
s390_set_qemu_cpu_model(QEMU_MAX_CPU_TYPE, QEMU_MAX_CPU_GEN,
|
||||||
QEMU_MAX_CPU_EC_GA, qemu_latest_init);
|
QEMU_MAX_CPU_EC_GA, qemu_max_init);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(s390_cpu_defs); i++) {
|
for (i = 0; i < ARRAY_SIZE(s390_cpu_defs); i++) {
|
||||||
char *base_name = s390_base_cpu_type_name(s390_cpu_defs[i].name);
|
char *base_name = s390_base_cpu_type_name(s390_cpu_defs[i].name);
|
||||||
|
|
|
@ -738,11 +738,13 @@ static uint16_t qemu_V6_2[] = {
|
||||||
S390_FEAT_VECTOR_ENH,
|
S390_FEAT_VECTOR_ENH,
|
||||||
};
|
};
|
||||||
|
|
||||||
static uint16_t qemu_LATEST[] = {
|
/*
|
||||||
S390_FEAT_MISC_INSTRUCTION_EXT3,
|
* Features for the "qemu" CPU model of the latest QEMU machine and the "max"
|
||||||
};
|
* CPU model under TCG. Don't include features that are not part of the full
|
||||||
/* add all new definitions before this point */
|
* feature set of the current "max" CPU model generation.
|
||||||
|
*/
|
||||||
static uint16_t qemu_MAX[] = {
|
static uint16_t qemu_MAX[] = {
|
||||||
|
S390_FEAT_MISC_INSTRUCTION_EXT3,
|
||||||
};
|
};
|
||||||
|
|
||||||
/****** END FEATURE DEFS ******/
|
/****** END FEATURE DEFS ******/
|
||||||
|
@ -864,7 +866,6 @@ static FeatGroupDefSpec QemuFeatDef[] = {
|
||||||
QEMU_FEAT_INITIALIZER(V4_1),
|
QEMU_FEAT_INITIALIZER(V4_1),
|
||||||
QEMU_FEAT_INITIALIZER(V6_0),
|
QEMU_FEAT_INITIALIZER(V6_0),
|
||||||
QEMU_FEAT_INITIALIZER(V6_2),
|
QEMU_FEAT_INITIALIZER(V6_2),
|
||||||
QEMU_FEAT_INITIALIZER(LATEST),
|
|
||||||
QEMU_FEAT_INITIALIZER(MAX),
|
QEMU_FEAT_INITIALIZER(MAX),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue