Changeset ed7e057 in mainline for kernel/generic/src/main/main.c


Ignore:
Timestamp:
2024-01-16T15:46:47Z (17 months ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
master
Children:
29029ac0, a5b5f17
Parents:
4ed7870
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2024-01-15 20:09:30)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2024-01-16 15:46:47)
Message:

Add functions context_create(), context_replace() and context_swap()

and use them where appropriate, removing context_save() in the process.
Much like in userspace, context_swap() maintains natural control flow
as opposed to context_save()'s return-twice mechanic.

Beyond that, in the future, context_replace() and context_swap()
can be implemented more efficiently than the context_save()/
context_restore() pair. As of now, the original implementation is
retained.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/main/main.c

    r4ed7870 red7e057  
    8080#include <arch/arch.h>
    8181#include <arch.h>
    82 #include <arch/faddr.h>
    8382#include <ipc/ipc.h>
    8483#include <macros.h>
     
    174173            ALIGN_UP((uintptr_t) kdata_end - config.base, PAGE_SIZE);
    175174
    176         context_save(&ctx);
    177         context_set(&ctx, FADDR(main_bsp_separated_stack),
     175        context_create(&ctx, main_bsp_separated_stack,
    178176            bootstrap_stack, bootstrap_stack_size);
    179177        context_restore(&ctx);
     
    336334         * switch to this cpu's private stack prior to waking kmp up.
    337335         */
    338         context_t ctx;
    339         context_save(&ctx);
    340         context_set(&ctx, FADDR(main_ap_separated_stack),
    341             (uintptr_t) CPU_LOCAL->stack, STACK_SIZE);
    342         context_restore(&ctx);
     336        context_replace(main_ap_separated_stack, CPU_LOCAL->stack, STACK_SIZE);
    343337        /* not reached */
    344338}
Note: See TracChangeset for help on using the changeset viewer.