]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
bsd-user, linux-user: introduce qemu_process_cpu_events
authorPaolo Bonzini <pbonzini@redhat.com>
Fri, 29 Aug 2025 14:53:05 +0000 (16:53 +0200)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 17 Sep 2025 17:00:56 +0000 (19:00 +0200)
Add a user-mode emulation version of the function.  More will be
added later, for now it is just process_queued_cpu_work.

Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
25 files changed:
accel/tcg/user-exec.c
bsd-user/aarch64/target_arch_cpu.h
bsd-user/arm/target_arch_cpu.h
bsd-user/i386/target_arch_cpu.h
bsd-user/riscv/target_arch_cpu.h
bsd-user/x86_64/target_arch_cpu.h
include/hw/core/cpu.h
include/system/cpus.h
linux-user/aarch64/cpu_loop.c
linux-user/alpha/cpu_loop.c
linux-user/arm/cpu_loop.c
linux-user/hexagon/cpu_loop.c
linux-user/hppa/cpu_loop.c
linux-user/i386/cpu_loop.c
linux-user/loongarch64/cpu_loop.c
linux-user/m68k/cpu_loop.c
linux-user/microblaze/cpu_loop.c
linux-user/mips/cpu_loop.c
linux-user/openrisc/cpu_loop.c
linux-user/ppc/cpu_loop.c
linux-user/riscv/cpu_loop.c
linux-user/s390x/cpu_loop.c
linux-user/sh4/cpu_loop.c
linux-user/sparc/cpu_loop.c
linux-user/xtensa/cpu_loop.c

index 3c072fd868fb1dca3fddefe45c95e5b62b82e665..65f5da6c5068c710010d1b5a8cbf3a80fd83e315 100644 (file)
@@ -52,6 +52,11 @@ void qemu_cpu_kick(CPUState *cpu)
     tcg_kick_vcpu_thread(cpu);
 }
 
+void qemu_process_cpu_events(CPUState *cpu)
+{
+    process_queued_cpu_work(cpu);
+}
+
 /*
  * Adjust the pc to pass to cpu_restore_state; return the memop type.
  */
