[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init
From: |
Peter Crosthwaite |
Subject: |
Re: [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init |
Date: |
Fri, 10 Jul 2015 03:15:24 -0700 |
On Sat, May 30, 2015 at 11:11 PM, Peter Crosthwaite
<address@hidden> wrote:
> Create a global list of tcg_exec_init functions that is populated at
> startup. Multiple translation engines can register an init function
> and all will be called on the master call to tcg_exec_init.
>
> Introduce a new module, translate-common. This is a common-obj for
> translation functionality such as this.
>
> Signed-off-by: Peter Crosthwaite <address@hidden>
> ---
> Makefile.objs | 1 +
> include/qemu-common.h | 1 +
> translate-all.c | 7 ++++++-
> translate-common.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 58 insertions(+), 1 deletion(-)
> create mode 100644 translate-common.c
>
> diff --git a/Makefile.objs b/Makefile.objs
> index 4881d2c..294016e 100644
> --- a/Makefile.objs
> +++ b/Makefile.objs
> @@ -67,6 +67,7 @@ common-obj-y += dma-helpers.o
> common-obj-y += vl.o
> vl.o-cflags := $(GPROF_CFLAGS) $(SDL_CFLAGS)
> common-obj-y += tpm.o
> +common-obj-y += translate-common.o
>
The functions added to this module needed to accessible from
linux-user so this has to be an obj-y.
Regards,
Peter
> common-obj-$(CONFIG_SLIRP) += slirp/
>
> diff --git a/include/qemu-common.h b/include/qemu-common.h
> index 6b373ff..88fbcfa 100644
> --- a/include/qemu-common.h
> +++ b/include/qemu-common.h
> @@ -263,6 +263,7 @@ typedef struct PCIHostDeviceAddress {
> unsigned int function;
> } PCIHostDeviceAddress;
>
> +void tcg_exec_init_add(void (*fn)(unsigned long));
> void tcg_exec_init(unsigned long tb_size);
> bool tcg_enabled(void);
>
> diff --git a/translate-all.c b/translate-all.c
> index 62042af..b2edfb4 100644
> --- a/translate-all.c
> +++ b/translate-all.c
> @@ -677,7 +677,7 @@ static inline void code_gen_alloc(size_t tb_size)
> /* 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)
> +static void do_tcg_exec_init(unsigned long tb_size)
> {
> cpu_gen_init();
> code_gen_alloc(tb_size);
> @@ -691,6 +691,11 @@ void tcg_exec_init(unsigned long tb_size)
> #endif
> }
>
> +static __attribute__((constructor)) void register_tcg_exec_init(void)
> +{
> + tcg_exec_init_add(do_tcg_exec_init);
> +}
> +
> bool tcg_enabled(void)
> {
> return tcg_ctx.code_gen_buffer != NULL;
> diff --git a/translate-common.c b/translate-common.c
> new file mode 100644
> index 0000000..563ae5a
> --- /dev/null
> +++ b/translate-common.c
> @@ -0,0 +1,50 @@
> +/*
> + * Host code generation common components
> + *
> + * Copyright (c) 2015 Peter Crosthwaite <address@hidden>
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see
> <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "qemu-common.h"
> +
> +typedef struct TCGExecInitFn {
> + void (*do_tcg_exec_init)(unsigned long tb_size);
> + QLIST_ENTRY(TCGExecInitFn) list;
> +} TCGExecInitFn;
> +
> +static QLIST_HEAD(, TCGExecInitFn) tcg_exec_init_list;
> +
> +void tcg_exec_init_add(void (*fn)(unsigned long))
> +{
> + static bool inited;
> + TCGExecInitFn *lelem = g_malloc0(sizeof *lelem);
> +
> + if (!inited) {
> + inited = true;
> + QLIST_INIT(&tcg_exec_init_list);
> + }
> +
> + lelem->do_tcg_exec_init = fn;
> + QLIST_INSERT_HEAD(&tcg_exec_init_list, lelem, list);
> +}
> +
> +void tcg_exec_init(unsigned long tb_size)
> +{
> + TCGExecInitFn *t;
> +
> + QLIST_FOREACH(t, &tcg_exec_init_list, list) {
> + t->do_tcg_exec_init(tb_size);
> + }
> +}
> --
> 1.9.1
>
>
- Re: [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init,
Peter Crosthwaite <=