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