This project is mirrored from https://github.com/hermitcore/libhermit-rs.git.
Pull mirroring updated .
- 07 Sep, 2020 1 commit
-
-
Stefan Lankes authored
* add requirement to use only types T for spin lock, where the behavior Send is specified * remove obsolete implementation of a irqsave refcell * replace DoubleLinkedList by LinkedList of the alloc library * using of the core collection library to handle memory and tasks * the vector of PCI adapters aren't longer protected by a lock because these adapter are initialized at boot time. Afterwards, we have only read-access. * Freelist: add check if a reunion with the previous slot is possible
-
- 10 Aug, 2020 1 commit
-
-
Stefan Lankes authored
- the logical address space is completly separate from the physical - consequently, different names are used
-
- 31 May, 2020 1 commit
-
-
Stefan Lankes authored
- avoids false sharing
-
- 21 May, 2020 1 commit
-
-
jschwe authored
* Refactor: Fix Clippy warnings - Added support for empty println!() - use short hand initialization when possible - replace if x==false with if !x - replace unwrap_or(function_call()) with unwrap_or_else(|| function_call()) - and others * Update to Rust edition 2018 - Mostly just adds crate::
-
- 25 Apr, 2020 1 commit
-
-
Stefan Lankes authored
- introduce macros to switch between kernel and user space - add core-specific variable to store the address of the kernel stack - add task value to store the latest user-space stack pointer
-
- 17 Apr, 2020 1 commit
-
-
Stefan Lankes authored
- switch back to the default mm::allocate
-
- 16 Apr, 2020 1 commit
-
-
Stefan Lankes authored
- a page guard protect the stack against overflows - the page before and after stack is invalid and trigger a page fault
-
- 15 Apr, 2020 2 commits
-
-
Stefan Lankes authored
-
Stefan Lankes authored
- wakeup handler checks if a task with higher priority is available - if yes the handler calls the scheduler
-
- 14 Apr, 2020 2 commits
-
-
Stefan Lankes authored
- increase the readability of the code
-
Stefan Lankes authored
- lockless scheduling on a local core - only the communication between cores is realized with protected cores - cores use inter-processor-interrupts to trigger a queue check
-
- 11 Apr, 2020 1 commit
-
-
Stefan Lankes authored
- clone creates a new TLS - tbss is completly zeroed
-
- 08 Apr, 2020 1 commit
-
-
Stefan Lankes authored
-
- 08 Mar, 2020 1 commit
-
-
Stefan Lankes authored
-
- 23 Feb, 2020 1 commit
-
-
Stefan Lankes authored
if the idle task wakeups a task, avoid halt state
-
- 03 Feb, 2020 1 commit
-
-
Stefan Lankes authored
- create ist0 for every task - add functions to reschedule within and without an interrupt handler
-
- 17 Aug, 2019 1 commit
-
-
Stefan Lankes authored
-
- 13 Aug, 2019 1 commit
-
-
Stefan Lankes authored
-
- 03 Aug, 2019 1 commit
-
-
Stefan Lankes authored
-
- 16 Jul, 2019 1 commit
-
-
Stefan Lankes authored
-
- 15 Jul, 2019 1 commit
-
-
Stefan Lankes authored
-
- 13 Jul, 2019 2 commits
-
-
Stefan Lankes authored
-
Stefan Lankes authored
-
- 07 Jul, 2019 1 commit
-
-
Stefan Lankes authored
-
- 06 Jul, 2019 1 commit
-
-
Stefan Lankes authored
-
- 25 Jun, 2019 1 commit
-
-
Stefan Lankes authored
-
- 16 Jun, 2019 2 commits
-
-
Stefan Lankes authored
-
Stefan Lankes authored
-
- 10 Jun, 2019 1 commit
-
-
Stefan Lankes authored
-
- 02 Jun, 2019 1 commit
-
-
Stefan Lankes authored
-
- 04 May, 2019 2 commits
-
-
Stefan Lankes authored
+ remove dependencies from lazy_static
-
Stefan Lankes authored
-
- 16 Jan, 2019 1 commit
-
-
Stefan Lankes authored
- add the links between 2 tasks and realize a priority queue based on these links
-
- 26 Jul, 2018 1 commit
-
-
Colin Finck authored
Port the Memory Manager to AArch64, with full support for 4-level Paging, 4 KiB, 2 MiB, and 1 GiB Pages, and Execute-Disable! * Make PageTableEntryFlags architecture-independent by adding builder pattern methods. Instead of providing PageTableEntryFlags::EXECUTE_DISABLE, one simply uses the execute_disable() method now. The different implementations of each method for AArch64 and x86_64 map to the respective architecture flags. * Make a boolean execute_disable the only additional parameter for mm::allocate() to make it architecture-independent. * Remove the do_ipi parameter from paging functions. It was x86_64-specific and there is nothing wrong with always doing an IPI when necessary and application processors have been booted. * Make the LEVEL/MAP_LEVEL constant ascending instead of descending for the AArch64 implementation to match with the Page Table names (L0, L1, etc.).
-
- 24 Jul, 2018 1 commit
-
-
Colin Finck authored
* Split the CMake files into an architecture-independent and an architecture-dependent part. This overhaul of the build system also removes the custom "module system", which doesn't make much sense for a Rust kernel and doesn't work well with such a split configuration. * Add an aarch64-unknown-hermit-kernel.json target for Xargo. * Implement basic IRQ and serial port functions for AArch64 to get a first output. * Copy the 4-level paging from x86_64 to AArch64 and remove the parts relying on the "x86" crate. While this still needs some work to get the names and flags right, 4-level paging should generally work on AArch64 with the same concepts that are used for x86_64. * Comment out and stub out many functions for AArch64 to let is somewhat compile. * Redefine core_id as a CPU number that is guaranteed to be sequential to make it architecture-independent. For x86_64, this number is now translated to a Local APIC ID in the "apic" module only. * Add a per-architecture TaskStacks structure, which contains "stack" and "ist" on x86_64 and only "stack" on AArch64. * Add a per-architecture network_adapter_init function to initialize RTL8139 only for x86_64. * Get rid of the top-level "arch" directory and put the reasonable architecture-dependent include files into /include/hermit/<ARCH>, all prefixed with "arch_". * Make the inclusion of some crates dependent on the target architecture. * Rename get_number_of_processors to get_processor_count and make it return a usize.
-
- 29 Jun, 2018 1 commit
-
-
Colin Finck authored
Overhaul the timing framework to improve the global timer resolution to 1 microsecond and simplify the code, also for a later AArch64 port. * Rename the udelay() syscall to sys_usleep() for consistence and accept a u64 parameter. udelay() with an u32 parameter is still provided to serve the existing customers, but should eventually vanish. * Use time values in 1 microsecond granularity and u64 everywhere instead of simulating a 10ms timer with the CPU Time-Stamp Counter. This guarantees maximum precision for the best timing function we currently provide (sys_usleep). It also simplifies the code, because we can simply add microseconds to the timer tick count. * Rewrite update_timer_ticks() as get_timer_ticks(). It simply divides get_timestamp() by get_frequency() now to simulate a 1 microsecond timer with the CPU Time-Stamp Counter. This requires no per-core variables and is much more accurate. * Calibrate the Local APIC Timer for 1 microsecond resolution. This reduces the maximum timeout to 34 seconds on a Intel Xeon E5-2650 v3 @ 2.30GHz, but for longer timeouts, the one-shot timer would simply fire multiple times. * Detect CPU support for the TSC-Deadline Mode of the Local APIC Timer and use it. This one is easier to program than the legacy One-Shot Mode, even more accurate, and has no maximum timeout.
-
- 06 Jun, 2018 1 commit
-
-
Stefan Lankes authored
-
- 30 May, 2018 1 commit
-
-
Colin Finck authored
* Call acpi::poweroff() from arch::x86_64::processor::shutdown(). * Store the exit code of the last task that finished. * Add a sys_shutdown() syscall implemented per SysCallInterface. The generic implementation just calls arch::processor::shutdown(), whereas the Proxy and Uhyve SyscallInterfaces send SysExit commands over their communication channels. This supersedes the per-SyscallInterface sys_exit() call, which would wrongly shut down the entire system when the first task exited. * Add a sys_lwip_register_tcpip_task() syscall to register the Task ID of the lwIP TCP/IP thread. This enables us to shut down the system when only the lwIP TCP/IP thread is left. * Make TaskId u32 to be consistent with the Tid type of the syscalls.
-
- 13 Apr, 2018 1 commit
-
-
Stefan Lankes authored
-
- 04 Apr, 2018 1 commit
-
-
Stefan Lankes authored
-