From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VAp8g-00028H-8P for qemu-devel@nongnu.org; Sat, 17 Aug 2013 18:38:36 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VAp8Z-0004yk-6g for qemu-devel@nongnu.org; Sat, 17 Aug 2013 18:38:30 -0400 Received: from mail-pa0-x22d.google.com ([2607:f8b0:400e:c03::22d]:48739) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VAp8Y-0004yZ-Ri for qemu-devel@nongnu.org; Sat, 17 Aug 2013 18:38:23 -0400 Received: by mail-pa0-f45.google.com with SMTP id bg4so3250558pad.18 for ; Sat, 17 Aug 2013 15:38:22 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Sat, 17 Aug 2013 15:38:08 -0700 Message-Id: <1376779088-9648-7-git-send-email-rth@twiddle.net> In-Reply-To: <1376779088-9648-1-git-send-email-rth@twiddle.net> References: <1376779088-9648-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PATCH 6/6] util: Use qemu_getauxval in linux qemu_cache_utils_init List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org With this we no longer pass down envp, and thus all systems can have the same void prototype. So also eliminate a useless thunk. Signed-off-by: Richard Henderson --- include/qemu/cache-utils.h | 4 ++-- linux-user/main.c | 2 +- util/cache-utils.c | 51 ++++++++++++++++++---------------------------- vl.c | 2 +- 4 files changed, 24 insertions(+), 35 deletions(-) diff --git a/include/qemu/cache-utils.h b/include/qemu/cache-utils.h index 2c57f78..211245b 100644 --- a/include/qemu/cache-utils.h +++ b/include/qemu/cache-utils.h @@ -12,7 +12,7 @@ struct qemu_cache_conf { extern struct qemu_cache_conf qemu_cache_conf; -void qemu_cache_utils_init(char **envp); +void qemu_cache_utils_init(void); /* mildly adjusted code from tcg-dyngen.c */ static inline void flush_icache_range(uintptr_t start, uintptr_t stop) @@ -38,7 +38,7 @@ static inline void flush_icache_range(uintptr_t start, uintptr_t stop) } #else -#define qemu_cache_utils_init(envp) do { (void) (envp); } while (0) +#define qemu_cache_utils_init() do { } while (0) #endif #endif /* QEMU_CACHE_UTILS_H */ diff --git a/linux-user/main.c b/linux-user/main.c index fae102a..b1200ef 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -3550,7 +3550,7 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_QOM); qemu_init_auxval(envp); - qemu_cache_utils_init(envp); + qemu_cache_utils_init(); if ((envlist = envlist_create()) == NULL) { (void) fprintf(stderr, "Unable to allocate envlist\n"); diff --git a/util/cache-utils.c b/util/cache-utils.c index b94013a..0470030 100644 --- a/util/cache-utils.c +++ b/util/cache-utils.c @@ -1,3 +1,4 @@ +#include "qemu-common.h" #include "qemu/cache-utils.h" #if defined(_ARCH_PPC) @@ -9,31 +10,33 @@ struct qemu_cache_conf qemu_cache_conf = { #if defined _AIX #include -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { qemu_cache_conf.icache_bsize = _system_configuration.icache_line; qemu_cache_conf.dcache_bsize = _system_configuration.dcache_line; } #elif defined __linux__ +#include "qemu/osdep.h" +#include "elf.h" -#define QEMU_AT_NULL 0 -#define QEMU_AT_DCACHEBSIZE 19 -#define QEMU_AT_ICACHEBSIZE 20 - -static void ppc_init_cacheline_sizes(char **envp) +void qemu_cache_utils_init(void) { - unsigned long *auxv; - - while (*envp++); + unsigned long dsize = qemu_getauxval(AT_DCACHEBSIZE); + unsigned long isize = qemu_getauxval(AT_ICACHEBSIZE); - for (auxv = (unsigned long *) envp; *auxv != QEMU_AT_NULL; auxv += 2) { - switch (*auxv) { - case QEMU_AT_DCACHEBSIZE: qemu_cache_conf.dcache_bsize = auxv[1]; break; - case QEMU_AT_ICACHEBSIZE: qemu_cache_conf.icache_bsize = auxv[1]; break; - default: break; + if (dsize == 0 || isize == 0) { + if (dsize == 0) { + fprintf(stderr, "getauxval AT_DCACHEBSIZE failed\n"); + } + if (isize == 0) { + fprintf(stderr, "getauxval AT_ICACHEBSIZE failed\n"); } + exit(1); + } + qemu_cache_conf.dcache_bsize = dsize; + qemu_cache_conf.icache_bsize = isize; } #elif defined __APPLE__ @@ -41,7 +44,7 @@ static void ppc_init_cacheline_sizes(char **envp) #include #include -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { size_t len; unsigned cacheline; @@ -55,9 +58,8 @@ static void ppc_init_cacheline_sizes(void) qemu_cache_conf.icache_bsize = cacheline; } } -#endif -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) #include #include #include @@ -65,7 +67,7 @@ static void ppc_init_cacheline_sizes(void) #include #include -static void ppc_init_cacheline_sizes(void) +void qemu_cache_utils_init(void) { size_t len = 4; unsigned cacheline; @@ -81,17 +83,4 @@ static void ppc_init_cacheline_sizes(void) } #endif -#ifdef __linux__ -void qemu_cache_utils_init(char **envp) -{ - ppc_init_cacheline_sizes(envp); -} -#else -void qemu_cache_utils_init(char **envp) -{ - (void) envp; - ppc_init_cacheline_sizes(); -} -#endif - #endif /* _ARCH_PPC */ diff --git a/vl.c b/vl.c index c539fd3..51d2c18 100644 --- a/vl.c +++ b/vl.c @@ -2968,7 +2968,7 @@ int main(int argc, char **argv, char **envp) rtc_clock = host_clock; qemu_init_auxval(envp); - qemu_cache_utils_init(envp); + qemu_cache_utils_init(); QLIST_INIT (&vm_change_state_head); os_setup_early_signal_handling(); -- 1.8.1.4