On Tue, May 02, 2017 at 20:36:52 -0700, Richard Henderson wrote: > On 05/02/2017 12:22 PM, Richard Henderson wrote: > >Changes since v5: > ... > > * Alpha frontend patch rewritten; the former patch appears to > > drop clock interrupts, not exiting the kernel's idle loop. > > I never *really* figured out why, since both patches seem > > to annotate the same TBs in the same way. > > There's definitely something odd going on. > > With a rebuild from scratch, the same symptoms have re-appeared for Alpha. > So it really had nothing to do with the original patch. I'm at a bit of a > loss...
I can reliably reproduce a freeze upon booting. Not sure this can help much (this is the first time I run an Alpha guest), but here are some findings. In my testing, if I disable the lookup for JMP/JSR/ret, I can boot OK. This works: +++ b/target/alpha/translate.c @@ -2435,12 +2435,16 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) if (ra != 31) { tcg_gen_movi_i64(ctx->ir[ra], ctx->pc); } +#if 0 if (use_exit_tb(ctx)) { ret = EXIT_PC_UPDATED; } else { tcg_gen_lookup_and_goto_ptr(cpu_pc); ret = EXIT_GOTO_TB; } +#else + ret = EXIT_PC_UPDATED; +#endif break; However, this doesn't tell us much, since these jumps are pretty common. Interestingly, if I leave the lookup_and_goto_ptr above (s/#if 0/#if 1/), but change the lookup_ptr helper to bypass tb_jmp_cache and directly check the htable, it boots OK. Could it be that we're forgetting to clear (or set) tb_jmp_cache somewhere? Emilio