summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2022-10-14 17:30:38 -0400
committerGravatar GitHub2022-10-14 17:30:38 -0400
commitae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433 (patch)
tree4b04503746cd43789b1a812756974e38868be4cc
parentMerge pull request #9055 from liamwhite/hbl (diff)
parentkernel: remove KWritableEvent (diff)
downloadyuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.tar.gz
yuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.tar.xz
yuzu-ae6dd1143c0549fe5bcbd7326c69cbcb6b5a4433.zip
Merge pull request #9061 from liamwhite/writable-event
kernel: remove KWritableEvent
Diffstat (limited to '')
-rw-r--r--src/audio_core/in/audio_in_system.cpp6
-rw-r--r--src/audio_core/out/audio_out_system.cpp6
-rw-r--r--src/audio_core/renderer/system.cpp4
-rw-r--r--src/core/CMakeLists.txt2
-rw-r--r--src/core/hle/kernel/hle_ipc.h2
-rw-r--r--src/core/hle/kernel/k_class_token.cpp12
-rw-r--r--src/core/hle/kernel/k_class_token.h1
-rw-r--r--src/core/hle/kernel/k_event.cpp44
-rw-r--r--src/core/hle/kernel/k_event.h31
-rw-r--r--src/core/hle/kernel/k_readable_event.cpp33
-rw-r--r--src/core/hle/kernel/k_readable_event.h17
-rw-r--r--src/core/hle/kernel/k_writable_event.cpp35
-rw-r--r--src/core/hle/kernel/k_writable_event.h39
-rw-r--r--src/core/hle/kernel/kernel.h4
-rw-r--r--src/core/hle/kernel/svc.cpp25
-rw-r--r--src/core/hle/service/acc/async_context.cpp2
-rw-r--r--src/core/hle/service/am/am.cpp12
-rw-r--r--src/core/hle/service/am/applets/applets.cpp10
-rw-r--r--src/core/hle/service/audio/audren_u.cpp4
-rw-r--r--src/core/hle/service/bcat/backend/backend.cpp2
-rw-r--r--src/core/hle/service/hid/controllers/npad.cpp5
-rw-r--r--src/core/hle/service/hid/controllers/palma.cpp16
-rw-r--r--src/core/hle/service/hid/hidbus/ringcon.cpp8
-rw-r--r--src/core/hle/service/kernel_helpers.cpp5
-rw-r--r--src/core/hle/service/ldn/ldn.cpp2
-rw-r--r--src/core/hle/service/nfp/nfp_device.cpp6
-rw-r--r--src/core/hle/service/nim/nim.cpp4
-rw-r--r--src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp5
-rw-r--r--src/core/hle/service/nvdrv/nvdrv.cpp1
-rw-r--r--src/core/hle/service/nvdrv/nvdrv_interface.h4
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue_producer.cpp9
-rw-r--r--src/core/hle/service/nvflinger/buffer_queue_producer.h1
-rw-r--r--src/core/hle/service/nvflinger/nvflinger.h1
-rw-r--r--src/core/hle/service/ptm/psm.cpp6
-rw-r--r--src/core/hle/service/time/system_clock_context_update_callback.cpp10
-rw-r--r--src/core/hle/service/time/system_clock_context_update_callback.h6
-rw-r--r--src/core/hle/service/vi/display/vi_display.cpp3
37 files changed, 151 insertions, 232 deletions
diff --git a/src/audio_core/in/audio_in_system.cpp b/src/audio_core/in/audio_in_system.cpp
index e7f918a47..6b7e6715c 100644
--- a/src/audio_core/in/audio_in_system.cpp
+++ b/src/audio_core/in/audio_in_system.cpp
@@ -23,7 +23,7 @@ System::~System() {
23void System::Finalize() { 23void System::Finalize() {
24 Stop(); 24 Stop();
25 session->Finalize(); 25 session->Finalize();
26 buffer_event->GetWritableEvent().Signal(); 26 buffer_event->Signal();
27} 27}
28 28
29void System::StartSession() { 29void System::StartSession() {
@@ -142,7 +142,7 @@ void System::ReleaseBuffers() {
142 142
143 if (signal) { 143 if (signal) {
144 // Signal if any buffer was released, or if none are registered, we need more. 144 // Signal if any buffer was released, or if none are registered, we need more.
145 buffer_event->GetWritableEvent().Signal(); 145 buffer_event->Signal();
146 } 146 }
147} 147}
148 148
@@ -159,7 +159,7 @@ bool System::FlushAudioInBuffers() {
159 buffers.FlushBuffers(buffers_released); 159 buffers.FlushBuffers(buffers_released);
160 160
161 if (buffers_released > 0) { 161 if (buffers_released > 0) {
162 buffer_event->GetWritableEvent().Signal(); 162 buffer_event->Signal();
163 } 163 }
164 return true; 164 return true;
165} 165}
diff --git a/src/audio_core/out/audio_out_system.cpp b/src/audio_core/out/audio_out_system.cpp
index 8b907590a..48a801923 100644
--- a/src/audio_core/out/audio_out_system.cpp
+++ b/src/audio_core/out/audio_out_system.cpp
@@ -24,7 +24,7 @@ System::~System() {
24void System::Finalize() { 24void System::Finalize() {
25 Stop(); 25 Stop();
26 session->Finalize(); 26 session->Finalize();
27 buffer_event->GetWritableEvent().Signal(); 27 buffer_event->Signal();
28} 28}
29 29
30std::string_view System::GetDefaultOutputDeviceName() const { 30std::string_view System::GetDefaultOutputDeviceName() const {
@@ -141,7 +141,7 @@ void System::ReleaseBuffers() {
141 bool signal{buffers.ReleaseBuffers(system.CoreTiming(), *session)}; 141 bool signal{buffers.ReleaseBuffers(system.CoreTiming(), *session)};
142 if (signal) { 142 if (signal) {
143 // Signal if any buffer was released, or if none are registered, we need more. 143 // Signal if any buffer was released, or if none are registered, we need more.
144 buffer_event->GetWritableEvent().Signal(); 144 buffer_event->Signal();
145 } 145 }
146} 146}
147 147
@@ -158,7 +158,7 @@ bool System::FlushAudioOutBuffers() {
158 buffers.FlushBuffers(buffers_released); 158 buffers.FlushBuffers(buffers_released);
159 159
160 if (buffers_released > 0) { 160 if (buffers_released > 0) {
161 buffer_event->GetWritableEvent().Signal(); 161 buffer_event->Signal();
162 } 162 }
163 return true; 163 return true;
164} 164}
diff --git a/src/audio_core/renderer/system.cpp b/src/audio_core/renderer/system.cpp
index 7a217969e..bde794cd1 100644
--- a/src/audio_core/renderer/system.cpp
+++ b/src/audio_core/renderer/system.cpp
@@ -534,7 +534,7 @@ Result System::Update(std::span<const u8> input, std::span<u8> performance, std:
534 return result; 534 return result;
535 } 535 }
536 536
537 adsp_rendered_event->GetWritableEvent().Clear(); 537 adsp_rendered_event->Clear();
538 num_times_updated++; 538 num_times_updated++;
539 539
540 const auto end_time{core.CoreTiming().GetClockTicks()}; 540 const auto end_time{core.CoreTiming().GetClockTicks()};
@@ -625,7 +625,7 @@ void System::SendCommandToDsp() {
625 reset_command_buffers = false; 625 reset_command_buffers = false;
626 command_buffer_size = command_size; 626 command_buffer_size = command_size;
627 if (remaining_command_count == 0) { 627 if (remaining_command_count == 0) {
628 adsp_rendered_event->GetWritableEvent().Signal(); 628 adsp_rendered_event->Signal();
629 } 629 }
630 } else { 630 } else {
631 adsp.ClearRemainCount(session_id); 631 adsp.ClearRemainCount(session_id);
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 95302c419..abeb5859b 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -261,8 +261,6 @@ add_library(core STATIC
261 hle/kernel/k_worker_task.h 261 hle/kernel/k_worker_task.h
262 hle/kernel/k_worker_task_manager.cpp 262 hle/kernel/k_worker_task_manager.cpp
263 hle/kernel/k_worker_task_manager.h 263 hle/kernel/k_worker_task_manager.h
264 hle/kernel/k_writable_event.cpp
265 hle/kernel/k_writable_event.h
266 hle/kernel/kernel.cpp 264 hle/kernel/kernel.cpp
267 hle/kernel/kernel.h 265 hle/kernel/kernel.h
268 hle/kernel/memory_types.h 266 hle/kernel/memory_types.h
diff --git a/src/core/hle/kernel/hle_ipc.h b/src/core/hle/kernel/hle_ipc.h
index 99265ce90..e258e2cdf 100644
--- a/src/core/hle/kernel/hle_ipc.h
+++ b/src/core/hle/kernel/hle_ipc.h
@@ -43,13 +43,13 @@ class Domain;
43class HLERequestContext; 43class HLERequestContext;
44class KAutoObject; 44class KAutoObject;
45class KernelCore; 45class KernelCore;
46class KEvent;
46class KHandleTable; 47class KHandleTable;
47class KProcess; 48class KProcess;
48class KServerSession; 49class KServerSession;
49class KThread; 50class KThread;
50class KReadableEvent; 51class KReadableEvent;
51class KSession; 52class KSession;
52class KWritableEvent;
53class ServiceThread; 53class ServiceThread;
54 54
55enum class ThreadWakeupReason; 55enum class ThreadWakeupReason;
diff --git a/src/core/hle/kernel/k_class_token.cpp b/src/core/hle/kernel/k_class_token.cpp
index cc2a0f7ca..10265c23c 100644
--- a/src/core/hle/kernel/k_class_token.cpp
+++ b/src/core/hle/kernel/k_class_token.cpp
@@ -18,7 +18,6 @@
18#include "core/hle/kernel/k_synchronization_object.h" 18#include "core/hle/kernel/k_synchronization_object.h"
19#include "core/hle/kernel/k_thread.h" 19#include "core/hle/kernel/k_thread.h"
20#include "core/hle/kernel/k_transfer_memory.h" 20#include "core/hle/kernel/k_transfer_memory.h"
21#include "core/hle/kernel/k_writable_event.h"
22 21
23namespace Kernel { 22namespace Kernel {
24 23
@@ -42,13 +41,12 @@ static_assert(ClassToken<KPort> == 0b10000101'00000000);
42static_assert(ClassToken<KSession> == 0b00011001'00000000); 41static_assert(ClassToken<KSession> == 0b00011001'00000000);
43static_assert(ClassToken<KSharedMemory> == 0b00101001'00000000); 42static_assert(ClassToken<KSharedMemory> == 0b00101001'00000000);
44static_assert(ClassToken<KEvent> == 0b01001001'00000000); 43static_assert(ClassToken<KEvent> == 0b01001001'00000000);
45static_assert(ClassToken<KWritableEvent> == 0b10001001'00000000);
46// static_assert(ClassToken<KLightClientSession> == 0b00110001'00000000); 44// static_assert(ClassToken<KLightClientSession> == 0b00110001'00000000);
47// static_assert(ClassToken<KLightServerSession> == 0b01010001'00000000); 45// static_assert(ClassToken<KLightServerSession> == 0b01010001'00000000);
48static_assert(ClassToken<KTransferMemory> == 0b10010001'00000000); 46static_assert(ClassToken<KTransferMemory> == 0b01010001'00000000);
49// static_assert(ClassToken<KDeviceAddressSpace> == 0b01100001'00000000); 47// static_assert(ClassToken<KDeviceAddressSpace> == 0b01100001'00000000);
50// static_assert(ClassToken<KSessionRequest> == 0b10100001'00000000); 48// static_assert(ClassToken<KSessionRequest> == 0b10100001'00000000);
51static_assert(ClassToken<KCodeMemory> == 0b11000001'00000000); 49static_assert(ClassToken<KCodeMemory> == 0b10100001'00000000);
52 50
53// Ensure that the token hierarchy is correct. 51// Ensure that the token hierarchy is correct.
54 52
@@ -73,13 +71,12 @@ static_assert(ClassToken<KPort> == ((0b10000101 << 8) | ClassToken<KAutoObject>)
73static_assert(ClassToken<KSession> == ((0b00011001 << 8) | ClassToken<KAutoObject>)); 71static_assert(ClassToken<KSession> == ((0b00011001 << 8) | ClassToken<KAutoObject>));
74static_assert(ClassToken<KSharedMemory> == ((0b00101001 << 8) | ClassToken<KAutoObject>)); 72static_assert(ClassToken<KSharedMemory> == ((0b00101001 << 8) | ClassToken<KAutoObject>));
75static_assert(ClassToken<KEvent> == ((0b01001001 << 8) | ClassToken<KAutoObject>)); 73static_assert(ClassToken<KEvent> == ((0b01001001 << 8) | ClassToken<KAutoObject>));
76static_assert(ClassToken<KWritableEvent> == ((0b10001001 << 8) | ClassToken<KAutoObject>));
77// static_assert(ClassToken<KLightClientSession> == ((0b00110001 << 8) | ClassToken<KAutoObject>)); 74// static_assert(ClassToken<KLightClientSession> == ((0b00110001 << 8) | ClassToken<KAutoObject>));
78// static_assert(ClassToken<KLightServerSession> == ((0b01010001 << 8) | ClassToken<KAutoObject>)); 75// static_assert(ClassToken<KLightServerSession> == ((0b01010001 << 8) | ClassToken<KAutoObject>));
79static_assert(ClassToken<KTransferMemory> == ((0b10010001 << 8) | ClassToken<KAutoObject>)); 76static_assert(ClassToken<KTransferMemory> == ((0b01010001 << 8) | ClassToken<KAutoObject>));
80// static_assert(ClassToken<KDeviceAddressSpace> == ((0b01100001 << 8) | ClassToken<KAutoObject>)); 77// static_assert(ClassToken<KDeviceAddressSpace> == ((0b01100001 << 8) | ClassToken<KAutoObject>));
81// static_assert(ClassToken<KSessionRequest> == ((0b10100001 << 8) | ClassToken<KAutoObject>)); 78// static_assert(ClassToken<KSessionRequest> == ((0b10100001 << 8) | ClassToken<KAutoObject>));
82static_assert(ClassToken<KCodeMemory> == ((0b11000001 << 8) | ClassToken<KAutoObject>)); 79static_assert(ClassToken<KCodeMemory> == ((0b10100001 << 8) | ClassToken<KAutoObject>));
83 80
84// Ensure that the token hierarchy reflects the class hierarchy. 81// Ensure that the token hierarchy reflects the class hierarchy.
85 82
@@ -110,7 +107,6 @@ static_assert(std::is_final_v<KPort> && std::is_base_of_v<KAutoObject, KPort>);
110static_assert(std::is_final_v<KSession> && std::is_base_of_v<KAutoObject, KSession>); 107static_assert(std::is_final_v<KSession> && std::is_base_of_v<KAutoObject, KSession>);
111static_assert(std::is_final_v<KSharedMemory> && std::is_base_of_v<KAutoObject, KSharedMemory>); 108static_assert(std::is_final_v<KSharedMemory> && std::is_base_of_v<KAutoObject, KSharedMemory>);
112static_assert(std::is_final_v<KEvent> && std::is_base_of_v<KAutoObject, KEvent>); 109static_assert(std::is_final_v<KEvent> && std::is_base_of_v<KAutoObject, KEvent>);
113static_assert(std::is_final_v<KWritableEvent> && std::is_base_of_v<KAutoObject, KWritableEvent>);
114// static_assert(std::is_final_v<KLightClientSession> && 110// static_assert(std::is_final_v<KLightClientSession> &&
115// std::is_base_of_v<KAutoObject, KLightClientSession>); 111// std::is_base_of_v<KAutoObject, KLightClientSession>);
116// static_assert(std::is_final_v<KLightServerSession> && 112// static_assert(std::is_final_v<KLightServerSession> &&
diff --git a/src/core/hle/kernel/k_class_token.h b/src/core/hle/kernel/k_class_token.h
index c9001ae3d..ab20e00ff 100644
--- a/src/core/hle/kernel/k_class_token.h
+++ b/src/core/hle/kernel/k_class_token.h
@@ -101,7 +101,6 @@ public:
101 KSession, 101 KSession,
102 KSharedMemory, 102 KSharedMemory,
103 KEvent, 103 KEvent,
104 KWritableEvent,
105 KLightClientSession, 104 KLightClientSession,
106 KLightServerSession, 105 KLightServerSession,
107 KTransferMemory, 106 KTransferMemory,
diff --git a/src/core/hle/kernel/k_event.cpp b/src/core/hle/kernel/k_event.cpp
index e52fafbc7..78ca59463 100644
--- a/src/core/hle/kernel/k_event.cpp
+++ b/src/core/hle/kernel/k_event.cpp
@@ -8,39 +8,45 @@
8namespace Kernel { 8namespace Kernel {
9 9
10KEvent::KEvent(KernelCore& kernel_) 10KEvent::KEvent(KernelCore& kernel_)
11 : KAutoObjectWithSlabHeapAndContainer{kernel_}, readable_event{kernel_}, writable_event{ 11 : KAutoObjectWithSlabHeapAndContainer{kernel_}, m_readable_event{kernel_} {}
12 kernel_} {}
13 12
14KEvent::~KEvent() = default; 13KEvent::~KEvent() = default;
15 14
16void KEvent::Initialize(std::string&& name_, KProcess* owner_) { 15void KEvent::Initialize(KProcess* owner) {
17 // Increment reference count. 16 // Create our readable event.
18 // Because reference count is one on creation, this will result 17 KAutoObject::Create(std::addressof(m_readable_event));
19 // in a reference count of two. Thus, when both readable and
20 // writable events are closed this object will be destroyed.
21 Open();
22 18
23 // Create our sub events. 19 // Initialize our readable event.
24 KAutoObject::Create(std::addressof(readable_event)); 20 m_readable_event.Initialize(this);
25 KAutoObject::Create(std::addressof(writable_event));
26
27 // Initialize our sub sessions.
28 readable_event.Initialize(this, name_ + ":Readable");
29 writable_event.Initialize(this, name_ + ":Writable");
30 21
31 // Set our owner process. 22 // Set our owner process.
32 owner = owner_; 23 m_owner = owner;
33 owner->Open(); 24 m_owner->Open();
34 25
35 // Mark initialized. 26 // Mark initialized.
36 name = std::move(name_); 27 m_initialized = true;
37 initialized = true;
38} 28}
39 29
40void KEvent::Finalize() { 30void KEvent::Finalize() {
41 KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList>::Finalize(); 31 KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList>::Finalize();
42} 32}
43 33
34Result KEvent::Signal() {
35 KScopedSchedulerLock sl{kernel};
36
37 R_SUCCEED_IF(m_readable_event_destroyed);
38
39 return m_readable_event.Signal();
40}
41
42Result KEvent::Clear() {
43 KScopedSchedulerLock sl{kernel};
44
45 R_SUCCEED_IF(m_readable_event_destroyed);
46
47 return m_readable_event.Clear();
48}
49
44void KEvent::PostDestroy(uintptr_t arg) { 50void KEvent::PostDestroy(uintptr_t arg) {
45 // Release the event count resource the owner process holds. 51 // Release the event count resource the owner process holds.
46 KProcess* owner = reinterpret_cast<KProcess*>(arg); 52 KProcess* owner = reinterpret_cast<KProcess*>(arg);
diff --git a/src/core/hle/kernel/k_event.h b/src/core/hle/kernel/k_event.h
index 2ff828feb..48ce7d9a0 100644
--- a/src/core/hle/kernel/k_event.h
+++ b/src/core/hle/kernel/k_event.h
@@ -4,14 +4,12 @@
4#pragma once 4#pragma once
5 5
6#include "core/hle/kernel/k_readable_event.h" 6#include "core/hle/kernel/k_readable_event.h"
7#include "core/hle/kernel/k_writable_event.h"
8#include "core/hle/kernel/slab_helpers.h" 7#include "core/hle/kernel/slab_helpers.h"
9 8
10namespace Kernel { 9namespace Kernel {
11 10
12class KernelCore; 11class KernelCore;
13class KReadableEvent; 12class KReadableEvent;
14class KWritableEvent;
15class KProcess; 13class KProcess;
16 14
17class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> { 15class KEvent final : public KAutoObjectWithSlabHeapAndContainer<KEvent, KAutoObjectWithList> {
@@ -21,37 +19,40 @@ public:
21 explicit KEvent(KernelCore& kernel_); 19 explicit KEvent(KernelCore& kernel_);
22 ~KEvent() override; 20 ~KEvent() override;
23 21
24 void Initialize(std::string&& name, KProcess* owner_); 22 void Initialize(KProcess* owner);
25 23
26 void Finalize() override; 24 void Finalize() override;
27 25
28 bool IsInitialized() const override { 26 bool IsInitialized() const override {
29 return initialized; 27 return m_initialized;
30 } 28 }
31 29
32 uintptr_t GetPostDestroyArgument() const override { 30 uintptr_t GetPostDestroyArgument() const override {
33 return reinterpret_cast<uintptr_t>(owner); 31 return reinterpret_cast<uintptr_t>(m_owner);
34 } 32 }
35 33
36 KProcess* GetOwner() const override { 34 KProcess* GetOwner() const override {
37 return owner; 35 return m_owner;
38 } 36 }
39 37
40 KReadableEvent& GetReadableEvent() { 38 KReadableEvent& GetReadableEvent() {
41 return readable_event; 39 return m_readable_event;
42 }
43
44 KWritableEvent& GetWritableEvent() {
45 return writable_event;
46 } 40 }
47 41
48 static void PostDestroy(uintptr_t arg); 42 static void PostDestroy(uintptr_t arg);
49 43
44 Result Signal();
45 Result Clear();
46
47 void OnReadableEventDestroyed() {
48 m_readable_event_destroyed = true;
49 }
50
50private: 51private:
51 KReadableEvent readable_event; 52 KReadableEvent m_readable_event;
52 KWritableEvent writable_event; 53 KProcess* m_owner{};
53 KProcess* owner{}; 54 bool m_initialized{};
54 bool initialized{}; 55 bool m_readable_event_destroyed{};
55}; 56};
56 57
57} // namespace Kernel 58} // namespace Kernel
diff --git a/src/core/hle/kernel/k_readable_event.cpp b/src/core/hle/kernel/k_readable_event.cpp
index 94c5464fe..5c942d47c 100644
--- a/src/core/hle/kernel/k_readable_event.cpp
+++ b/src/core/hle/kernel/k_readable_event.cpp
@@ -15,31 +15,44 @@ KReadableEvent::KReadableEvent(KernelCore& kernel_) : KSynchronizationObject{ker
15 15
16KReadableEvent::~KReadableEvent() = default; 16KReadableEvent::~KReadableEvent() = default;
17 17
18void KReadableEvent::Initialize(KEvent* parent) {
19 m_is_signaled = false;
20 m_parent = parent;
21
22 if (m_parent != nullptr) {
23 m_parent->Open();
24 }
25}
26
18bool KReadableEvent::IsSignaled() const { 27bool KReadableEvent::IsSignaled() const {
19 ASSERT(kernel.GlobalSchedulerContext().IsLocked()); 28 ASSERT(KScheduler::IsSchedulerLockedByCurrentThread(kernel));
20 29
21 return is_signaled; 30 return m_is_signaled;
22} 31}
23 32
24void KReadableEvent::Destroy() { 33void KReadableEvent::Destroy() {
25 if (parent) { 34 if (m_parent) {
26 parent->Close(); 35 {
36 KScopedSchedulerLock sl{kernel};
37 m_parent->OnReadableEventDestroyed();
38 }
39 m_parent->Close();
27 } 40 }
28} 41}
29 42
30Result KReadableEvent::Signal() { 43Result KReadableEvent::Signal() {
31 KScopedSchedulerLock lk{kernel}; 44 KScopedSchedulerLock lk{kernel};
32 45
33 if (!is_signaled) { 46 if (!m_is_signaled) {
34 is_signaled = true; 47 m_is_signaled = true;
35 NotifyAvailable(); 48 this->NotifyAvailable();
36 } 49 }
37 50
38 return ResultSuccess; 51 return ResultSuccess;
39} 52}
40 53
41Result KReadableEvent::Clear() { 54Result KReadableEvent::Clear() {
42 Reset(); 55 this->Reset();
43 56
44 return ResultSuccess; 57 return ResultSuccess;
45} 58}
@@ -47,11 +60,11 @@ Result KReadableEvent::Clear() {
47Result KReadableEvent::Reset() { 60Result KReadableEvent::Reset() {
48 KScopedSchedulerLock lk{kernel}; 61 KScopedSchedulerLock lk{kernel};
49 62
50 if (!is_signaled) { 63 if (!m_is_signaled) {
51 return ResultInvalidState; 64 return ResultInvalidState;
52 } 65 }
53 66
54 is_signaled = false; 67 m_is_signaled = false;
55 return ResultSuccess; 68 return ResultSuccess;
56} 69}
57 70
diff --git a/src/core/hle/kernel/k_readable_event.h b/src/core/hle/kernel/k_readable_event.h
index 18dcad289..743f96bf5 100644
--- a/src/core/hle/kernel/k_readable_event.h
+++ b/src/core/hle/kernel/k_readable_event.h
@@ -20,26 +20,23 @@ public:
20 explicit KReadableEvent(KernelCore& kernel_); 20 explicit KReadableEvent(KernelCore& kernel_);
21 ~KReadableEvent() override; 21 ~KReadableEvent() override;
22 22
23 void Initialize(KEvent* parent_event_, std::string&& name_) { 23 void Initialize(KEvent* parent);
24 is_signaled = false;
25 parent = parent_event_;
26 name = std::move(name_);
27 }
28 24
29 KEvent* GetParent() const { 25 KEvent* GetParent() const {
30 return parent; 26 return m_parent;
31 } 27 }
32 28
29 Result Signal();
30 Result Clear();
31
33 bool IsSignaled() const override; 32 bool IsSignaled() const override;
34 void Destroy() override; 33 void Destroy() override;
35 34
36 Result Signal();
37 Result Clear();
38 Result Reset(); 35 Result Reset();
39 36
40private: 37private:
41 bool is_signaled{}; 38 bool m_is_signaled{};
42 KEvent* parent{}; 39 KEvent* m_parent{};
43}; 40};
44 41
45} // namespace Kernel 42} // namespace Kernel
diff --git a/src/core/hle/kernel/k_writable_event.cpp b/src/core/hle/kernel/k_writable_event.cpp
deleted file mode 100644
index ff88c5acd..000000000
--- a/src/core/hle/kernel/k_writable_event.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
1// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#include "core/hle/kernel/k_event.h"
5#include "core/hle/kernel/k_readable_event.h"
6#include "core/hle/kernel/k_writable_event.h"
7
8namespace Kernel {
9
10KWritableEvent::KWritableEvent(KernelCore& kernel_)
11 : KAutoObjectWithSlabHeapAndContainer{kernel_} {}
12
13KWritableEvent::~KWritableEvent() = default;
14
15void KWritableEvent::Initialize(KEvent* parent_event_, std::string&& name_) {
16 parent = parent_event_;
17 name = std::move(name_);
18 parent->GetReadableEvent().Open();
19}
20
21Result KWritableEvent::Signal() {
22 return parent->GetReadableEvent().Signal();
23}
24
25Result KWritableEvent::Clear() {
26 return parent->GetReadableEvent().Clear();
27}
28
29void KWritableEvent::Destroy() {
30 // Close our references.
31 parent->GetReadableEvent().Close();
32 parent->Close();
33}
34
35} // namespace Kernel
diff --git a/src/core/hle/kernel/k_writable_event.h b/src/core/hle/kernel/k_writable_event.h
deleted file mode 100644
index 3fd0c7d0a..000000000
--- a/src/core/hle/kernel/k_writable_event.h
+++ /dev/null
@@ -1,39 +0,0 @@
1// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include "core/hle/kernel/k_auto_object.h"
7#include "core/hle/kernel/slab_helpers.h"
8#include "core/hle/result.h"
9
10namespace Kernel {
11
12class KernelCore;
13class KEvent;
14
15class KWritableEvent final
16 : public KAutoObjectWithSlabHeapAndContainer<KWritableEvent, KAutoObjectWithList> {
17 KERNEL_AUTOOBJECT_TRAITS(KWritableEvent, KAutoObject);
18
19public:
20 explicit KWritableEvent(KernelCore& kernel_);
21 ~KWritableEvent() override;
22
23 void Destroy() override;
24
25 static void PostDestroy([[maybe_unused]] uintptr_t arg) {}
26
27 void Initialize(KEvent* parent_, std::string&& name_);
28 Result Signal();
29 Result Clear();
30
31 KEvent* GetParent() const {
32 return parent;
33 }
34
35private:
36 KEvent* parent{};
37};
38
39} // namespace Kernel
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index bcf016a97..0847cbcbf 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -52,7 +52,6 @@ class KThread;
52class KThreadLocalPage; 52class KThreadLocalPage;
53class KTransferMemory; 53class KTransferMemory;
54class KWorkerTaskManager; 54class KWorkerTaskManager;
55class KWritableEvent;
56class KCodeMemory; 55class KCodeMemory;
57class PhysicalCore; 56class PhysicalCore;
58class ServiceThread; 57class ServiceThread;
@@ -345,8 +344,6 @@ public:
345 return slab_heap_container->thread; 344 return slab_heap_container->thread;
346 } else if constexpr (std::is_same_v<T, KTransferMemory>) { 345 } else if constexpr (std::is_same_v<T, KTransferMemory>) {
347 return slab_heap_container->transfer_memory; 346 return slab_heap_container->transfer_memory;
348 } else if constexpr (std::is_same_v<T, KWritableEvent>) {
349 return slab_heap_container->writeable_event;
350 } else if constexpr (std::is_same_v<T, KCodeMemory>) { 347 } else if constexpr (std::is_same_v<T, KCodeMemory>) {
351 return slab_heap_container->code_memory; 348 return slab_heap_container->code_memory;
352 } else if constexpr (std::is_same_v<T, KPageBuffer>) { 349 } else if constexpr (std::is_same_v<T, KPageBuffer>) {
@@ -412,7 +409,6 @@ private:
412 KSlabHeap<KSharedMemoryInfo> shared_memory_info; 409 KSlabHeap<KSharedMemoryInfo> shared_memory_info;
413 KSlabHeap<KThread> thread; 410 KSlabHeap<KThread> thread;
414 KSlabHeap<KTransferMemory> transfer_memory; 411 KSlabHeap<KTransferMemory> transfer_memory;
415 KSlabHeap<KWritableEvent> writeable_event;
416 KSlabHeap<KCodeMemory> code_memory; 412 KSlabHeap<KCodeMemory> code_memory;
417 KSlabHeap<KPageBuffer> page_buffer; 413 KSlabHeap<KPageBuffer> page_buffer;
418 KSlabHeap<KThreadLocalPage> thread_local_page; 414 KSlabHeap<KThreadLocalPage> thread_local_page;
diff --git a/src/core/hle/kernel/svc.cpp b/src/core/hle/kernel/svc.cpp
index 510a9b3e3..1d145ea91 100644
--- a/src/core/hle/kernel/svc.cpp
+++ b/src/core/hle/kernel/svc.cpp
@@ -35,7 +35,6 @@
35#include "core/hle/kernel/k_thread.h" 35#include "core/hle/kernel/k_thread.h"
36#include "core/hle/kernel/k_thread_queue.h" 36#include "core/hle/kernel/k_thread_queue.h"
37#include "core/hle/kernel/k_transfer_memory.h" 37#include "core/hle/kernel/k_transfer_memory.h"
38#include "core/hle/kernel/k_writable_event.h"
39#include "core/hle/kernel/kernel.h" 38#include "core/hle/kernel/kernel.h"
40#include "core/hle/kernel/physical_core.h" 39#include "core/hle/kernel/physical_core.h"
41#include "core/hle/kernel/svc.h" 40#include "core/hle/kernel/svc.h"
@@ -2445,11 +2444,11 @@ static Result SignalEvent(Core::System& system, Handle event_handle) {
2445 // Get the current handle table. 2444 // Get the current handle table.
2446 const KHandleTable& handle_table = system.Kernel().CurrentProcess()->GetHandleTable(); 2445 const KHandleTable& handle_table = system.Kernel().CurrentProcess()->GetHandleTable();
2447 2446
2448 // Get the writable event. 2447 // Get the event.
2449 KScopedAutoObject writable_event = handle_table.GetObject<KWritableEvent>(event_handle); 2448 KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle);
2450 R_UNLESS(writable_event.IsNotNull(), ResultInvalidHandle); 2449 R_UNLESS(event.IsNotNull(), ResultInvalidHandle);
2451 2450
2452 return writable_event->Signal(); 2451 return event->Signal();
2453} 2452}
2454 2453
2455static Result SignalEvent32(Core::System& system, Handle event_handle) { 2454static Result SignalEvent32(Core::System& system, Handle event_handle) {
@@ -2464,9 +2463,9 @@ static Result ClearEvent(Core::System& system, Handle event_handle) {
2464 2463
2465 // Try to clear the writable event. 2464 // Try to clear the writable event.
2466 { 2465 {
2467 KScopedAutoObject writable_event = handle_table.GetObject<KWritableEvent>(event_handle); 2466 KScopedAutoObject event = handle_table.GetObject<KEvent>(event_handle);
2468 if (writable_event.IsNotNull()) { 2467 if (event.IsNotNull()) {
2469 return writable_event->Clear(); 2468 return event->Clear();
2470 } 2469 }
2471 } 2470 }
2472 2471
@@ -2504,24 +2503,24 @@ static Result CreateEvent(Core::System& system, Handle* out_write, Handle* out_r
2504 R_UNLESS(event != nullptr, ResultOutOfResource); 2503 R_UNLESS(event != nullptr, ResultOutOfResource);
2505 2504
2506 // Initialize the event. 2505 // Initialize the event.
2507 event->Initialize("CreateEvent", kernel.CurrentProcess()); 2506 event->Initialize(kernel.CurrentProcess());
2508 2507
2509 // Commit the thread reservation. 2508 // Commit the thread reservation.
2510 event_reservation.Commit(); 2509 event_reservation.Commit();
2511 2510
2512 // Ensure that we clean up the event (and its only references are handle table) on function end. 2511 // Ensure that we clean up the event (and its only references are handle table) on function end.
2513 SCOPE_EXIT({ 2512 SCOPE_EXIT({
2514 event->GetWritableEvent().Close();
2515 event->GetReadableEvent().Close(); 2513 event->GetReadableEvent().Close();
2514 event->Close();
2516 }); 2515 });
2517 2516
2518 // Register the event. 2517 // Register the event.
2519 KEvent::Register(kernel, event); 2518 KEvent::Register(kernel, event);
2520 2519
2521 // Add the writable event to the handle table. 2520 // Add the event to the handle table.
2522 R_TRY(handle_table.Add(out_write, std::addressof(event->GetWritableEvent()))); 2521 R_TRY(handle_table.Add(out_write, event));
2523 2522
2524 // Add the writable event to the handle table. 2523 // Ensure that we maintaing a clean handle state on exit.
2525 auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*out_write); }); 2524 auto handle_guard = SCOPE_GUARD({ handle_table.Remove(*out_write); });
2526 2525
2527 // Add the readable event to the handle table. 2526 // Add the readable event to the handle table.
diff --git a/src/core/hle/service/acc/async_context.cpp b/src/core/hle/service/acc/async_context.cpp
index c85b2e43a..713689d8f 100644
--- a/src/core/hle/service/acc/async_context.cpp
+++ b/src/core/hle/service/acc/async_context.cpp
@@ -64,7 +64,7 @@ void IAsyncContext::GetResult(Kernel::HLERequestContext& ctx) {
64 64
65void IAsyncContext::MarkComplete() { 65void IAsyncContext::MarkComplete() {
66 is_complete.store(true); 66 is_complete.store(true);
67 completion_event->GetWritableEvent().Signal(); 67 completion_event->Signal();
68} 68}
69 69
70} // namespace Service::Account 70} // namespace Service::Account
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp
index 6fb7e198e..e55233054 100644
--- a/src/core/hle/service/am/am.cpp
+++ b/src/core/hle/service/am/am.cpp
@@ -316,7 +316,7 @@ ISelfController::ISelfController(Core::System& system_, NVFlinger::NVFlinger& nv
316 316
317 accumulated_suspended_tick_changed_event = 317 accumulated_suspended_tick_changed_event =
318 service_context.CreateEvent("ISelfController:AccumulatedSuspendedTickChangedEvent"); 318 service_context.CreateEvent("ISelfController:AccumulatedSuspendedTickChangedEvent");
319 accumulated_suspended_tick_changed_event->GetWritableEvent().Signal(); 319 accumulated_suspended_tick_changed_event->Signal();
320} 320}
321 321
322ISelfController::~ISelfController() { 322ISelfController::~ISelfController() {
@@ -378,7 +378,7 @@ void ISelfController::LeaveFatalSection(Kernel::HLERequestContext& ctx) {
378void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) { 378void ISelfController::GetLibraryAppletLaunchableEvent(Kernel::HLERequestContext& ctx) {
379 LOG_WARNING(Service_AM, "(STUBBED) called"); 379 LOG_WARNING(Service_AM, "(STUBBED) called");
380 380
381 launchable_event->GetWritableEvent().Signal(); 381 launchable_event->Signal();
382 382
383 IPC::ResponseBuilder rb{ctx, 2, 1}; 383 IPC::ResponseBuilder rb{ctx, 2, 1};
384 rb.Push(ResultSuccess); 384 rb.Push(ResultSuccess);
@@ -618,18 +618,18 @@ Kernel::KReadableEvent& AppletMessageQueue::GetOperationModeChangedEvent() {
618 618
619void AppletMessageQueue::PushMessage(AppletMessage msg) { 619void AppletMessageQueue::PushMessage(AppletMessage msg) {
620 messages.push(msg); 620 messages.push(msg);
621 on_new_message->GetWritableEvent().Signal(); 621 on_new_message->Signal();
622} 622}
623 623
624AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() { 624AppletMessageQueue::AppletMessage AppletMessageQueue::PopMessage() {
625 if (messages.empty()) { 625 if (messages.empty()) {
626 on_new_message->GetWritableEvent().Clear(); 626 on_new_message->Clear();
627 return AppletMessage::None; 627 return AppletMessage::None;
628 } 628 }
629 auto msg = messages.front(); 629 auto msg = messages.front();
630 messages.pop(); 630 messages.pop();
631 if (messages.empty()) { 631 if (messages.empty()) {
632 on_new_message->GetWritableEvent().Clear(); 632 on_new_message->Clear();
633 } 633 }
634 return msg; 634 return msg;
635} 635}
@@ -653,7 +653,7 @@ void AppletMessageQueue::FocusStateChanged() {
653void AppletMessageQueue::OperationModeChanged() { 653void AppletMessageQueue::OperationModeChanged() {
654 PushMessage(AppletMessage::OperationModeChanged); 654 PushMessage(AppletMessage::OperationModeChanged);
655 PushMessage(AppletMessage::PerformanceModeChanged); 655 PushMessage(AppletMessage::PerformanceModeChanged);
656 on_operation_mode_changed->GetWritableEvent().Signal(); 656 on_operation_mode_changed->Signal();
657} 657}
658 658
659ICommonStateGetter::ICommonStateGetter(Core::System& system_, 659ICommonStateGetter::ICommonStateGetter(Core::System& system_,
diff --git a/src/core/hle/service/am/applets/applets.cpp b/src/core/hle/service/am/applets/applets.cpp
index b5b8e4cad..7062df21c 100644
--- a/src/core/hle/service/am/applets/applets.cpp
+++ b/src/core/hle/service/am/applets/applets.cpp
@@ -65,7 +65,7 @@ std::shared_ptr<IStorage> AppletDataBroker::PopNormalDataToGame() {
65 65
66 auto out = std::move(out_channel.front()); 66 auto out = std::move(out_channel.front());
67 out_channel.pop_front(); 67 out_channel.pop_front();
68 pop_out_data_event->GetWritableEvent().Clear(); 68 pop_out_data_event->Clear();
69 return out; 69 return out;
70} 70}
71 71
@@ -84,7 +84,7 @@ std::shared_ptr<IStorage> AppletDataBroker::PopInteractiveDataToGame() {
84 84
85 auto out = std::move(out_interactive_channel.front()); 85 auto out = std::move(out_interactive_channel.front());
86 out_interactive_channel.pop_front(); 86 out_interactive_channel.pop_front();
87 pop_interactive_out_data_event->GetWritableEvent().Clear(); 87 pop_interactive_out_data_event->Clear();
88 return out; 88 return out;
89} 89}
90 90
@@ -103,7 +103,7 @@ void AppletDataBroker::PushNormalDataFromGame(std::shared_ptr<IStorage>&& storag
103 103
104void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) { 104void AppletDataBroker::PushNormalDataFromApplet(std::shared_ptr<IStorage>&& storage) {
105 out_channel.emplace_back(std::move(storage)); 105 out_channel.emplace_back(std::move(storage));
106 pop_out_data_event->GetWritableEvent().Signal(); 106 pop_out_data_event->Signal();
107} 107}
108 108
109void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) { 109void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& storage) {
@@ -112,11 +112,11 @@ void AppletDataBroker::PushInteractiveDataFromGame(std::shared_ptr<IStorage>&& s
112 112
113void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) { 113void AppletDataBroker::PushInteractiveDataFromApplet(std::shared_ptr<IStorage>&& storage) {
114 out_interactive_channel.emplace_back(std::move(storage)); 114 out_interactive_channel.emplace_back(std::move(storage));
115 pop_interactive_out_data_event->GetWritableEvent().Signal(); 115 pop_interactive_out_data_event->Signal();
116} 116}
117 117
118void AppletDataBroker::SignalStateChanged() { 118void AppletDataBroker::SignalStateChanged() {
119 state_changed_event->GetWritableEvent().Signal(); 119 state_changed_event->Signal();
120 120
121 switch (applet_mode) { 121 switch (applet_mode) {
122 case LibraryAppletMode::AllForeground: 122 case LibraryAppletMode::AllForeground:
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 6fb07c37d..60c30cd5b 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -239,7 +239,7 @@ public:
239 }; 239 };
240 RegisterHandlers(functions); 240 RegisterHandlers(functions);
241 241
242 event->GetWritableEvent().Signal(); 242 event->Signal();
243 } 243 }
244 244
245 ~IAudioDevice() override { 245 ~IAudioDevice() override {
@@ -325,7 +325,7 @@ private:
325 void QueryAudioDeviceSystemEvent(Kernel::HLERequestContext& ctx) { 325 void QueryAudioDeviceSystemEvent(Kernel::HLERequestContext& ctx) {
326 LOG_DEBUG(Service_Audio, "(STUBBED) called"); 326 LOG_DEBUG(Service_Audio, "(STUBBED) called");
327 327
328 event->GetWritableEvent().Signal(); 328 event->Signal();
329 329
330 IPC::ResponseBuilder rb{ctx, 2, 1}; 330 IPC::ResponseBuilder rb{ctx, 2, 1};
331 rb.Push(ResultSuccess); 331 rb.Push(ResultSuccess);
diff --git a/src/core/hle/service/bcat/backend/backend.cpp b/src/core/hle/service/bcat/backend/backend.cpp
index cd0b405ff..847f76987 100644
--- a/src/core/hle/service/bcat/backend/backend.cpp
+++ b/src/core/hle/service/bcat/backend/backend.cpp
@@ -82,7 +82,7 @@ void ProgressServiceBackend::FinishDownload(Result result) {
82} 82}
83 83
84void ProgressServiceBackend::SignalUpdate() { 84void ProgressServiceBackend::SignalUpdate() {
85 update_event->GetWritableEvent().Signal(); 85 update_event->Signal();
86} 86}
87 87
88Backend::Backend(DirectoryGetter getter) : dir_getter(std::move(getter)) {} 88Backend::Backend(DirectoryGetter getter) : dir_getter(std::move(getter)) {}
diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index f8972ec7a..98e4f2af7 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -16,7 +16,6 @@
16#include "core/hid/hid_core.h" 16#include "core/hid/hid_core.h"
17#include "core/hle/kernel/k_event.h" 17#include "core/hle/kernel/k_event.h"
18#include "core/hle/kernel/k_readable_event.h" 18#include "core/hle/kernel/k_readable_event.h"
19#include "core/hle/kernel/k_writable_event.h"
20#include "core/hle/service/hid/controllers/npad.h" 19#include "core/hle/service/hid/controllers/npad.h"
21#include "core/hle/service/hid/errors.h" 20#include "core/hle/service/hid/errors.h"
22#include "core/hle/service/kernel_helpers.h" 21#include "core/hle/service/kernel_helpers.h"
@@ -167,7 +166,7 @@ void Controller_NPad::InitNewlyAddedController(Core::HID::NpadIdType npad_id) {
167 const auto& battery_level = controller.device->GetBattery(); 166 const auto& battery_level = controller.device->GetBattery();
168 auto* shared_memory = controller.shared_memory; 167 auto* shared_memory = controller.shared_memory;
169 if (controller_type == Core::HID::NpadStyleIndex::None) { 168 if (controller_type == Core::HID::NpadStyleIndex::None) {
170 controller.styleset_changed_event->GetWritableEvent().Signal(); 169 controller.styleset_changed_event->Signal();
171 return; 170 return;
172 } 171 }
173 172
@@ -1033,7 +1032,7 @@ Kernel::KReadableEvent& Controller_NPad::GetStyleSetChangedEvent(Core::HID::Npad
1033 1032
1034void Controller_NPad::SignalStyleSetChangedEvent(Core::HID::NpadIdType npad_id) const { 1033void Controller_NPad::SignalStyleSetChangedEvent(Core::HID::NpadIdType npad_id) const {
1035 const auto& controller = GetControllerFromNpadIdType(npad_id); 1034 const auto& controller = GetControllerFromNpadIdType(npad_id);
1036 controller.styleset_changed_event->GetWritableEvent().Signal(); 1035 controller.styleset_changed_event->Signal();
1037} 1036}
1038 1037
1039void Controller_NPad::AddNewControllerAt(Core::HID::NpadStyleIndex controller, 1038void Controller_NPad::AddNewControllerAt(Core::HID::NpadStyleIndex controller,
diff --git a/src/core/hle/service/hid/controllers/palma.cpp b/src/core/hle/service/hid/controllers/palma.cpp
index 575d4e626..4564ea1e2 100644
--- a/src/core/hle/service/hid/controllers/palma.cpp
+++ b/src/core/hle/service/hid/controllers/palma.cpp
@@ -73,7 +73,7 @@ Result Controller_Palma::PlayPalmaActivity(const PalmaConnectionHandle& handle,
73 operation.operation = PalmaOperationType::PlayActivity; 73 operation.operation = PalmaOperationType::PlayActivity;
74 operation.result = PalmaResultSuccess; 74 operation.result = PalmaResultSuccess;
75 operation.data = {}; 75 operation.data = {};
76 operation_complete_event->GetWritableEvent().Signal(); 76 operation_complete_event->Signal();
77 return ResultSuccess; 77 return ResultSuccess;
78} 78}
79 79
@@ -93,7 +93,7 @@ Result Controller_Palma::ReadPalmaStep(const PalmaConnectionHandle& handle) {
93 operation.operation = PalmaOperationType::ReadStep; 93 operation.operation = PalmaOperationType::ReadStep;
94 operation.result = PalmaResultSuccess; 94 operation.result = PalmaResultSuccess;
95 operation.data = {}; 95 operation.data = {};
96 operation_complete_event->GetWritableEvent().Signal(); 96 operation_complete_event->Signal();
97 return ResultSuccess; 97 return ResultSuccess;
98} 98}
99 99
@@ -122,7 +122,7 @@ Result Controller_Palma::ReadPalmaUniqueCode(const PalmaConnectionHandle& handle
122 operation.operation = PalmaOperationType::ReadUniqueCode; 122 operation.operation = PalmaOperationType::ReadUniqueCode;
123 operation.result = PalmaResultSuccess; 123 operation.result = PalmaResultSuccess;
124 operation.data = {}; 124 operation.data = {};
125 operation_complete_event->GetWritableEvent().Signal(); 125 operation_complete_event->Signal();
126 return ResultSuccess; 126 return ResultSuccess;
127} 127}
128 128
@@ -133,7 +133,7 @@ Result Controller_Palma::SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle&
133 operation.operation = PalmaOperationType::SetUniqueCodeInvalid; 133 operation.operation = PalmaOperationType::SetUniqueCodeInvalid;
134 operation.result = PalmaResultSuccess; 134 operation.result = PalmaResultSuccess;
135 operation.data = {}; 135 operation.data = {};
136 operation_complete_event->GetWritableEvent().Signal(); 136 operation_complete_event->Signal();
137 return ResultSuccess; 137 return ResultSuccess;
138} 138}
139 139
@@ -147,7 +147,7 @@ Result Controller_Palma::WritePalmaRgbLedPatternEntry(const PalmaConnectionHandl
147 operation.operation = PalmaOperationType::WriteRgbLedPatternEntry; 147 operation.operation = PalmaOperationType::WriteRgbLedPatternEntry;
148 operation.result = PalmaResultSuccess; 148 operation.result = PalmaResultSuccess;
149 operation.data = {}; 149 operation.data = {};
150 operation_complete_event->GetWritableEvent().Signal(); 150 operation_complete_event->Signal();
151 return ResultSuccess; 151 return ResultSuccess;
152} 152}
153 153
@@ -159,7 +159,7 @@ Result Controller_Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle
159 operation.operation = PalmaOperationType::WriteWaveEntry; 159 operation.operation = PalmaOperationType::WriteWaveEntry;
160 operation.result = PalmaResultSuccess; 160 operation.result = PalmaResultSuccess;
161 operation.data = {}; 161 operation.data = {};
162 operation_complete_event->GetWritableEvent().Signal(); 162 operation_complete_event->Signal();
163 return ResultSuccess; 163 return ResultSuccess;
164} 164}
165 165
@@ -172,7 +172,7 @@ Result Controller_Palma::SetPalmaDataBaseIdentificationVersion(const PalmaConnec
172 operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion; 172 operation.operation = PalmaOperationType::ReadDataBaseIdentificationVersion;
173 operation.result = PalmaResultSuccess; 173 operation.result = PalmaResultSuccess;
174 operation.data[0] = {}; 174 operation.data[0] = {};
175 operation_complete_event->GetWritableEvent().Signal(); 175 operation_complete_event->Signal();
176 return ResultSuccess; 176 return ResultSuccess;
177} 177}
178 178
@@ -185,7 +185,7 @@ Result Controller_Palma::GetPalmaDataBaseIdentificationVersion(
185 operation.result = PalmaResultSuccess; 185 operation.result = PalmaResultSuccess;
186 operation.data = {}; 186 operation.data = {};
187 operation.data[0] = static_cast<u8>(database_id_version); 187 operation.data[0] = static_cast<u8>(database_id_version);
188 operation_complete_event->GetWritableEvent().Signal(); 188 operation_complete_event->Signal();
189 return ResultSuccess; 189 return ResultSuccess;
190} 190}
191 191
diff --git a/src/core/hle/service/hid/hidbus/ringcon.cpp b/src/core/hle/service/hid/hidbus/ringcon.cpp
index ad223d649..57f1a2a26 100644
--- a/src/core/hle/service/hid/hidbus/ringcon.cpp
+++ b/src/core/hle/service/hid/hidbus/ringcon.cpp
@@ -131,12 +131,12 @@ bool RingController::SetCommand(const std::vector<u8>& data) {
131 case RingConCommands::ReadRepCount: 131 case RingConCommands::ReadRepCount:
132 case RingConCommands::ReadTotalPushCount: 132 case RingConCommands::ReadTotalPushCount:
133 ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); 133 ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes");
134 send_command_async_event->GetWritableEvent().Signal(); 134 send_command_async_event->Signal();
135 return true; 135 return true;
136 case RingConCommands::ResetRepCount: 136 case RingConCommands::ResetRepCount:
137 ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes"); 137 ASSERT_MSG(data.size() == 0x4, "data.size is not 0x4 bytes");
138 total_rep_count = 0; 138 total_rep_count = 0;
139 send_command_async_event->GetWritableEvent().Signal(); 139 send_command_async_event->Signal();
140 return true; 140 return true;
141 case RingConCommands::SaveCalData: { 141 case RingConCommands::SaveCalData: {
142 ASSERT_MSG(data.size() == 0x14, "data.size is not 0x14 bytes"); 142 ASSERT_MSG(data.size() == 0x14, "data.size is not 0x14 bytes");
@@ -144,14 +144,14 @@ bool RingController::SetCommand(const std::vector<u8>& data) {
144 SaveCalData save_info{}; 144 SaveCalData save_info{};
145 std::memcpy(&save_info, data.data(), sizeof(SaveCalData)); 145 std::memcpy(&save_info, data.data(), sizeof(SaveCalData));
146 user_calibration = save_info.calibration; 146 user_calibration = save_info.calibration;
147 send_command_async_event->GetWritableEvent().Signal(); 147 send_command_async_event->Signal();
148 return true; 148 return true;
149 } 149 }
150 default: 150 default:
151 LOG_ERROR(Service_HID, "Command not implemented {}", command); 151 LOG_ERROR(Service_HID, "Command not implemented {}", command);
152 command = RingConCommands::Error; 152 command = RingConCommands::Error;
153 // Signal a reply to avoid softlocking the game 153 // Signal a reply to avoid softlocking the game
154 send_command_async_event->GetWritableEvent().Signal(); 154 send_command_async_event->Signal();
155 return false; 155 return false;
156 } 156 }
157} 157}
diff --git a/src/core/hle/service/kernel_helpers.cpp b/src/core/hle/service/kernel_helpers.cpp
index 3e317367b..af133af93 100644
--- a/src/core/hle/service/kernel_helpers.cpp
+++ b/src/core/hle/service/kernel_helpers.cpp
@@ -9,7 +9,6 @@
9#include "core/hle/kernel/k_readable_event.h" 9#include "core/hle/kernel/k_readable_event.h"
10#include "core/hle/kernel/k_resource_limit.h" 10#include "core/hle/kernel/k_resource_limit.h"
11#include "core/hle/kernel/k_scoped_resource_reservation.h" 11#include "core/hle/kernel/k_scoped_resource_reservation.h"
12#include "core/hle/kernel/k_writable_event.h"
13#include "core/hle/service/kernel_helpers.h" 12#include "core/hle/service/kernel_helpers.h"
14 13
15namespace Service::KernelHelpers { 14namespace Service::KernelHelpers {
@@ -46,7 +45,7 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) {
46 } 45 }
47 46
48 // Initialize the event. 47 // Initialize the event.
49 event->Initialize(std::move(name), process); 48 event->Initialize(process);
50 49
51 // Commit the thread reservation. 50 // Commit the thread reservation.
52 event_reservation.Commit(); 51 event_reservation.Commit();
@@ -59,7 +58,7 @@ Kernel::KEvent* ServiceContext::CreateEvent(std::string&& name) {
59 58
60void ServiceContext::CloseEvent(Kernel::KEvent* event) { 59void ServiceContext::CloseEvent(Kernel::KEvent* event) {
61 event->GetReadableEvent().Close(); 60 event->GetReadableEvent().Close();
62 event->GetWritableEvent().Close(); 61 event->Close();
63} 62}
64 63
65} // namespace Service::KernelHelpers 64} // namespace Service::KernelHelpers
diff --git a/src/core/hle/service/ldn/ldn.cpp b/src/core/hle/service/ldn/ldn.cpp
index ea3e7e55a..6df563136 100644
--- a/src/core/hle/service/ldn/ldn.cpp
+++ b/src/core/hle/service/ldn/ldn.cpp
@@ -165,7 +165,7 @@ public:
165 } 165 }
166 166
167 void OnEventFired() { 167 void OnEventFired() {
168 state_change_event->GetWritableEvent().Signal(); 168 state_change_event->Signal();
169 } 169 }
170 170
171 void GetState(Kernel::HLERequestContext& ctx) { 171 void GetState(Kernel::HLERequestContext& ctx) {
diff --git a/src/core/hle/service/nfp/nfp_device.cpp b/src/core/hle/service/nfp/nfp_device.cpp
index ec895ac01..76f8a267a 100644
--- a/src/core/hle/service/nfp/nfp_device.cpp
+++ b/src/core/hle/service/nfp/nfp_device.cpp
@@ -58,7 +58,7 @@ NfpDevice::~NfpDevice() {
58void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) { 58void NfpDevice::NpadUpdate(Core::HID::ControllerTriggerType type) {
59 if (type == Core::HID::ControllerTriggerType::Connected || 59 if (type == Core::HID::ControllerTriggerType::Connected ||
60 type == Core::HID::ControllerTriggerType::Disconnected) { 60 type == Core::HID::ControllerTriggerType::Disconnected) {
61 availability_change_event->GetWritableEvent().Signal(); 61 availability_change_event->Signal();
62 return; 62 return;
63 } 63 }
64 64
@@ -100,7 +100,7 @@ bool NfpDevice::LoadAmiibo(std::span<const u8> data) {
100 100
101 device_state = DeviceState::TagFound; 101 device_state = DeviceState::TagFound;
102 deactivate_event->GetReadableEvent().Clear(); 102 deactivate_event->GetReadableEvent().Clear();
103 activate_event->GetWritableEvent().Signal(); 103 activate_event->Signal();
104 return true; 104 return true;
105} 105}
106 106
@@ -115,7 +115,7 @@ void NfpDevice::CloseAmiibo() {
115 encrypted_tag_data = {}; 115 encrypted_tag_data = {};
116 tag_data = {}; 116 tag_data = {};
117 activate_event->GetReadableEvent().Clear(); 117 activate_event->GetReadableEvent().Clear();
118 deactivate_event->GetWritableEvent().Signal(); 118 deactivate_event->Signal();
119} 119}
120 120
121Kernel::KReadableEvent& NfpDevice::GetActivateEvent() const { 121Kernel::KReadableEvent& NfpDevice::GetActivateEvent() const {
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp
index b2bb7426d..5a8a91e0b 100644
--- a/src/core/hle/service/nim/nim.cpp
+++ b/src/core/hle/service/nim/nim.cpp
@@ -328,7 +328,7 @@ private:
328 void StartTask(Kernel::HLERequestContext& ctx) { 328 void StartTask(Kernel::HLERequestContext& ctx) {
329 // No need to connect to the internet, just finish the task straight away. 329 // No need to connect to the internet, just finish the task straight away.
330 LOG_DEBUG(Service_NIM, "called"); 330 LOG_DEBUG(Service_NIM, "called");
331 finished_event->GetWritableEvent().Signal(); 331 finished_event->Signal();
332 IPC::ResponseBuilder rb{ctx, 2}; 332 IPC::ResponseBuilder rb{ctx, 2};
333 rb.Push(ResultSuccess); 333 rb.Push(ResultSuccess);
334 } 334 }
@@ -350,7 +350,7 @@ private:
350 350
351 void Cancel(Kernel::HLERequestContext& ctx) { 351 void Cancel(Kernel::HLERequestContext& ctx) {
352 LOG_DEBUG(Service_NIM, "called"); 352 LOG_DEBUG(Service_NIM, "called");
353 finished_event->GetWritableEvent().Clear(); 353 finished_event->Clear();
354 IPC::ResponseBuilder rb{ctx, 2}; 354 IPC::ResponseBuilder rb{ctx, 2};
355 rb.Push(ResultSuccess); 355 rb.Push(ResultSuccess);
356 } 356 }
diff --git a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp
index 5bee4a3d3..eee11fab8 100644
--- a/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp
+++ b/src/core/hle/service/nvdrv/devices/nvhost_ctrl.cpp
@@ -12,7 +12,6 @@
12#include "common/scope_exit.h" 12#include "common/scope_exit.h"
13#include "core/core.h" 13#include "core/core.h"
14#include "core/hle/kernel/k_event.h" 14#include "core/hle/kernel/k_event.h"
15#include "core/hle/kernel/k_writable_event.h"
16#include "core/hle/service/nvdrv/core/container.h" 15#include "core/hle/service/nvdrv/core/container.h"
17#include "core/hle/service/nvdrv/core/syncpoint_manager.h" 16#include "core/hle/service/nvdrv/core/syncpoint_manager.h"
18#include "core/hle/service/nvdrv/devices/nvhost_ctrl.h" 17#include "core/hle/service/nvdrv/devices/nvhost_ctrl.h"
@@ -206,7 +205,7 @@ NvResult nvhost_ctrl::IocCtrlEventWait(const std::vector<u8>& input, std::vector
206 auto& event_ = events[slot]; 205 auto& event_ = events[slot];
207 if (event_.status.exchange(EventState::Signalling, std::memory_order_acq_rel) == 206 if (event_.status.exchange(EventState::Signalling, std::memory_order_acq_rel) ==
208 EventState::Waiting) { 207 EventState::Waiting) {
209 event_.kevent->GetWritableEvent().Signal(); 208 event_.kevent->Signal();
210 } 209 }
211 event_.status.store(EventState::Signalled, std::memory_order_release); 210 event_.status.store(EventState::Signalled, std::memory_order_release);
212 }); 211 });
@@ -306,7 +305,7 @@ NvResult nvhost_ctrl::IocCtrlClearEventWait(const std::vector<u8>& input, std::v
306 } 305 }
307 event.fails++; 306 event.fails++;
308 event.status.store(EventState::Cancelled, std::memory_order_release); 307 event.status.store(EventState::Cancelled, std::memory_order_release);
309 event.kevent->GetWritableEvent().Clear(); 308 event.kevent->Clear();
310 309
311 return NvResult::Success; 310 return NvResult::Success;
312} 311}
diff --git a/src/core/hle/service/nvdrv/nvdrv.cpp b/src/core/hle/service/nvdrv/nvdrv.cpp
index 5e7b7468f..9d9924395 100644
--- a/src/core/hle/service/nvdrv/nvdrv.cpp
+++ b/src/core/hle/service/nvdrv/nvdrv.cpp
@@ -8,7 +8,6 @@
8#include "core/core.h" 8#include "core/core.h"
9#include "core/hle/ipc_helpers.h" 9#include "core/hle/ipc_helpers.h"
10#include "core/hle/kernel/k_event.h" 10#include "core/hle/kernel/k_event.h"
11#include "core/hle/kernel/k_writable_event.h"
12#include "core/hle/service/nvdrv/core/container.h" 11#include "core/hle/service/nvdrv/core/container.h"
13#include "core/hle/service/nvdrv/devices/nvdevice.h" 12#include "core/hle/service/nvdrv/devices/nvdevice.h"
14#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h" 13#include "core/hle/service/nvdrv/devices/nvdisp_disp0.h"
diff --git a/src/core/hle/service/nvdrv/nvdrv_interface.h b/src/core/hle/service/nvdrv/nvdrv_interface.h
index cd58a4f35..5ac06ee30 100644
--- a/src/core/hle/service/nvdrv/nvdrv_interface.h
+++ b/src/core/hle/service/nvdrv/nvdrv_interface.h
@@ -7,10 +7,6 @@
7#include "core/hle/service/nvdrv/nvdrv.h" 7#include "core/hle/service/nvdrv/nvdrv.h"
8#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
9 9
10namespace Kernel {
11class KWritableEvent;
12}
13
14namespace Service::Nvidia { 10namespace Service::Nvidia {
15 11
16class NVDRV final : public ServiceFramework<NVDRV> { 12class NVDRV final : public ServiceFramework<NVDRV> {
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
index d4ab23a10..77ddbb6ef 100644
--- a/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
+++ b/src/core/hle/service/nvflinger/buffer_queue_producer.cpp
@@ -11,7 +11,6 @@
11#include "core/hle/kernel/hle_ipc.h" 11#include "core/hle/kernel/hle_ipc.h"
12#include "core/hle/kernel/k_event.h" 12#include "core/hle/kernel/k_event.h"
13#include "core/hle/kernel/k_readable_event.h" 13#include "core/hle/kernel/k_readable_event.h"
14#include "core/hle/kernel/k_writable_event.h"
15#include "core/hle/kernel/kernel.h" 14#include "core/hle/kernel/kernel.h"
16#include "core/hle/service/kernel_helpers.h" 15#include "core/hle/service/kernel_helpers.h"
17#include "core/hle/service/nvdrv/core/nvmap.h" 16#include "core/hle/service/nvdrv/core/nvmap.h"
@@ -110,7 +109,7 @@ Status BufferQueueProducer::SetBufferCount(s32 buffer_count) {
110 109
111 core->override_max_buffer_count = buffer_count; 110 core->override_max_buffer_count = buffer_count;
112 core->SignalDequeueCondition(); 111 core->SignalDequeueCondition();
113 buffer_wait_event->GetWritableEvent().Signal(); 112 buffer_wait_event->Signal();
114 listener = core->consumer_listener; 113 listener = core->consumer_listener;
115 } 114 }
116 115
@@ -623,7 +622,7 @@ void BufferQueueProducer::CancelBuffer(s32 slot, const Fence& fence) {
623 slots[slot].fence = fence; 622 slots[slot].fence = fence;
624 623
625 core->SignalDequeueCondition(); 624 core->SignalDequeueCondition();
626 buffer_wait_event->GetWritableEvent().Signal(); 625 buffer_wait_event->Signal();
627} 626}
628 627
629Status BufferQueueProducer::Query(NativeWindow what, s32* out_value) { 628Status BufferQueueProducer::Query(NativeWindow what, s32* out_value) {
@@ -753,7 +752,7 @@ Status BufferQueueProducer::Disconnect(NativeWindowApi api) {
753 core->connected_producer_listener = nullptr; 752 core->connected_producer_listener = nullptr;
754 core->connected_api = NativeWindowApi::NoConnectedApi; 753 core->connected_api = NativeWindowApi::NoConnectedApi;
755 core->SignalDequeueCondition(); 754 core->SignalDequeueCondition();
756 buffer_wait_event->GetWritableEvent().Signal(); 755 buffer_wait_event->Signal();
757 listener = core->consumer_listener; 756 listener = core->consumer_listener;
758 } else { 757 } else {
759 LOG_ERROR(Service_NVFlinger, "still connected to another api (cur = {} req = {})", 758 LOG_ERROR(Service_NVFlinger, "still connected to another api (cur = {} req = {})",
@@ -802,7 +801,7 @@ Status BufferQueueProducer::SetPreallocatedBuffer(s32 slot,
802 } 801 }
803 802
804 core->SignalDequeueCondition(); 803 core->SignalDequeueCondition();
805 buffer_wait_event->GetWritableEvent().Signal(); 804 buffer_wait_event->Signal();
806 805
807 return Status::NoError; 806 return Status::NoError;
808} 807}
diff --git a/src/core/hle/service/nvflinger/buffer_queue_producer.h b/src/core/hle/service/nvflinger/buffer_queue_producer.h
index 0ba03a568..7526bf8ec 100644
--- a/src/core/hle/service/nvflinger/buffer_queue_producer.h
+++ b/src/core/hle/service/nvflinger/buffer_queue_producer.h
@@ -24,7 +24,6 @@ namespace Kernel {
24class KernelCore; 24class KernelCore;
25class KEvent; 25class KEvent;
26class KReadableEvent; 26class KReadableEvent;
27class KWritableEvent;
28} // namespace Kernel 27} // namespace Kernel
29 28
30namespace Service::KernelHelpers { 29namespace Service::KernelHelpers {
diff --git a/src/core/hle/service/nvflinger/nvflinger.h b/src/core/hle/service/nvflinger/nvflinger.h
index b62615de2..99509bc5b 100644
--- a/src/core/hle/service/nvflinger/nvflinger.h
+++ b/src/core/hle/service/nvflinger/nvflinger.h
@@ -25,7 +25,6 @@ struct EventType;
25 25
26namespace Kernel { 26namespace Kernel {
27class KReadableEvent; 27class KReadableEvent;
28class KWritableEvent;
29} // namespace Kernel 28} // namespace Kernel
30 29
31namespace Service::Nvidia { 30namespace Service::Nvidia {
diff --git a/src/core/hle/service/ptm/psm.cpp b/src/core/hle/service/ptm/psm.cpp
index 2c31e9485..1ac97fe31 100644
--- a/src/core/hle/service/ptm/psm.cpp
+++ b/src/core/hle/service/ptm/psm.cpp
@@ -37,19 +37,19 @@ public:
37 37
38 void SignalChargerTypeChanged() { 38 void SignalChargerTypeChanged() {
39 if (should_signal && should_signal_charger_type) { 39 if (should_signal && should_signal_charger_type) {
40 state_change_event->GetWritableEvent().Signal(); 40 state_change_event->Signal();
41 } 41 }
42 } 42 }
43 43
44 void SignalPowerSupplyChanged() { 44 void SignalPowerSupplyChanged() {
45 if (should_signal && should_signal_power_supply) { 45 if (should_signal && should_signal_power_supply) {
46 state_change_event->GetWritableEvent().Signal(); 46 state_change_event->Signal();
47 } 47 }
48 } 48 }
49 49
50 void SignalBatteryVoltageStateChanged() { 50 void SignalBatteryVoltageStateChanged() {
51 if (should_signal && should_signal_battery_voltage) { 51 if (should_signal && should_signal_battery_voltage) {
52 state_change_event->GetWritableEvent().Signal(); 52 state_change_event->Signal();
53 } 53 }
54 } 54 }
55 55
diff --git a/src/core/hle/service/time/system_clock_context_update_callback.cpp b/src/core/hle/service/time/system_clock_context_update_callback.cpp
index a649bed3a..cafc04ee7 100644
--- a/src/core/hle/service/time/system_clock_context_update_callback.cpp
+++ b/src/core/hle/service/time/system_clock_context_update_callback.cpp
@@ -1,7 +1,7 @@
1// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later 2// SPDX-License-Identifier: GPL-2.0-or-later
3 3
4#include "core/hle/kernel/k_writable_event.h" 4#include "core/hle/kernel/k_event.h"
5#include "core/hle/service/time/errors.h" 5#include "core/hle/service/time/errors.h"
6#include "core/hle/service/time/system_clock_context_update_callback.h" 6#include "core/hle/service/time/system_clock_context_update_callback.h"
7 7
@@ -20,13 +20,13 @@ bool SystemClockContextUpdateCallback::NeedUpdate(const SystemClockContext& valu
20} 20}
21 21
22void SystemClockContextUpdateCallback::RegisterOperationEvent( 22void SystemClockContextUpdateCallback::RegisterOperationEvent(
23 std::shared_ptr<Kernel::KWritableEvent>&& writable_event) { 23 std::shared_ptr<Kernel::KEvent>&& event) {
24 operation_event_list.emplace_back(std::move(writable_event)); 24 operation_event_list.emplace_back(std::move(event));
25} 25}
26 26
27void SystemClockContextUpdateCallback::BroadcastOperationEvent() { 27void SystemClockContextUpdateCallback::BroadcastOperationEvent() {
28 for (const auto& writable_event : operation_event_list) { 28 for (const auto& event : operation_event_list) {
29 writable_event->Signal(); 29 event->Signal();
30 } 30 }
31} 31}
32 32
diff --git a/src/core/hle/service/time/system_clock_context_update_callback.h b/src/core/hle/service/time/system_clock_context_update_callback.h
index 9c6caf196..bf657acd9 100644
--- a/src/core/hle/service/time/system_clock_context_update_callback.h
+++ b/src/core/hle/service/time/system_clock_context_update_callback.h
@@ -9,7 +9,7 @@
9#include "core/hle/service/time/clock_types.h" 9#include "core/hle/service/time/clock_types.h"
10 10
11namespace Kernel { 11namespace Kernel {
12class KWritableEvent; 12class KEvent;
13} 13}
14 14
15namespace Service::Time::Clock { 15namespace Service::Time::Clock {
@@ -24,7 +24,7 @@ public:
24 24
25 bool NeedUpdate(const SystemClockContext& value) const; 25 bool NeedUpdate(const SystemClockContext& value) const;
26 26
27 void RegisterOperationEvent(std::shared_ptr<Kernel::KWritableEvent>&& writable_event); 27 void RegisterOperationEvent(std::shared_ptr<Kernel::KEvent>&& event);
28 28
29 void BroadcastOperationEvent(); 29 void BroadcastOperationEvent();
30 30
@@ -37,7 +37,7 @@ protected:
37 37
38private: 38private:
39 bool has_context{}; 39 bool has_context{};
40 std::vector<std::shared_ptr<Kernel::KWritableEvent>> operation_event_list; 40 std::vector<std::shared_ptr<Kernel::KEvent>> operation_event_list;
41}; 41};
42 42
43} // namespace Service::Time::Clock 43} // namespace Service::Time::Clock
diff --git a/src/core/hle/service/vi/display/vi_display.cpp b/src/core/hle/service/vi/display/vi_display.cpp
index 288aafaaf..8ef74f1f0 100644
--- a/src/core/hle/service/vi/display/vi_display.cpp
+++ b/src/core/hle/service/vi/display/vi_display.cpp
@@ -10,7 +10,6 @@
10#include "core/core.h" 10#include "core/core.h"
11#include "core/hle/kernel/k_event.h" 11#include "core/hle/kernel/k_event.h"
12#include "core/hle/kernel/k_readable_event.h" 12#include "core/hle/kernel/k_readable_event.h"
13#include "core/hle/kernel/k_writable_event.h"
14#include "core/hle/service/kernel_helpers.h" 13#include "core/hle/service/kernel_helpers.h"
15#include "core/hle/service/nvdrv/core/container.h" 14#include "core/hle/service/nvdrv/core/container.h"
16#include "core/hle/service/nvflinger/buffer_item_consumer.h" 15#include "core/hle/service/nvflinger/buffer_item_consumer.h"
@@ -74,7 +73,7 @@ Kernel::KReadableEvent* Display::GetVSyncEventUnchecked() {
74} 73}
75 74
76void Display::SignalVSyncEvent() { 75void Display::SignalVSyncEvent() {
77 vsync_event->GetWritableEvent().Signal(); 76 vsync_event->Signal();
78} 77}
79 78
80void Display::CreateLayer(u64 layer_id, u32 binder_id, 79void Display::CreateLayer(u64 layer_id, u32 binder_id,