1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-09-15 22:36:17 +00:00
Commit graph

8566 commits

Author SHA1 Message Date
Pankaj Raghav
4a8a3df975 Kernel: Fix index calculation in NVMeQueue submit_sync_sqe function
There was a bug while calculating the next index in submit_sync_sqe
function. Use the NVMeQueue's class variable m_qdepth instead of the
hardcoded IO_QUEUE_SIZE.
2022-01-25 20:06:19 +02:00
Idan Horowitz
67ce9e28a5 AK: Standardize the behaviour of GenericLexer::consume_until overloads
Before this commit all consume_until overloads aside from the Predicate
one would consume (and ignore) the stop char/string, while the
Predicate overload would not, in order to keep behaviour consistent,
the other overloads no longer consume the stop char/string as well.
2022-01-25 13:41:09 +03:30
Idan Horowitz
8dfd124718 Kernel: Replace String with NonnullOwnPtr<KString> in sys$getkeymap 2022-01-25 08:06:02 +01:00
Sam Atkins
45cf40653a Everywhere: Convert ByteBuffer factory methods from Optional -> ErrorOr
Apologies for the enormous commit, but I don't see a way to split this
up nicely. In the vast majority of cases it's a simple change. A few
extra places can use TRY instead of manual error checking though. :^)
2022-01-24 22:36:09 +01:00
Andreas Kling
e04e52186d Kernel: Don't send crash signal to process itself when it has no handler
If there's nobody listening for the crash signal, fall back to the
normal crash path where we get some debug output about what happened.

Thanks to Idan for suggesting the fix.
2022-01-24 17:19:41 +01:00
Idan Horowitz
16d69376d8 Kernel: Include slabheaps in kmalloc statistics 2022-01-24 14:09:55 +02:00
Idan Horowitz
f39e9b19c6 Kernel: Make DiskCache::ensure OOM-fallible using ErrorOr 2022-01-24 14:09:55 +02:00
Daniel Bertalan
5576e9c4c5 Kernel+Toolchain: Use .init_array section for global constructors
Before this change, our dynamic linker's global constructor handler
relied on the GNU linker implicitly including the content of `.ctors`
section inside `.init_array`. The mold linker does not do this, so
global constructors would fail to be called in the mold-built userland.

