All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] KVM: arm64: Fix MPIDR lookup for unreset vCPUs
@ 2026-06-11 14:40 fuqiang wang
  2026-06-11 14:40 ` [PATCH v2 1/2] arm64: Add MPIDR_EL1 RES1 definitions fuqiang wang
  2026-06-11 14:40 ` [PATCH v2 2/2] KVM: arm64: Skip unreset vCPUs in MPIDR lookup table fuqiang wang
  0 siblings, 2 replies; 4+ messages in thread
From: fuqiang wang @ 2026-06-11 14:40 UTC (permalink / raw)
  To: Marc Zyngier, Oliver Upton, Zenghui Yu, linux-kernel, kvmarm
  Cc: dongxu zhang, wangfuqiang49

From: wangfuqiang49 <wangfuqiang49@jd.com>

Hi,

This series fixes an MPIDR lookup issue when a VM is created with CPU
hotplug support.

kvm_init_mpidr_data() builds a compressed MPIDR-to-vCPU lookup table by
walking all possible vCPUs. However, vCPUs that have not been reset yet
still have a zero MPIDR_EL1 state, which aliases vCPU0. This can cause
cmpidr_to_idx[0] to be overwritten with the index of an unreset vCPU.

As a result, MPIDR 0 lookups can return the wrong vCPU, preventing
interrupts targeting vCPU0 from being delivered correctly and making
guest boot extremely slow in configurations using CPU hotplug.

Patch 1 adds named definitions for the MPIDR_EL1 RES1 bit used to detect
whether a vCPU's MPIDR_EL1 state has been reset.
Patch 2 skips unreset vCPUs when populating the compressed MPIDR lookup
table.

Thanks,
Fuqiang

SELF-TEST result:

1. use crash debug cmpidr_to_idx[]

(qemu args: -smp maxcpus=512,cpus=4,sockets=2,cores=128,threads=2)

crash> struct kvm_mpidr_data.mpidr_mask 0xffff2020acda15e0
  mpidr_mask = 3,
crash> x/8xh 0xffff2020acda15e8
0xffff2020acda15e8:     0x0000  0x0001  0x0002  0x0003  0x642f  0x7665  0x6e2f  0x6d76

2. use link [1] to test IPI latency(Before the patch was merged, it often took
   seconds for a kernel thread to be scheduled after being woken up.)

IPI Latency Matrix - avg (ns) [100000 samples]

          CPU0     CPU1     CPU2     CPU3
CPU0           -    1355    2242    2238
CPU1        2730       -    2391    1852
CPU2        2149    3015       -    2033
CPU3        2005    1651    1801       -


Changes in v2:
- Fix macro naming/placement/type and pass vcpu instead of pre-masked
  affinity to correctly check MPIDR_EL1 bit[31] (sashiko bot)

v1: https://lore.kernel.org/all/20260611090934.84469-1-fuqiang.wng@gmail.com/

[1]: https://github.com/cai-fuqiang/kernel_test/tree/master/ipi_latency

fuqiang wang (2):
  arm64: Add MPIDR_EL1 RES1 definitions
  KVM: arm64: Skip unreset vCPUs in MPIDR lookup table

 arch/arm64/include/asm/cputype.h     |  1 +
 arch/arm64/include/asm/kvm_emulate.h |  9 +++++++++
 arch/arm64/kvm/arm.c                 | 14 ++++++++++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

-- 
2.47.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-06-14  9:23 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-11 14:40 [PATCH v2 0/2] KVM: arm64: Fix MPIDR lookup for unreset vCPUs fuqiang wang
2026-06-11 14:40 ` [PATCH v2 1/2] arm64: Add MPIDR_EL1 RES1 definitions fuqiang wang
2026-06-11 14:40 ` [PATCH v2 2/2] KVM: arm64: Skip unreset vCPUs in MPIDR lookup table fuqiang wang
2026-06-14  9:26   ` Marc Zyngier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.