On Thu Jun 1, 2023 at 5:20 PM AEST, Cédric Le Goater wrote: > On 5/31/23 03:23, Nicholas Piggin wrote: > > @@ -267,6 +267,9 @@ static bool spapr_realize_vcpu(PowerPCCPU *cpu, > > SpaprMachineState *spapr, > > cpu_ppc_set_vhyp(cpu, PPC_VIRTUAL_HYPERVISOR(spapr)); > > kvmppc_set_papr(cpu); > > so, spapr_create_vcpu() set cs->cpu_index : > cs->cpu_index = cc->core_id + i; > > and spapr_realize_vcpu : > > > + env->spr_cb[SPR_PIR].default_value = cs->cpu_index; > > + env->spr_cb[SPR_TIR].default_value = thread_nr; > > + > it would be cleaner to do the SPR assignment in one place.
Problem is we can't do it in create because the SPRs have not been registered yet, and can't move cpu_index to realize because it's needed earlier. A nice way to do this might be to have a cpu_index and a thread_index (or require that it is cpu_index % nr_threads), and use those values as the default when registering PIR and TIR SPRs. But I haven't quite looked into it far enough yet. pnv sets PIR in the realize function already so maybe it's okay this way for now and it can be tidied up. Thanks, Nick