Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
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.
|
|
|
|
|
|
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Don't require the caller to pass a pointer to the newly created thread.
|
|
|
|
|
|
This is mostly a polishing commit.
|
|
Remove the need from architecture-specific code to check alignment.
|
|
Allow architectures to specifically override any of the overloaded functions.
This removes the need from architecture-specific code to implement selection.
|
|
|
|
|
|
|
|
This commit restricts atomic operations to 32-bit and 64-bit (when
supported). It keeps a similar source interface, but adds restrictions
on the supported types.
The main drive behind this change is portability, and in particular,
upcoming local atomic operations.
|
|
In preparation of the rework of atomic operations, all atomic function
calls are fixed to use fully supported, compatible types. This means
that atomic operations ar erestricted to 32-bit and 64-bit, and that
value types must be strictly compatible with pointer types.
|
|
These shortcuts just don't bring enough value.
|
|
|
|
The consume memory order is known to be problematic in the C11 specification,
and as a result, most compilers alias it to acquire. Based on the assumption
that the kernel doesn't run on architectures with an Alpha-like memory
model, the consume memory order was aliased to relaxed, letting the CPU
identify data dependencies. But there may also be issues at compile time,
making this hack is dangerous. As a result, the actual consume memory order
as implemented by the compiler is now used to define the kernel consume
memory order.
See https://lwn.net/Articles/588300/.
|
|
|
|
For some reason, commit be5b9d6ab9f7e7a81c367e4bb0823ba11f85940f didn't
take care of all reserved identifiers.
|
|
|
|
|
|
|
|
|
|
This commit fixes undefined behavior in hash_str, and RCU linked list
walking.
|
|
|
|
Making the unlock operation block allows tricky deadlocks to occur in
case a thread is interrupted right before announcing itself as the first
waiter in the queue.
Since locking is expected to block, the spinlock implementation is
reworked to move the hand-off performed by the unlock operation into
the lock operation.
As a side effect, the common case of a single waiter is also optimized.
|