cpus: Introduce SysemuCPUOps::has_work() handler

SysemuCPUOps::has_work() is similar to CPUClass::has_work(),
but only exposed on system emulation.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20250125170125.32855-4-philmd@linaro.org>
This commit is contained in:
Philippe Mathieu-Daudé 2025-01-21 12:57:16 +01:00
parent 8f8dbe04bd
commit 72eacd6231
3 changed files with 9 additions and 1 deletions

View File

@ -33,6 +33,10 @@
bool cpu_has_work(CPUState *cpu) bool cpu_has_work(CPUState *cpu)
{ {
if (cpu->cc->sysemu_ops->has_work) {
return cpu->cc->sysemu_ops->has_work(cpu);
}
g_assert(cpu->cc->has_work); g_assert(cpu->cc->has_work);
return cpu->cc->has_work(cpu); return cpu->cc->has_work(cpu);
} }

View File

@ -141,7 +141,7 @@ struct TCGCPUOps {
* *
* This method must be provided. If the target does not need to * This method must be provided. If the target does not need to
* do anything special for halt, the same function used for its * do anything special for halt, the same function used for its
* CPUClass::has_work method can be used here, as they have the * SysemuCPUOps::has_work method can be used here, as they have the
* same function signature. * same function signature.
*/ */
bool (*cpu_exec_halt)(CPUState *cpu); bool (*cpu_exec_halt)(CPUState *cpu);

View File

@ -16,6 +16,10 @@
* struct SysemuCPUOps: System operations specific to a CPU class * struct SysemuCPUOps: System operations specific to a CPU class
*/ */
typedef struct SysemuCPUOps { typedef struct SysemuCPUOps {
/**
* @has_work: Callback for checking if there is work to do.
*/
bool (*has_work)(CPUState *cpu);
/** /**
* @get_memory_mapping: Callback for obtaining the memory mappings. * @get_memory_mapping: Callback for obtaining the memory mappings.
*/ */