Skip to content

Commit

Permalink
machine: Refactor smp-related call chains to pass MachineState
Browse files Browse the repository at this point in the history
To get rid of the global smp_* variables we're currently using, it's recommended
to pass MachineState in the list of incoming parameters for functions that use
global smp variables, thus some redundant parameters are dropped. It's applied
for legacy smbios_*(), *_machine_reset(), hot_add_cpu() and mips *_create_cpu().

Suggested-by: Igor Mammedov <imammedo@redhat.com>
Signed-off-by: Like Xu <like.xu@linux.intel.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-Id: <20190518205428.90532-3-like.xu@linux.intel.com>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
  • Loading branch information
Like Xu authored and ehabkost committed Jul 5, 2019
1 parent edeeec9 commit a062859
Show file tree
Hide file tree
Showing 14 changed files with 46 additions and 44 deletions.
2 changes: 1 addition & 1 deletion hw/arm/virt.c
Expand Up @@ -1345,7 +1345,7 @@ static void virt_build_smbios(VirtMachineState *vms)
vmc->smbios_old_sys_ver ? "1.0" : mc->name, false,
true, SMBIOS_ENTRY_POINT_30);

smbios_get_tables(NULL, 0, &smbios_tables, &smbios_tables_len,
smbios_get_tables(MACHINE(vms), NULL, 0, &smbios_tables, &smbios_tables_len,
&smbios_anchor, &smbios_anchor_len);

if (smbios_anchor) {
Expand Down
2 changes: 1 addition & 1 deletion hw/core/machine-qmp-cmds.c
Expand Up @@ -264,7 +264,7 @@ void qmp_cpu_add(int64_t id, Error **errp)

mc = MACHINE_GET_CLASS(current_machine);
if (mc->hot_add_cpu) {
mc->hot_add_cpu(id, errp);
mc->hot_add_cpu(current_machine, id, errp);
} else {
error_setg(errp, "Not supported");
}
Expand Down
2 changes: 1 addition & 1 deletion hw/hppa/machine.c
Expand Up @@ -240,7 +240,7 @@ static void machine_hppa_init(MachineState *machine)
cpu[0]->env.gr[21] = smp_cpus;
}

static void hppa_machine_reset(void)
static void hppa_machine_reset(MachineState *ms)
{
int i;

Expand Down
2 changes: 1 addition & 1 deletion hw/i386/acpi-build.c
Expand Up @@ -184,7 +184,7 @@ static void acpi_get_pm_info(AcpiPmInfo *pm)
pm->pcihp_io_len = 0;

assert(obj);
init_common_fadt_data(obj, &pm->fadt);
init_common_fadt_data(machine, obj, &pm->fadt);
if (piix) {
/* w2k requires FADT(rev1) or it won't boot, keep PC compatible */
pm->fadt.rev = 1;
Expand Down
9 changes: 4 additions & 5 deletions hw/i386/pc.c
Expand Up @@ -954,7 +954,7 @@ static void pc_build_smbios(PCMachineState *pcms)
/* tell smbios about cpuid version and features */
smbios_set_cpuid(cpu->env.cpuid_version, cpu->env.features[FEAT_1_EDX]);

smbios_tables = smbios_get_table_legacy(&smbios_tables_len);
smbios_tables = smbios_get_table_legacy(ms, &smbios_tables_len);
if (smbios_tables) {
fw_cfg_add_bytes(pcms->fw_cfg, FW_CFG_SMBIOS_ENTRIES,
smbios_tables, smbios_tables_len);
Expand All @@ -971,7 +971,7 @@ static void pc_build_smbios(PCMachineState *pcms)
array_count++;
}
}
smbios_get_tables(mem_array, array_count,
smbios_get_tables(ms, mem_array, array_count,
&smbios_tables, &smbios_tables_len,
&smbios_anchor, &smbios_anchor_len);
g_free(mem_array);
Expand Down Expand Up @@ -1526,9 +1526,8 @@ static void pc_new_cpu(const char *typename, int64_t apic_id, Error **errp)
error_propagate(errp, local_err);
}

void pc_hot_add_cpu(const int64_t id, Error **errp)
void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp)
{
MachineState *ms = MACHINE(qdev_get_machine());
PCMachineState *pcms = PC_MACHINE(ms);
int64_t apic_id = x86_cpu_apic_id_from_index(pcms, id);
Error *local_err = NULL;
Expand Down Expand Up @@ -2684,7 +2683,7 @@ static void pc_machine_initfn(Object *obj)
pc_system_flash_create(pcms);
}

static void pc_machine_reset(void)
static void pc_machine_reset(MachineState *machine)
{
CPUState *cs;
X86CPU *cpu;
Expand Down
22 changes: 11 additions & 11 deletions hw/mips/mips_malta.c
Expand Up @@ -1124,15 +1124,15 @@ static void main_cpu_reset(void *opaque)
}
}

