diff options
| author | bunnei <bunneidev@gmail.com> | 2018-02-18 14:46:11 -0500 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2018-02-18 14:46:11 -0500 | 
| commit | cec0d4f1918c640524fa0087549da2fab0960e24 (patch) | |
| tree | 3b2c3e28cc798b6cdf081d6ddd6e13554458b72a /src/core/hle | |
| parent | de43db3400c4ce60ea5582117bdee1e87ab22f67 (diff) | |
kernel: Remove unused address_arbiter code.
Diffstat (limited to 'src/core/hle')
| -rw-r--r-- | src/core/hle/kernel/address_arbiter.cpp | 91 | ||||
| -rw-r--r-- | src/core/hle/kernel/address_arbiter.h | 60 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.cpp | 34 | ||||
| -rw-r--r-- | src/core/hle/kernel/thread.h | 12 | 
4 files changed, 0 insertions, 197 deletions
| diff --git a/src/core/hle/kernel/address_arbiter.cpp b/src/core/hle/kernel/address_arbiter.cpp deleted file mode 100644 index 776d342f0..000000000 --- a/src/core/hle/kernel/address_arbiter.cpp +++ /dev/null @@ -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 diff --git a/src/core/hle/kernel/address_arbiter.h b/src/core/hle/kernel/address_arbiter.h deleted file mode 100644 index f902ddf2d..000000000 --- a/src/core/hle/kernel/address_arbiter.h +++ /dev/null @@ -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 diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 130b669a0..0fcc65cbf 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -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 diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index bbffaf4cf..aa80a51a9 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -260,18 +260,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   */  Thread* GetCurrentThread(); | 
