Browse Source

Revert "[nce] Added "tainted" page fault handling inside dual channel"

vkexperiments1
CamilleLaVey 3 days ago
parent
commit
b2b07abbc8
  1. 14
      src/core/arm/nce/arm_nce.cpp
  2. 10
      src/core/arm/nce/arm_nce.h

14
src/core/arm/nce/arm_nce.cpp

@ -159,7 +159,6 @@ bool ArmNce::HandleGuestAlignmentFault(GuestContext* guest_ctx, void* raw_info,
bool ArmNce::HandleGuestAccessFault(GuestContext* guest_ctx, void* raw_info, void* raw_context) { bool ArmNce::HandleGuestAccessFault(GuestContext* guest_ctx, void* raw_info, void* raw_context) {
auto* info = static_cast<siginfo_t*>(raw_info); auto* info = static_cast<siginfo_t*>(raw_info);
auto* parent = guest_ctx->parent;
// Try to handle an invalid access. // Try to handle an invalid access.
// TODO: handle accesses which split a page? // TODO: handle accesses which split a page?
@ -183,19 +182,6 @@ void ArmNce::HandleHostAccessFault(int sig, void* raw_info, void* raw_context) {
return g_orig_segv_action.sa_sigaction(sig, static_cast<siginfo_t*>(raw_info), raw_context); return g_orig_segv_action.sa_sigaction(sig, static_cast<siginfo_t*>(raw_info), raw_context);
} }
bool ArmNce::IsPreciseAccessPage(u64 addr) const {
const std::scoped_lock lk{m_precise_pages_guard};
return m_precise_pages.contains(AlignDownPage(addr));
}
void ArmNce::MarkPreciseAccessPage(u64 addr) {
const std::scoped_lock lk{m_precise_pages_guard};
if (m_precise_pages.size() >= MaxPreciseAccessPages) {
m_precise_pages.clear();
}
m_precise_pages.insert(AlignDownPage(addr));
}
void ArmNce::LockThread(Kernel::KThread* thread) { void ArmNce::LockThread(Kernel::KThread* thread) {
auto* thread_params = &thread->GetNativeExecutionParameters(); auto* thread_params = &thread->GetNativeExecutionParameters();
LockThreadParameters(thread_params); LockThreadParameters(thread_params);

10
src/core/arm/nce/arm_nce.h

@ -1,13 +1,9 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#pragma once #pragma once
#include <mutex> #include <mutex>
#include <unordered_set>
#include "core/arm/arm_interface.h" #include "core/arm/arm_interface.h"
#include "core/arm/nce/guest_context.h" #include "core/arm/nce/guest_context.h"
@ -82,9 +78,6 @@ private:
static void HandleHostAlignmentFault(int sig, void* info, void* raw_context); static void HandleHostAlignmentFault(int sig, void* info, void* raw_context);
static void HandleHostAccessFault(int sig, void* info, void* raw_context); static void HandleHostAccessFault(int sig, void* info, void* raw_context);
bool IsPreciseAccessPage(u64 addr) const;
void MarkPreciseAccessPage(u64 addr);
public: public:
Core::System& m_system; Core::System& m_system;
@ -96,9 +89,6 @@ public:
GuestContext m_guest_ctx{}; GuestContext m_guest_ctx{};
Kernel::KThread* m_running_thread{}; Kernel::KThread* m_running_thread{};
mutable std::mutex m_precise_pages_guard{};
std::unordered_set<u64> m_precise_pages{};
// Stack for signal processing. // Stack for signal processing.
std::unique_ptr<u8[]> m_stack{}; std::unique_ptr<u8[]> m_stack{};
}; };

Loading…
Cancel
Save