Message ID | 20240712120247.477133-17-npiggin@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ppc/pnv: Better big-core model, lpar-per-core, PC unit | expand |
On 12/7/24 14:02, Nicholas Piggin wrote: > This factors the CPU pause function from pause_all_vcpus() into a > new cpu_pause() function, similarly to cpu_resume(). cpu_resume() > is moved to keep it next to cpu_pause(). > > Cc: Philippe Mathieu-Daudé <philmd@linaro.org> > Cc: Peter Xu <peterx@redhat.com> > Cc: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > include/hw/core/cpu.h | 8 ++++++++ > system/cpus.c | 30 +++++++++++++++++------------- > 2 files changed, 25 insertions(+), 13 deletions(-) Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
On Fri, Jul 12, 2024 at 10:02:43PM +1000, Nicholas Piggin wrote: > This factors the CPU pause function from pause_all_vcpus() into a > new cpu_pause() function, similarly to cpu_resume(). cpu_resume() > is moved to keep it next to cpu_pause(). > > Cc: Philippe Mathieu-Daudé <philmd@linaro.org> > Cc: Peter Xu <peterx@redhat.com> > Cc: Richard Henderson <richard.henderson@linaro.org> > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Peter Xu <peterx@redhat.com>
diff --git a/include/hw/core/cpu.h b/include/hw/core/cpu.h index a2c8536943..e6acfcb59a 100644 --- a/include/hw/core/cpu.h +++ b/include/hw/core/cpu.h @@ -984,6 +984,14 @@ void cpu_reset_interrupt(CPUState *cpu, int mask); */ void cpu_exit(CPUState *cpu); +/** + * cpu_pause: + * @cpu: The CPU to pause. + * + * Pauses CPU, i.e. puts CPU into stopped state. + */ +void cpu_pause(CPUState *cpu); + /** * cpu_resume: * @cpu: The CPU to resume. diff --git a/system/cpus.c b/system/cpus.c index d3640c9503..5e3a988a0a 100644 --- a/system/cpus.c +++ b/system/cpus.c @@ -568,6 +568,22 @@ void cpu_thread_signal_destroyed(CPUState *cpu) qemu_cond_signal(&qemu_cpu_cond); } +void cpu_pause(CPUState *cpu) +{ + if (qemu_cpu_is_self(cpu)) { + qemu_cpu_stop(cpu, true); + } else { + cpu->stop = true; + qemu_cpu_kick(cpu); + } +} + +void cpu_resume(CPUState *cpu) +{ + cpu->stop = false; + cpu->stopped = false; + qemu_cpu_kick(cpu); +} static bool all_vcpus_paused(void) { @@ -588,12 +604,7 @@ void pause_all_vcpus(void) qemu_clock_enable(QEMU_CLOCK_VIRTUAL, false); CPU_FOREACH(cpu) { - if (qemu_cpu_is_self(cpu)) { - qemu_cpu_stop(cpu, true); - } else { - cpu->stop = true; - qemu_cpu_kick(cpu); - } + cpu_pause(cpu); } /* We need to drop the replay_lock so any vCPU threads woken up @@ -613,13 +624,6 @@ void pause_all_vcpus(void) bql_lock(); } -void cpu_resume(CPUState *cpu) -{ - cpu->stop = false; - cpu->stopped = false; - qemu_cpu_kick(cpu); -} - void resume_all_vcpus(void) { CPUState *cpu;
This factors the CPU pause function from pause_all_vcpus() into a new cpu_pause() function, similarly to cpu_resume(). cpu_resume() is moved to keep it next to cpu_pause(). Cc: Philippe Mathieu-Daudé <philmd@linaro.org> Cc: Peter Xu <peterx@redhat.com> Cc: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- include/hw/core/cpu.h | 8 ++++++++ system/cpus.c | 30 +++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-)