kernel: Remove unused address_arbiter code.
This commit is contained in:
		| @@ -28,8 +28,6 @@ add_library(core STATIC | ||||
|     hle/config_mem.h | ||||
|     hle/ipc.h | ||||
|     hle/ipc_helpers.h | ||||
|     hle/kernel/address_arbiter.cpp | ||||
|     hle/kernel/address_arbiter.h | ||||
|     hle/kernel/client_port.cpp | ||||
|     hle/kernel/client_port.h | ||||
|     hle/kernel/client_session.cpp | ||||
|   | ||||
| @@ -1,91 +0,0 @@ | ||||
| // Copyright 2014 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/hle/kernel/address_arbiter.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/memory.h" | ||||
|  | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| // Kernel namespace | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| AddressArbiter::AddressArbiter() {} | ||||
| AddressArbiter::~AddressArbiter() {} | ||||
|  | ||||
| SharedPtr<AddressArbiter> AddressArbiter::Create(std::string name) { | ||||
|     SharedPtr<AddressArbiter> address_arbiter(new AddressArbiter); | ||||
|  | ||||
|     address_arbiter->name = std::move(name); | ||||
|  | ||||
|     return address_arbiter; | ||||
| } | ||||
|  | ||||
| ResultCode AddressArbiter::ArbitrateAddress(ArbitrationType type, VAddr address, s32 value, | ||||
|                                             u64 nanoseconds) { | ||||
|     switch (type) { | ||||
|  | ||||
|     // Signal thread(s) waiting for arbitrate address... | ||||
|     case ArbitrationType::Signal: | ||||
|         // Negative value means resume all threads | ||||
|         if (value < 0) { | ||||
|             ArbitrateAllThreads(address); | ||||
|         } else { | ||||
|             // Resume first N threads | ||||
|             for (int i = 0; i < value; i++) | ||||
|                 ArbitrateHighestPriorityThread(address); | ||||
|         } | ||||
|         break; | ||||
|  | ||||
|     // Wait current thread (acquire the arbiter)... | ||||
|     case ArbitrationType::WaitIfLessThan: | ||||
|         if ((s32)Memory::Read32(address) < value) { | ||||
|             Kernel::WaitCurrentThread_ArbitrateAddress(address); | ||||
|         } | ||||
|         break; | ||||
|     case ArbitrationType::WaitIfLessThanWithTimeout: | ||||
|         if ((s32)Memory::Read32(address) < value) { | ||||
|             Kernel::WaitCurrentThread_ArbitrateAddress(address); | ||||
|             GetCurrentThread()->WakeAfterDelay(nanoseconds); | ||||
|         } | ||||
|         break; | ||||
|     case ArbitrationType::DecrementAndWaitIfLessThan: { | ||||
|         s32 memory_value = Memory::Read32(address); | ||||
|         if (memory_value < value) { | ||||
|             // Only change the memory value if the thread should wait | ||||
|             Memory::Write32(address, (s32)memory_value - 1); | ||||
|             Kernel::WaitCurrentThread_ArbitrateAddress(address); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|     case ArbitrationType::DecrementAndWaitIfLessThanWithTimeout: { | ||||
|         s32 memory_value = Memory::Read32(address); | ||||
|         if (memory_value < value) { | ||||
|             // Only change the memory value if the thread should wait | ||||
|             Memory::Write32(address, (s32)memory_value - 1); | ||||
|             Kernel::WaitCurrentThread_ArbitrateAddress(address); | ||||
|             GetCurrentThread()->WakeAfterDelay(nanoseconds); | ||||
|         } | ||||
|         break; | ||||
|     } | ||||
|  | ||||
|     default: | ||||
|         LOG_ERROR(Kernel, "unknown type=%d", type); | ||||
|         return ERR_INVALID_ENUM_VALUE_FND; | ||||
|     } | ||||
|  | ||||
|     // The calls that use a timeout seem to always return a Timeout error even if they did not put | ||||
|     // the thread to sleep | ||||
|     if (type == ArbitrationType::WaitIfLessThanWithTimeout || | ||||
|         type == ArbitrationType::DecrementAndWaitIfLessThanWithTimeout) { | ||||
|  | ||||
|         return RESULT_TIMEOUT; | ||||
|     } | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
| } // namespace Kernel | ||||
| @@ -1,60 +0,0 @@ | ||||
| // Copyright 2014 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
| // Address arbiters are an underlying kernel synchronization object that can be created/used via | ||||
| // supervisor calls (SVCs). They function as sort of a global lock. Typically, games/other CTR | ||||
| // applications use them as an underlying mechanism to implement thread-safe barriers, events, and | ||||
| // semphores. | ||||
|  | ||||
| //////////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| // Kernel namespace | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| enum class ArbitrationType : u32 { | ||||
|     Signal, | ||||
|     WaitIfLessThan, | ||||
|     DecrementAndWaitIfLessThan, | ||||
|     WaitIfLessThanWithTimeout, | ||||
|     DecrementAndWaitIfLessThanWithTimeout, | ||||
| }; | ||||
|  | ||||
| class AddressArbiter final : public Object { | ||||
| public: | ||||
|     /** | ||||
|      * Creates an address arbiter. | ||||
|      * | ||||
|      * @param name Optional name used for debugging. | ||||
|      * @returns The created AddressArbiter. | ||||
|      */ | ||||
|     static SharedPtr<AddressArbiter> Create(std::string name = "Unknown"); | ||||
|  | ||||
|     std::string GetTypeName() const override { | ||||
|         return "Arbiter"; | ||||
|     } | ||||
|     std::string GetName() const override { | ||||
|         return name; | ||||
|     } | ||||
|  | ||||
|     static const HandleType HANDLE_TYPE = HandleType::AddressArbiter; | ||||
|     HandleType GetHandleType() const override { | ||||
|         return HANDLE_TYPE; | ||||
|     } | ||||
|  | ||||
|     std::string name; ///< Name of address arbiter object (optional) | ||||
|  | ||||
|     ResultCode ArbitrateAddress(ArbitrationType type, VAddr address, s32 value, u64 nanoseconds); | ||||
|  | ||||
| private: | ||||
|     AddressArbiter(); | ||||
|     ~AddressArbiter() override; | ||||
| }; | ||||
|  | ||||
| } // namespace Kernel | ||||
| @@ -109,40 +109,6 @@ void Thread::Stop() { | ||||
|     Kernel::g_current_process->tls_slots[tls_page].reset(tls_slot); | ||||
| } | ||||
|  | ||||
| Thread* ArbitrateHighestPriorityThread(u32 address) { | ||||
|     Thread* highest_priority_thread = nullptr; | ||||
|     u32 priority = THREADPRIO_LOWEST; | ||||
|  | ||||
|     // Iterate through threads, find highest priority thread that is waiting to be arbitrated... | ||||
|     for (auto& thread : thread_list) { | ||||
|         if (!CheckWait_AddressArbiter(thread.get(), address)) | ||||
|             continue; | ||||
|  | ||||
|         if (thread == nullptr) | ||||
|             continue; | ||||
|  | ||||
|         if (thread->current_priority <= priority) { | ||||
|             highest_priority_thread = thread.get(); | ||||
|             priority = thread->current_priority; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     // If a thread was arbitrated, resume it | ||||
|     if (nullptr != highest_priority_thread) { | ||||
|         highest_priority_thread->ResumeFromWait(); | ||||
|     } | ||||
|  | ||||
|     return highest_priority_thread; | ||||
| } | ||||
|  | ||||
| void ArbitrateAllThreads(u32 address) { | ||||
|     // Resume all threads found to be waiting on the address | ||||
|     for (auto& thread : thread_list) { | ||||
|         if (CheckWait_AddressArbiter(thread.get(), address)) | ||||
|             thread->ResumeFromWait(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Switches the CPU's active thread context to that of the specified thread | ||||
|  * @param new_thread The thread to switch to | ||||
|   | ||||
| @@ -259,18 +259,6 @@ bool HaveReadyThreads(); | ||||
|  */ | ||||
| void Reschedule(); | ||||
|  | ||||
| /** | ||||
|  * Arbitrate the highest priority thread that is waiting | ||||
|  * @param address The address for which waiting threads should be arbitrated | ||||
|  */ | ||||
| Thread* ArbitrateHighestPriorityThread(VAddr address); | ||||
|  | ||||
| /** | ||||
|  * Arbitrate all threads currently waiting. | ||||
|  * @param address The address for which waiting threads should be arbitrated | ||||
|  */ | ||||
| void ArbitrateAllThreads(VAddr address); | ||||
|  | ||||
| /** | ||||
|  * Gets the current thread | ||||
|  */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user