mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 13:22:43 +00:00 
			
		
		
		
	Kernel: Make self-contained locking smart pointers their own classes
Until now, our kernel has reimplemented a number of AK classes to provide automatic internal locking: - RefPtr - NonnullRefPtr - WeakPtr - Weakable This patch renames the Kernel classes so that they can coexist with the original AK classes: - RefPtr => LockRefPtr - NonnullRefPtr => NonnullLockRefPtr - WeakPtr => LockWeakPtr - Weakable => LockWeakable The goal here is to eventually get rid of the Lock* classes in favor of using external locking.
This commit is contained in:
		
							parent
							
								
									e475263113
								
							
						
					
					
						commit
						11eee67b85
					
				
					 360 changed files with 1703 additions and 1672 deletions
				
			
		|  | @ -19,55 +19,55 @@ class SharedFramebufferVMObject final : public VMObject { | |||
| public: | ||||
|     class FakeWritesFramebufferVMObject final : public VMObject { | ||||
|     public: | ||||
|         static ErrorOr<NonnullRefPtr<FakeWritesFramebufferVMObject>> try_create(Badge<SharedFramebufferVMObject>, SharedFramebufferVMObject const& parent_object); | ||||
|         static ErrorOr<NonnullLockRefPtr<FakeWritesFramebufferVMObject>> try_create(Badge<SharedFramebufferVMObject>, SharedFramebufferVMObject const& parent_object); | ||||
| 
 | ||||
|     private: | ||||
|         FakeWritesFramebufferVMObject(SharedFramebufferVMObject const& parent_object, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages) | ||||
|         FakeWritesFramebufferVMObject(SharedFramebufferVMObject const& parent_object, FixedArray<LockRefPtr<PhysicalPage>>&& new_physical_pages) | ||||
|             : VMObject(move(new_physical_pages)) | ||||
|             , m_parent_object(parent_object) | ||||
|         { | ||||
|         } | ||||
|         virtual StringView class_name() const override { return "FakeWritesFramebufferVMObject"sv; } | ||||
|         virtual ErrorOr<NonnullRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
|         virtual Span<RefPtr<PhysicalPage> const> physical_pages() const override { return m_parent_object->fake_sink_framebuffer_physical_pages(); } | ||||
|         virtual Span<RefPtr<PhysicalPage>> physical_pages() override { return m_parent_object->fake_sink_framebuffer_physical_pages(); } | ||||
|         NonnullRefPtr<SharedFramebufferVMObject> m_parent_object; | ||||
|         virtual ErrorOr<NonnullLockRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
|         virtual Span<LockRefPtr<PhysicalPage> const> physical_pages() const override { return m_parent_object->fake_sink_framebuffer_physical_pages(); } | ||||
|         virtual Span<LockRefPtr<PhysicalPage>> physical_pages() override { return m_parent_object->fake_sink_framebuffer_physical_pages(); } | ||||
|         NonnullLockRefPtr<SharedFramebufferVMObject> m_parent_object; | ||||
|     }; | ||||
| 
 | ||||
|     class RealWritesFramebufferVMObject final : public VMObject { | ||||
|     public: | ||||
|         static ErrorOr<NonnullRefPtr<RealWritesFramebufferVMObject>> try_create(Badge<SharedFramebufferVMObject>, SharedFramebufferVMObject const& parent_object); | ||||
|         static ErrorOr<NonnullLockRefPtr<RealWritesFramebufferVMObject>> try_create(Badge<SharedFramebufferVMObject>, SharedFramebufferVMObject const& parent_object); | ||||
| 
 | ||||
|     private: | ||||
|         RealWritesFramebufferVMObject(SharedFramebufferVMObject const& parent_object, FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages) | ||||
|         RealWritesFramebufferVMObject(SharedFramebufferVMObject const& parent_object, FixedArray<LockRefPtr<PhysicalPage>>&& new_physical_pages) | ||||
|             : VMObject(move(new_physical_pages)) | ||||
|             , m_parent_object(parent_object) | ||||
|         { | ||||
|         } | ||||
|         virtual StringView class_name() const override { return "RealWritesFramebufferVMObject"sv; } | ||||
|         virtual ErrorOr<NonnullRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
|         virtual Span<RefPtr<PhysicalPage> const> physical_pages() const override { return m_parent_object->real_framebuffer_physical_pages(); } | ||||
|         virtual Span<RefPtr<PhysicalPage>> physical_pages() override { return m_parent_object->real_framebuffer_physical_pages(); } | ||||
|         NonnullRefPtr<SharedFramebufferVMObject> m_parent_object; | ||||
|         virtual ErrorOr<NonnullLockRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
|         virtual Span<LockRefPtr<PhysicalPage> const> physical_pages() const override { return m_parent_object->real_framebuffer_physical_pages(); } | ||||
|         virtual Span<LockRefPtr<PhysicalPage>> physical_pages() override { return m_parent_object->real_framebuffer_physical_pages(); } | ||||
|         NonnullLockRefPtr<SharedFramebufferVMObject> m_parent_object; | ||||
|     }; | ||||
| 
 | ||||
|     virtual ~SharedFramebufferVMObject() override = default; | ||||
| 
 | ||||
|     static ErrorOr<NonnullRefPtr<SharedFramebufferVMObject>> try_create_for_physical_range(PhysicalAddress paddr, size_t size); | ||||
|     static ErrorOr<NonnullRefPtr<SharedFramebufferVMObject>> try_create_at_arbitrary_physical_range(size_t size); | ||||
|     virtual ErrorOr<NonnullRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
|     static ErrorOr<NonnullLockRefPtr<SharedFramebufferVMObject>> try_create_for_physical_range(PhysicalAddress paddr, size_t size); | ||||
|     static ErrorOr<NonnullLockRefPtr<SharedFramebufferVMObject>> try_create_at_arbitrary_physical_range(size_t size); | ||||
|     virtual ErrorOr<NonnullLockRefPtr<VMObject>> try_clone() override { return Error::from_errno(ENOTIMPL); } | ||||
| 
 | ||||
|     void switch_to_fake_sink_framebuffer_writes(Badge<Kernel::DisplayConnector>); | ||||
|     void switch_to_real_framebuffer_writes(Badge<Kernel::DisplayConnector>); | ||||
| 
 | ||||
|     virtual Span<RefPtr<PhysicalPage> const> physical_pages() const override; | ||||
|     virtual Span<RefPtr<PhysicalPage>> physical_pages() override; | ||||
|     virtual Span<LockRefPtr<PhysicalPage> const> physical_pages() const override; | ||||
|     virtual Span<LockRefPtr<PhysicalPage>> physical_pages() override; | ||||
| 
 | ||||
|     Span<RefPtr<PhysicalPage>> fake_sink_framebuffer_physical_pages(); | ||||
|     Span<RefPtr<PhysicalPage> const> fake_sink_framebuffer_physical_pages() const; | ||||
|     Span<LockRefPtr<PhysicalPage>> fake_sink_framebuffer_physical_pages(); | ||||
|     Span<LockRefPtr<PhysicalPage> const> fake_sink_framebuffer_physical_pages() const; | ||||
| 
 | ||||
|     Span<RefPtr<PhysicalPage>> real_framebuffer_physical_pages(); | ||||
|     Span<RefPtr<PhysicalPage> const> real_framebuffer_physical_pages() const; | ||||
|     Span<LockRefPtr<PhysicalPage>> real_framebuffer_physical_pages(); | ||||
|     Span<LockRefPtr<PhysicalPage> const> real_framebuffer_physical_pages() const; | ||||
| 
 | ||||
|     FakeWritesFramebufferVMObject const& fake_writes_framebuffer_vmobject() const { return *m_fake_writes_framebuffer_vmobject; } | ||||
|     FakeWritesFramebufferVMObject& fake_writes_framebuffer_vmobject() { return *m_fake_writes_framebuffer_vmobject; } | ||||
|  | @ -76,16 +76,16 @@ public: | |||
|     RealWritesFramebufferVMObject& real_writes_framebuffer_vmobject() { return *m_real_writes_framebuffer_vmobject; } | ||||
| 
 | ||||
| private: | ||||
|     SharedFramebufferVMObject(FixedArray<RefPtr<PhysicalPage>>&& new_physical_pages, CommittedPhysicalPageSet, AnonymousVMObject& real_framebuffer_vmobject); | ||||
|     SharedFramebufferVMObject(FixedArray<LockRefPtr<PhysicalPage>>&& new_physical_pages, CommittedPhysicalPageSet, AnonymousVMObject& real_framebuffer_vmobject); | ||||
| 
 | ||||
|     virtual StringView class_name() const override { return "SharedFramebufferVMObject"sv; } | ||||
| 
 | ||||
|     ErrorOr<void> create_fake_writes_framebuffer_vm_object(); | ||||
|     ErrorOr<void> create_real_writes_framebuffer_vm_object(); | ||||
| 
 | ||||
|     NonnullRefPtr<AnonymousVMObject> m_real_framebuffer_vmobject; | ||||
|     RefPtr<FakeWritesFramebufferVMObject> m_fake_writes_framebuffer_vmobject; | ||||
|     RefPtr<RealWritesFramebufferVMObject> m_real_writes_framebuffer_vmobject; | ||||
|     NonnullLockRefPtr<AnonymousVMObject> m_real_framebuffer_vmobject; | ||||
|     LockRefPtr<FakeWritesFramebufferVMObject> m_fake_writes_framebuffer_vmobject; | ||||
|     LockRefPtr<RealWritesFramebufferVMObject> m_real_writes_framebuffer_vmobject; | ||||
|     bool m_writes_are_faked { false }; | ||||
|     mutable RecursiveSpinlock m_writes_state_lock { LockRank::None }; | ||||
|     CommittedPhysicalPageSet m_committed_pages; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling