Message ID | 20210502231844.1977630-20-richard.henderson@linaro.org |
---|---|
State | New |
Headers | show |
Series | tcg: Clean up code_gen_buffer allocation | expand |
Richard Henderson <richard.henderson@linaro.org> writes: > Return output buffer and size via output pointer arguments, > rather than returning size via tcg_ctx->code_gen_buffer_size. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> This is giving off string "lipstick on a pig" energy but given it's to work around mips foibles: Reviewed-by: Alex Bennée <alex.bennee@linaro.org> -- Alex Bennée
From: Richard Henderson <richard.henderson@linaro.org> > Return output buffer and size via output pointer arguments, rather than > returning size via tcg_ctx->code_gen_buffer_size. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > tcg/region.c | 15 +++++++-------- > 1 file changed, 7 insertions(+), 8 deletions(-) > > diff --git a/tcg/region.c b/tcg/region.c index b44246e1aa..652f328d2c 100644 > --- a/tcg/region.c > +++ b/tcg/region.c > @@ -467,7 +467,8 @@ static inline bool cross_256mb(void *addr, size_t size) > /* We weren't able to allocate a buffer without crossing that boundary, > so make do with the larger portion of the buffer that doesn't cross. > Returns the new base of the buffer, and adjusts code_gen_buffer_size. */ - > static inline void *split_cross_256mb(void *buf1, size_t size1) > +static inline void split_cross_256mb(void **obuf, size_t *osize, > + void *buf1, size_t size1) Need to adjust the comment, now that we're no longer adjusting code_gen_buffer_size in here. > @@ -583,8 +583,7 @@ static bool alloc_code_gen_buffer_anon(size_t size, int > prot, > /* fallthru */ > default: > /* Split the original buffer. Free the smaller half. */ > - buf2 = split_cross_256mb(buf, size); > - size2 = tcg_ctx->code_gen_buffer_size; > + split_cross_256mb(&buf2, &size2, buf, size); This will be fixed by patch 21 (tcg: Allocate code_gen_buffer into struct tcg_region_state), but shouldn't we update tcg_ctx->code_gen_buffer_size here? Other than that, Reviewed-by: Luis Pires <luis.pires@eldorado.org.br> -- Luis Pires Instituto de Pesquisas ELDORADO Aviso Legal - Disclaimer <https://www.eldorado.org.br/disclaimer.html>
On 6/9/21 7:59 AM, Luis Fernando Fujita Pires wrote: > From: Richard Henderson <richard.henderson@linaro.org> >> Return output buffer and size via output pointer arguments, rather than >> returning size via tcg_ctx->code_gen_buffer_size. >> >> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> >> --- >> tcg/region.c | 15 +++++++-------- >> 1 file changed, 7 insertions(+), 8 deletions(-) >> >> diff --git a/tcg/region.c b/tcg/region.c index b44246e1aa..652f328d2c 100644 >> --- a/tcg/region.c >> +++ b/tcg/region.c >> @@ -467,7 +467,8 @@ static inline bool cross_256mb(void *addr, size_t size) >> /* We weren't able to allocate a buffer without crossing that boundary, >> so make do with the larger portion of the buffer that doesn't cross. >> Returns the new base of the buffer, and adjusts code_gen_buffer_size. */ - >> static inline void *split_cross_256mb(void *buf1, size_t size1) >> +static inline void split_cross_256mb(void **obuf, size_t *osize, >> + void *buf1, size_t size1) > > Need to adjust the comment, now that we're no longer adjusting code_gen_buffer_size in here. Done, thanks. >> @@ -583,8 +583,7 @@ static bool alloc_code_gen_buffer_anon(size_t size, int >> prot, >> /* fallthru */ >> default: >> /* Split the original buffer. Free the smaller half. */ >> - buf2 = split_cross_256mb(buf, size); >> - size2 = tcg_ctx->code_gen_buffer_size; >> + split_cross_256mb(&buf2, &size2, buf, size); > > This will be fixed by patch 21 (tcg: Allocate code_gen_buffer into struct tcg_region_state), but shouldn't we update tcg_ctx->code_gen_buffer_size here? Good catch. I moved the store to _size from above to below. r~
diff --git a/tcg/region.c b/tcg/region.c index b44246e1aa..652f328d2c 100644 --- a/tcg/region.c +++ b/tcg/region.c @@ -467,7 +467,8 @@ static inline bool cross_256mb(void *addr, size_t size) /* We weren't able to allocate a buffer without crossing that boundary, so make do with the larger portion of the buffer that doesn't cross. Returns the new base of the buffer, and adjusts code_gen_buffer_size. */ -static inline void *split_cross_256mb(void *buf1, size_t size1) +static inline void split_cross_256mb(void **obuf, size_t *osize, + void *buf1, size_t size1) { void *buf2 = (void *)(((uintptr_t)buf1 + size1) & ~0x0ffffffful); size_t size2 = buf1 + size1 - buf2; @@ -478,8 +479,8 @@ static inline void *split_cross_256mb(void *buf1, size_t size1) buf1 = buf2; } - tcg_ctx->code_gen_buffer_size = size1; - return buf1; + *obuf = buf1; + *osize = size1; } #endif @@ -509,12 +510,10 @@ static bool alloc_code_gen_buffer(size_t tb_size, int splitwx, Error **errp) if (size > tb_size) { size = QEMU_ALIGN_DOWN(tb_size, qemu_real_host_page_size); } - tcg_ctx->code_gen_buffer_size = size; #ifdef __mips__ if (cross_256mb(buf, size)) { - buf = split_cross_256mb(buf, size); - size = tcg_ctx->code_gen_buffer_size; + split_cross_256mb(&buf, &size, buf, size); } #endif @@ -525,6 +524,7 @@ static bool alloc_code_gen_buffer(size_t tb_size, int splitwx, Error **errp) qemu_madvise(buf, size, QEMU_MADV_HUGEPAGE); tcg_ctx->code_gen_buffer = buf; + tcg_ctx->code_gen_buffer_size = size; return true; } #elif defined(_WIN32) @@ -583,8 +583,7 @@ static bool alloc_code_gen_buffer_anon(size_t size, int prot, /* fallthru */ default: /* Split the original buffer. Free the smaller half. */ - buf2 = split_cross_256mb(buf, size); - size2 = tcg_ctx->code_gen_buffer_size; + split_cross_256mb(&buf2, &size2, buf, size); if (buf == buf2) { munmap(buf + size2, size - size2); } else {
Return output buffer and size via output pointer arguments, rather than returning size via tcg_ctx->code_gen_buffer_size. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- tcg/region.c | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) -- 2.25.1