qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] ppc/spapr: fix drc index mismatch for partially enabled vcpu


From: Nicholas Piggin
Subject: Re: [PATCH] ppc/spapr: fix drc index mismatch for partially enabled vcpus
Date: Mon, 25 Nov 2024 22:37:40 +1000

On Tue Nov 19, 2024 at 7:08 PM AEST, Harsh Prateek Bora wrote:
> In case when vcpus are explicitly enabled/disabled in a non-consecutive
> order within a libvirt xml, it results in a drc index mismatch during
> vcpu hotplug later because the existing logic uses vcpu id to derive the
> corresponding drc index which is not correct. Use env->core_index to
> derive a vcpu's drc index as appropriate to fix this issue.
>
> For ex, for the given libvirt xml config:
>   <vcpus>
>     <vcpu id='0' enabled='yes' hotpluggable='no'/>
>     <vcpu id='1' enabled='yes' hotpluggable='yes'/>
>     <vcpu id='2' enabled='no' hotpluggable='yes'/>
>     <vcpu id='3' enabled='yes' hotpluggable='yes'/>
>     <vcpu id='4' enabled='no' hotpluggable='yes'/>
>     <vcpu id='5' enabled='yes' hotpluggable='yes'/>
>     <vcpu id='6' enabled='no' hotpluggable='yes'/>
>     <vcpu id='7' enabled='no' hotpluggable='yes'/>
>   </vcpus>
>
> We see below error on guest console with "virsh setvcpus <domain> 5" :
>
> pseries-hotplug-cpu: CPU with drc index 10000002 already exists
>
> This patch fixes the issue by using correct drc index for explicitly
> enabled vcpus during init.
>
> Reported-by: Anushree Mathur <anushree.mathur@linux.vnet.ibm.com>
> Tested-by: Anushree Mathur <anushree.mathur@linux.vnet.ibm.com>
> Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>

Reviewed-by: Nicholas Piggin <npiggin@gmail.com>

> ---
>  hw/ppc/spapr.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 5c02037c56..0d4efaa0c0 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -701,7 +701,7 @@ static void spapr_dt_cpu(CPUState *cs, void *fdt, int 
> offset,
>      uint32_t radix_AP_encodings[PPC_PAGE_SIZES_MAX_SZ];
>      int i;
>  
> -    drc = spapr_drc_by_id(TYPE_SPAPR_DRC_CPU, index);
> +    drc = spapr_drc_by_id(TYPE_SPAPR_DRC_CPU, env->core_index);
>      if (drc) {
>          drc_index = spapr_drc_index(drc);
>          _FDT((fdt_setprop_cell(fdt, offset, "ibm,my-drc-index", drc_index)));




reply via email to

[Prev in Thread] Current Thread [Next in Thread]