mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-27 06:48:49 +00:00
Kernel: Don't enable write-combine for the Bochs framebuffer device
While write-combine greatly improves performance on bare metal, QEMU appears to perform significantly worse when enabling it.
This commit is contained in:
parent
c8aae1ac52
commit
413bc9976c
Notes:
sideshowbarker
2024-07-17 18:36:39 +09:00
Author: https://github.com/tomuta
Commit: 413bc9976c
Pull-request: https://github.com/SerenityOS/serenity/pull/12616
3 changed files with 9 additions and 2 deletions
|
@ -127,6 +127,8 @@ UNMAP_AFTER_INIT void BochsGraphicsAdapter::initialize_framebuffer_devices()
|
||||||
{
|
{
|
||||||
// FIXME: Find a better way to determine default resolution...
|
// FIXME: Find a better way to determine default resolution...
|
||||||
m_framebuffer_device = FramebufferDevice::create(*this, PhysicalAddress(PCI::get_BAR0(pci_address()) & 0xfffffff0), 1024, 768, 1024 * sizeof(u32));
|
m_framebuffer_device = FramebufferDevice::create(*this, PhysicalAddress(PCI::get_BAR0(pci_address()) & 0xfffffff0), 1024, 768, 1024 * sizeof(u32));
|
||||||
|
// While write-combine helps greatly on actual hardware, it greatly reduces performance in QEMU
|
||||||
|
m_framebuffer_device->enable_write_combine(false);
|
||||||
// FIXME: Would be nice to be able to return a ErrorOr<void> here.
|
// FIXME: Would be nice to be able to return a ErrorOr<void> here.
|
||||||
VERIFY(!m_framebuffer_device->try_to_initialize().is_error());
|
VERIFY(!m_framebuffer_device->try_to_initialize().is_error());
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,8 +59,10 @@ ErrorOr<Memory::Region*> FramebufferDevice::mmap(Process& process, OpenFileDescr
|
||||||
"Framebuffer",
|
"Framebuffer",
|
||||||
prot,
|
prot,
|
||||||
shared));
|
shared));
|
||||||
if (auto result = m_userspace_framebuffer_region->set_write_combine(true); result.is_error())
|
if (m_write_combine) {
|
||||||
dbgln("FramebufferDevice: Failed to enable Write-Combine on Framebuffer: {}", result.error());
|
if (auto result = m_userspace_framebuffer_region->set_write_combine(true); result.is_error())
|
||||||
|
dbgln("FramebufferDevice: Failed to enable Write-Combine on Framebuffer: {}", result.error());
|
||||||
|
}
|
||||||
return m_userspace_framebuffer_region;
|
return m_userspace_framebuffer_region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,8 @@ public:
|
||||||
|
|
||||||
virtual ErrorOr<ByteBuffer> get_edid(size_t head) const override;
|
virtual ErrorOr<ByteBuffer> get_edid(size_t head) const override;
|
||||||
|
|
||||||
|
void enable_write_combine(bool write_combine) { m_write_combine = write_combine; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual ErrorOr<void> set_head_resolution(size_t head, size_t width, size_t height, size_t pitch) override;
|
virtual ErrorOr<void> set_head_resolution(size_t head, size_t width, size_t height, size_t pitch) override;
|
||||||
virtual ErrorOr<void> set_head_buffer(size_t head, bool second_buffer) override;
|
virtual ErrorOr<void> set_head_buffer(size_t head, bool second_buffer) override;
|
||||||
|
@ -64,6 +66,7 @@ private:
|
||||||
OwnPtr<Memory::Region> m_swapped_framebuffer_region;
|
OwnPtr<Memory::Region> m_swapped_framebuffer_region;
|
||||||
|
|
||||||
bool m_graphical_writes_enabled { true };
|
bool m_graphical_writes_enabled { true };
|
||||||
|
bool m_write_combine { true };
|
||||||
|
|
||||||
RefPtr<Memory::AnonymousVMObject> m_userspace_real_framebuffer_vmobject;
|
RefPtr<Memory::AnonymousVMObject> m_userspace_real_framebuffer_vmobject;
|
||||||
Memory::Region* m_userspace_framebuffer_region { nullptr };
|
Memory::Region* m_userspace_framebuffer_region { nullptr };
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue