accel/tcg: Split out PageDesc to internal.h

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2022-09-19 12:28:15 +02:00
parent f5e8039974
commit 55098769bf
2 changed files with 32 additions and 30 deletions

View File

@ -11,6 +11,37 @@
#include "exec/exec-all.h" #include "exec/exec-all.h"
/*
* Access to the various translations structures need to be serialised
* via locks for consistency. In user-mode emulation access to the
* memory related structures are protected with mmap_lock.
* In !user-mode we use per-page locks.
*/
#ifdef CONFIG_SOFTMMU
#define assert_memory_lock()
#else
#define assert_memory_lock() tcg_debug_assert(have_mmap_lock())
#endif
typedef struct PageDesc {
/* list of TBs intersecting this ram page */
uintptr_t first_tb;
#ifdef CONFIG_USER_ONLY
unsigned long flags;
void *target_data;
#endif
#ifdef CONFIG_SOFTMMU
QemuSpin lock;
#endif
} PageDesc;
PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc);
static inline PageDesc *page_find(tb_page_addr_t index)
{
return page_find_alloc(index, false);
}
TranslationBlock *tb_gen_code(CPUState *cpu, target_ulong pc, TranslationBlock *tb_gen_code(CPUState *cpu, target_ulong pc,
target_ulong cs_base, uint32_t flags, target_ulong cs_base, uint32_t flags,
int cflags); int cflags);

View File

@ -65,30 +65,6 @@
/* make various TB consistency checks */ /* make various TB consistency checks */
/* Access to the various translations structures need to be serialised via locks
* for consistency.
* In user-mode emulation access to the memory related structures are protected
* with mmap_lock.
* In !user-mode we use per-page locks.
*/
#ifdef CONFIG_SOFTMMU
#define assert_memory_lock()
#else
#define assert_memory_lock() tcg_debug_assert(have_mmap_lock())
#endif
typedef struct PageDesc {
/* list of TBs intersecting this ram page */
uintptr_t first_tb;
#ifdef CONFIG_USER_ONLY
unsigned long flags;
void *target_data;
#endif
#ifdef CONFIG_SOFTMMU
QemuSpin lock;
#endif
} PageDesc;
/** /**
* struct page_entry - page descriptor entry * struct page_entry - page descriptor entry
* @pd: pointer to the &struct PageDesc of the page this entry represents * @pd: pointer to the &struct PageDesc of the page this entry represents
@ -445,7 +421,7 @@ void page_init(void)
#endif #endif
} }
static PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc) PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc)
{ {
PageDesc *pd; PageDesc *pd;
void **lp; void **lp;
@ -511,11 +487,6 @@ static PageDesc *page_find_alloc(tb_page_addr_t index, bool alloc)
return pd + (index & (V_L2_SIZE - 1)); return pd + (index & (V_L2_SIZE - 1));
} }
static inline PageDesc *page_find(tb_page_addr_t index)
{
return page_find_alloc(index, false);
}
static void page_lock_pair(PageDesc **ret_p1, tb_page_addr_t phys1, static void page_lock_pair(PageDesc **ret_p1, tb_page_addr_t phys1,
PageDesc **ret_p2, tb_page_addr_t phys2, bool alloc); PageDesc **ret_p2, tb_page_addr_t phys2, bool alloc);