Age | Commit message (Collapse) | Author |
|
See https://www.merriam-webster.com/words-at-play/usage-awaken-awoken-awakened.
|
|
Thanks to Simon Venken for reporting this issue.
|
|
|
|
|
|
The previous implementation, which uses a combination of fast and slow
paths around accessing an atomic integer, suffers from a bug triggered
when two or more posts are performed back-to-back, without a waiter
decrementing the semaphore value in between. The first post would be
the only one signalling a waiter.
In addition, having a fast path that expects the absence of waiters
probably doesn't make sense, as semaphores are expected to be used for
signalling threads. As a result, it was decided to remove the fast path
altogether, and protect the semaphore value with sleep queues.
Finally, as part of the rework, semaphores now have a user-defined maximum
value, in order to make the implementation of, e.g. wrappers for binary
semaphores, convenient.
Thanks to Simon Venken for reporting the bug.
|
|
|
|
|
|
|
|
Commit 5f202c9f744a5d9c5b751038edd2379b3d244227 reworked the way some
assertions were performed, and introduced a mistake in an assertion
in the turnstile module.
|
|
|
|
|
|
|
|
|
|
Commit a18a9d0cc0232dc151cef3d2d61807182ef7f6ea renamed options related
to the compiler, but the configuration checking script was not updated
with the new names. Fix that now.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Replace magic numbers with macros isolating the computation of offsets
in exception frames. The latter are reworked as arrays of words.
|
|
|
|
The UART console allows using a bigger screen as well as easy copy/pasting
the output.
|
|
|
|
|
|
|
|
GCC apparently reserves memory for all symbol names in the .rodata section
which meant adding symbol names would reuse those without changing the
size of the .rodata section. That's not the case with Clang.
|
|
Insignificant coding style fix.
|
|
Instead of combining assertions and checking into single functions,
rework those into pure checking functions usable with assert().
Those functions were introduced because of warnings about unused
functions/variables caused by an earlier implementation of assert().
|
|
The shell module has been "objectified" and now supports multiple
instances with shareable command sets.
|
|
|
|
|
|
This target makes running QEMU simpler on non-x86 hosts.
|
|
Commit d2a89f7f6e976d022527c2a5a1c75268aab8cd49 changed sleep queues to
allow semaphores to be signalled from interrupt handlers, but this
implied disabling interrupts for all synchronization objects, and most
of them do not require interrupts to be disabled.
The sleep queue interface is augmented with interrupt-related versions.
|
|
Maintaining correct dependencies for the panic function is too
complicated. It may be used very early, but would depend on the
console, which is normally available quite late during initialization.
Instead, the behavior of panic is now "best effort", i.e. if called at
a time where it works, good, otherwise, the behavior is undefined,
but should result in a freeze or a reset most of the time.
|
|
Now that exceptions and interrupts are clearly separated, stack switching
on an interrupt is unconditional.
|
|
|
|
|
|
Linking against libgcc was made a per-architecture option for convenience
reasons, an in particular because the kernel didn't have support for the
red zone required by the AMD64 ABI. But lacking the compiler companion
library proved to be problematic early after, so red zone support was
implemented, and libgcc is now unconditionnally linked again.
|
|
Supporting the red zone is required for full ABI compliance, and in
particular to safely link against libgcc.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This commit merges the trap module into the cpu module in order to solve
interface problems caused by the degree to which those two modules are
actually coupled, i.e. it just makes a lot more sense to not separate
them at all.
The cpu module is also internally reworked with improved object and
method definitions, that clarify the double fault handling code,
among other things.
|