tcg-ppc: Merge cache-utils into the backend
As a "utility", it only supported ppc, and in a way that other tcg backends provided directly in tcg-target.h. Removing this disparity is easier now that the two ppc backends are merged. Tested-by: Tom Musta <tommusta@gmail.com> Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
		
							parent
							
								
									2b45c3f500
								
							
						
					
					
						commit
						224f9fd419
					
				
							
								
								
									
										1
									
								
								exec.c
								
								
								
								
							
							
						
						
									
										1
									
								
								exec.c
								
								
								
								
							|  | @ -50,7 +50,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "exec/memory-internal.h" | #include "exec/memory-internal.h" | ||||||
| #include "exec/ram_addr.h" | #include "exec/ram_addr.h" | ||||||
| #include "qemu/cache-utils.h" |  | ||||||
| 
 | 
 | ||||||
| #include "qemu/range.h" | #include "qemu/range.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,44 +0,0 @@ | ||||||
| #ifndef QEMU_CACHE_UTILS_H |  | ||||||
| #define QEMU_CACHE_UTILS_H |  | ||||||
| 
 |  | ||||||
| #if defined(_ARCH_PPC) |  | ||||||
| 
 |  | ||||||
| #include <stdint.h> /* uintptr_t */ |  | ||||||
| 
 |  | ||||||
| struct qemu_cache_conf { |  | ||||||
|     unsigned long dcache_bsize; |  | ||||||
|     unsigned long icache_bsize; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| extern struct qemu_cache_conf qemu_cache_conf; |  | ||||||
| 
 |  | ||||||
| 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) |  | ||||||
| { |  | ||||||
|     unsigned long p, start1, stop1; |  | ||||||
|     unsigned long dsize = qemu_cache_conf.dcache_bsize; |  | ||||||
|     unsigned long isize = qemu_cache_conf.icache_bsize; |  | ||||||
| 
 |  | ||||||
|     start1 = start & ~(dsize - 1); |  | ||||||
|     stop1 = (stop + dsize - 1) & ~(dsize - 1); |  | ||||||
|     for (p = start1; p < stop1; p += dsize) { |  | ||||||
|         asm volatile ("dcbst 0,%0" : : "r"(p) : "memory"); |  | ||||||
|     } |  | ||||||
|     asm volatile ("sync" : : : "memory"); |  | ||||||
| 
 |  | ||||||
|     start &= start & ~(isize - 1); |  | ||||||
|     stop1 = (stop + isize - 1) & ~(isize - 1); |  | ||||||
|     for (p = start1; p < stop1; p += isize) { |  | ||||||
|         asm volatile ("icbi 0,%0" : : "r"(p) : "memory"); |  | ||||||
|     } |  | ||||||
|     asm volatile ("sync" : : : "memory"); |  | ||||||
|     asm volatile ("isync" : : : "memory"); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #else |  | ||||||
| #define qemu_cache_utils_init() do { } while (0) |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #endif /* QEMU_CACHE_UTILS_H */ |  | ||||||
|  | @ -28,7 +28,6 @@ | ||||||
| 
 | 
 | ||||||
| #include "qemu.h" | #include "qemu.h" | ||||||
| #include "qemu-common.h" | #include "qemu-common.h" | ||||||
| #include "qemu/cache-utils.h" |  | ||||||
| #include "cpu.h" | #include "cpu.h" | ||||||
| #include "tcg.h" | #include "tcg.h" | ||||||
| #include "qemu/timer.h" | #include "qemu/timer.h" | ||||||
|  | @ -3829,8 +3828,6 @@ int main(int argc, char **argv, char **envp) | ||||||
| 
 | 
 | ||||||
|     module_call_init(MODULE_INIT_QOM); |     module_call_init(MODULE_INIT_QOM); | ||||||
| 
 | 
 | ||||||
|     qemu_cache_utils_init(); |  | ||||||
| 
 |  | ||||||
|     if ((envlist = envlist_create()) == NULL) { |     if ((envlist = envlist_create()) == NULL) { | ||||||
|         (void) fprintf(stderr, "Unable to allocate envlist\n"); |         (void) fprintf(stderr, "Unable to allocate envlist\n"); | ||||||
|         exit(1); |         exit(1); | ||||||
|  |  | ||||||
|  | @ -2538,3 +2538,99 @@ void tcg_register_jit(void *buf, size_t buf_size) | ||||||
|     tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); |     tcg_register_jit_int(buf, buf_size, &debug_frame, sizeof(debug_frame)); | ||||||
| } | } | ||||||
| #endif /* __ELF__ */ | #endif /* __ELF__ */ | ||||||
|  | 
 | ||||||
|  | static size_t dcache_bsize = 16; | ||||||
|  | static size_t icache_bsize = 16; | ||||||
|  | 
 | ||||||
