QEMU-Devel Archive mirror
 help / color / mirror / Atom feed
From: Richard Henderson <richard.henderson@linaro.org>
To: qemu-devel@nongnu.org
Subject: [PATCH v3 16/28] tcg: Replace region.end with region.total_size
Date: Sun,  2 May 2021 16:18:32 -0700	[thread overview]
Message-ID: <20210502231844.1977630-17-richard.henderson@linaro.org> (raw)
In-Reply-To: <20210502231844.1977630-1-richard.henderson@linaro.org>

A size is easier to work with than an end point,
particularly during initial buffer allocation.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
 tcg/region.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/tcg/region.c b/tcg/region.c
index 9a1e039824..a17f342f38 100644
--- a/tcg/region.c
+++ b/tcg/region.c
@@ -48,7 +48,7 @@ struct tcg_region_state {
     /* fields set at init time */
     void *start;
     void *start_aligned;
-    void *end;
+    size_t total_size; /* size of entire buffer */
     size_t n;
     size_t size; /* size of one region */
     size_t stride; /* .size + guard size */
@@ -279,7 +279,7 @@ static void tcg_region_bounds(size_t curr_region, void **pstart, void **pend)
         start = region.start;
     }
     if (curr_region == region.n - 1) {
-        end = region.end;
+        end = region.start_aligned + region.total_size;
     }
 
     *pstart = start;
@@ -813,8 +813,8 @@ static bool alloc_code_gen_buffer(size_t size, int splitwx, Error **errp)
  */
 void tcg_region_init(size_t tb_size, int splitwx, unsigned max_cpus)
 {
-    void *buf, *aligned;
-    size_t size;
+    void *buf, *aligned, *end;
+    size_t total_size;
     size_t page_size;
     size_t region_size;
     size_t n_regions;
@@ -826,19 +826,20 @@ void tcg_region_init(size_t tb_size, int splitwx, unsigned max_cpus)
     assert(ok);
 
     buf = tcg_init_ctx.code_gen_buffer;
-    size = tcg_init_ctx.code_gen_buffer_size;
+    total_size = tcg_init_ctx.code_gen_buffer_size;
     page_size = qemu_real_host_page_size;
     n_regions = tcg_n_regions(max_cpus);
 
     /* The first region will be 'aligned - buf' bytes larger than the others */
     aligned = QEMU_ALIGN_PTR_UP(buf, page_size);
-    g_assert(aligned < tcg_init_ctx.code_gen_buffer + size);
+    g_assert(aligned < tcg_init_ctx.code_gen_buffer + total_size);
+
     /*
      * Make region_size a multiple of page_size, using aligned as the start.
      * As a result of this we might end up with a few extra pages at the end of
      * the buffer; we will assign those to the last region.
      */
-    region_size = (size - (aligned - buf)) / n_regions;
+    region_size = (total_size - (aligned - buf)) / n_regions;
     region_size = QEMU_ALIGN_DOWN(region_size, page_size);
 
     /* A region must have at least 2 pages; one code, one guard */
@@ -852,9 +853,11 @@ void tcg_region_init(size_t tb_size, int splitwx, unsigned max_cpus)
     region.start = buf;
     region.start_aligned = aligned;
     /* page-align the end, since its last page will be a guard page */
-    region.end = QEMU_ALIGN_PTR_DOWN(buf + size, page_size);
+    end = QEMU_ALIGN_PTR_DOWN(buf + total_size, page_size);
     /* account for that last guard page */
-    region.end -= page_size;
+    end -= page_size;
+    total_size = end - aligned;
+    region.total_size = total_size;
 
     /*
      * Set guard pages in the rw buffer, as that's the one into which
@@ -895,7 +898,7 @@ void tcg_region_prologue_set(TCGContext *s)
 
     /* Register the balance of the buffer with gdb. */
     tcg_register_jit(tcg_splitwx_to_rx(region.start),
-                     region.end - region.start);
+                     region.start_aligned + region.total_size - region.start);
 }
 
 /*
@@ -936,8 +939,10 @@ size_t tcg_code_capacity(void)
 
     /* no need for synchronization; these variables are set at init time */
     guard_size = region.stride - region.size;
-    capacity = region.end + guard_size - region.start;
-    capacity -= region.n * (guard_size + TCG_HIGHWATER);
+    capacity = region.total_size;
+    capacity -= (region.n - 1) * guard_size;
+    capacity -= region.n * TCG_HIGHWATER;
+
     return capacity;
 }
 
-- 
2.25.1



  parent reply	other threads:[~2021-05-02 23:37 UTC|newest]

