s390x/cpu topology: add max_threads machine class attribute

The S390 CPU topology accepts the smp.threads argument while
in reality it does not effectively allow multthreading.

Let's keep this behavior for machines older than 7.2 and
refuse to use threads in newer machines until multithreading
is really exposed to the guest by the machine.

Signed-off-by: Pierre Morel <pmorel@linux.ibm.com>
Message-Id: <20221103170150.20789-3-pmorel@linux.ibm.com>
[thuth: Small fixes to the commit description]
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Pierre Morel 2022-11-03 18:01:41 +01:00 committed by Thomas Huth
parent 1fd396e322
commit 6393b29966
2 changed files with 12 additions and 0 deletions

View File

@ -85,8 +85,15 @@ out:
static void s390_init_cpus(MachineState *machine)
{
MachineClass *mc = MACHINE_GET_CLASS(machine);
S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
int i;
if (machine->smp.threads > s390mc->max_threads) {
error_report("S390 does not support more than %d threads.",
s390mc->max_threads);
exit(1);
}
/* initialize possible_cpus */
mc->possible_cpu_arch_ids(machine);
@ -731,6 +738,7 @@ static void ccw_machine_class_init(ObjectClass *oc, void *data)
s390mc->cpu_model_allowed = true;
s390mc->css_migration_enabled = true;
s390mc->hpage_1m_allowed = true;
s390mc->max_threads = 1;
mc->init = ccw_init;
mc->reset = s390_machine_reset;
mc->block_default_type = IF_VIRTIO;
@ -859,8 +867,11 @@ static void ccw_machine_7_1_instance_options(MachineState *machine)
static void ccw_machine_7_1_class_options(MachineClass *mc)
{
S390CcwMachineClass *s390mc = S390_CCW_MACHINE_CLASS(mc);
ccw_machine_7_2_class_options(mc);
compat_props_add(mc->compat_props, hw_compat_7_1, hw_compat_7_1_len);
s390mc->max_threads = S390_MAX_CPUS;
}
DEFINE_CCW_MACHINE(7_1, "7.1", false);

View File

@ -40,6 +40,7 @@ struct S390CcwMachineClass {
bool cpu_model_allowed;
bool css_migration_enabled;
bool hpage_1m_allowed;
int max_threads;
};
/* runtime-instrumentation allowed by the machine */