Commit Graph

142 Commits

Author SHA1 Message Date
Matthew Leach
50e5b0b2f5 waker: rescedule other CPUs when waking up other cores
When a waker sets a task's state to `Running` from `Sleeping`, send an
IPI to that CPU to force a reschedule preventing them from being stuck
in the idle task.
2025-12-25 21:10:40 +00:00
Matthew Leach
6ae237544d interrupts: refactor interrupt manager and reduce locking
There is no need to store a seperate inner struct with the interrupt
manager, refactor that.

Also, reduce the amount of locking when servicing an interrupt,
currently we keep the whole interrupt manager locked when servicing an
interrupt. This should be kept unlocked while the ISR is called.
2025-12-25 21:07:28 +00:00
Matthew Leach
24932b48be cpu-messenger, sched: migrae tasks, round-robin
Use a simple static atomicu32 to keep track of where to spawn the next
task. Then, if the task isn't on this CPU, migrate it with the
`CPUMessenger`.
2025-12-25 12:32:51 +00:00
ootinnyoo
8030cf0d8f add readlink test in symlink test 2025-12-25 00:46:40 -08:00
ootinnyoo
70e81b39f4 add support for symlinks 2025-12-25 00:46:40 -08:00
Matthew Leach
69f50fef18 sched: fix futures race-condition
When a future returns `Poll::Pending`, there is a window where, if a
waker is called, prior to the sched code setting the task's state to
`Sleeping`, the wake-up could be lost.  We get around this by
introducing a new state `Woken`.

