1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 20:27:45 +00:00

Kernel: Use TRY() in FramebufferDevice

This commit is contained in:
Andreas Kling 2021-09-06 02:09:42 +02:00
parent 7a8061ba0c
commit 17a12c8a30

View file

@ -36,21 +36,9 @@ KResultOr<Memory::Region*> FramebufferDevice::mmap(Process& process, FileDescrip
if (range.size() != Memory::page_round_up(framebuffer_size_in_bytes())) if (range.size() != Memory::page_round_up(framebuffer_size_in_bytes()))
return EOVERFLOW; return EOVERFLOW;
auto maybe_vmobject = Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes())); m_userspace_real_framebuffer_vmobject = TRY(Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes())));
if (maybe_vmobject.is_error()) m_real_framebuffer_vmobject = TRY(Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes())));
return maybe_vmobject.error(); m_swapped_framebuffer_vmobject = TRY(Memory::AnonymousVMObject::try_create_with_size(Memory::page_round_up(framebuffer_size_in_bytes()), AllocationStrategy::AllocateNow));
m_userspace_real_framebuffer_vmobject = maybe_vmobject.release_value();
auto maybe_real_framebuffer_vmobject = Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes()));
if (maybe_real_framebuffer_vmobject.is_error())
return maybe_real_framebuffer_vmobject.error();
m_real_framebuffer_vmobject = maybe_real_framebuffer_vmobject.release_value();
auto maybe_swapped_framebuffer_vmobject = Memory::AnonymousVMObject::try_create_with_size(Memory::page_round_up(framebuffer_size_in_bytes()), AllocationStrategy::AllocateNow);
if (maybe_swapped_framebuffer_vmobject.is_error())
return maybe_swapped_framebuffer_vmobject.error();
m_swapped_framebuffer_vmobject = maybe_swapped_framebuffer_vmobject.release_value();
m_real_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_real_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer", Memory::Region::Access::ReadWrite)); m_real_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_real_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer", Memory::Region::Access::ReadWrite));
m_swapped_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_swapped_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer Swap (Blank)", Memory::Region::Access::ReadWrite)); m_swapped_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_swapped_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer Swap (Blank)", Memory::Region::Access::ReadWrite));
@ -60,17 +48,14 @@ KResultOr<Memory::Region*> FramebufferDevice::mmap(Process& process, FileDescrip
} else { } else {
chosen_vmobject = m_swapped_framebuffer_vmobject; chosen_vmobject = m_swapped_framebuffer_vmobject;
} }
auto result = process.address_space().allocate_region_with_vmobject( m_userspace_framebuffer_region = TRY(process.address_space().allocate_region_with_vmobject(
range, range,
chosen_vmobject.release_nonnull(), chosen_vmobject.release_nonnull(),
0, 0,
"Framebuffer", "Framebuffer",
prot, prot,
shared); shared));
if (!result.is_error()) { return m_userspace_framebuffer_region;
m_userspace_framebuffer_region = result.value();
}
return result;
} }
void FramebufferDevice::deactivate_writes() void FramebufferDevice::deactivate_writes()
@ -108,19 +93,10 @@ UNMAP_AFTER_INIT KResult FramebufferDevice::initialize()
{ {
// FIXME: Would be nice to be able to unify this with mmap above, but this // FIXME: Would be nice to be able to unify this with mmap above, but this
// function is UNMAP_AFTER_INIT for the time being. // function is UNMAP_AFTER_INIT for the time being.
auto maybe_real_framebuffer_vmobject = Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes())); m_real_framebuffer_vmobject = TRY(Memory::AnonymousVMObject::try_create_for_physical_range(m_framebuffer_address, Memory::page_round_up(framebuffer_size_in_bytes())));
if (maybe_real_framebuffer_vmobject.is_error()) m_swapped_framebuffer_vmobject = TRY(Memory::AnonymousVMObject::try_create_with_size(Memory::page_round_up(framebuffer_size_in_bytes()), AllocationStrategy::AllocateNow));
return maybe_real_framebuffer_vmobject.error();
m_real_framebuffer_vmobject = maybe_real_framebuffer_vmobject.release_value();
auto maybe_swapped_framebuffer_vmobject = Memory::AnonymousVMObject::try_create_with_size(Memory::page_round_up(framebuffer_size_in_bytes()), AllocationStrategy::AllocateNow);
if (maybe_swapped_framebuffer_vmobject.is_error())
return maybe_swapped_framebuffer_vmobject.error();
m_swapped_framebuffer_vmobject = maybe_swapped_framebuffer_vmobject.release_value();
m_real_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_real_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer", Memory::Region::Access::ReadWrite)); m_real_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_real_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer", Memory::Region::Access::ReadWrite));
m_swapped_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_swapped_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer Swap (Blank)", Memory::Region::Access::ReadWrite)); m_swapped_framebuffer_region = TRY(MM.allocate_kernel_region_with_vmobject(*m_swapped_framebuffer_vmobject, Memory::page_round_up(framebuffer_size_in_bytes()), "Framebuffer Swap (Blank)", Memory::Region::Access::ReadWrite));
return KSuccess; return KSuccess;
} }