There is no point in sticking to `.ctors`, as most other systems already
use the superior `.init_array` scheme. This commit changes the kernel
linker script to not discard this new section, and enables it by default
in our toolchain.
2022-01-24 10:41:47 +00:00
Jesse Buhagiar
5b7682b352 Prekernel: Handle synchronous EL1 exceptions in C++ on aarch64
We now have a mechanism to save the current CPU context to the stack,
and then pass that to the C++ common exception handler.
2022-01-24 06:57:59 +00:00
Jesse Buhagiar
547322fb95 Prekernel: Install EL1 vector table at boot on aarch64
We now have a function to install a (currently default) vector
table, meaning that any exceptions (or interrupts for that matter)
will be caught by the processor and routed to one of the vectors
inside the table.
2022-01-24 06:57:59 +00:00
Jesse Buhagiar
28e36a70d6 Prekernel: Implement print_hex UART function on aarch64
This allows us to print a hex number to the serial
terminal.
2022-01-24 06:57:59 +00:00
Tom
03c45b1865 Kernel: Add ioctl to get the EDID from a framebuffer 2022-01-23 22:45:21 +00:00
Liav A
fc2c2c8a6d Kernel/Storage: Remove NVMeQueue DMA buffer create method
Instead, try to allocate the DMA buffer before trying to construct the
NVMeQueue. This allows us to fail early if we can't allocate the DMA
buffer before allocating and creating the heavier NVMeQueue object.
2022-01-23 20:56:28 +00:00
Liav A
0778043d73 Kernel: Use generic string when allocating DMA buffer to NVMeQueue
We don't necessarily create a DMA buffer just for "Admin CQ queue", so
don't hardcode it when allocating such buffer.
2022-01-23 20:56:28 +00:00
Liav A
0536079ad8 Kernel/Storage: Use StringView when allocating DMA buffer in NVMeQueue 2022-01-23 20:56:28 +00:00
Liav A
e0aaac970c Kernel/Storage: Don't declare NVMeQueue constructor explicit
Also, declare it as a private method.
2022-01-23 20:56:28 +00:00
Liav A
4597e980fe Kernel/Storage: Remove duplicate private declaration in NVMeQueue class
Also, the override of handle_irq method can be private too.
2022-01-23 20:56:28 +00:00
Liav A
64adb2ef96 Kernel/Storage: Declare NVMeQueue handle_irq virtual as it should be 2022-01-23 20:56:28 +00:00
David Briggs
cf45370c47 Kernel: Use ErrorOr in BlockBased and Ext2 filesystem raw read and write
These functions used to return booleans which withheld useful
error information for callers. Internally they would suppress
and convert Error objects. We now log or propagate these errors
up the stack.
2022-01-23 14:36:01 +00:00
Marco Cutecchia
a7ce0c2297 Kernel: Add missing #include <AK/Badge.h> to MemoryManager.h
This missing header broke the aarch64 build
2022-01-23 14:31:50 +01:00
Liav A
69f054616d Kernel: Add CommandLine option to disable or enable the PC speaker
By default, we disable the PC speaker as it's quite annoying when using
the text mode console.
2022-01-23 00:40:54 +00:00
Liav A
8dbbef9b5c Kernel: Implement beep functionality in virtual consoles 2022-01-23 00:40:54 +00:00
Liav A
b1ca39411b Kernel/Devices: Introduce the Device Control Device
This device will assist userspace to manage hotplug events.
A userspace application reads a DeviceEvent entry until the return value
is zero which indicates no events that are queued and waiting for
processing.
Trying to read with a buffer smaller than sizeof(DeviceEvent) results in
EOVERFLOW.
For now, there's no ioctl mechanism for this device but in the future an
acknowledgement mechanism can be implemented via ioctl(2) interface.
2022-01-23 00:38:02 +00:00
Liav A
093a598c87 Kernel/Graphics: Send correct parameters to text console clear method
Apparently there was a wrong calculation result when we sent parameters
from TextModeConsole::clear_vga_row method - and we should stick to the
x, y mechanism of the clear method instead of doing the same calculation
which made it to happen twice actually.
2022-01-23 00:33:45 +00:00
Liav A
eb9c8f3895 Kernel/PCI: Add basic support for the VMD PCI bridge device 2022-01-23 01:12:55 +01:00
Jelle Raaijmakers
df73e8b46b Kernel: Allow program headers to align on multiples of PAGE_SIZE
These checks in `sys$execve` could trip up the system whenever you try
to execute an `.so` file. For example, double-clicking `libwasm.so` in
Terminal crashes the kernel.

This changes the program header alignment checks to reflect the same
checks in LibELF, and passes the requested alignment on to
`::try_allocate_range()`.
2022-01-23 00:11:56 +02:00
Liav A
d67c70d043 Kernel: Ensure that CommandLine is initialized before choosing PanicMode
If the kernel commandline is not initialized, just halt everything.
2022-01-21 19:34:10 +02:00
Idan Horowitz
0adee378fd Kernel: Stop using LibKeyboard's CharacterMap in HIDManagement
This was easily done, as the Kernel and Userland don't actually share
any of the APIs exposed by it, so instead the Kernel APIs were moved to
the Kernel, and the Userland APIs stayed in LibKeyboard.

This has multiple advantages:
 * The non OOM-fallible String is not longer used for storing the
   character map name in the Kernel
 * The kernel no longer has to link to the userland LibKeyboard code
 * A lot of #ifdef KERNEL cruft can be removed from LibKeyboard
