Andreas Kling
4d5fe39494
FileManager: Start building a file manager.
2019-02-09 09:22:04 +01:00
Andreas Kling
8ae7be611a
LibC: closedir() should free the readdir() buffer and the DIR itself.
2019-02-09 09:08:27 +01:00
Andreas Kling
c4e984ca49
Kernel: Allow mmap() with a size that's not a multiple of page size.
...
We just round it up to the next multiple of page size anyway.
2019-02-09 08:44:46 +01:00
Andreas Kling
fa241747af
Kernel: When donating ticks to a lock holder, cap the donation.
...
When donating ticks to a lock holder, never donate more ticks than
that process would normally get from the scheduler.
2019-02-08 22:06:30 +01:00
Andreas Kling
cb6e852620
SharedGraphics: Don't eagerly commit mmap'ed font files in kernel.
...
Just let the page fault handler do its thing. Anytime we can avoid
loading some pages from disk, that's a good thing.
2019-02-08 21:59:06 +01:00
Andreas Kling
b365ad4aef
LibC: fgetc() and pals should return EOF on error or EOF.
...
This was the reason that "uname | figlet" wasn't working. There was nothing
wrong with the pipe like I kept thinking.
2019-02-08 17:49:54 +01:00
Andreas Kling
c9aaf74e1d
LibC: Add some more fake termcap entries to silence bash-5.0.
2019-02-08 17:49:25 +01:00
Andreas Kling
6274208eb9
Ext2FS: Fix bitmap overrun when reaching outside the first block group.
2019-02-08 17:14:51 +01:00
Andreas Kling
a6f9ddbb58
Let's have two wallpapers installed so we can test switching.
2019-02-08 17:14:47 +01:00
Andreas Kling
cf58b76210
SharedGraphics: GraphicsBitmap::load_from_file() should be allowed to fail.
...
It's okay if it fails to load a bitmap in kernel space. Just return nullptr.
2019-02-08 16:49:05 +01:00
Andreas Kling
d4ba155711
Kernel: Break retain cycle between Inode and VMObject.
...
There's no need for an Inode to keep its corresponding VMObject alive.
Obviously there are huge benefits to keeping a filesystem cache,
but leaking everything is hardly the right strategy. :^)
2019-02-08 16:40:48 +01:00
Andreas Kling
e1be5a468d
Userland: Add a /bin/pape helper program to switch the desktop wallpaper.
2019-02-08 16:22:54 +01:00
Andreas Kling
33d34d9b26
Kernel: Use a Lockable<bool> for sysctl booleans as well.
2019-02-08 16:18:24 +01:00
Andreas Kling
e78e032c19
Add a little ReadMe.
2019-02-08 11:06:34 +01:00
Andreas Kling
f8fc892bac
Remove _fs_contents.stock and generate it on the fly instead.
2019-02-08 09:56:39 +01:00
Andreas Kling
7a996e608c
WindowServer: Allow changing the desktop wallpaper through a sysctl.
...
Just write the path of your new wallpaper to /proc/sys/wm_wallpaper. :^)
2019-02-08 09:49:09 +01:00
Andreas Kling
cda598c29c
SharedGraphics: Allocate file-backed kernel GraphcisBitmaps in WindowServer.
2019-02-08 09:48:28 +01:00
Andreas Kling
004aad0995
WindowServer: Set the WSMessageLoop::server_process() as early as possible.
2019-02-08 09:47:57 +01:00
Andreas Kling
a3799cb71e
ProcFS: Add sysctl strings.
...
They are backed by a Lockable<String> to ensure that access is synchronized.
2019-02-08 09:46:46 +01:00
Andreas Kling
dabb3c902a
AK: Add a Lockable wrapping container.
2019-02-08 09:46:13 +01:00
Andreas Kling
7e623e7ff2
Process: Dump regions when a ring0 process crashes.
2019-02-08 09:45:53 +01:00
Andreas Kling
90d3375dc2
WindowServer: Support desktop wallpapers.
...
For now, you don't get to choose the wallpaper, but it's still pretty cool.
2019-02-08 08:45:59 +01:00
Andreas Kling
2736957701
Ext2FS: Fix dumb bitmap size bug in *_inode_allocation_state().
2019-02-08 08:43:08 +01:00
Andreas Kling
736e852525
LibC: Implement enough missing stuff to get bash-5.0 running. :^)
2019-02-08 02:38:21 +01:00
Andreas Kling
5158bee08c
Don't use -mregparm=3 in userspace.
...
It's pretty comfy having arguments in registers in the kernel for now though.
2019-02-08 01:24:52 +01:00
Andreas Kling
04378d9063
Terminal: Use the same cursor rect for active/inactive windows.
2019-02-08 00:21:02 +01:00
Andreas Kling
6d7f000ffc
Launcher: Factor the app buttons into a LaunchButton class.
...
Added some LibGUI helpers while I'm at it.
2019-02-08 00:15:04 +01:00
Andreas Kling
bf766fc12c
LibGUI: Implement GWindow::rect().
2019-02-08 00:13:35 +01:00
Andreas Kling
2ac697ca09
LibC: execl() forgot to add the null sentinel to argv.
2019-02-08 00:12:35 +01:00
Andreas Kling
f4bce03716
Kernel: When validating a string read, validate the pointer first.
...
Calling strlen() on an invalid pointer is just gonna crash the process.
2019-02-08 00:10:01 +01:00
Andreas Kling
887b4a7a1a
Start working on a simple Launcher app.
...
Let GButton have an optional icon (GraphicsBitmap) that gets rendered in the
middle of the button if present.
Also add GraphicsBitmap::load_from_file() which allows mmap'ed RGBA32 files.
I wrote a little program to take "raw" files from GIMP and swizzle them into
the correct byte order.
2019-02-07 23:17:06 +01:00
Andreas Kling
71b9ec1ae0
Kernel: Add basic process priority support.
...
For now, the WindowServer process will run with high priority,
while the Finalizer process will run with low priority.
Everyone else gets to be "normal".
At the moment, priority simply determines the size of your time slices.
2019-02-07 12:21:17 +01:00
Andreas Kling
ee2bb98b88
Kernel: Increase default time slice to 20ms.
2019-02-07 11:53:45 +01:00
Andreas Kling
dc7f257c01
Kernel: Remove a bunch of unnecessary InterruptDisablers.
2019-02-07 11:24:09 +01:00
Andreas Kling
5582a0a254
Kernel: When a lock is busy, donate remaining process ticks to lock holder.
...
Since we know who's holding the lock, and we're gonna have to yield anyway,
we can just ask the scheduler to donate any remaining ticks to that process.
2019-02-07 11:14:58 +01:00
Andreas Kling
4df92709c8
Kernel: Add proper locking to SynthFS and stop disabling interrupts.
2019-02-07 10:47:11 +01:00
Andreas Kling
b5e5541cbc
Kernel: Remove an unnecessary InterruptDisabler in SynthFS.
2019-02-07 10:42:00 +01:00
Andreas Kling
3fc3a8d7bc
Kernel: Remove some unnecessary zero initialization now that BSS is cleared.
2019-02-07 10:31:32 +01:00
Andreas Kling
2e663eda36
Kernel: Don't disable interrupts to access the system hostname.
2019-02-07 10:29:26 +01:00
Andreas Kling
458706c4cf
Kernel: Let's try disabling the CPU's page-level caching for framebuffers.
2019-02-07 09:24:41 +01:00
Andreas Kling
44e1a45b2a
AK: Optimize Vector::append(Vector&&) for case where this->m_impl is null.
2019-02-07 09:09:30 +01:00
Andreas Kling
443d1c2237
WindowServer: Coordinate double-buffering with the BochsVGA card.
...
Use the BochsVGA card's virtual-height + virtual-y features to implement
a "hardware double buffering" type scheme.
This is a performance degradation since we now draw a bunch more than before.
But there's also no tearing or cursor flickering. I'm gonna commit this and
try to improve upon it. :^)
2019-02-07 08:56:26 +01:00
Andreas Kling
1f159eaab0
Add a fast memcpy() using MMX when we're moving >= 1KB.
...
This is a nice speedup for WindowServer. I'll eventually have to do this
with SSE but the kernel doesn't support SSE yet so this is it for now.
2019-02-07 08:46:52 +01:00
Andreas Kling
e29060620f
WindowServer: Improve parsing of mouse packets.
2019-02-07 08:08:08 +01:00
Andreas Kling
a537d78ac0
Kernel: Drivers for PS/2 mouse and keyboard kept stealing from each other.
...
We need to look at the i8042 status register to see if the packets in the
PS/2 controller's output buffer are mouse or keyboard packets.
This fixes occasionally surprising inputs while using both devices.
2019-02-07 07:58:26 +01:00
Andreas Kling
26f4301521
Kernel: Stop spamming the kernel log buffer when loading ksyms.
2019-02-06 18:52:12 +01:00
Andreas Kling
6cba80510e
Kernel: Add a Finalizer process to take care of dying processes.
...
Instead of processes themselves getting scheduled to finish dying,
let's have a Finalizer process that wakes up whenever someone is dying.
This way we can do all kinds of lock-taking in process cleanup without
risking reentering the scheduler.
2019-02-06 18:45:21 +01:00
Andreas Kling
e05237485c
Kernel: Various stability improvements.
...
- Don't cli() in Process::do_exec() unless current is execing.
Eventually this should go away once the scheduler is less retarded
in the face of interrupts.
- Improved memory access validation for ring0 processes.
We now look at the kernel ELF header to determine if an access
is appropriate. :^) It's very hackish but also kinda neat.
- Have Process::die() put the process into a new "Dying" state where
it can still get scheduled but no signals will be dispatched.
This way we can keep executing in die() but won't get our EIP
hijacked by signal dispatch. The main problem here was that die()
wanted to take various locks.
2019-02-06 17:34:27 +01:00
Andreas Kling
03c0e836f0
Kernel: Fix some broken debugging code in VFS.
2019-02-06 17:34:27 +01:00
Andreas Kling
d0b2949b4d
AK: Lock should ASSERT_INTERRUPTS_ENABLED().
...
Trying to take a Lock while interrupts are disabled is always a bug.
2019-02-06 17:34:24 +01:00