linux-user/e2k: flush probe cache for more syscalls
This commit is contained in:
parent
c116f9e4bd
commit
5266fd6e95
|
@ -60,10 +60,21 @@ static void stack_expand(CPUE2KState *env, E2KPsp *s)
|
||||||
s->size = new_size;
|
s->size = new_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void e2k_clear_probe_page_cache(void)
|
static void e2k_clear_probe_page_cache(uint32_t syscall)
|
||||||
{
|
{
|
||||||
CPUState *other_cpu;
|
CPUState *other_cpu;
|
||||||
|
|
||||||
|
switch (syscall) {
|
||||||
|
case TARGET_NR_execve:
|
||||||
|
case TARGET_NR_brk:
|
||||||
|
case TARGET_NR_mmap:
|
||||||
|
case TARGET_NR_munmap:
|
||||||
|
case TARGET_NR_clone:
|
||||||
|
case TARGET_NR_mmap2:
|
||||||
|
case TARGET_NR_mremap:
|
||||||
|
case TARGET_NR_remap_file_pages:
|
||||||
|
case TARGET_NR_move_pages:
|
||||||
|
case TARGET_NR_migrate_pages:
|
||||||
start_exclusive();
|
start_exclusive();
|
||||||
CPU_FOREACH(other_cpu) {
|
CPU_FOREACH(other_cpu) {
|
||||||
E2KCPU *cpu = E2K_CPU(other_cpu);
|
E2KCPU *cpu = E2K_CPU(other_cpu);
|
||||||
|
@ -73,6 +84,8 @@ static void e2k_clear_probe_page_cache(void)
|
||||||
memset(env->probe_cache_flags, 0, sizeof(env->probe_cache_flags));
|
memset(env->probe_cache_flags, 0, sizeof(env->probe_cache_flags));
|
||||||
}
|
}
|
||||||
end_exclusive();
|
end_exclusive();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cpu_loop(CPUE2KState *env)
|
void cpu_loop(CPUE2KState *env)
|
||||||
|
@ -105,12 +118,7 @@ void cpu_loop(CPUE2KState *env)
|
||||||
|
|
||||||
if (!env->enable_tags || (env->wtag[0] & E2K_TAG_MASK_32) == E2K_TAG_NUMBER32) {
|
if (!env->enable_tags || (env->wtag[0] & E2K_TAG_MASK_32) == E2K_TAG_NUMBER32) {
|
||||||
args[0] = (uint32_t) args[0];
|
args[0] = (uint32_t) args[0];
|
||||||
|
e2k_clear_probe_page_cache(args[0]);
|
||||||
if (args[0] == TARGET_NR_brk || args[0] == TARGET_NR_mmap ||
|
|
||||||
args[0] == TARGET_NR_munmap) {
|
|
||||||
e2k_clear_probe_page_cache();
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = do_syscall(env, args[0], args[1], args[2], args[3],
|
ret = do_syscall(env, args[0], args[1], args[2], args[3],
|
||||||
args[4], args[5], args[6], args[7], args[8]);
|
args[4], args[5], args[6], args[7], args[8]);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue