1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 04:47:35 +00:00

Kernel: Make VirtIO::ConsolePort construction OOM-fallible

This commit is contained in:
Idan Horowitz 2022-01-26 22:03:48 +02:00 committed by Linus Groh
parent 94a39db31d
commit ac4583660b
2 changed files with 16 additions and 6 deletions

View file

@ -12,13 +12,20 @@ namespace Kernel::VirtIO {
unsigned ConsolePort::next_device_id = 0;
ConsolePort::ConsolePort(unsigned port, VirtIO::Console& console)
ErrorOr<NonnullRefPtr<ConsolePort>> ConsolePort::try_create(unsigned port, Console& console)
{
auto receive_buffer = TRY(Memory::RingBuffer::try_create("VirtIO::ConsolePort Receive"sv, RINGBUFFER_SIZE));
auto transmit_buffer = TRY(Memory::RingBuffer::try_create("VirtIO::ConsolePort Transmit"sv, RINGBUFFER_SIZE));
return adopt_nonnull_ref_or_enomem(new (nothrow) ConsolePort(port, console, move(receive_buffer), move(transmit_buffer)));
}
ConsolePort::ConsolePort(unsigned port, VirtIO::Console& console, NonnullOwnPtr<Memory::RingBuffer> receive_buffer, NonnullOwnPtr<Memory::RingBuffer> transmit_buffer)
: CharacterDevice(229, next_device_id++)
, m_receive_buffer(move(receive_buffer))
, m_transmit_buffer(move(transmit_buffer))
, m_console(console)
, m_port(port)
{
m_receive_buffer = Memory::RingBuffer::try_create("VirtIO::ConsolePort Receive"sv, RINGBUFFER_SIZE).release_value_but_fixme_should_propagate_errors();
m_transmit_buffer = Memory::RingBuffer::try_create("VirtIO::ConsolePort Transmit"sv, RINGBUFFER_SIZE).release_value_but_fixme_should_propagate_errors();
m_receive_queue = m_port == 0 ? 0 : m_port * 2 + 2;
m_transmit_queue = m_port == 0 ? 1 : m_port * 2 + 3;
}