static void create_cpu_without_cps(const char *cpu_type,
static void create_cpu_without_cps(MachineState *ms,
qemu_irq *cbus_irq, qemu_irq *i8259_irq)
{
CPUMIPSState *env;
MIPSCPU *cpu;
int i;

for (i = 0; i < smp_cpus; i++) {
cpu = MIPS_CPU(cpu_create(cpu_type));
for (i = 0; i < ms->smp.cpus; i++) {
cpu = MIPS_CPU(cpu_create(ms->cpu_type));

/* Init internal devices */
cpu_mips_irq_init_cpu(cpu);
Expand All @@ -1146,15 +1146,15 @@ static void create_cpu_without_cps(const char *cpu_type,
*cbus_irq = env->irq[4];
}

static void create_cps(MaltaState *s, const char *cpu_type,
static void create_cps(MachineState *ms, MaltaState *s,
qemu_irq *cbus_irq, qemu_irq *i8259_irq)
{
Error *err = NULL;

sysbus_init_child_obj(OBJECT(s), "cps", OBJECT(&s->cps), sizeof(s->cps),
TYPE_MIPS_CPS);
object_property_set_str(OBJECT(&s->cps), cpu_type, "cpu-type", &err);
object_property_set_int(OBJECT(&s->cps), smp_cpus, "num-vp", &err);
object_property_set_str(OBJECT(&s->cps), ms->cpu_type, "cpu-type", &err);
object_property_set_int(OBJECT(&s->cps), ms->smp.cpus, "num-vp", &err);
object_property_set_bool(OBJECT(&s->cps), true, "realized", &err);
if (err != NULL) {
error_report("%s", error_get_pretty(err));
Expand All @@ -1167,13 +1167,13 @@ static void create_cps(MaltaState *s, const char *cpu_type,
*cbus_irq = NULL;
}

static void mips_create_cpu(MaltaState *s, const char *cpu_type,
static void mips_create_cpu(MachineState *ms, MaltaState *s,
qemu_irq *cbus_irq, qemu_irq *i8259_irq)
{
if ((smp_cpus > 1) && cpu_supports_cps_smp(cpu_type)) {
create_cps(s, cpu_type, cbus_irq, i8259_irq);
if ((ms->smp.cpus > 1) && cpu_supports_cps_smp(ms->cpu_type)) {
create_cps(ms, s, cbus_irq, i8259_irq);
} else {
create_cpu_without_cps(cpu_type, cbus_irq, i8259_irq);
create_cpu_without_cps(ms, cbus_irq, i8259_irq);
}
}

Expand Down Expand Up @@ -1217,7 +1217,7 @@ void mips_malta_init(MachineState *machine)
qdev_init_nofail(dev);

/* create CPU */
mips_create_cpu(s, machine->cpu_type, &cbus_irq, &i8259_irq);
mips_create_cpu(machine, s, &cbus_irq, &i8259_irq);

/* allocate RAM */
if (ram_size > 2 * GiB) {
Expand Down
3 changes: 1 addition & 2 deletions hw/ppc/pnv.c
Expand Up @@ -529,9 +529,8 @@ static void pnv_powerdown_notify(Notifier *n, void *opaque)
}
}

static void pnv_reset(void)
static void pnv_reset(MachineState *machine)
{
MachineState *machine = MACHINE(qdev_get_machine());
PnvMachineState *pnv = PNV_MACHINE(machine);
void *fdt;
Object *obj;
Expand Down
3 changes: 1 addition & 2 deletions hw/ppc/spapr.c
Expand Up @@ -1691,9 +1691,8 @@ static int spapr_reset_drcs(Object *child, void *opaque)
return 0;
}

static void spapr_machine_reset(void)
static void spapr_machine_reset(MachineState *machine)
{
MachineState *machine = MACHINE(qdev_get_machine());
SpaprMachineState *spapr = SPAPR_MACHINE(machine);
PowerPCCPU *first_ppc_cpu;
uint32_t rtas_limit;
Expand Down
6 changes: 3 additions & 3 deletions hw/s390x/s390-virtio-ccw.c
Expand Up @@ -339,7 +339,7 @@ static inline void s390_do_cpu_ipl(CPUState *cs, run_on_cpu_data arg)
s390_cpu_set_state(S390_CPU_STATE_OPERATING, cpu);
}

static void s390_machine_reset(void)
static void s390_machine_reset(MachineState *machine)
{
enum s390_reset reset_type;
CPUState *cs, *t;
Expand Down Expand Up @@ -440,9 +440,9 @@ static HotplugHandler *s390_get_hotplug_handler(MachineState *machine,
return NULL;
}

static void s390_hot_add_cpu(const int64_t id, Error **errp)
static void s390_hot_add_cpu(MachineState *machine,
const int64_t id, Error **errp)
{
MachineState *machine = MACHINE(qdev_get_machine());
ObjectClass *oc;

g_assert(machine->possible_cpus->cpus[0].cpu);
Expand Down
26 changes: 15 additions & 11 deletions hw/smbios/smbios.c
Expand Up @@ -27,6 +27,7 @@
#include "sysemu/cpus.h"
#include "hw/firmware/smbios.h"
#include "hw/loader.h"
#include "hw/boards.h"
#include "exec/cpu-common.h"
#include "smbios_build.h"

Expand Down Expand Up @@ -341,9 +342,10 @@ static void smbios_register_config(void)

opts_init(smbios_register_config);

static void smbios_validate_table(void)
static void smbios_validate_table(MachineState *ms)
{
uint32_t expect_t4_count = smbios_legacy ? smp_cpus : smbios_smp_sockets;
uint32_t expect_t4_count = smbios_legacy ?
ms->smp.cpus : smbios_smp_sockets;

if (smbios_type4_count && smbios_type4_count != expect_t4_count) {
error_report("Expected %d SMBIOS Type 4 tables, got %d instead",
Expand Down Expand Up @@ -428,7 +430,7 @@ static void smbios_build_type_1_fields(void)
}
}

uint8_t *smbios_get_table_legacy(size_t *length)
uint8_t *smbios_get_table_legacy(MachineState *ms, size_t *length)
{
if (!smbios_legacy) {
*length = 0;
Expand All @@ -438,7 +440,7 @@ uint8_t *smbios_get_table_legacy(size_t *length)
if (!smbios_immutable) {
smbios_build_type_0_fields();
smbios_build_type_1_fields();
smbios_validate_table();
smbios_validate_table(ms);
smbios_immutable = true;
}
*length = smbios_entries_len;
Expand Down Expand Up @@ -570,7 +572,7 @@ static void smbios_build_type_3_table(void)
SMBIOS_BUILD_TABLE_POST;
}

static void smbios_build_type_4_table(unsigned instance)
static void smbios_build_type_4_table(MachineState *ms, unsigned instance)
{
char sock_str[128];

Expand All @@ -597,8 +599,8 @@ static void smbios_build_type_4_table(unsigned instance)
SMBIOS_TABLE_SET_STR(4, serial_number_str, type4.serial);
SMBIOS_TABLE_SET_STR(4, asset_tag_number_str, type4.asset);
SMBIOS_TABLE_SET_STR(4, part_number_str, type4.part);
t->core_count = t->core_enabled = smp_cores;
t->thread_count = smp_threads;
t->core_count = t->core_enabled = ms->smp.cores;
t->thread_count = ms->smp.threads;
t->processor_characteristics = cpu_to_le16(0x02); /* Unknown */
t->processor_family2 = cpu_to_le16(0x01); /* Other */

Expand Down Expand Up @@ -839,7 +841,8 @@ static void smbios_entry_point_setup(void)
}
}

void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
void smbios_get_tables(MachineState *ms,
const struct smbios_phys_mem_area *mem_array,
const unsigned int mem_array_size,
uint8_t **tables, size_t *tables_len,
uint8_t **anchor, size_t *anchor_len)
Expand All @@ -858,11 +861,12 @@ void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
smbios_build_type_2_table();
smbios_build_type_3_table();

smbios_smp_sockets = DIV_ROUND_UP(smp_cpus, smp_cores * smp_threads);
smbios_smp_sockets = DIV_ROUND_UP(ms->smp.cpus,
ms->smp.cores * ms->smp.threads);
assert(smbios_smp_sockets >= 1);

for (i = 0; i < smbios_smp_sockets; i++) {
smbios_build_type_4_table(i);
smbios_build_type_4_table(ms, i);
}

smbios_build_type_11_table();
Expand All @@ -888,7 +892,7 @@ void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
smbios_build_type_38_table();
smbios_build_type_127_table();

smbios_validate_table();
smbios_validate_table(ms);
smbios_entry_point_setup();
smbios_immutable = true;
}
Expand Down
4 changes: 2 additions & 2 deletions include/hw/boards.h
Expand Up @@ -173,8 +173,8 @@ struct MachineClass {
const char *deprecation_reason;

void (*init)(MachineState *state);
void (*reset)(void);
void (*hot_add_cpu)(const int64_t id, Error **errp);
void (*reset)(MachineState *state);
void (*hot_add_cpu)(MachineState *state, const int64_t id, Error **errp);
int (*kvm_type)(MachineState *machine, const char *arg);

BlockInterfaceType block_default_type;
Expand Down
5 changes: 3 additions & 2 deletions include/hw/firmware/smbios.h
Expand Up @@ -268,8 +268,9 @@ void smbios_set_cpuid(uint32_t version, uint32_t features);
void smbios_set_defaults(const char *manufacturer, const char *product,
const char *version, bool legacy_mode,
bool uuid_encoded, SmbiosEntryPointType ep_type);
uint8_t *smbios_get_table_legacy(size_t *length);
void smbios_get_tables(const struct smbios_phys_mem_area *mem_array,
uint8_t *smbios_get_table_legacy(MachineState *ms, size_t *length);
void smbios_get_tables(MachineState *ms,
const struct smbios_phys_mem_area *mem_array,
const unsigned int mem_array_size,
uint8_t **tables, size_t *tables_len,
uint8_t **anchor, size_t *anchor_len);
Expand Down
2 changes: 1 addition & 1 deletion include/hw/i386/pc.h
Expand Up @@ -189,7 +189,7 @@ void pc_register_ferr_irq(qemu_irq irq);
void pc_acpi_smi_interrupt(void *opaque, int irq, int level);

void pc_cpus_init(PCMachineState *pcms);
void pc_hot_add_cpu(const int64_t id, Error **errp);
void pc_hot_add_cpu(MachineState *ms, const int64_t id, Error **errp);

void pc_guest_info_init(PCMachineState *pcms);

Expand Down
2 changes: 1 addition & 1 deletion vl.c
Expand Up @@ -1580,7 +1580,7 @@ void qemu_system_reset(ShutdownCause reason)
cpu_synchronize_all_states();

if (mc && mc->reset) {
mc->reset();
mc->reset(current_machine);
} else {
qemu_devices_reset();
}
Expand Down

0 comments on commit a062859

Please sign in to comment.