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