On 9/20/21 15:52, Philippe Mathieu-Daudé wrote: > On 9/20/21 15:14, Philippe Mathieu-Daudé wrote: >> On 9/20/21 12:07, Peter Maydell wrote: >>> On Thu, 16 Sept 2021 at 16:30, Richard Henderson >>> <richard.hender...@linaro.org> wrote: >>>> >>>> The following changes since commit >>>> 57b6f58c1d0df757c9311496c32d502925056894: >>>> >>>> Merge remote-tracking branch 'remotes/hreitz/tags/pull-block-2021-09-15' >>>> into staging (2021-09-15 18:55:59 +0100) >>>> >>>> are available in the Git repository at: >>>> >>>> https://gitlab.com/rth7680/qemu.git tags/pull-tcg-20210916 >>>> >>>> for you to fetch changes up to 50febfe212f24a9b91b4224d03f653415fddf8e1: >>>> >>>> tcg/mips: Drop special alignment for code_gen_buffer (2021-09-16 >>>> 09:37:39 -0400) >>>> >>>> ---------------------------------------------------------------- >>>> Restrict cpu_has_work to sysemu, and move to AccelOpsClass. >>>> Move cpu_signal_handler declaration out of target/. >>>> Misc tcg/mips/ cleanups. >>>> >>> >> >>> The 'check-acceptance' job also hits a timeout on the emcraft_sf2 >>> test: >>> https://gitlab.com/qemu-project/qemu/-/jobs/1604251596 >> >> cd0d814b4b9b732f11885889070adacf87447751 is the first bad commit >> >> accel/tcg: Implement AccelOpsClass::has_work() as stub >> >> Add TCG target-specific has_work() handler in TCGCPUOps, >> and add tcg_cpu_has_work() as AccelOpsClass has_work() >> implementation. > > -- >8 -- > diff --git a/accel/tcg/tcg-accel-ops.c b/accel/tcg/tcg-accel-ops.c > index ed4ebe735fe..2f96553f6f7 100644 > --- a/accel/tcg/tcg-accel-ops.c > +++ b/accel/tcg/tcg-accel-ops.c > @@ -79,7 +79,7 @@ static bool tcg_cpu_has_work(CPUState *cpu) > CPUClass *cc = CPU_GET_CLASS(cpu); > > if (!cc->tcg_ops->has_work) { > - return false; > + return true;
Forget this crap. The missing piece was: -- >8 -- diff --git a/target/arm/cpu_tcg.c b/target/arm/cpu_tcg.c index 0d5adccf1a7..da348938407 100644 --- a/target/arm/cpu_tcg.c +++ b/target/arm/cpu_tcg.c @@ -23,6 +23,11 @@ #if !defined(CONFIG_USER_ONLY) || !defined(TARGET_AARCH64) #if !defined(CONFIG_USER_ONLY) && defined(CONFIG_TCG) +static bool arm_v7m_cpu_has_work(CPUState *cs) +{ + return cs->interrupt_request & CPU_INTERRUPT_HARD; +} + static bool arm_v7m_cpu_exec_interrupt(CPUState *cs, int interrupt_request) { CPUClass *cc = CPU_GET_CLASS(cs); @@ -920,6 +925,7 @@ static void arm_v7m_class_init(ObjectClass *oc, void *data) acc->info = data; #ifdef CONFIG_TCG + cc->has_work = arm_v7m_cpu_has_work; cc->tcg_ops = &arm_v7m_tcg_ops; #endif /* CONFIG_TCG */ ---