|  | void flush_icache_range(uintptr_t start, uintptr_t stop) | ||||||
|  | { | ||||||
|  |     uintptr_t p, start1, stop1; | ||||||
|  |     size_t dsize = dcache_bsize; | ||||||
|  |     size_t isize = icache_bsize; | ||||||
|  | 
 | ||||||
|  |     start1 = start & ~(dsize - 1); | ||||||
|  |     stop1 = (stop + dsize - 1) & ~(dsize - 1); | ||||||
|  |     for (p = start1; p < stop1; p += dsize) { | ||||||
|  |         asm volatile ("dcbst 0,%0" : : "r"(p) : "memory"); | ||||||
|  |     } | ||||||
|  |     asm volatile ("sync" : : : "memory"); | ||||||
|  | 
 | ||||||
|  |     start &= start & ~(isize - 1); | ||||||
|  |     stop1 = (stop + isize - 1) & ~(isize - 1); | ||||||
|  |     for (p = start1; p < stop1; p += isize) { | ||||||
|  |         asm volatile ("icbi 0,%0" : : "r"(p) : "memory"); | ||||||
|  |     } | ||||||
|  |     asm volatile ("sync" : : : "memory"); | ||||||
|  |     asm volatile ("isync" : : : "memory"); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #if defined _AIX | ||||||
|  | #include <sys/systemcfg.h> | ||||||
|  | 
 | ||||||
|  | static void __attribute__((constructor)) tcg_cache_init(void) | ||||||
|  | { | ||||||
|  |     icache_bsize = _system_configuration.icache_line; | ||||||
|  |     dcache_bsize = _system_configuration.dcache_line; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #elif defined __linux__ | ||||||
|  | static void __attribute__((constructor)) tcg_cache_init(void) | ||||||
|  | { | ||||||
|  |     unsigned long dsize = qemu_getauxval(AT_DCACHEBSIZE); | ||||||
|  |     unsigned long isize = qemu_getauxval(AT_ICACHEBSIZE); | ||||||
|  | 
 | ||||||
|  |     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); | ||||||
|  |     } | ||||||
|  |     dcache_bsize = dsize; | ||||||
|  |     icache_bsize = isize; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #elif defined __APPLE__ | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/sysctl.h> | ||||||
|  | 
 | ||||||
|  | static void __attribute__((constructor)) tcg_cache_init(void) | ||||||
|  | { | ||||||
|  |     size_t len; | ||||||
|  |     unsigned cacheline; | ||||||
|  |     int name[2] = { CTL_HW, HW_CACHELINE }; | ||||||
|  | 
 | ||||||
|  |     len = sizeof(cacheline); | ||||||
|  |     if (sysctl(name, 2, &cacheline, &len, NULL, 0)) { | ||||||
|  |         perror("sysctl CTL_HW HW_CACHELINE failed"); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  |     dcache_bsize = cacheline; | ||||||
|  |     icache_bsize = cacheline; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) | ||||||
|  | #include <errno.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <sys/types.h> | ||||||
|  | #include <sys/sysctl.h> | ||||||
|  | 
 | ||||||
|  | static void __attribute__((constructor)) tcg_cache_init(void) | ||||||
|  | { | ||||||
|  |     size_t len = 4; | ||||||
|  |     unsigned cacheline; | ||||||
|  | 
 | ||||||
|  |     if (sysctlbyname ("machdep.cacheline_size", &cacheline, &len, NULL, 0)) { | ||||||
|  |         fprintf(stderr, "sysctlbyname machdep.cacheline_size failed: %s\n", | ||||||
|  |                 strerror(errno)); | ||||||
|  |         exit(1); | ||||||
|  |     } | ||||||
|  |     dcache_bsize = cacheline; | ||||||
|  |     icache_bsize = cacheline; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | @ -106,4 +106,6 @@ typedef enum { | ||||||
| #define TCG_TARGET_HAS_mulsh_i64        1 | #define TCG_TARGET_HAS_mulsh_i64        1 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | void flush_icache_range(uintptr_t start, uintptr_t stop); | ||||||
|  | 
 | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | @ -37,7 +37,6 @@ | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #include "qemu-common.h" | #include "qemu-common.h" | ||||||
| #include "qemu/cache-utils.h" |  | ||||||
| #include "qemu/host-utils.h" | #include "qemu/host-utils.h" | ||||||
| #include "qemu/timer.h" | #include "qemu/timer.h" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| util-obj-y = osdep.o cutils.o unicode.o qemu-timer-common.o | util-obj-y = osdep.o cutils.o unicode.o qemu-timer-common.o | ||||||
| util-obj-$(CONFIG_WIN32) += oslib-win32.o qemu-thread-win32.o event_notifier-win32.o | util-obj-$(CONFIG_WIN32) += oslib-win32.o qemu-thread-win32.o event_notifier-win32.o | ||||||
| util-obj-$(CONFIG_POSIX) += oslib-posix.o qemu-thread-posix.o event_notifier-posix.o qemu-openpty.o | util-obj-$(CONFIG_POSIX) += oslib-posix.o qemu-thread-posix.o event_notifier-posix.o qemu-openpty.o | ||||||
| util-obj-y += envlist.o path.o host-utils.o cache-utils.o module.o | util-obj-y += envlist.o path.o host-utils.o module.o | ||||||
| util-obj-y += bitmap.o bitops.o hbitmap.o | util-obj-y += bitmap.o bitops.o hbitmap.o | ||||||
| util-obj-y += fifo8.o | util-obj-y += fifo8.o | ||||||
| util-obj-y += acl.o | util-obj-y += acl.o | ||||||
|  |  | ||||||
|  | @ -1,86 +0,0 @@ | ||||||
| #include "qemu-common.h" |  | ||||||
| #include "qemu/cache-utils.h" |  | ||||||
| 
 |  | ||||||
| #if defined(_ARCH_PPC) |  | ||||||
| struct qemu_cache_conf qemu_cache_conf = { |  | ||||||
|     .dcache_bsize = 16, |  | ||||||
|     .icache_bsize = 16 |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| #if defined _AIX |  | ||||||
| #include <sys/systemcfg.h> |  | ||||||
| 
 |  | ||||||
| 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" |  | ||||||
| 
 |  | ||||||
| void qemu_cache_utils_init(void) |  | ||||||
| { |  | ||||||
|     unsigned long dsize = qemu_getauxval(AT_DCACHEBSIZE); |  | ||||||
|     unsigned long isize = qemu_getauxval(AT_ICACHEBSIZE); |  | ||||||
| 
 |  | ||||||
|     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__ |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/sysctl.h> |  | ||||||
| 
 |  | ||||||
| void qemu_cache_utils_init(void) |  | ||||||
| { |  | ||||||
|     size_t len; |  | ||||||
|     unsigned cacheline; |  | ||||||
|     int name[2] = { CTL_HW, HW_CACHELINE }; |  | ||||||
| 
 |  | ||||||
|     len = sizeof(cacheline); |  | ||||||
|     if (sysctl(name, 2, &cacheline, &len, NULL, 0)) { |  | ||||||
|         perror("sysctl CTL_HW HW_CACHELINE failed"); |  | ||||||
|     } else { |  | ||||||
|         qemu_cache_conf.dcache_bsize = cacheline; |  | ||||||
|         qemu_cache_conf.icache_bsize = cacheline; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) |  | ||||||
| #include <errno.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <string.h> |  | ||||||
| #include <sys/types.h> |  | ||||||
| #include <sys/sysctl.h> |  | ||||||
| 
 |  | ||||||
| void qemu_cache_utils_init(void) |  | ||||||
| { |  | ||||||
|     size_t len = 4; |  | ||||||
|     unsigned cacheline; |  | ||||||
| 
 |  | ||||||
|     if (sysctlbyname ("machdep.cacheline_size", &cacheline, &len, NULL, 0)) { |  | ||||||
|         fprintf(stderr, "sysctlbyname machdep.cacheline_size failed: %s\n", |  | ||||||
|                 strerror(errno)); |  | ||||||
|         exit(1); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     qemu_cache_conf.dcache_bsize = cacheline; |  | ||||||
|     qemu_cache_conf.icache_bsize = cacheline; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #endif /* _ARCH_PPC */ |  | ||||||
							
								
								
									
										3
									
								
								vl.c
								
								
								
								
							
							
						
						
									
										3
									
								
								vl.c
								
								
								
								
							|  | @ -82,7 +82,6 @@ int main(int argc, char **argv) | ||||||
| #include "qemu/timer.h" | #include "qemu/timer.h" | ||||||
| #include "sysemu/char.h" | #include "sysemu/char.h" | ||||||
| #include "qemu/bitmap.h" | #include "qemu/bitmap.h" | ||||||
| #include "qemu/cache-utils.h" |  | ||||||
| #include "sysemu/blockdev.h" | #include "sysemu/blockdev.h" | ||||||
| #include "hw/block/block.h" | #include "hw/block/block.h" | ||||||
| #include "migration/block.h" | #include "migration/block.h" | ||||||
|  | @ -2974,8 +2973,6 @@ int main(int argc, char **argv, char **envp) | ||||||
| 
 | 
 | ||||||
|     rtc_clock = QEMU_CLOCK_HOST; |     rtc_clock = QEMU_CLOCK_HOST; | ||||||
| 
 | 
 | ||||||
|     qemu_cache_utils_init(); |  | ||||||
| 
 |  | ||||||
|     QLIST_INIT (&vm_change_state_head); |     QLIST_INIT (&vm_change_state_head); | ||||||
|     os_setup_early_signal_handling(); |     os_setup_early_signal_handling(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Richard Henderson
						Richard Henderson