From 4382d29422bfce15f2d1ed789b25d89df7da3ae7 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 14 Jun 2022 11:33:22 +0200 Subject: [PATCH] base-hw: invalidate TLB only once on ARMv8 Fix genodelabs/genode#4529 --- repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc index b724f84e5d..73cb72bb34 100644 --- a/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc +++ b/repos/base-hw/src/core/spec/arm_v8/kernel/thread.cc @@ -75,10 +75,14 @@ void Thread::exception(Cpu & cpu) void Kernel::Thread::Tlb_invalidation::execute() { }; -bool Kernel::Pd::invalidate_tlb(Cpu &, addr_t addr, size_t size) +bool Kernel::Pd::invalidate_tlb(Cpu & cpu, addr_t addr, size_t size) { using namespace Genode; + /* only apply to the active cpu */ + if (cpu.id() != Cpu::executing_id()) + return false; + /** * The kernel part of the address space is mapped as global * therefore we have to invalidate it differently