[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 5/6] ppc/spapr: fix drc index mismatch for partially enabled vcpus
From: |
Nicholas Piggin |
Subject: |
[PULL 5/6] ppc/spapr: fix drc index mismatch for partially enabled vcpus |
Date: |
Wed, 27 Nov 2024 03:12:34 +1000 |
From: Harsh Prateek Bora <harshpb@linux.ibm.com>
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>
Signed-off-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)));
--
2.45.2
- [PULL 0/6] ppc-for-9.2-2 queue, Nicholas Piggin, 2024/11/26
- [PULL 1/6] target/ppc: Fix non-maskable interrupt while halted, Nicholas Piggin, 2024/11/26
- [PULL 2/6] ppc/pnv: Fix direct controls quiesce, Nicholas Piggin, 2024/11/26
- [PULL 4/6] ppc/pnv: Add xscom- prefix to pervasive-control region name, Nicholas Piggin, 2024/11/26
- [PULL 3/6] target/ppc: Fix THREAD_SIBLING_FOREACH for multi-socket, Nicholas Piggin, 2024/11/26
- [PULL 6/6] hw/ppc/pegasos2: Fix IRQ routing from pci.0, Nicholas Piggin, 2024/11/26
- [PULL 5/6] ppc/spapr: fix drc index mismatch for partially enabled vcpus,
Nicholas Piggin <=
- Re: [PULL 0/6] ppc-for-9.2-2 queue, Peter Maydell, 2024/11/26
- Re: [PULL 0/6] ppc-for-9.2-2 queue, Michael Tokarev, 2024/11/27