spapr: Compute effective capability values earlier
Previously, the effective values of the various spapr capability flags were only determined at machine reset time. That was a lazy way of making sure it was after cpu initialization so it could use the cpu object to inform the defaults. But we've now improved the compat checking code so that we don't need to instantiate the cpus to use it. That lets us move the resolution of the capability defaults much earlier. This is going to be necessary for some future capabilities. Signed-off-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Greg Kurz <groug@kaod.org> Reviewed-by: Cédric Le Goater <clg@kaod.org>
This commit is contained in:
parent
ad99d04c76
commit
9f6edd066e
@ -1612,7 +1612,7 @@ static void spapr_machine_reset(void)
|
||||
void *fdt;
|
||||
int rc;
|
||||
|
||||
spapr_caps_reset(spapr);
|
||||
spapr_caps_apply(spapr);
|
||||
|
||||
first_ppc_cpu = POWERPC_CPU(first_cpu);
|
||||
if (kvm_enabled() && kvmppc_has_cap_mmu_radix() &&
|
||||
@ -2526,7 +2526,9 @@ static void spapr_machine_init(MachineState *machine)
|
||||
QLIST_INIT(&spapr->phbs);
|
||||
QTAILQ_INIT(&spapr->pending_dimm_unplugs);
|
||||
|
||||
/* Check HPT resizing availability */
|
||||
/* Determine capabilities to run with */
|
||||
spapr_caps_init(spapr);
|
||||
|
||||
kvmppc_check_papr_resize_hpt(&resize_hpt_err);
|
||||
if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DEFAULT) {
|
||||
/*
|
||||
|
@ -439,12 +439,12 @@ SPAPR_CAP_MIG_STATE(cfpc, SPAPR_CAP_CFPC);
|
||||
SPAPR_CAP_MIG_STATE(sbbc, SPAPR_CAP_SBBC);
|
||||
SPAPR_CAP_MIG_STATE(ibs, SPAPR_CAP_IBS);
|
||||
|
||||
void spapr_caps_reset(sPAPRMachineState *spapr)
|
||||
void spapr_caps_init(sPAPRMachineState *spapr)
|
||||
{
|
||||
sPAPRCapabilities default_caps;
|
||||
int i;
|
||||
|
||||
/* First compute the actual set of caps we're running with.. */
|
||||
/* Compute the actual set of caps we should run with */
|
||||
default_caps = default_caps_with_cpu(spapr, MACHINE(spapr)->cpu_type);
|
||||
|
||||
for (i = 0; i < SPAPR_CAP_NUM; i++) {
|
||||
@ -455,8 +455,11 @@ void spapr_caps_reset(sPAPRMachineState *spapr)
|
||||
spapr->eff.caps[i] = default_caps.caps[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* .. then apply those caps to the virtual hardware */
|
||||
void spapr_caps_apply(sPAPRMachineState *spapr)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < SPAPR_CAP_NUM; i++) {
|
||||
sPAPRCapabilityInfo *info = &capability_table[i];
|
||||
|
@ -798,7 +798,8 @@ static inline uint8_t spapr_get_cap(sPAPRMachineState *spapr, int cap)
|
||||
return spapr->eff.caps[cap];
|
||||
}
|
||||
|
||||
void spapr_caps_reset(sPAPRMachineState *spapr);
|
||||
void spapr_caps_init(sPAPRMachineState *spapr);
|
||||
void spapr_caps_apply(sPAPRMachineState *spapr);
|
||||
void spapr_caps_add_properties(sPAPRMachineClass *smc, Error **errp);
|
||||
int spapr_caps_post_migration(sPAPRMachineState *spapr);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user