Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement user mode tasks with syscall support #275

Merged
merged 12 commits into from
Jul 22, 2022

Conversation

wipawel
Copy link
Contributor

@wipawel wipawel commented Jul 19, 2022

Implements #55

@wipawel wipawel added feature New feature or request Priority: 2 Very important feature labels Jul 19, 2022
@wipawel wipawel added this to the v0.5.0 milestone Jul 19, 2022
@wipawel wipawel requested a review from a team as a code owner July 19, 2022 10:17
@wipawel wipawel linked an issue Jul 19, 2022 that may be closed by this pull request
@rrbranco
Copy link

Looks good, approving

rrbranco
rrbranco previously approved these changes Jul 19, 2022
Copy link

@rrbranco rrbranco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approving.

wipawel added 6 commits July 20, 2022 09:33
This uses a very simple (and just good enough for now) origin detection
mechanism. Kernel -> User or User -> Kernel tranistion is decided based
on CS selector value on the stack (CPL bits checks).

When privilege tranistion is detected a CR3 pagetable switch occurs as
well as swapgs for percpu segment (userland has it set to NULL).

User pagetables need a kernel mapping of CR3 register and percpu page
to be able to switch to it on interrupt/exception.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
This routine preserves all kernel registers upon invocation.
It receives user stack pointer via 3rd parameter instead of via a percpu
location.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
Allocate user task stack and keep a reference in the task_t structure.
Add enter_usermode() to the user pagetables kernel mappings.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
wipawel added 6 commits July 20, 2022 09:51
The exit system call has index 0. It is used by usermode_stub() to exit
back to kernel, when user task is finished.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
Exceptions occuring in usermode terminate a user task, but are not fatal
for the kernel.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
The printf() system call accepts only 4 parameters: format string and
for parameters for it. There is no variadic parameters support and
there is also no checks for the sanity of the format string vs parameters
list. Use with care.

Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
Signed-off-by: Pawel Wieczorkiewicz <[email protected]>
@wipawel wipawel merged commit 96658a9 into KernelTestFramework:mainline Jul 22, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request Priority: 2 Very important feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] User mode tasks
2 participants