mirror of https://github.com/xemu-project/xemu.git
accel/tcg: Merge tcg_exec_init into tcg_init_machine
There is only one caller, and shortly we will need access to the MachineState, which tcg_init_machine already has. Reviewed-by: Luis Pires <luis.pires@eldorado.org.br> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a76aabd37b
commit
fa79cde6ed
|
@ -16,5 +16,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, target_ulong pc,
|
||||||
int cflags);
|
int cflags);
|
||||||
|
|
||||||
void QEMU_NORETURN cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
|
void QEMU_NORETURN cpu_io_recompile(CPUState *cpu, uintptr_t retaddr);
|
||||||
|
void page_init(void);
|
||||||
|
void tb_htable_init(void);
|
||||||
|
|
||||||
#endif /* ACCEL_TCG_INTERNAL_H */
|
#endif /* ACCEL_TCG_INTERNAL_H */
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#include "qemu/error-report.h"
|
#include "qemu/error-report.h"
|
||||||
#include "qemu/accel.h"
|
#include "qemu/accel.h"
|
||||||
#include "qapi/qapi-builtin-visit.h"
|
#include "qapi/qapi-builtin-visit.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
struct TCGState {
|
struct TCGState {
|
||||||
AccelState parent_obj;
|
AccelState parent_obj;
|
||||||
|
@ -109,8 +110,21 @@ static int tcg_init_machine(MachineState *ms)
|
||||||
{
|
{
|
||||||
TCGState *s = TCG_STATE(current_accel());
|
TCGState *s = TCG_STATE(current_accel());
|
||||||
|
|
||||||
tcg_exec_init(s->tb_size * 1024 * 1024, s->splitwx_enabled);
|
tcg_allowed = true;
|
||||||
mttcg_enabled = s->mttcg_enabled;
|
mttcg_enabled = s->mttcg_enabled;
|
||||||
|
|
||||||
|
page_init();
|
||||||
|
tb_htable_init();
|
||||||
|
tcg_init(s->tb_size * 1024 * 1024, s->splitwx_enabled);
|
||||||
|
|
||||||
|
#if defined(CONFIG_SOFTMMU)
|
||||||
|
/*
|
||||||
|
* There's no guest base to take into account, so go ahead and
|
||||||
|
* initialize the prologue now.
|
||||||
|
*/
|
||||||
|
tcg_prologue_init(tcg_ctx);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -408,7 +408,7 @@ bool cpu_restore_state(CPUState *cpu, uintptr_t host_pc, bool will_exit)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void page_init(void)
|
void page_init(void)
|
||||||
{
|
{
|
||||||
page_size_init();
|
page_size_init();
|
||||||
page_table_config_init();
|
page_table_config_init();
|
||||||
|
@ -907,30 +907,13 @@ static bool tb_cmp(const void *ap, const void *bp)
|
||||||
a->page_addr[1] == b->page_addr[1];
|
a->page_addr[1] == b->page_addr[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tb_htable_init(void)
|
void tb_htable_init(void)
|
||||||
{
|
{
|
||||||
unsigned int mode = QHT_MODE_AUTO_RESIZE;
|
unsigned int mode = QHT_MODE_AUTO_RESIZE;
|
||||||
|
|
||||||
qht_init(&tb_ctx.htable, tb_cmp, CODE_GEN_HTABLE_SIZE, mode);
|
qht_init(&tb_ctx.htable, tb_cmp, CODE_GEN_HTABLE_SIZE, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Must be called before using the QEMU cpus. 'tb_size' is the size
|
|
||||||
(in bytes) allocated to the translation buffer. Zero means default
|
|
||||||
size. */
|
|
||||||
void tcg_exec_init(unsigned long tb_size, int splitwx)
|
|
||||||
{
|
|
||||||
tcg_allowed = true;
|
|
||||||
page_init();
|
|
||||||
tb_htable_init();
|
|
||||||
tcg_init(tb_size, splitwx);
|
|
||||||
|
|
||||||
#if defined(CONFIG_SOFTMMU)
|
|
||||||
/* There's no guest base to take into account, so go ahead and
|
|
||||||
initialize the prologue now. */
|
|
||||||
tcg_prologue_init(tcg_ctx);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/* call with @p->lock held */
|
/* call with @p->lock held */
|
||||||
static inline void invalidate_page_bitmap(PageDesc *p)
|
static inline void invalidate_page_bitmap(PageDesc *p)
|
||||||
{
|
{
|
||||||
|
|
|
@ -813,7 +813,7 @@ int main(int argc, char **argv)
|
||||||
envlist_free(envlist);
|
envlist_free(envlist);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now that page sizes are configured in tcg_exec_init() we can do
|
* Now that page sizes are configured we can do
|
||||||
* proper page alignment for guest_base.
|
* proper page alignment for guest_base.
|
||||||
*/
|
*/
|
||||||
guest_base = HOST_PAGE_ALIGN(guest_base);
|
guest_base = HOST_PAGE_ALIGN(guest_base);
|
||||||
|
|
|
@ -8,8 +8,6 @@
|
||||||
#ifndef SYSEMU_TCG_H
|
#ifndef SYSEMU_TCG_H
|
||||||
#define SYSEMU_TCG_H
|
#define SYSEMU_TCG_H
|
||||||
|
|
||||||
void tcg_exec_init(unsigned long tb_size, int splitwx);
|
|
||||||
|
|
||||||
#ifdef CONFIG_TCG
|
#ifdef CONFIG_TCG
|
||||||
extern bool tcg_allowed;
|
extern bool tcg_allowed;
|
||||||
#define tcg_enabled() (tcg_allowed)
|
#define tcg_enabled() (tcg_allowed)
|
||||||
|
|
Loading…
Reference in New Issue