On Thu, Oct 14, 2021 at 10:11 PM Richard Henderson < [email protected]> wrote:
> The fallback code in cpu_loop_exit_sigsegv is sufficient > for mips linux-user. > > This means we can remove tcg/user/tlb_helper.c entirely. > Remove the code from cpu_loop that raised SIGSEGV. > > Reviewed-by: Philippe Mathieu-Daudé <[email protected]> > Signed-off-by: Richard Henderson <[email protected]> > --- > target/mips/tcg/tcg-internal.h | 7 ++-- > linux-user/mips/cpu_loop.c | 11 ------ > target/mips/cpu.c | 2 +- > target/mips/tcg/user/tlb_helper.c | 59 ------------------------------- > target/mips/tcg/meson.build | 3 -- > target/mips/tcg/user/meson.build | 3 -- > 6 files changed, 5 insertions(+), 80 deletions(-) > delete mode 100644 target/mips/tcg/user/tlb_helper.c > delete mode 100644 target/mips/tcg/user/meson.build > Reviewed-by: Warner Losh <[email protected]> We do have mips support in bsd-user fork, but it's unclear how long we'll continue that support, though. This seems like it won't present a big problem for us should we continue that support, though (at least for FreeBSD). The usual $(OTHER)BSD caveats apply. Warner > diff --git a/target/mips/tcg/tcg-internal.h > b/target/mips/tcg/tcg-internal.h > index bad3deb611..466768aec4 100644 > --- a/target/mips/tcg/tcg-internal.h > +++ b/target/mips/tcg/tcg-internal.h > @@ -18,9 +18,6 @@ > void mips_tcg_init(void); > > void mips_cpu_synchronize_from_tb(CPUState *cs, const TranslationBlock > *tb); > -bool mips_cpu_tlb_fill(CPUState *cs, vaddr address, int size, > - MMUAccessType access_type, int mmu_idx, > - bool probe, uintptr_t retaddr); > void mips_cpu_do_unaligned_access(CPUState *cpu, vaddr addr, > MMUAccessType access_type, int mmu_idx, > uintptr_t retaddr) QEMU_NORETURN; > @@ -60,6 +57,10 @@ void mips_cpu_do_transaction_failed(CPUState *cs, > hwaddr physaddr, > MemTxResult response, uintptr_t > retaddr); > void cpu_mips_tlb_flush(CPUMIPSState *env); > > +bool mips_cpu_tlb_fill(CPUState *cs, vaddr address, int size, > + MMUAccessType access_type, int mmu_idx, > + bool probe, uintptr_t retaddr); > + > #endif /* !CONFIG_USER_ONLY */ > > #endif > diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c > index cb03fb066b..b735c99a24 100644 > --- a/linux-user/mips/cpu_loop.c > +++ b/linux-user/mips/cpu_loop.c > @@ -158,17 +158,6 @@ done_syscall: > } > env->active_tc.gpr[2] = ret; > break; > - case EXCP_TLBL: > - case EXCP_TLBS: > - case EXCP_AdEL: > - case EXCP_AdES: > - info.si_signo = TARGET_SIGSEGV; > - info.si_errno = 0; > - /* XXX: check env->error_code */ > - info.si_code = TARGET_SEGV_MAPERR; > - info._sifields._sigfault._addr = env->CP0_BadVAddr; > - queue_signal(env, info.si_signo, QEMU_SI_FAULT, &info); > - break; > case EXCP_CpU: > case EXCP_RI: > info.si_signo = TARGET_SIGILL; > diff --git a/target/mips/cpu.c b/target/mips/cpu.c > index 00e0c55d0e..4aae23934b 100644 > --- a/target/mips/cpu.c > +++ b/target/mips/cpu.c > @@ -539,9 +539,9 @@ static const struct SysemuCPUOps mips_sysemu_ops = { > static const struct TCGCPUOps mips_tcg_ops = { > .initialize = mips_tcg_init, > .synchronize_from_tb = mips_cpu_synchronize_from_tb, > - .tlb_fill = mips_cpu_tlb_fill, > > #if !defined(CONFIG_USER_ONLY) > + .tlb_fill = mips_cpu_tlb_fill, > .cpu_exec_interrupt = mips_cpu_exec_interrupt, > .do_interrupt = mips_cpu_do_interrupt, > .do_transaction_failed = mips_cpu_do_transaction_failed, > diff --git a/target/mips/tcg/user/tlb_helper.c > b/target/mips/tcg/user/tlb_helper.c > deleted file mode 100644 > index 210c6d529e..0000000000 > --- a/target/mips/tcg/user/tlb_helper.c > +++ /dev/null > @@ -1,59 +0,0 @@ > -/* > - * MIPS TLB (Translation lookaside buffer) helpers. > - * > - * Copyright (c) 2004-2005 Jocelyn Mayer > - * > - * This library is free software; you can redistribute it and/or > - * modify it under the terms of the GNU Lesser General Public > - * License as published by the Free Software Foundation; either > - * version 2.1 of the License, or (at your option) any later version. > - * > - * This library is distributed in the hope that it will be useful, > - * but WITHOUT ANY WARRANTY; without even the implied warranty of > - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - * Lesser General Public License for more details. > - * > - * You should have received a copy of the GNU Lesser General Public > - * License along with this library; if not, see < > http://www.gnu.org/licenses/>. > - */ > -#include "qemu/osdep.h" > - > -#include "cpu.h" > -#include "exec/exec-all.h" > -#include "internal.h" > - > -static void raise_mmu_exception(CPUMIPSState *env, target_ulong address, > - MMUAccessType access_type) > -{ > - CPUState *cs = env_cpu(env); > - > - env->error_code = 0; > - if (access_type == MMU_INST_FETCH) { > - env->error_code |= EXCP_INST_NOTAVAIL; > - } > - > - /* Reference to kernel address from user mode or supervisor mode */ > - /* Reference to supervisor address from user mode */ > - if (access_type == MMU_DATA_STORE) { > - cs->exception_index = EXCP_AdES; > - } else { > - cs->exception_index = EXCP_AdEL; > - } > - > - /* Raise exception */ > - if (!(env->hflags & MIPS_HFLAG_DM)) { > - env->CP0_BadVAddr = address; > - } > -} > - > -bool mips_cpu_tlb_fill(CPUState *cs, vaddr address, int size, > - MMUAccessType access_type, int mmu_idx, > - bool probe, uintptr_t retaddr) > -{ > - MIPSCPU *cpu = MIPS_CPU(cs); > - CPUMIPSState *env = &cpu->env; > - > - /* data access */ > - raise_mmu_exception(env, address, access_type); > - do_raise_exception_err(env, cs->exception_index, env->error_code, > retaddr); > -} > diff --git a/target/mips/tcg/meson.build b/target/mips/tcg/meson.build > index 8f6f7508b6..98003779ae 100644 > --- a/target/mips/tcg/meson.build > +++ b/target/mips/tcg/meson.build > @@ -28,9 +28,6 @@ mips_ss.add(when: 'TARGET_MIPS64', if_true: files( > 'mxu_translate.c', > )) > > -if have_user > - subdir('user') > -endif > if have_system > subdir('sysemu') > endif > diff --git a/target/mips/tcg/user/meson.build > b/target/mips/tcg/user/meson.build > deleted file mode 100644 > index 79badcd321..0000000000 > --- a/target/mips/tcg/user/meson.build > +++ /dev/null > @@ -1,3 +0,0 @@ > -mips_user_ss.add(files( > - 'tlb_helper.c', > -)) > -- > 2.25.1 > >
