Age | Commit message (Collapse) | Author |
|
This means it won't hog the CPU for more than a single timeslice. :^)
|
|
Added a simple syscall counter to the /proc/all contents. :^)
|
|
|
|
Specifically shm_open() and shm_unlink(). This patch just adds stubs.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
We can't have multiple threads in the same process running in the kernel
at the same time, so let's have a per-process lock that threads have to
acquire on syscall entry/exit (and yield while blocked.)
|
|
It's basically a userspace port of the kernel's Lock class.
Added gettid() and donate() syscalls to support the timeslice donation
feature we already enjoyed in the kernel.
|
|
|
|
It takes two parameters, a function pointer for the entry function,
and a void* argument to be passed to that function on the new thread.
|
|
The scheduler now operates on threads, rather than on processes.
Each process has a main thread, and can have any number of additional
threads. The process exits when the main thread exits.
This patch doesn't actually spawn any additional threads, it merely
does all the plumbing needed to make it possible. :^)
|
|
This is accomplished using a new Alarm class and a BlockedSnoozing state.
Basically, you call Process::snooze_until(some_alarm) and then the scheduler
won't wake up the process until some_alarm.is_ringing() returns true.
|
|
|
|
I can now establish a connection to my little test server on the host.
|
|
Only the receive timeout is hooked up yet. You can change the timeout by
calling setsockopt(..., SOL_SOCKET, SO_RCVTIMEO, ...).
Use this mechanism to make /bin/ping report timeouts.
|
|
All ICMP sockets now receive all ICMP packets. All this buffering is gonna
need some limits and such.
|
|
The first userland networking program will be "ping" :^)
|
|
This is a bit more comfortable than passing the shared buffer ID manually
everywhere and keeping track of size etc.
|
|
|
|
|
|
I only needed this to support the WindowServer living inside the kernel.
Now that it's been migrated to userspace, this can go. :^)
|
|
Finally fixed the weird flaky crashing when resizing Terminal windows.
It was because we were dispatching a signal to "current" from the scheduler.
Yet another thing I dislike about even having a "current" process while
we're in the scheduler. Not sure yet how to fix this.
Let the signal handler's kernel stack be a kmalloc() allocation for now.
Once we can do allocation of consecutive physical pages in the supervisor
memory region, we can use that for all types of kernel stacks.
|
|
We don't handle nesting yet, but this is a step in the right direction.
|
|
It's now possible to create symbolic links! :^)
This exposed an issue in Ext2FS where we'd write uninitialized data past
the end of an inode's content. Fix this by zeroing out the tail end of
the last block in a file.
|
|
/bin/cp will now copy the permission bits from source to destination. :^)
|
|
|
|
|
|
It now builds and runs in the small-featureset configuration. :^)
|
|
I'm still feeling this out, but I am starting to like the general idea.
|
|
Dealing with the unsigned overflow propagation here just seems unreasonably
error prone. Let's limit ourselves to 2GB buffer sizes instead.
|
|
|
|
|
|
Get rid of the convoluted get_arguments and get_environment syscalls.
This patch also adds a simple /bin/env that just prints its environment.
|
|
|
|
Also show setuid and setgid bits in "ls -l" output. :^)
|
|
There's always a current working directory inode.
|
|
Fail with EACCES in various situations. Fix userland bugs that were exposed.
|
|
This accidentally grew into a little bit of VFS cleanup as well.
Also add a simple /bin/ln implementation to exercise it.
|
|
When the kernel performs a successful exec(), whatever was on the kernel
stack for that process before goes away. For this reason, we need to make
sure we don't have any stack objects holding onto kmalloc memory.
|
|
|
|
There are no more kernel bitmaps. It's much better this way.
|
|
This is a monster patch that required changing a whole bunch of things.
There are performance and stability issues all over the place, but it works.
Pretty cool, I have to admit :^)
|
|
And use this to implement shared bitmaps between WindowServer and clients.
|
|
|
|
Currently you can only mmap the entire framebuffer.
Using this when starting up the WindowServer gets us yet another step
closer towards it moving into userspace. :^)
|
|
This is quite nice, although I wish [[gnu::always_inline]] implied inline.
Also "gnu::" is kind of a wart, but whatcha gonna do.
|