On Tue, 28 Jan 2025 15:21:43 +0100 Philippe Mathieu-Daudé <philmd@xxxxxxxxxx> wrote: > Hi, > > The goal of this series is to expose vCPUs in a stable state > to the accelerators, in particular the QDev 'REALIZED' step. I'll take some of your patches (with Richard's feedback fixed), and respin series focusing mostly on realize part. (and drop wire/unwire parts, reshuffling cpu code instead) > > 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(-) >