On 05/04/16 18:44, Paolo Bonzini wrote:
>
> On 05/04/2016 17:32, Alex Bennée wrote:
>> + cpu->tb_invalidated_flag = false;
>> tb = tb_gen_code(cpu, orig_tb->pc, orig_tb->cs_base, orig_tb->flags,
>> max_cycles | CF_NOCACHE
>> | (ignore_icount ? CF_IGNORE_ICOUNT : 0));
>> - tb->orig_tb = tcg_ctx.tb_ctx.tb_invalidated_flag ? NULL : orig_tb;
>> + tb->orig_tb = cpu->tb_invalidated_flag ? NULL : orig_tb;
>> cpu->current_tb = tb;
> Based on discussion, it's safest to save the old value at the beginning
> of the hunk, and "OR" it into cpu->tb_invalidated_flag here.
>
>> /* if no translated code available, then translate it now */
>> + cpu->tb_invalidated_flag = false;
> Please remove this...
>
>> tb = tb_gen_code(cpu, pc, cs_base, flags, 0);
>>
>> #ifdef CONFIG_USER_ONLY
>> @@ -509,12 +509,11 @@ int cpu_exec(CPUState *cpu)
>> tb = tb_find_fast(cpu);
>> /* Note: we do it here to avoid a gcc bug on Mac OS X when
>> doing it in tb_find_slow */
>> - if (tcg_ctx.tb_ctx.tb_invalidated_flag) {
>> + if (cpu->tb_invalidated_flag) {
>> /* as some TB could have been invalidated because
>> - of memory exceptions while generating the code, we
>> + of a tb_flush while generating the code, we
>> must recompute the hash index here */
>> next_tb = 0;
>> - tcg_ctx.tb_ctx.tb_invalidated_flag = 0;
> ... and leave the zeroing here.
>
Yes, I'm going to do something like this in a separate patch series or
just append it back to the "TCG misc clean-up" patch series when
re-spinning it.
Kind regards,
Sergey