Browse Source
Merge pull request #8637 from liamwhite/bad-interrupts
Merge pull request #8637 from liamwhite/bad-interrupts
kernel: unlayer CPU interrupt handlingnce_cpp
committed by
GitHub
13 changed files with 64 additions and 152 deletions
-
2src/core/CMakeLists.txt
-
11src/core/arm/arm_interface.h
-
24src/core/arm/cpu_interrupt_handler.cpp
-
39src/core/arm/cpu_interrupt_handler.h
-
13src/core/arm/dynarmic/arm_dynarmic_32.cpp
-
5src/core/arm/dynarmic/arm_dynarmic_32.h
-
12src/core/arm/dynarmic/arm_dynarmic_64.cpp
-
6src/core/arm/dynarmic/arm_dynarmic_64.h
-
9src/core/debugger/debugger.cpp
-
41src/core/hle/kernel/kernel.cpp
-
8src/core/hle/kernel/kernel.h
-
29src/core/hle/kernel/physical_core.cpp
-
17src/core/hle/kernel/physical_core.h
@ -1,24 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project
|
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||
|
|
||||
#include "common/thread.h"
|
|
||||
#include "core/arm/cpu_interrupt_handler.h"
|
|
||||
|
|
||||
namespace Core { |
|
||||
|
|
||||
CPUInterruptHandler::CPUInterruptHandler() : interrupt_event{std::make_unique<Common::Event>()} {} |
|
||||
|
|
||||
CPUInterruptHandler::~CPUInterruptHandler() = default; |
|
||||
|
|
||||
void CPUInterruptHandler::SetInterrupt(bool is_interrupted_) { |
|
||||
if (is_interrupted_) { |
|
||||
interrupt_event->Set(); |
|
||||
} |
|
||||
is_interrupted = is_interrupted_; |
|
||||
} |
|
||||
|
|
||||
void CPUInterruptHandler::AwaitInterrupt() { |
|
||||
interrupt_event->Wait(); |
|
||||
} |
|
||||
|
|
||||
} // namespace Core
|
|
||||
@ -1,39 +0,0 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2020 yuzu Emulator Project |
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later |
|
||||
|
|
||||
#pragma once |
|
||||
|
|
||||
#include <atomic> |
|
||||
#include <memory> |
|
||||
|
|
||||
namespace Common { |
|
||||
class Event; |
|
||||
} |
|
||||
|
|
||||
namespace Core { |
|
||||
|
|
||||
class CPUInterruptHandler { |
|
||||
public: |
|
||||
CPUInterruptHandler(); |
|
||||
~CPUInterruptHandler(); |
|
||||
|
|
||||
CPUInterruptHandler(const CPUInterruptHandler&) = delete; |
|
||||
CPUInterruptHandler& operator=(const CPUInterruptHandler&) = delete; |
|
||||
|
|
||||
CPUInterruptHandler(CPUInterruptHandler&&) = delete; |
|
||||
CPUInterruptHandler& operator=(CPUInterruptHandler&&) = delete; |
|
||||
|
|
||||
bool IsInterrupted() const { |
|
||||
return is_interrupted; |
|
||||
} |
|
||||
|
|
||||
void SetInterrupt(bool is_interrupted); |
|
||||
|
|
||||
void AwaitInterrupt(); |
|
||||
|
|
||||
private: |
|
||||
std::unique_ptr<Common::Event> interrupt_event; |
|
||||
std::atomic_bool is_interrupted{false}; |
|
||||
}; |
|
||||
|
|
||||
} // namespace Core |
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue