Commit Graph

210 Commits

Author SHA1 Message Date
Ashwin Naren
04ac1e8783 implement sys_waitid 2026-01-30 08:31:26 -08:00
Matthew Leach
64469bb79c Merge pull request #185 from hexagonal-sun/hardware-smp-fixes 2026-01-28 09:14:25 +00:00
Matthew Leach
462de189b0 arm64: boot: secondaries: ensure WFI doesn't trap
The WFI insn is set not to trap on the primary core. Ensure it's also
set on the secondary cores too.
2026-01-28 08:00:01 +00:00
Matthew Leach
ba53418382 arm64: secondary: ensure boot_ctx is flushed to RAM
When the secondary boots and derefes the boot_ctx pointer passed in as a
parameter, it reads NULL, causing the secondary to end up stuck in an
exception loop. The data is sat in the primary core's cache and hasn't
been flushed to RAM. Since the secondary starts without the MMU (and
caches) enabled, the CCI doesn't kick in and we read stale data.

Manually flush the boot_ctx data to RAM before waking up the secondary.
2026-01-28 08:00:01 +00:00
Matthew Leach
d92945379a arm64: memory: flush_to_ram: new
Create a new function which takes a pointer to an object `T` and ensures
that the data is flushed from the caches to the point of
coherency (RAM).
2026-01-28 08:00:01 +00:00
Ashwin Naren
17b347cdc4 naming changes 2026-01-27 00:31:47 -08:00
Ashwin Naren
04f015848b percpu refactor 2026-01-27 00:31:47 -08:00
Ashwin Naren
7c7776ba7b working top
implements enough of procfs for `top` to run
2026-01-27 00:31:47 -08:00
Matthew Leach
87fe041ba0 procfs: implement /proc/<PID>/maps
Implement the `maps` file which shows a process's VMA entries. Example
output:

```
[root@moss-machine /]# cat /proc/1/maps
500000000000-500000117000 r-xp 0000000000                    /bin/bash
50000012b000-500000130000 r--p 000011b000                    /bin/bash
500000130000-50000013e000 rw-p 0000120000                    /bin/bash
700000000000-70000002b000 r-xp 0000000000                    /lib/ld-linux-aarch64.so.1
70000003e000-700000040000 r--p 000002e000                    /lib/ld-linux-aarch64.so.1
700000040000-700000042000 rw-p 0000030000                    /lib/ld-linux-aarch64.so.1
7fffff510000-7fffff585000 r-xp 0000000000                    /usr/lib/libncursesw.so.6
7fffff585000-7fffff59b000 ---p 0000075000                    /usr/lib/libncursesw.so.6
7fffff59b000-7fffff5a0000 r--p 000007b000                    /usr/lib/libncursesw.so.6
7fffff5a0000-7fffff5a1000 rw-p 0000080000                    /usr/lib/libncursesw.so.6
7fffff5b0000-7fffff760000 r-xp 0000000000                    /usr/lib/libc.so.6
7fffff760000-7fffff76d000 ---p 00001b0000                    /usr/lib/libc.so.6
7fffff76d000-7fffff770000 r--p 00001bd000                    /usr/lib/libc.so.6
7fffff770000-7fffff772000 rw-p 00001c0000                    /usr/lib/libc.so.6
7fffff772000-7fffff779000 rw-p 0000000000
7fffff780000-7fffff7d9000 r-xp 0000000000                    /usr/lib/libreadline.so.8
7fffff7d9000-7fffff7ed000 ---p 0000059000                    /usr/lib/libreadline.so.8
7fffff7ed000-7fffff7f0000 r--p 000005d000                    /usr/lib/libreadline.so.8
7fffff7f0000-7fffff7f6000 rw-p 0000060000                    /usr/lib/libreadline.so.8
7fffff7f6000-7fffff7fb000 rw-p 0000000000
7fffff800000-800000063000 rw-p 0000000000                    [stack]
```
2026-01-27 06:10:43 +00:00
Ashwin Naren
d386b8ba36 post rebase fixes 2026-01-25 10:50:02 -08:00
Ashwin Naren
d8c77ebca7 procfs bugfixes 2026-01-25 10:50:02 -08:00
Ashwin Naren
d7ad7b76dc fix clocks not actually updating within time slice 2026-01-25 10:50:02 -08:00
Ashwin Naren
2d34ebcef9 procfs refactor 2026-01-25 10:50:02 -08:00
Ashwin Naren
c5a0976a73 track stime and utime
Tracks stime and utime for processes and tasks. Reports the times through procfs and `sys_clock_gettime`.
2026-01-25 10:50:02 -08:00
Ashwin Naren
bed6b65db0 fix clockid enum 2026-01-25 10:50:02 -08:00
Matthew Leach
3aca7b2122 devfs: set attr id the same as the inode id
Ensure that the ID of the attr contains the ID of the devfs inode,
instead of the default value.
2026-01-25 10:29:43 -08:00
Matthew Leach
4c94f6e3d4 pipe: add PipeInode for fstat
Add a PipeInode struct which allows `fstat` for an FD which is backed by
a pipe.
2026-01-25 10:29:43 -08:00
Matthew Leach
4a3477182a clock_nanosleep: fix arguments to syscall
The `sys_clock_nanosleep` implementation was missing a `flags` parameter
in the second position.  This meant that `rqtp` was interpreted as
`rmtp`, and when interrupted, `rmtp` would write to a garbage address
causing an `EFAULT`.

