qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 09/25] Allow 5 mmu indexes.


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [PATCH 09/25] Allow 5 mmu indexes.
Date: Sun, 29 Mar 2009 01:37:29 +0100
User-agent: Mutt/1.5.18 (2008-05-17)

On Tue, Mar 24, 2009 at 04:47:51PM +0100, Tristan Gingold wrote:
> This is necessary for alpha because it has 4 protection levels and pal mode.
> 
> Signed-off-by: Tristan Gingold <address@hidden>
> ---
>  exec.c         |   30 +++++++++++++++++++++++++-----
>  softmmu_exec.h |   29 ++++++++++++++++++++++++-----
>  2 files changed, 49 insertions(+), 10 deletions(-)
> 
> diff --git a/exec.c b/exec.c
> index 12d35b0..472b6c4 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -1760,12 +1760,18 @@ void tlb_flush(CPUState *env, int flush_global)
>          env->tlb_table[2][i].addr_read = -1;
>          env->tlb_table[2][i].addr_write = -1;
>          env->tlb_table[2][i].addr_code = -1;
> -#if (NB_MMU_MODES == 4)
> +#endif
> +#if (NB_MMU_MODES >= 4)
>          env->tlb_table[3][i].addr_read = -1;
>          env->tlb_table[3][i].addr_write = -1;
>          env->tlb_table[3][i].addr_code = -1;
>  #endif
> +#if (NB_MMU_MODES >= 5)
> +        env->tlb_table[4][i].addr_read = -1;
> +        env->tlb_table[4][i].addr_write = -1;
> +        env->tlb_table[4][i].addr_code = -1;
>  #endif
> +
>      }
>  
>      memset (env->tb_jmp_cache, 0, TB_JMP_CACHE_SIZE * sizeof (void *));
> @@ -1809,9 +1815,12 @@ void tlb_flush_page(CPUState *env, target_ulong addr)
>      tlb_flush_entry(&env->tlb_table[1][i], addr);
>  #if (NB_MMU_MODES >= 3)
>      tlb_flush_entry(&env->tlb_table[2][i], addr);
> -#if (NB_MMU_MODES == 4)
> +#endif
> +#if (NB_MMU_MODES >= 4)
>      tlb_flush_entry(&env->tlb_table[3][i], addr);
>  #endif
> +#if (NB_MMU_MODES >= 5)
> +    tlb_flush_entry(&env->tlb_table[4][i], addr);
>  #endif
>  
>      tlb_flush_jmp_cache(env, addr);
> @@ -1895,10 +1904,14 @@ void cpu_physical_memory_reset_dirty(ram_addr_t 
> start, ram_addr_t end,
>  #if (NB_MMU_MODES >= 3)
>          for(i = 0; i < CPU_TLB_SIZE; i++)
>              tlb_reset_dirty_range(&env->tlb_table[2][i], start1, length);
> -#if (NB_MMU_MODES == 4)
> +#endif
> +#if (NB_MMU_MODES >= 4)
>          for(i = 0; i < CPU_TLB_SIZE; i++)
>              tlb_reset_dirty_range(&env->tlb_table[3][i], start1, length);
>  #endif
> +#if (NB_MMU_MODES >= 5)
> +        for(i = 0; i < CPU_TLB_SIZE; i++)
> +            tlb_reset_dirty_range(&env->tlb_table[4][i], start1, length);
>  #endif
>      }
>  }
> @@ -1944,10 +1957,14 @@ void cpu_tlb_update_dirty(CPUState *env)
>  #if (NB_MMU_MODES >= 3)
>      for(i = 0; i < CPU_TLB_SIZE; i++)
>          tlb_update_dirty(&env->tlb_table[2][i]);
> -#if (NB_MMU_MODES == 4)
> +#endif
> +#if (NB_MMU_MODES >= 4)
>      for(i = 0; i < CPU_TLB_SIZE; i++)
>          tlb_update_dirty(&env->tlb_table[3][i]);
>  #endif
> +#if (NB_MMU_MODES >= 5)
> +    for(i = 0; i < CPU_TLB_SIZE; i++)
> +        tlb_update_dirty(&env->tlb_table[4][i]);
>  #endif
>  }
>  
> @@ -1969,9 +1986,12 @@ static inline void tlb_set_dirty(CPUState *env, 
> target_ulong vaddr)
>      tlb_set_dirty1(&env->tlb_table[1][i], vaddr);
>  #if (NB_MMU_MODES >= 3)
>      tlb_set_dirty1(&env->tlb_table[2][i], vaddr);
> -#if (NB_MMU_MODES == 4)
> +#endif
> +#if (NB_MMU_MODES >= 4)
>      tlb_set_dirty1(&env->tlb_table[3][i], vaddr);
>  #endif
> +#if (NB_MMU_MODES >= 5)
> +    tlb_set_dirty1(&env->tlb_table[4][i], vaddr);
>  #endif
>  }
>  
> diff --git a/softmmu_exec.h b/softmmu_exec.h
> index 9cc4535..8eaa0ad 100644
> --- a/softmmu_exec.h
> +++ b/softmmu_exec.h
> @@ -60,6 +60,7 @@
>  #include "softmmu_header.h"
>  #undef ACCESS_TYPE
>  #undef MEMSUFFIX
> +#endif /* (NB_MMU_MODES >= 3) */
>  
>  #if (NB_MMU_MODES >= 4)
>  
> @@ -78,12 +79,30 @@
>  #include "softmmu_header.h"
>  #undef ACCESS_TYPE
>  #undef MEMSUFFIX
> +#endif /* (NB_MMU_MODES >= 4) */
>  
> -#if (NB_MMU_MODES > 4)
> -#error "NB_MMU_MODES > 4 is not supported for now"
> -#endif /* (NB_MMU_MODES > 4) */
> -#endif /* (NB_MMU_MODES == 4) */
> -#endif /* (NB_MMU_MODES >= 3) */
> +#if (NB_MMU_MODES >= 5)
> +
> +#define ACCESS_TYPE 4
> +#define MEMSUFFIX MMU_MODE4_SUFFIX
> +#define DATA_SIZE 1
> +#include "softmmu_header.h"
> +
> +#define DATA_SIZE 2
> +#include "softmmu_header.h"
> +
> +#define DATA_SIZE 4
> +#include "softmmu_header.h"
> +
> +#define DATA_SIZE 8
> +#include "softmmu_header.h"
> +#undef ACCESS_TYPE
> +#undef MEMSUFFIX
> +#endif /* (NB_MMU_MODES >= 4) */

That should be 5 here.

> +#if (NB_MMU_MODES > 5)
> +#error "NB_MMU_MODES > 5 is not supported for now"
> +#endif /* (NB_MMU_MODES > 5) */
>  

-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
address@hidden                 http://www.aurel32.net




reply via email to

[Prev in Thread] Current Thread [Next in Thread]