Kernel: Fix deadlock when setting VirtIOGPU resolution

This commit is contained in:
Sahan Fernando 2022-02-13 17:14:26 +11:00 committed by Andreas Kling
parent f6f277debd
commit 4587e50b52
Notes: sideshowbarker 2024-07-17 18:56:51 +09:00

View file

@ -84,8 +84,6 @@ ErrorOr<void> FramebufferDevice::set_head_resolution(size_t head, size_t width,
auto& info = display_info();
SpinlockLocker locker(adapter()->operation_lock());
info.rect = {
.x = 0,
.y = 0,
@ -167,6 +165,7 @@ FramebufferDevice::~FramebufferDevice()
ErrorOr<void> FramebufferDevice::create_framebuffer()
{
SpinlockLocker locker(adapter()->operation_lock());
// First delete any existing framebuffers to free the memory first
m_framebuffer = nullptr;
m_framebuffer_sink_vmobject = nullptr;
@ -185,7 +184,6 @@ ErrorOr<void> FramebufferDevice::create_framebuffer()
}
m_framebuffer_sink_vmobject = TRY(Memory::AnonymousVMObject::try_create_with_physical_pages(pages.span()));
SpinlockLocker locker(adapter()->operation_lock());
m_current_buffer = &buffer_from_index(m_last_set_buffer_index.load());
create_buffer(m_main_buffer, 0, m_buffer_size);
create_buffer(m_back_buffer, m_buffer_size, m_buffer_size);