From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org
Subject: Re: [PATCH v2 2/7] exec: Split out variable page size support to exec-vary.c
Date: Fri, 25 Oct 2019 15:02:33 +0100 [thread overview]
Message-ID: <87wocsly86.fsf@linaro.org> (raw)
In-Reply-To: <20191023154505.30521-3-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> The next patch will play a trick with "const" that will
> confuse the compiler about the uses of target_page_bits
> within exec.c. Moving everything to a new file prevents
> this confusion.
>
> No functional change so far.
>
> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
> ---
> Makefile.target | 2 +-
> include/qemu-common.h | 6 +++++
> exec-vary.c | 57 +++++++++++++++++++++++++++++++++++++++++++
> exec.c | 34 --------------------------
> 4 files changed, 64 insertions(+), 35 deletions(-)
> create mode 100644 exec-vary.c
>
> diff --git a/Makefile.target b/Makefile.target
> index 5e916230c4..ca3d14efe1 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -107,7 +107,7 @@ obj-y += trace/
>
> #########################################################
> # cpu emulator library
> -obj-y += exec.o
> +obj-y += exec.o exec-vary.o
> obj-y += accel/
> obj-$(CONFIG_TCG) += tcg/tcg.o tcg/tcg-op.o tcg/tcg-op-vec.o tcg/tcg-op-gvec.o
> obj-$(CONFIG_TCG) += tcg/tcg-common.o tcg/optimize.o
> diff --git a/include/qemu-common.h b/include/qemu-common.h
> index 8d84db90b0..082da59e85 100644
> --- a/include/qemu-common.h
> +++ b/include/qemu-common.h
> @@ -74,6 +74,12 @@ void cpu_exec_step_atomic(CPUState *cpu);
> */
> bool set_preferred_target_page_bits(int bits);
>
> +/**
> + * finalize_target_page_bits:
> + * Commit the final value set by set_preferred_target_page_bits.
> + */
> +void finalize_target_page_bits(void);
> +
> /**
> * Sends a (part of) iovec down a socket, yielding when the socket is full, or
> * Receives data into a (part of) iovec from a socket,
> diff --git a/exec-vary.c b/exec-vary.c
> new file mode 100644
> index 0000000000..48c0ab306c
> --- /dev/null
> +++ b/exec-vary.c
> @@ -0,0 +1,57 @@
> +/*
> + * Variable page size handling
> + *
> + * Copyright (c) 2003 Fabrice Bellard
> + *
> + * 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/osdep.h"
> +#include "qemu-common.h"
> +#include "exec/exec-all.h"
> +
> +#ifdef TARGET_PAGE_BITS_VARY
> +int target_page_bits;
> +bool target_page_bits_decided;
> +#endif
> +
> +bool set_preferred_target_page_bits(int bits)
> +{
> + /*
> + * The target page size is the lowest common denominator for all
> + * the CPUs in the system, so we can only make it smaller, never
> + * larger. And we can't make it smaller once we've committed to
> + * a particular size.
> + */
> +#ifdef TARGET_PAGE_BITS_VARY
> + assert(bits >= TARGET_PAGE_BITS_MIN);
> + if (target_page_bits == 0 || target_page_bits > bits) {
> + if (target_page_bits_decided) {
> + return false;
> + }
> + target_page_bits = bits;
> + }
> +#endif
> + return true;
> +}
> +
> +void finalize_target_page_bits(void)
> +{
> +#ifdef TARGET_PAGE_BITS_VARY
> + if (target_page_bits == 0) {
> + target_page_bits = TARGET_PAGE_BITS_MIN;
> + }
> + target_page_bits_decided = true;
> +#endif
> +}
> diff --git a/exec.c b/exec.c
> index fb0943cfed..5bf181d23e 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -91,11 +91,6 @@ AddressSpace address_space_memory;
> static MemoryRegion io_mem_unassigned;
> #endif
>
> -#ifdef TARGET_PAGE_BITS_VARY
> -int target_page_bits;
> -bool target_page_bits_decided;
> -#endif
> -
> CPUTailQ cpus = QTAILQ_HEAD_INITIALIZER(cpus);
>
> /* current CPU in the current thread. It is only valid inside
> @@ -109,37 +104,8 @@ int use_icount;
> uintptr_t qemu_host_page_size;
> intptr_t qemu_host_page_mask;
>
> -bool set_preferred_target_page_bits(int bits)
> -{
> - /* The target page size is the lowest common denominator for all
> - * the CPUs in the system, so we can only make it smaller, never
> - * larger. And we can't make it smaller once we've committed to
> - * a particular size.
> - */
> -#ifdef TARGET_PAGE_BITS_VARY
> - assert(bits >= TARGET_PAGE_BITS_MIN);
> - if (target_page_bits == 0 || target_page_bits > bits) {
> - if (target_page_bits_decided) {
> - return false;
> - }
> - target_page_bits = bits;
> - }
> -#endif
> - return true;
> -}
> -
> #if !defined(CONFIG_USER_ONLY)
>
> -static void finalize_target_page_bits(void)
> -{
> -#ifdef TARGET_PAGE_BITS_VARY
> - if (target_page_bits == 0) {
> - target_page_bits = TARGET_PAGE_BITS_MIN;
> - }
> - target_page_bits_decided = true;
> -#endif
> -}
> -
> typedef struct PhysPageEntry PhysPageEntry;
>
> struct PhysPageEntry {
--
Alex Bennée
next prev parent reply other threads:[~2019-10-25 14:13 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-23 15:44 [PATCH v2 0/7] exec: Improve code for TARGET_PAGE_BITS_VARY Richard Henderson
2019-10-23 15:44 ` [PATCH v2 1/7] cpu: use ROUND_UP() to define xxx_PAGE_ALIGN Richard Henderson
2019-10-24 11:52 ` Philippe Mathieu-Daudé
2019-10-24 12:04 ` Paolo Bonzini
2019-10-24 14:06 ` Richard Henderson
2019-10-24 14:14 ` Paolo Bonzini
2019-10-25 11:48 ` Richard Henderson
2019-10-23 15:45 ` [PATCH v2 2/7] exec: Split out variable page size support to exec-vary.c Richard Henderson
2019-10-25 14:02 ` Alex Bennée [this message]
2019-10-23 15:45 ` [PATCH v2 3/7] configure: Detect compiler support for __attribute__((alias)) Richard Henderson
2019-10-25 14:04 ` Alex Bennée
2019-11-08 16:01 ` Thomas Huth
2019-10-23 15:45 ` [PATCH v2 4/7] exec: Use const alias for TARGET_PAGE_BITS_VARY Richard Henderson
2019-10-25 14:28 ` Alex Bennée
2019-10-25 14:51 ` Peter Maydell
2019-10-25 20:43 ` Richard Henderson
2019-10-25 21:01 ` Peter Maydell
2019-10-25 21:16 ` Richard Henderson
2019-10-23 15:45 ` [PATCH v2 5/7] exec: Restrict TARGET_PAGE_BITS_VARY assert to CONFIG_DEBUG_TCG Richard Henderson
2019-10-25 14:44 ` Alex Bennée
2019-10-23 15:45 ` [PATCH v2 6/7] exec: Promote TARGET_PAGE_MASK to target_long Richard Henderson
2019-10-23 15:45 ` [PATCH v2 7/7] exec: Cache TARGET_PAGE_MASK for TARGET_PAGE_BITS_VARY Richard Henderson
2019-10-24 9:29 ` [PATCH v2 0/7] exec: Improve code " no-reply
2019-10-25 13:57 ` Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wocsly86.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.