Fix the argument ordering.
2026-01-25 10:28:40 -08:00
Ashwin Naren
59adc10cee make futex wait interruptable 2026-01-23 10:23:29 -08:00
Ashwin Naren
aa5a9c7b79 fix typos 2026-01-23 01:26:04 -08:00
Ashwin Naren
92efb4cee7 enforce semicolon_if_nothing_returned and uninlined_format_args 2026-01-23 01:26:04 -08:00
Matthew Leach
190bc06994 Merge pull request #160 from arihant2math/mincore 2026-01-21 06:12:40 +00:00
Ashwin Naren
aca5c0db79 implement mincore 2026-01-20 19:52:47 -08:00
Ashwin Naren
06d016eab6 implement sid syscalls 2026-01-19 18:36:00 -08:00
Matthew Leach
3b71fa3d39 signal: interruptible: prioritize wrapped future over signals
Poll the wrapped future first, ensuring that the interrupt logic doesn't
short-circuit a future which is already ready.

This fixes an issue where `sys_wait4` would return `-EINTR` when
receiving a `SIGCHLD`. Since `SIGCHLD` indicates the wait condition
is met, the underlying future is ready and should return the PID
successfully rather than aborting.
2026-01-17 12:10:37 +00:00
Matthew Leach
bc5d1cd91e syscalls: wait4: make interruptable()
Make the `sys_wait4` system call interruptable via signal delivery.

Also include some a test in `usertest` to ensure proper functionality.
2026-01-17 10:22:53 +00:00
Matthew Leach
ecdfd360d1 sched: remove force_resched()
This function is used to force the scheduler to reschedule another task,
avoiding the fast-path exit.  Given the sheer number of task state
change points in the code, the fast-path exit code has become too
brittle.

Instead, check that the current task's state is still `Running` before
taking the fast-path short-circuit. The cost of one spinlock uncontended
lock-unlock cycle is worth the cost of avoiding many subtle scheduling
logic bugs.
2026-01-17 10:21:17 +00:00
Matthew Leach
4a88739804 syscalls: tty: read: make interruptable()
Allow a `read()` on a tty to be interrupted by a syscall. This is the
fundamental fix for making '^C' interrupt a process like `cat` when it's
reading from `stdin`.
2026-01-17 10:21:17 +00:00
Matthew Leach
612bbdb172 syscalls: pipe: read: make interruptable()
Allow interrupt for `read()` calls on a pipe.  If the syscall is
interrupted simply return `-EINVAL`.

Add a testcase to `usertest` for this case.
2026-01-17 10:21:17 +00:00
Matthew Leach
2655e8e78a syscalls: sleep: make interruptable()
Allow the `nanosleep` family of functions to be interrupted. When an
interruption occures, calculation the remaining duration and write that
back to user-space.

