Robin Burchell
635eb20289
Kernel: Add the ability to debug poll/select independently of read/write
2019-05-19 14:13:49 +02:00
Andreas Kling
c7d8aa6969
IDEDiskDevice: Support reading multiple sectors at a time with DMA.
...
This is another sizable improvement to GCC compile times.
2019-05-19 04:40:30 +02:00
Andreas Kling
ed79116e94
IDEDiskDevice: Use wait_for_irq() when waiting for DMA transfers.
...
Also make sure we return any device errors to caller.
2019-05-19 03:56:06 +02:00
Andreas Kling
c818773983
IDEDiskDevice: Add support for DMA reads.
...
I've only tested this with the PIIX3 chipset QEMU emulates, but it works
pretty well here. GCC compile times are cut roughly in half :^)
2019-05-19 03:46:50 +02:00
Andreas Kling
1fd90b09f8
Kernel: Remove an unused ELFLoader member.
2019-05-19 02:03:56 +02:00
Andreas Kling
853597200e
Kernel: Remove relocation-related code since it's not used by the kernel.
...
If/when we need this in the future, we can bring it back. Right now it's
just sitting there making the ELF code look huge when it's not.
2019-05-19 01:14:32 +02:00
Andreas Kling
75866438b5
Kernel: Don't page in entire file immediately on mmap().
...
If we just don't do anything, the page fault handler will load the file
incrementally as-needed instead. :^)
2019-05-18 22:30:55 +02:00
Andreas Kling
959c8f287c
FileDescriptor: It's actually okay to seek past the end of a file. :^)
2019-05-18 21:54:31 +02:00
Andreas Kling
7900da9667
Kernel: Make sure we never put the colonel thread in the runnable list.
...
This would cause it to get scheduled unnecessarily.
2019-05-18 20:28:04 +02:00
Andreas Kling
64a4f3df69
Kernel: Add a Thread::set_thread_list() helper to keep logic in one place.
2019-05-18 20:28:04 +02:00
Andreas Kling
8c7d5abdc4
Kernel: Refactor thread scheduling a bit, breaking it into multiple lists.
...
There are now two thread lists, one for runnable threads and one for non-
runnable threads. Thread::set_state() is responsible for moving threads
between the lists.
Each thread also has a back-pointer to the list it's currently in.
2019-05-18 20:28:04 +02:00
Robin Burchell
99dd60611f
Kernel: Fix select with a 0 timeout
...
select essentially has 3 modes (which is presumably why we're finding it
so hard to get this right in a reliable way :)).
1. NULL timeout -- no timeout on blocking
2. non-NULL timeout that is not zero'd -- timeout on blocking
3. non-NULL but zero timeout -- no blocking at all (immediate poll)
For cases 1 and 2, we want to block the thread. We have a timeout set
only for case 2, though.
Case 3 should not block the thread, and does not have a timeout set.
2019-05-18 19:01:08 +02:00
Andreas Kling
d2c3749cf3
Kernel: Don't allow dump_backtrace() to call dump_backtrace().
...
That was not a very graceful looking loop to be stuck in.
2019-05-18 17:33:05 +02:00
Andreas Kling
316fb624f7
Kernel: Fail a bit more gracefully when we don't have userspace symbols.
2019-05-18 14:49:49 +02:00
Andreas Kling
a4e48dce77
Kernel: SharedMemory should implement mmap().
2019-05-18 04:17:53 +02:00
Andreas Kling
237628a7a6
Kernel: Tidy up FileDescriptor members a bit.
2019-05-18 04:14:22 +02:00
Robin Burchell
123283d840
Kernel: Fix poll() with timeout
2019-05-18 04:03:28 +02:00
Andreas Kling
b33cc7f772
Kernel: Remove some RangeAllocator debug spam.
2019-05-18 03:59:16 +02:00
Andreas Kling
cdaf8cd656
Kernel: select() was transferring the readfds into the exceptfds vector.
...
Just a mistake I spotted while reading the code. We don't actually detect
exceptional descriptor events yet.
2019-05-18 03:09:37 +02:00
Andreas Kling
14c896ec58
Kernel: Pass ELF program header locations from multiboot to kernel.
...
Patch contributed by "pd"
2019-05-18 03:08:29 +02:00
Robin Burchell
ba92c07a75
Kernel: Make sure to clear FD sets when preparing for a select
...
NULL sets can happen, and we don't want to incorrectly return FDs which
aren't in the set too.
2019-05-18 02:57:38 +02:00
Robin Burchell
df74a9222f
Kernel: Fix timeout support in select
...
The scheduler expects m_select_timeout to act as a deadline. That is, it
should contain the time that a task should wake at -- but we were
directly copying the time from userspace, which meant that it always
returned virtually immediately.
At the same time, fix CEventLoop to not rely on the broken select behavior
by subtracting the current time from the time of the nearest timer.
2019-05-18 02:57:38 +02:00
Andreas Kling
8f3022b5c1
NetworkTask: Don't crash on startup if there's no E1000 NIC present.
2019-05-18 00:22:08 +02:00
Robin Burchell
5babcac289
Build: Install most headers to Root (and libcore.a/libgui.a)
...
This makes out-of-tree linking possible. And at the same time, add a
CMakeToolchain.txt file that can be used to build arbitrary cmake-using
applications on Serenity by pointing to the CMAKE_TOOLCHAIN_FILE when
running cmake:
-DCMAKE_TOOLCHAIN_FILE=~/code/serenity/Toolchain/CMakeToolchain.txt
2019-05-17 21:59:48 +02:00
Andreas Kling
2d98f4e28f
Kernel: Make the times() syscall return something other than 0.
...
Based on the description I read, this syscall doesn't seem completely
reasonable, but let's at least return a number that is likely to change
between invocations in case somebody depends on that happening.
2019-05-17 20:19:29 +02:00
Andreas Kling
a182ea8c60
Kernel: After creating our GDT, make sure CS refers to the right descriptor.
...
This will allow us to boot from e.g GRUB which will have a different looking
GDT in effect before we start moving things around.
2019-05-17 18:52:29 +02:00
Andreas Kling
64b0b81b2a
sync.sh: Use mkdir -p for everything.
2019-05-17 18:26:54 +02:00
Andreas Kling
e8ae2c952e
Kernel: Put GDT and IDT in BSS rather than runtime-allocating them.
2019-05-17 18:25:50 +02:00
Andreas Kling
e0ff07bb57
Kernel: Make sure we load DS/ES/FS/GS/SS immediately after making the GDT.
2019-05-17 18:23:08 +02:00
Andreas Kling
a15857ea28
Kernel: Clear the X86 direction flag (DF) in the boot loader.
...
I'm not sure who is responsible for clearing this, but IIUC the C++ ABI
expects it to be clear on function entry, so just to be on the safe side..
2019-05-17 18:20:11 +02:00
Andreas Kling
45230a9544
Run QEMU with the "guest_errors" debug flag, in case we do something wrong.
2019-05-17 18:19:03 +02:00
Andreas Kling
923e587283
Kernel: GDTR and IDTR limits should be table size - 1.
2019-05-17 18:17:53 +02:00
Robin Burchell
0d77aa841a
Kernel/Process: Use auto to avoid incompatible types, causing a signedness warning in the ASSERT
2019-05-17 16:06:26 +02:00
Robin Burchell
1cefb4a3b4
Kernel/RTC: Mark some intentional fallthroughs to suppress compiler warnings
2019-05-17 16:06:26 +02:00
Robin Burchell
77dfd419e9
LibCore: Move AK/ArgsParser to LibCore/CArgsParser
...
Also rename the classes to match LibCore naming style.
This means that it's no longer incorrectly linked into LibC and Kernel.
2019-05-17 15:49:37 +02:00
Andreas Kling
cde47089d2
Kernel: Remove some unnecessary massaging of region base/size pairs.
...
These will be appropriately rounded by the allocate_range(), so call sites
can stop worrying about it.
2019-05-17 04:47:06 +02:00
Andreas Kling
6957825444
Kernel: Factor out range allocation from Process::allocate_region*().
...
These functions were doing exactly the same thing for range allocation, so
share that code in an allocate_range() helper.
Region allocation will now also fail if range allocation fails, which means
that mmap() can actually fail without falling apart. Exciting times!
2019-05-17 04:39:22 +02:00
Andreas Kling
87b54a82c7
Kernel: Let Region keep a Range internally.
2019-05-17 04:32:08 +02:00
Andreas Kling
4a6fcfbacf
Kernel: Use a RangeAllocator for kernel-only virtual space allocation too.
2019-05-17 04:02:29 +02:00
Andreas Kling
b1bb737704
Kernel: Remove Process::m_next_address.
...
This isn't needed now that we have RangeAllocator. :^)
2019-05-17 03:47:00 +02:00
Andreas Kling
45ff3a7e6a
Kernel: Make Thread::kernel_stack_base() work for kernel processes.
2019-05-17 03:43:51 +02:00
Andreas Kling
c414e65498
Kernel: Implement a simple virtual address range allocator.
...
This replaces the previous virtual address allocator which was basically
just "m_next_address += size;"
With this in place, virtual addresses can get reused, which cuts down on
the number of page tables created. When we implement ASLR some day, we'll
probably have to do page table deallocation, but for now page tables are
only deallocated once the process dies.
2019-05-17 03:40:15 +02:00
Andreas Kling
c56e3ebee1
Always dump QEMU CPU state on CPU reset.
2019-05-17 00:06:23 +02:00
Andreas Kling
4e88872c8e
Kernel: Always dump_backtrace() on process crash.
2019-05-16 19:49:48 +02:00
Andreas Kling
174639b7f0
Kernel: Symbolicate userspace backtraces using ELFLoader.
...
Stash away the ELFLoader used to load an executable in Process so we can use
it for symbolicating userspace addresses later on. This will make debugging
userspace programs a lot nicer. :^)
2019-05-16 17:18:25 +02:00
Robin Burchell
f1f3cd58b0
FileSystem: fix errno on lseek() beyond the bounds of a file
...
These are all EINVAL. Also remove bogus assert on metadata.size.
2019-05-16 16:05:08 +02:00
Andreas Kling
c5434e0cfa
Kernel: Simplify ELF loader by removing the allocator indirections.
2019-05-16 14:16:08 +02:00
Andreas Kling
2f4e7edee5
Kernel: Simplify dump_backtrace() API for clients.
...
It makes no sense that clients had to worry about whether or not KSyms
were loaded.
2019-05-16 13:41:16 +02:00
Andreas Kling
7a2da54c07
Only the kernel needs to build with default includes disabled.
2019-05-16 13:40:43 +02:00
Andreas Kling
176f683f66
Kernel: Move Inode to its own files.
2019-05-16 03:02:37 +02:00