mbox series

[RFC,0/9] accel: Only include qdev-realized vCPUs in global &cpus_queue

Message ID 20250128142152.9889-1-philmd@linaro.org
Headers show
Series accel: Only include qdev-realized vCPUs in global &cpus_queue | expand

Message

Philippe Mathieu-Daudé Jan. 28, 2025, 2:21 p.m. UTC
Hi,

The goal of this series is to expose vCPUs in a stable state
to the accelerators, in particular the QDev 'REALIZED' step.

To do so we split the QTAILQ_INSERT/REMOVE calls from
cpu_list_add() / cpu_list_remove(), by moving them to the
DeviceClass::[un]wire() handlers, guaranty to be called just
before a vCPU is exposed to the guest, as "realized".

First we have to modify how &first_cpu is used in TCG round
robin implementation, and ensure we invalidate the TB jmpcache
with &qemu_cpu_list locked.

I'm really out of my comfort zone here, so posting as RFC. At
least all test suite is passing...

I expect these changes to allow CPUState::cpu_index clarifications
and simplifications, but this will be addressed (and commented) in
a separate series.

Regards,

Phil.

Philippe Mathieu-Daudé (9):
  accel/tcg: Simplify use of &first_cpu in rr_cpu_thread_fn()
  accel/tcg: Invalidate TB jump cache with global vCPU queue locked
  cpus: Remove cpu from global queue after UNREALIZE completed
  hw/qdev: Introduce DeviceClass::[un]wire() handlers
  cpus: Add DeviceClass::[un]wire() stubs
  cpus: Call hotplug handlers in DeviceWire()
  cpus: Only expose REALIZED vCPUs to global &cpus_queue
  accel/kvm: Assert vCPU is created when calling kvm_dirty_ring_reap*()
  accel/kvm: Remove unreachable assertion in kvm_dirty_ring_reap*()

 include/hw/qdev-core.h       |  7 +++++++
 accel/kvm/kvm-all.c          |  9 ---------
 accel/tcg/tb-maint.c         |  2 ++
 accel/tcg/tcg-accel-ops-rr.c | 15 ++++++++-------
 cpu-common.c                 |  2 --
 cpu-target.c                 |  7 ++-----
 hw/core/cpu-common.c         | 18 +++++++++++++++++-
 hw/core/qdev.c               | 20 +++++++++++++++++++-
 8 files changed, 55 insertions(+), 25 deletions(-)