This project is mirrored from Pull mirroring updated .
  1. 21 May, 2020 1 commit
    • jschwe's avatar
      Refactor libhermit-rs for rust edition 2018 (#59) · d793a9b1
      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::
  2. 25 Apr, 2020 1 commit
    • Stefan Lankes's avatar
      separate kernel and user space stack · 41cf625c
      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
  3. 17 Apr, 2020 1 commit
  4. 16 Apr, 2020 1 commit
  5. 15 Apr, 2020 2 commits
  6. 14 Apr, 2020 2 commits
  7. 11 Apr, 2020 1 commit
  8. 08 Apr, 2020 1 commit
  9. 08 Mar, 2020 1 commit
  10. 23 Feb, 2020 1 commit
  11. 03 Feb, 2020 1 commit
  12. 17 Aug, 2019 1 commit
  13. 13 Aug, 2019 1 commit
  14. 03 Aug, 2019 1 commit
  15. 16 Jul, 2019 1 commit
  16. 15 Jul, 2019 1 commit
  17. 13 Jul, 2019 2 commits
  18. 07 Jul, 2019 1 commit
  19. 06 Jul, 2019 1 commit
  20. 25 Jun, 2019 1 commit
  21. 16 Jun, 2019 2 commits
  22. 10 Jun, 2019 1 commit
  23. 02 Jun, 2019 1 commit
  24. 04 May, 2019 2 commits
  25. 16 Jan, 2019 1 commit
  26. 26 Jul, 2018 1 commit
    • Colin Finck's avatar
      Port the Memory Manager to AArch64, with full support for 4-level Paging, 4... · a711534f
      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.).
  27. 24 Jul, 2018 1 commit
    • Colin Finck's avatar
      The first real AArch64 bringup commit for HermitCore-rs · a9671ff5
      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.
  28. 29 Jun, 2018 1 commit
    • Colin Finck's avatar
      Overhaul the timing framework to improve the global timer resolution to 1... · aee76165
      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.
  29. 06 Jun, 2018 1 commit
  30. 30 May, 2018 1 commit
    • Colin Finck's avatar
      Implement graceful shutdown. · b684516e
      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.
  31. 13 Apr, 2018 1 commit
  32. 04 Apr, 2018 1 commit
  33. 30 Mar, 2018 1 commit
  34. 29 Mar, 2018 1 commit
  35. 22 Mar, 2018 1 commit