14#include IRIS_ARCH_INCLUDE(core/task.h)
43 m_address_space->load();
45 if (m_kernel_stack.raw_value() != 0) {
50 m_task_state.context_switch_to();
71 m_task_state.set_instruction_pointer(address.
raw_value());
79 auto preemption_disabled() const ->
bool {
return m_preemption_disabled_count.load(di::MemoryOrder::Relaxed) > 0; }
80 void disable_preemption() { m_preemption_disabled_count.fetch_add(1, di::MemoryOrder::Relaxed); }
86 auto waiting() const ->
bool {
return m_waiting.load(di::MemoryOrder::Relaxed); }
87 void set_waiting() { m_waiting.store(
true, di::MemoryOrder::Relaxed); }
88 void set_runnable() { m_waiting.store(
false, di::MemoryOrder::Relaxed); }
117 uptr m_userspace_thread_pointer { 0 };
118 FileTable m_file_table;
Definition strong_int.h:44
constexpr auto raw_value() const -> Type
Definition strong_int.h:53
Definition interrupt_disabler.h:42
Definition task_arguments.h:9
Definition task_namespace.h:26
Definition task_status.h:7
void enable_preemption()
Definition task.cpp:222
void set_cwd_tnode(di::Arc< TNode > cwd_tnode)
Definition task.h:102
auto root_tnode() const -> di::Arc< TNode >
Definition task.h:98
~Task()
Definition task.cpp:32
void context_switch_to()
Definition task.h:37
void set_runnable()
Definition task.h:88
auto address_space() -> mm::AddressSpace &
Definition task.h:64
void disable_preemption()
Definition task.h:80
void set_root_tnode(di::Arc< TNode > root_tnode)
Definition task.h:99
auto task_state() const -> arch::TaskState const &
Definition task.h:53
void set_address_space(di::Arc< mm::AddressSpace > address_space)
Definition task.h:65
auto fpu_state() -> arch::FpuState &
Definition task.h:59
auto preemption_disabled() const -> bool
Definition task.h:79
void set_task_state(arch::TaskState const &state)
Definition task.h:54
auto kernel_stack() const -> mm::VirtualAddress
Definition task.h:90
void set_argument1(uptr value)
Definition task.h:74
void set_userspace_thread_pointer(uptr userspace_thread_pointer)
Definition task.h:94
void set_stack_pointer(mm::VirtualAddress address)
Definition task.h:73
void set_waiting()
Definition task.h:87
void set_argument3(uptr value)
Definition task.h:76
void set_argument2(uptr value)
Definition task.h:75
auto id() const -> TaskId
Definition task.h:62
void set_instruction_pointer(mm::VirtualAddress address)
Definition task.h:70
void set_kernel_stack(mm::VirtualAddress kernel_stack)
Definition task.h:91
auto task_arguments() const -> di::Arc< TaskArguments >
Definition task.h:56
Task(bool userspace, di::Arc< mm::AddressSpace > address_space, di::Arc< TaskNamespace > task_namespace, TaskId task_id, FileTable file_table, di::Arc< TaskStatus > task_status)
Definition task.cpp:20
auto waiting() const -> bool
Definition task.h:86
void set_task_arguments(di::Arc< TaskArguments > task_arguments)
Definition task.h:57
auto userspace_thread_pointer() const -> uptr
Definition task.h:93
void set_argument4(uptr value)
Definition task.h:77
auto cwd_tnode() const -> di::Arc< TNode >
Definition task.h:101
void set_should_be_preempted()
Definition task.h:82
auto task_namespace() const -> TaskNamespace &
Definition task.h:67
auto fpu_state() const -> arch::FpuState const &
Definition task.h:60
auto file_table() -> FileTable &
Definition task.h:68
auto task_status() const -> di::Arc< TaskStatus >
Definition task.h:84
Definition address_space.h:52
PathViewImpl< string::TransparentEncoding > PathView
Definition path_view.h:11
uintptr_t uptr
Definition integers.h:36
IntrusivePtr< T, ArcTag > Arc
Definition arc.h:21
Definition zstring_parser.h:9
Definition cxx_init.cpp:12
void load_kernel_stack(mm::VirtualAddress base)
Definition tss.cpp:8
void load_userspace_thread_pointer(uptr userspace_thread_pointer, arch::TaskState &task_state)
Definition gdt.cpp:22
Definition address_space.cpp:20
di::StrongInt< VirtualAddressTag > VirtualAddress
Definition virtual_address.h:25
Definition cxx_init.cpp:12
auto do_syscall(Task ¤t_task, arch::TaskState &task_state) -> Expected< u64 >
Definition syscall.cpp:16
di::StrongInt< TaskIdTag > TaskId
Definition task.h:19
auto create_user_task(TaskNamespace &task_namespace, di::Arc< TNode > root_tnode, di::Arc< TNode > cwd_tnode, FileTable file_table, di::Arc< mm::AddressSpace > address_space) -> Expected< di::Arc< Task > >
Definition task.cpp:64
di::vocab::Expected< T, di::platform::GenericCode > Expected
Definition error.h:324
auto create_kernel_task(TaskNamespace &task_namespace, void(*entry)()) -> Expected< di::Arc< Task > >
Definition task.cpp:39
@ load_executable
Definition syscall.h:9
di::Arc< mm::AddressSpace > address_space
Definition task.h:24
mm::VirtualAddress kernel_stack
Definition task.h:25