exec-all: bring tb->invalid into tb->cflags
This gets rid of a hole in struct TranslationBlock. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Emilio G. Cota <cota@braap.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
		
							parent
							
								
									f6bb84d531
								
							
						
					
					
						commit
						84f1c148da
					
				| 
						 | 
				
			
			@ -294,7 +294,7 @@ static bool tb_cmp(const void *p, const void *d)
 | 
			
		|||
        tb->cs_base == desc->cs_base &&
 | 
			
		||||
        tb->flags == desc->flags &&
 | 
			
		||||
        tb->trace_vcpu_dstate == desc->trace_vcpu_dstate &&
 | 
			
		||||
        !atomic_read(&tb->invalid)) {
 | 
			
		||||
        !(atomic_read(&tb->cflags) & CF_INVALID)) {
 | 
			
		||||
        /* check next page if needed */
 | 
			
		||||
        if (tb->page_addr[1] == -1) {
 | 
			
		||||
            return true;
 | 
			
		||||
| 
						 | 
				
			
			@ -412,7 +412,7 @@ static inline TranslationBlock *tb_find(CPUState *cpu,
 | 
			
		|||
            tb_lock();
 | 
			
		||||
            acquired_tb_lock = true;
 | 
			
		||||
        }
 | 
			
		||||
        if (!tb->invalid) {
 | 
			
		||||
        if (!(tb->cflags & CF_INVALID)) {
 | 
			
		||||
            tb_add_jump(last_tb, tb_exit, tb);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1073,7 +1073,7 @@ void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr)
 | 
			
		|||
 | 
			
		||||
    assert_tb_locked();
 | 
			
		||||
 | 
			
		||||
    atomic_set(&tb->invalid, true);
 | 
			
		||||
    atomic_set(&tb->cflags, tb->cflags | CF_INVALID);
 | 
			
		||||
 | 
			
		||||
    /* remove the TB from the hash list */
 | 
			
		||||
    phys_pc = tb->page_addr[0] + (tb->pc & ~TARGET_PAGE_MASK);
 | 
			
		||||
| 
						 | 
				
			
			@ -1269,7 +1269,6 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
 | 
			
		|||
    tb->flags = flags;
 | 
			
		||||
    tb->cflags = cflags;
 | 
			
		||||
    tb->trace_vcpu_dstate = *cpu->trace_dstate;
 | 
			
		||||
    tb->invalid = false;
 | 
			
		||||
 | 
			
		||||
#ifdef CONFIG_PROFILER
 | 
			
		||||
    tcg_ctx.tb_count1++; /* includes aborted translations because of
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -314,12 +314,11 @@ struct TranslationBlock {
 | 
			
		|||
#define CF_NOCACHE     0x10000 /* To be freed after execution */
 | 
			
		||||
#define CF_USE_ICOUNT  0x20000
 | 
			
		||||
#define CF_IGNORE_ICOUNT 0x40000 /* Do not generate icount code */
 | 
			
		||||
#define CF_INVALID     0x80000 /* TB is stale. Setters must acquire tb_lock */
 | 
			
		||||
 | 
			
		||||
    /* Per-vCPU dynamic tracing state used to generate this TB */
 | 
			
		||||
    uint32_t trace_vcpu_dstate;
 | 
			
		||||
 | 
			
		||||
    uint16_t invalid;
 | 
			
		||||
 | 
			
		||||
    void *tc_ptr;    /* pointer to the translated code */
 | 
			
		||||
    uint8_t *tc_search;  /* pointer to search data */
 | 
			
		||||
    /* original tb when cflags has CF_NOCACHE */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,7 +35,7 @@ tb_lookup__cpu_state(CPUState *cpu, target_ulong *pc, target_ulong *cs_base,
 | 
			
		|||
               tb->cs_base == *cs_base &&
 | 
			
		||||
               tb->flags == *flags &&
 | 
			
		||||
               tb->trace_vcpu_dstate == *cpu->trace_dstate &&
 | 
			
		||||
               !atomic_read(&tb->invalid))) {
 | 
			
		||||
               !(atomic_read(&tb->cflags) & CF_INVALID))) {
 | 
			
		||||
        return tb;
 | 
			
		||||
    }
 | 
			
		||||
    tb = tb_htable_lookup(cpu, *pc, *cs_base, *flags);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue