Bladeren bron

Kernel/Arbiters: Initialize arb_wait_address in thread struct.

Michael Scire 8 jaren geleden
bovenliggende
commit
8f8fe62a19
3 gewijzigde bestanden met toevoegingen van 7 en 1 verwijderingen
  1. 2 0
      src/core/CMakeLists.txt
  2. 4 0
      src/core/hle/kernel/svc.cpp
  3. 1 1
      src/core/hle/kernel/thread.h

+ 2 - 0
src/core/CMakeLists.txt

@@ -40,6 +40,8 @@ add_library(core STATIC
     hle/config_mem.h
     hle/config_mem.h
     hle/ipc.h
     hle/ipc.h
     hle/ipc_helpers.h
     hle/ipc_helpers.h
+    hle/kernel/address_arbiter.cpp
+    hle/kernel/address_arbiter.h
     hle/kernel/client_port.cpp
     hle/kernel/client_port.cpp
     hle/kernel/client_port.h
     hle/kernel/client_port.h
     hle/kernel/client_session.cpp
     hle/kernel/client_session.cpp

+ 4 - 0
src/core/hle/kernel/svc.cpp

@@ -692,6 +692,8 @@ static ResultCode SignalProcessWideKey(VAddr condition_variable_addr, s32 target
 
 
 // Wait for an address (via Address Arbiter)
 // Wait for an address (via Address Arbiter)
 static ResultCode WaitForAddress(VAddr address, u32 type, s32 value, s64 timeout) {
 static ResultCode WaitForAddress(VAddr address, u32 type, s32 value, s64 timeout) {
+    NGLOG_WARNING(Kernel_SVC, "called, address=0x{:X}, type=0x{:X}, value=0x{:X}, timeout={}",
+        address, type, value, timeout);
     // If the passed address is a kernel virtual address, return invalid memory state.
     // If the passed address is a kernel virtual address, return invalid memory state.
     if ((address + 0x8000000000LL) < 0x7FFFE00000LL) {
     if ((address + 0x8000000000LL) < 0x7FFFE00000LL) {
         return ERR_INVALID_ADDRESS_STATE;
         return ERR_INVALID_ADDRESS_STATE;
@@ -715,6 +717,8 @@ static ResultCode WaitForAddress(VAddr address, u32 type, s32 value, s64 timeout
 
 
 // Signals to an address (via Address Arbiter)
 // Signals to an address (via Address Arbiter)
 static ResultCode SignalToAddress(VAddr address, u32 type, s32 value, s32 num_to_wake) {
 static ResultCode SignalToAddress(VAddr address, u32 type, s32 value, s32 num_to_wake) {
+    NGLOG_WARNING(Kernel_SVC, "called, address=0x{:X}, type=0x{:X}, value=0x{:X}, num_to_wake=0x{:X}",
+        address, type, value, num_to_wake);
     // If the passed address is a kernel virtual address, return invalid memory state.
     // If the passed address is a kernel virtual address, return invalid memory state.
     if ((address + 0x8000000000LL) < 0x7FFFE00000LL) {
     if ((address + 0x8000000000LL) < 0x7FFFE00000LL) {
         return ERR_INVALID_ADDRESS_STATE;
         return ERR_INVALID_ADDRESS_STATE;

+ 1 - 1
src/core/hle/kernel/thread.h

@@ -232,7 +232,7 @@ public:
     Handle wait_handle;         ///< The handle used to wait for the mutex.
     Handle wait_handle;         ///< The handle used to wait for the mutex.
 
 
     // If waiting for an AddressArbiter, this is the address being waited on.
     // If waiting for an AddressArbiter, this is the address being waited on.
-    VAddr arb_wait_address;
+    VAddr arb_wait_address{0};
     ResultCode arb_wait_result{RESULT_SUCCESS}; ///< Result returned when done waiting on AddressArbiter.
     ResultCode arb_wait_result{RESULT_SUCCESS}; ///< Result returned when done waiting on AddressArbiter.
 
 
     std::string name;
     std::string name;