Pārlūkot izejas kodu

Remove TLB from userspace

Remove TLB from userspace CPU structure.

Signed-off-by: Paul Brook <paul@codesourcery.com>
Paul Brook 15 gadi atpakaļ
vecāks
revīzija
20cb400d41
4 mainītis faili ar 20 papildinājumiem un 3 dzēšanām
  1. 14 3
      cpu-defs.h
  2. 2 0
      tcg/arm/tcg-target.c
  3. 2 0
      tcg/i386/tcg-target.c
  4. 2 0
      tcg/x86_64/tcg-target.c

+ 14 - 3
cpu-defs.h

@@ -72,6 +72,7 @@ typedef uint64_t target_ulong;
 #define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1)
 #define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1)
 #define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE)
 #define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE)
 
 
+#if !defined(CONFIG_USER_ONLY)
 #define CPU_TLB_BITS 8
 #define CPU_TLB_BITS 8
 #define CPU_TLB_SIZE (1 << CPU_TLB_BITS)
 #define CPU_TLB_SIZE (1 << CPU_TLB_BITS)
 
 
@@ -106,6 +107,18 @@ typedef struct CPUTLBEntry {
                    sizeof(target_phys_addr_t))];
                    sizeof(target_phys_addr_t))];
 } CPUTLBEntry;
 } CPUTLBEntry;
 
 
+#define CPU_COMMON_TLB \
+    /* The meaning of the MMU modes is defined in the target code. */   \
+    CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE];                  \
+    target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE];               \
+
+#else
+
+#define CPU_COMMON_TLB
+
+#endif
+
+
 #ifdef HOST_WORDS_BIGENDIAN
 #ifdef HOST_WORDS_BIGENDIAN
 typedef struct icount_decr_u16 {
 typedef struct icount_decr_u16 {
     uint16_t high;
     uint16_t high;
@@ -150,9 +163,7 @@ typedef struct CPUWatchpoint {
     uint32_t stopped; /* Artificially stopped */                        \
     uint32_t stopped; /* Artificially stopped */                        \
     uint32_t interrupt_request;                                         \
     uint32_t interrupt_request;                                         \
     volatile sig_atomic_t exit_request;                                 \
     volatile sig_atomic_t exit_request;                                 \
-    /* The meaning of the MMU modes is defined in the target code. */   \
-    CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE];                  \
-    target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE];               \
+    CPU_COMMON_TLB                                                      \
     struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE];           \
     struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE];           \
     /* buffer for temporaries in the code generator */                  \
     /* buffer for temporaries in the code generator */                  \
     long temp_buf[CPU_TEMP_BUF_NLONGS];                                 \
     long temp_buf[CPU_TEMP_BUF_NLONGS];                                 \

+ 2 - 0
tcg/arm/tcg-target.c

@@ -1690,9 +1690,11 @@ static const TCGTargetOpDef arm_op_defs[] = {
 
 
 void tcg_target_init(TCGContext *s)
 void tcg_target_init(TCGContext *s)
 {
 {
+#if !defined(CONFIG_USER_ONLY)
     /* fail safe */
     /* fail safe */
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
         tcg_abort();
         tcg_abort();
+#endif
 
 
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0,
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0,
                     ((2 << TCG_REG_R14) - 1) & ~(1 << TCG_REG_R8));
                     ((2 << TCG_REG_R14) - 1) & ~(1 << TCG_REG_R8));

+ 2 - 0
tcg/i386/tcg-target.c

@@ -1353,9 +1353,11 @@ void tcg_target_qemu_prologue(TCGContext *s)
 
 
 void tcg_target_init(TCGContext *s)
 void tcg_target_init(TCGContext *s)
 {
 {
+#if !defined(CONFIG_USER_ONLY)
     /* fail safe */
     /* fail safe */
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
         tcg_abort();
         tcg_abort();
+#endif
 
 
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xff);
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xff);
     tcg_regset_set32(tcg_target_call_clobber_regs, 0,
     tcg_regset_set32(tcg_target_call_clobber_regs, 0,

+ 2 - 0
tcg/x86_64/tcg-target.c

@@ -1426,9 +1426,11 @@ static const TCGTargetOpDef x86_64_op_defs[] = {
 
 
 void tcg_target_init(TCGContext *s)
 void tcg_target_init(TCGContext *s)
 {
 {
+#if !defined(CONFIG_USER_ONLY)
     /* fail safe */
     /* fail safe */
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
     if ((1 << CPU_TLB_ENTRY_BITS) != sizeof(CPUTLBEntry))
         tcg_abort();
         tcg_abort();
+#endif
 
 
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffff);
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I32], 0, 0xffff);
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I64], 0, 0xffff);
     tcg_regset_set32(tcg_target_available_regs[TCG_TYPE_I64], 0, 0xffff);