2022-01-21 18:25:44 +01:00
Liav A
cecfd42916 Kernel/PCI: Verify Access is not initialized before initializing it
There's no valid case where we should try to initialize the Access
singleton multiple times, therefore just assert if it ever happens.
2022-01-21 19:09:16 +02:00
Idan Horowitz
3c1ca61e74 Kernel: Use KString instead of String in InodeWatcher::Event's path 2022-01-21 16:27:21 +01:00
Idan Horowitz
d5189b6677 Kernel: Replace {String => KString}::formatted in ACPISysFSDirectory 2022-01-21 16:27:21 +01:00
Idan Horowitz
77a81f5eed Kernel: Use KString instead of String in Ext2FSInode's lookup cache 2022-01-21 16:27:21 +01:00
Idan Horowitz
fdfdb5bd1c Kernel: Make ACPI reboot OOM-fallible 2022-01-21 16:27:21 +01:00
Idan Horowitz
c3099382b8 Kernel: Make VirtIO::Queue construction fallible 2022-01-21 16:27:21 +01:00
Idan Horowitz
17584d8a84 Kernel: Stop adopting non-heap memory into OwnPtrs in VirtIO::Queues 2022-01-21 16:27:21 +01:00
Idan Horowitz
d65347d39d Kernel: Make Memory::RingBuffer construction fallible 2022-01-21 16:27:21 +01:00
Dmitry Petrov
d61cc47055 Kernel: Add horizontal mouse scroll support 2022-01-20 10:37:52 +01:00
Liav A
c1d3b557d5 Kernel/PCI: Don't try to enumerate 255 functions on the host bridge
There can only be a limited number of functions (only 8).
Also, consider the start bus of the PCI domain when trying to enumerate
other host bridges on bus 0, device 0, functions 1-7 (function 0 is the
main host bridge).
2022-01-19 21:54:41 +02:00
Liav A
518473846a Kernel/PCI: Start enumeration in specified start bus of the PCI domain
Some devices, like the Intel Volume Management Device, might have bus
numbering restrictions (so numbers can be from 224 to 225, for example).
2022-01-19 21:54:41 +02:00
Liav A
0833ae0b36 Kernel/PCI: Don't hardcode Address domain to 0 when enumerating devices 2022-01-19 21:54:41 +02:00
Liav A
667a009cd7 Kernel/PCI: Don't cast a domain number to u16
Found by Tom (tomuta) during a debug session of these changes.
2022-01-19 21:54:41 +02:00
Idan Horowitz
3945e239e1 Kernel: Don't populate the ACPI SysFS directory with a disabled ACPI
This would cause a nullptr dereference on ACPI::Parser::the().
2022-01-18 21:00:46 +02:00
Idan Horowitz
57ba67ed2a Kernel: Create the time page region before initializing the timers
We were unconditionally trying to update it in the interrupt, which
would depend on the timer interrupt not being received too soon after
the timers are initialized (before the time page was initialized),
which was the case when using HPET timers via the ACPI tables, but not
when using the PIT when ACPI was disabled.
2022-01-18 21:00:46 +02:00
Pankaj Raghav
567b3a4810 Kernel: Add individual struct definitions for NVMeSubmission
Only a generic struct definition was present for NVMeSubmission. To
improve type safety and clarity, added an union of NVMeSubmission
structs that are applicable to the command being submitted.
2022-01-18 11:37:04 +02:00
Pankaj Raghav
ba7846647c Kernel: Fix m_ready_timeout calculation in NVMe
The CAP.TO is 0 based. Even though I don't see that mentioned in the
spec explicitly, all major OSs such as Linux, FreeBSD add 1 to the
CAP.TO while calculating the timeout.
2022-01-18 11:37:04 +02:00
Pankaj Raghav
3441eac960 Kernel: Remove delay during NVMe reset and start controller
IO::delay was added as a lazy alternative to looping with a timeout
error if the condition was not satisfied. Now that we have the
wait_for_ready function, remove the delay in the reset and start
controller function.
2022-01-18 11:37:04 +02:00
Pankaj Raghav
31c4c9724b Kernel: Add UNMAP_AFTER_INIT to NVMe member functions
NVMeController, NVMeQueue and NVMeNameSpace had functions which are not
used after init. So add them to UNMAP_AFTER_INIT section.
2022-01-18 11:37:04 +02:00
Brian Gianforcaro
4bf88bb732 Kernel: Fix typo in Socket::getsockopt tracing 2022-01-18 08:47:22 +01:00
Brian Gianforcaro
d08a1aae63 Kernel: Remove non existent friend class from Process.h
clang-tidy correctly flagged that ProcFSProcessOpenFileDescriptions
does not exist.
2022-01-17 11:17:04 +01:00
Andreas Kling
b4e864d02d Kernel: Make Process::m_list_node non-mutable
The mutable keyword was not achieving anything, so let's remove it.
2022-01-16 23:31:01 +01:00