Add a test to ensure proper functionality into usertest.
2026-01-17 10:21:17 +00:00
Matthew Leach
770f32c30c process: signals: add interruptable()
Add a new struct, `InterruptableFut` which allows signal
short-circuiting logic. If a future within the kernel's syscall logic is
wrapped in a `InterruptableFut`, then a wakeup with any pending signals
causes the underlying future to be dropped and it's operation cancelled.

Provide a `InterruptResult` enum to allow the caller to know whether the
operation was interrupted and allows them to take appropriate action.
Typically exiting with `-EINTR`.

Finally, provide a blanket implementation for all futures, allowing then
to call `.interruptable()` to easily wrap any future.
2026-01-17 10:21:17 +00:00
Matthew Leach
b5f184a6d9 process: peek_signal: new
Add a new function that allows for peeking at a task's currently pending
signals without consuming the signal.
2026-01-17 10:21:17 +00:00
Matthew Leach
71d120ebe7 thread_group: deliver_signal: ensure signal delivery
If all tasks within a thread group are sleeping when a signal is
delivered, wake at least one task to action the signal.
2026-01-17 10:21:17 +00:00
Matthew Leach
798cad0c38 fd_table: don't close CLOEXEC FDs until exec
Currently we close CLOEXEC FDs when we call `clone()` when making a copy
of the file descriptor table. Defer this until the `exec` syscall.

This fixes numerous bugs, namely with bash and setting the foreground
process group for the current TTY.
2026-01-17 10:21:17 +00:00
Matthew Leach
6fc1990597 thread_group: pgid: inherit from parent
Inherit the process-group ID from the parent. If there is no parent
specified then the pgid is the same as the tgid.
2026-01-17 10:21:17 +00:00
Matthew Leach
1e91c60f0b Merge pull request #165 from hexagonal-sun/ptrace-follow-forks
ptrace: trace children on fork
2026-01-17 10:19:20 +00:00
Matthew Leach
3932dd96a7 ptrace: trace children on fork
When calling `clone()` with PTRACE_O_TRACEFORK set, make the child
inherit the current ptrace context.  Also start the process with SIGSTOP
pending as per the ptrace docs.

This enable strace follow-forks functionality `strace -f`.
2026-01-17 08:35:33 +00:00
Ashwin Naren
f4a9512a41 support waiting on a value less than -1 2026-01-16 15:51:47 -08:00
Ashwin Naren
08f42868b2 proper cross-cpu task insertion logic
chooses the CPU with the least weight of both running and runnable tasks
2026-01-16 15:51:35 -08:00
Ashwin Naren
e7a0ec6801 fix proc fs crashing 2026-01-16 15:51:35 -08:00
Ashwin Naren
c6dd7b07c0 partially implement sys_close_range 2026-01-15 08:43:08 -08:00
Matthew Leach
b064c14a88 Merge pull request #155 from arihant2math/timeofday
Proper timeofday implementations
2026-01-15 12:24:50 +00:00
Matthew Leach
4bb3158812 Merge pull request #153 from arihant2math/prctl-updates
Implement more of prctl
2026-01-15 12:24:27 +00:00
Matthew Leach
14e6c4ccf2 Merge pull request #159 from arihant2math/fix-mem-fault-crash
Fix mem fault crash
2026-01-15 12:24:08 +00:00
Matthew Leach
ffe08ce206 Merge pull request #157 from arihant2math/stubs
Fix gnu coreutils `ls -la`
2026-01-15 12:04:00 +00:00
Ashwin Naren
dc33679c54 fix mem fault crash 2026-01-14 15:03:37 -08:00
Ashwin Naren
e3675a9c1f explicitly return not supported for name_to_handle_at and open_by_handle_at 2026-01-14 14:59:08 -08:00
Ashwin Naren
27b960a986 handle tasks finishing 2026-01-14 14:37:48 -08:00
Matthew Leach
2b55e1d972 sycalls: name_to_handle_at: stub
Return EOPNOTSUPP for `sys_name_to_handle_at`.
2026-01-14 14:24:35 -08:00
Ashwin Naren
3e60a57d67 implement xattr syscalls 2026-01-14 10:51:48 -08:00