index 87fbf6d67755d7401ca39577b96628e36b068d6f..15df84fda219432a82c92760e8b47d4739371e36 100644 (file)
@@ -54,7 +54,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_SWI:
index bc2eaa0bf4e7f8fdb7be4544a95e6f9ec977f238..9a952ef0ff7d2637e78a06ad7347ac24065303bf 100644 (file)
@@ -46,7 +46,7 @@ static inline G_NORETURN void target_cpu_loop(CPUARMState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
         switch (trapnr) {
         case EXCP_UDEF:
         case EXCP_NOCP:
index 5d4c931decdbd94e153e6efa86b3aacefde9f8f3..f147d5b6f85f547e505e6f72598370dd232b6a73 100644 (file)
@@ -113,7 +113,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case 0x80: {
index ef92f004803bae44667873c1ee131369cc06ea60..ad428d0263d9bd98d7c3c573f2c25e34da6b1f17 100644 (file)
@@ -49,7 +49,7 @@ static inline G_NORETURN void target_cpu_loop(CPURISCVState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         signo = 0;
 
index f82042e30afae964e000cee9230390834ff7f75d..1fa71d87f12495ee8079e10bc69afa17a22f16f9 100644 (file)
@@ -121,7 +121,7 @@ static inline G_NORETURN void target_cpu_loop(CPUX86State *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_SYSCALL:
index 6075be0b59fa104e5420c230ec3ffe2a90465e5d..fb788ca1107b167703170a2f30033d2bd0384f77 100644 (file)
@@ -1145,6 +1145,15 @@ AddressSpace *cpu_get_address_space(CPUState *cpu, int asidx);
 G_NORETURN void cpu_abort(CPUState *cpu, const char *fmt, ...)
     G_GNUC_PRINTF(2, 3);
 
+/**
+ * qemu_process_cpu_events:
+ * @cpu: CPU that left the execution loop
+ *
+ * Perform accelerator-independent work after the CPU has left
+ * the inner execution loop.
+ */
+void qemu_process_cpu_events(CPUState *cpu);
+
 /* $(top_srcdir)/cpu.c */
 void cpu_class_init_props(DeviceClass *dc);
 void cpu_exec_class_post_init(CPUClass *cc);
index 4aebec48705d73fcba98516c17ccce39dd9a7c67..508444ccf1c30b215914743946066395f29db7c3 100644 (file)
@@ -18,7 +18,6 @@ bool cpu_thread_is_idle(CPUState *cpu);
 bool all_cpu_threads_idle(void);
 bool cpu_can_run(CPUState *cpu);
 void qemu_process_cpu_events_common(CPUState *cpu);
-void qemu_process_cpu_events(CPUState *cpu);
 void cpu_thread_signal_created(CPUState *cpu);
 void cpu_thread_signal_destroyed(CPUState *cpu);
 void cpu_handle_guest_debug(CPUState *cpu);
index 4c4921152e84a425f221d204a3a0830051cb4947..f6b498c6c432ea3cd964d511d81f0997d7411917 100644 (file)
@@ -38,7 +38,7 @@ void cpu_loop(CPUARMState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_SWI:
index 728b64906d9455fc1ac1cf29d3234ade7d72d4b4..bb8346b50945604b999d9993fd7b4bac2a54430e 100644 (file)
@@ -35,7 +35,7 @@ void cpu_loop(CPUAlphaState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_RESET:
index 9aeb9b0087f5f8dce90fd7b7074f9b693cdfa192..cd89b7d6f5e889b4f42259722260af7dced003fc 100644 (file)
@@ -295,7 +295,7 @@ void cpu_loop(CPUARMState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch(trapnr) {
         case EXCP_UDEF:
index 25c97edcaef0c7a41c35141df32af880b74dc630..1941f4c9c162508f9ca4072fc0aaf47f7683726b 100644 (file)
@@ -36,7 +36,7 @@ void cpu_loop(CPUHexagonState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_INTERRUPT:
index 3af50653bb7758876029aedae1178970931c6aff..356cb48acc30059e6b91f01087b58f23024c941f 100644 (file)
@@ -119,7 +119,7 @@ void cpu_loop(CPUHPPAState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_SYSCALL:
index 7b2d8b03d8413272c90ca3d23acef08224c73b19..f3f58576af5c6c6bf66beb83de1829ec7a85097f 100644 (file)
@@ -214,7 +214,7 @@ void cpu_loop(CPUX86State *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch(trapnr) {
         case 0x80:
index a0a4cbb7cc3129007172d651a5ea77d3350778ad..26a5ce3a936c46608a842e0aa9e68683f4ce406b 100644 (file)
@@ -27,7 +27,7 @@ void cpu_loop(CPULoongArchState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_INTERRUPT:
index aca0bf23dc66e1b9e89950d2a0611c4b3c542da7..2c9f628241f4c057daa22b2741a37f3eadc2e5a7 100644 (file)
@@ -33,7 +33,7 @@ void cpu_loop(CPUM68KState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch(trapnr) {
         case EXCP_ILLEGAL:
index d8277961c736842da7a2918bb0ca9a9ac6b34cd0..78506ab23d9bbd5f180a905a3cad8dc3743492a6 100644 (file)
@@ -32,7 +32,7 @@ void cpu_loop(CPUMBState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_INTERRUPT:
index e67b8a2e46320179ef908e55ef4950e847064c8b..2365de1de1a2f7567591ce7e5046d959a63e0c77 100644 (file)
@@ -74,7 +74,7 @@ void cpu_loop(CPUMIPSState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch(trapnr) {
         case EXCP_SYSCALL:
index 8c72347a99a4378876e63a9b7f24ff5272c884e6..2167d880d55515ba32c809caddddde7c7b9a9841 100644 (file)
@@ -33,7 +33,7 @@ void cpu_loop(CPUOpenRISCState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_SYSCALL:
index 22885ffd906067f94ffd49c355d8bcf6a316d1cd..b0b0cb14b41d96f6f274c0425f44848a8a5146aa 100644 (file)
@@ -77,7 +77,7 @@ void cpu_loop(CPUPPCState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         arch_interrupt = true;
         switch (trapnr) {
index b3162815320b9822782768659ffd7c49b5163a04..ce542540c28bb5d8409f9093c3138943fdd442ab 100644 (file)
@@ -36,7 +36,7 @@ void cpu_loop(CPURISCVState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_INTERRUPT:
index 49e44548f85a0dd5256b9798e522c3adba96c9c2..4929b32e1fcce4a30a9fdc000032cea6bc151979 100644 (file)
@@ -64,7 +64,7 @@ void cpu_loop(CPUS390XState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case EXCP_INTERRUPT:
index 259ea1cc8bb477a6241cdcc07ad3f389a2c62ff6..0c9d7e9c46b5f3f779e412c0d1a0ecd0685487a5 100644 (file)
@@ -34,7 +34,7 @@ void cpu_loop(CPUSH4State *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case 0x160:
index 7d30cd1ff22e63ea3eabd37b39fbd454a57201a3..7391e2add8d4acc42bee6be1f752f0b9915fbdd5 100644 (file)
@@ -220,7 +220,7 @@ void cpu_loop (CPUSPARCState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         switch (trapnr) {
         case TARGET_TT_SYSCALL:
index 43a194fc4a4ad0260d55ea38e946570e8073305f..a0ff10eff82f2d336537674345de67978fd1462d 100644 (file)
@@ -133,7 +133,7 @@ void cpu_loop(CPUXtensaState *env)
         cpu_exec_start(cs);
         trapnr = cpu_exec(cs);
         cpu_exec_end(cs);
-        process_queued_cpu_work(cs);
+        qemu_process_cpu_events(cs);
 
         env->sregs[PS] &= ~PS_EXCM;
         switch (trapnr) {