Thread overview: 92+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-02 23:18 [PATCH v3 00/28] tcg: Clean up code_gen_buffer allocation Richard Henderson
2021-05-02 23:18 ` [PATCH v3 01/28] meson: Split out tcg/meson.build Richard Henderson
2021-06-07 19:38   ` Alex Bennée
2021-06-09 14:56   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 02/28] meson: Split out fpu/meson.build Richard Henderson
2021-06-07 19:38   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 03/28] tcg: Re-order tcg_region_init vs tcg_prologue_init Richard Henderson
2021-06-08  9:04   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 04/28] tcg: Remove error return from tcg_region_initial_alloc__locked Richard Henderson
2021-06-08 11:04   ` Alex Bennée
2021-06-08 15:44     ` Richard Henderson
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 05/28] tcg: Split out tcg_region_initial_alloc Richard Henderson
2021-06-08 11:45   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 06/28] tcg: Split out tcg_region_prologue_set Richard Henderson
2021-06-08 11:47   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 07/28] tcg: Split out region.c Richard Henderson
2021-06-08 11:48   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 08/28] accel/tcg: Inline cpu_gen_init Richard Henderson
2021-06-08 11:49   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 09/28] accel/tcg: Move alloc_code_gen_buffer to tcg/region.c Richard Henderson
2021-06-08 11:50   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 10/28] accel/tcg: Rename tcg_init to tcg_init_machine Richard Henderson
2021-06-08 11:51   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 11/28] tcg: Create tcg_init Richard Henderson
2021-06-08 11:52   ` Alex Bennée
2021-06-09 14:57   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 12/28] accel/tcg: Merge tcg_exec_init into tcg_init_machine Richard Henderson
2021-06-08 11:55   ` Alex Bennée
2021-06-08 15:45     ` Richard Henderson
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-06-10 15:16     ` Richard Henderson
2021-05-02 23:18 ` [PATCH v3 13/28] accel/tcg: Pass down max_cpus to tcg_init Richard Henderson
2021-06-08 15:44   ` Alex Bennée
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 14/28] tcg: Introduce tcg_max_ctxs Richard Henderson
2021-06-08 15:54   ` Alex Bennée
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 15/28] tcg: Move MAX_CODE_GEN_BUFFER_SIZE to tcg-target.h Richard Henderson
2021-06-08 15:56   ` Alex Bennée
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` Richard Henderson [this message]
2021-06-08 16:03   ` [PATCH v3 16/28] tcg: Replace region.end with region.total_size Alex Bennée
2021-06-08 16:12     ` Richard Henderson
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 17/28] tcg: Rename region.start to region.after_prologue Richard Henderson
2021-06-08 16:06   ` Alex Bennée
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 18/28] tcg: Tidy tcg_n_regions Richard Henderson
2021-06-08 16:06   ` Alex Bennée
2021-06-09 14:58   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 19/28] tcg: Tidy split_cross_256mb Richard Henderson
2021-06-09 10:01   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-06-10 15:20     ` Richard Henderson
2021-05-02 23:18 ` [PATCH v3 20/28] tcg: Move in_code_gen_buffer and tests to region.c Richard Henderson
2021-06-09 10:07   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 21/28] tcg: Allocate code_gen_buffer into struct tcg_region_state Richard Henderson
2021-06-09 10:29   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 22/28] tcg: Return the map protection from alloc_code_gen_buffer Richard Henderson
2021-06-09 10:30   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 23/28] tcg: Sink qemu_madvise call to common code Richard Henderson
2021-06-09 10:34   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 24/28] util/osdep: Add qemu_mprotect_rw Richard Henderson
2021-06-09 10:34   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 25/28] tcg: Round the tb_size default from qemu_get_host_physmem Richard Henderson
2021-06-09 10:36   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 26/28] tcg: Merge buffer protection and guard page protection Richard Henderson
2021-06-09 10:39   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 27/28] tcg: When allocating for !splitwx, begin with PROT_NONE Richard Henderson
2021-06-09 11:21   ` Alex Bennée
2021-06-10 15:34     ` Richard Henderson
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:18 ` [PATCH v3 28/28] tcg: Move tcg_init_ctx and tcg_ctx from accel/tcg/ Richard Henderson
2021-06-09 11:30   ` Alex Bennée
2021-06-09 14:59   ` Luis Fernando Fujita Pires
2021-05-02 23:45 ` [PATCH v3 00/28] tcg: Clean up code_gen_buffer allocation no-reply

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=20210502231844.1977630-17-richard.henderson@linaro.org \
    --to=richard.henderson@linaro.org \
    --cc=qemu-devel@nongnu.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).