@@ -40,10 +40,11 @@ ErrorOr<Memory::Region*> FramebufferDevice::mmap(Process& process, OpenFileDescr
40
40
if (range.size () != framebuffer_length)
41
41
return EOVERFLOW;
42
42
43
- TRY (try_to_initialize ());
44
-
45
- if (m_userspace_framebuffer_region)
46
- return m_userspace_framebuffer_region;
43
+ m_userspace_real_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_for_physical_range (m_framebuffer_address, framebuffer_length));
44
+ m_real_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_for_physical_range (m_framebuffer_address, framebuffer_length));
45
+ m_swapped_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_with_size (framebuffer_length, AllocationStrategy::AllocateNow));
46
+ m_real_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*m_real_framebuffer_vmobject, framebuffer_length, " Framebuffer" , Memory::Region::Access::ReadWrite));
47
+ m_swapped_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*m_swapped_framebuffer_vmobject, framebuffer_length, " Framebuffer Swap (Blank)" , Memory::Region::Access::ReadWrite));
47
48
48
49
RefPtr<Memory::VMObject> chosen_vmobject;
49
50
if (m_graphical_writes_enabled) {
@@ -98,26 +99,16 @@ void FramebufferDevice::activate_writes()
98
99
m_graphical_writes_enabled = true ;
99
100
}
100
101
101
- ErrorOr<void > FramebufferDevice::try_to_initialize ()
102
+ UNMAP_AFTER_INIT ErrorOr<void > FramebufferDevice::try_to_initialize ()
102
103
{
103
- if (m_initialized)
104
- return {};
105
-
104
+ // FIXME: Would be nice to be able to unify this with mmap above, but this
105
+ // function is UNMAP_AFTER_INIT for the time being.
106
106
auto framebuffer_length = TRY (buffer_length (0 ));
107
107
framebuffer_length = TRY (Memory::page_round_up (framebuffer_length));
108
-
109
- auto real_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_for_physical_range (m_framebuffer_address, framebuffer_length));
110
- auto swapped_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_with_size (framebuffer_length, AllocationStrategy::AllocateNow));
111
- auto real_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*real_framebuffer_vmobject, framebuffer_length, " Framebuffer" , Memory::Region::Access::ReadWrite));
112
- auto swapped_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*swapped_framebuffer_vmobject, framebuffer_length, " Framebuffer Swap (Blank)" , Memory::Region::Access::ReadWrite));
113
-
114
- m_real_framebuffer_vmobject = move (real_framebuffer_vmobject);
115
- m_swapped_framebuffer_vmobject = move (swapped_framebuffer_vmobject);
116
- m_real_framebuffer_region = move (real_framebuffer_region);
117
- m_swapped_framebuffer_region = move (swapped_framebuffer_region);
118
-
119
- m_initialized = true ;
120
-
108
+ m_real_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_for_physical_range (m_framebuffer_address, framebuffer_length));
109
+ m_swapped_framebuffer_vmobject = TRY (Memory::AnonymousVMObject::try_create_with_size (framebuffer_length, AllocationStrategy::AllocateNow));
110
+ m_real_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*m_real_framebuffer_vmobject, framebuffer_length, " Framebuffer" , Memory::Region::Access::ReadWrite));
111
+ m_swapped_framebuffer_region = TRY (MM.allocate_kernel_region_with_vmobject (*m_swapped_framebuffer_vmobject, framebuffer_length, " Framebuffer Swap (Blank)" , Memory::Region::Access::ReadWrite));
121
112
return {};
122
113
}
123
114
0 commit comments