A waker will set a `Running` task to this state. The sched code then
detects this and *does not* set the task's state to `Sleeping`, instead
it leaves it as running and attempts to re-schedule.
2025-12-24 18:44:41 -08:00
Matthew Leach
bd21276368 sched: don't bother with pointless state update
The caller of `switch_to_task` should have already set the task's state
to `Runnable` for it to be considered in this time slice. Ensure that is
the case with a debug_assert.
2025-12-24 18:44:41 -08:00
Matthew Leach
2e8871840d sched: ensure task is running when re-running same task
When scheduling the same task to be run, ensure that the state is set to
`Running` as it will have been set to `Runnable` before entering this
function call.
2025-12-24 18:44:41 -08:00
Matthew Leach
6abdbbb6d5 sched: move last_run update into switch_to_task 2025-12-24 18:44:41 -08:00
Ashwin Naren
7122429a20 dispatch signals (#85) 2025-12-24 12:54:40 -08:00
someone
2a1bb1cdde implement hardlinking (#88) 2025-12-24 09:43:12 -08:00
Matthew Leach
5259654e36 usertest: add test_clock_sleep (#87)
Add a test to ensure sleeping and clock getttime functions are correct.
2025-12-24 09:40:13 -08:00
Matthew Leach
efe34026fa Merge pull request #81 from arihant2math/mutex-timeouts 2025-12-24 08:08:20 +00:00
Matthew Leach
1d25f0d292 apply fix 2025-12-24 00:02:29 -08:00
someone
877dc9bf2e Implement sys_truncate (#86) 2025-12-23 22:08:16 -08:00
someone
3aef9a4e15 add chown/chmod (#84) 2025-12-23 15:19:25 -08:00
Ashwin Naren
c4f1d9acf5 support timeouts for futex 2025-12-23 13:08:37 -08:00
Ashwin Naren
888c099072 implement sys_sched_yield 2025-12-23 12:46:26 -08:00
Matthew Leach
88549fee5a sys_set_tid_address: finish implementation
Now CLONE_CHILD_CLEARTID has been implemented properly, we can finish
the implementation of `sys_set_tid_address`.
2025-12-23 11:28:44 -08:00
Matthew Leach
91c40c92ae usertest: add test_rust_mutex
Add a function to stress-test the kernels futex implementation.
2025-12-23 11:28:29 -08:00
Matthew Leach
6bada491b6 futex: check value while queue locked
Lock the futex queue when checking the value to ensure atomicity.
2025-12-23 10:21:30 -08:00
Matthew Leach
f7a02c6ccb libkernel: wakerset: add contains_token
Add a way to check whether the wakerset contains a token.
2025-12-23 10:21:30 -08:00
Matthew Leach
957b28e8a7 uaccess: implement try_copy_from_user
Implement a new function, `try_copy_from_user` which will not sleep when
a fault occures, making it safe to be called while a spinlock has been
acquired.
2025-12-23 10:21:30 -08:00
Matthew Leach
ca787aa4c3 libkernel: waker_set: return whether a waker was woken
Make `wake_one()` return `true` indicating whether a waker was woken
from the set, `false` otherwise.
2025-12-23 10:21:30 -08:00
Ashwin Naren
78440f292b update dependencies 2025-12-23 00:01:45 -08:00
Matthew Leach
8af3653e60 Merge pull request #76 from some100/master 2025-12-23 06:46:59 +00:00
ootinnyoo
8f00af7587 implement sys_fchdir 2025-12-22 18:34:22 -05:00
Matthew Leach
1dd1811f34 Merge pull request #75 from arihant2math/fix-thread-join 2025-12-22 17:36:48 +00:00
Ashwin Naren
2cb93c0891 address review 2025-12-22 02:06:11 -08:00
Ashwin Naren
8bf0a72bce fix futex based thread joining 2025-12-21 17:02:19 -08:00
Matthew Leach
e77742e029 aarch64: syscalls: clone: fix arg order
The clone syscal on aarch64 is the following:

```
SYS_clone, flags, stack, ptid, tls, ctid
x8,        x0,    x1,    x2,   x3,  x4
```

which is a different order than listed on the man page. Fix the ordering
in the aarch64 syscall dispatch code.
2025-12-21 16:13:15 -08:00
Matthew Leach
3273d6451e clone: implement CLONE_SETTLS
Set the TLS pointer when `CLONE_SETTLS` is set in `sys_clone`.
2025-12-21 16:13:15 -08:00
Matthew Leach
12076c7ad2 usertest: add test_rust_thread
Add a simple thread spawn test.
2025-12-21 16:13:15 -08:00
Matthew Leach
a7ebe8e214 threading: fix clone to spawn threads
Fix issues identify in `sys_clone` logic to enable basic threading.
2025-12-21 16:13:15 -08:00
Matthew Leach
eb2369f621 Merge pull request #57 from arihant2math/futex 2025-12-21 13:30:40 +00:00
Matthew Leach
03a400d2bd Merge pull request #72 from some100/master 2025-12-21 13:30:05 +00:00
Ashwin Naren
637874620b address review 2025-12-21 01:56:33 -08:00
Ashwin Naren
73b9afc2f0 remove redundant rust mutex test 2025-12-21 01:44:30 -08:00
Ashwin Naren
f004824bbd make clippy happy 2025-12-21 01:43:54 -08:00
Ashwin Naren
b7e8e9edcc add note 2025-12-21 01:43:54 -08:00
Ashwin Naren
a6efc75686 final fixes 2025-12-21 01:43:54 -08:00
Ashwin Naren
d60e70e397 add another usertest
 Conflicts:
	usertest/src/main.rs
2025-12-21 01:43:54 -08:00
Ashwin Naren
93df6b0ebc get data w/ spinlock 2025-12-21 01:43:54 -08:00
Ashwin Naren
cb6dbdf5bb futex impl 2025-12-21 01:43:54 -08:00
Ashwin Naren
3fbb56098c futex impl
# Conflicts:
#	usertest/src/main.rs
2025-12-21 01:43:54 -08:00
Ashwin Naren
cd6d830ae9 Initial proc fs (#70) 2025-12-21 01:37:14 -08:00
ootinnyoo
237ab737df implement sys_chroot 2025-12-20 19:06:07 -05:00
Ashwin Naren
35a6caa541 Implement sys_sysinfo (#71) 2025-12-20 15:42:08 -08:00
Ashwin Naren
b98a54b928 Stub sys_madvise (#67) 2025-12-19 15:28:43 -08:00
Ashwin Naren
fd65436604 Add rust file/dir usertest (#65) 2025-12-18 16:19:42 -08:00