akaros.git
8 years agoFixes a bug with ptsname
Barret Rhoden [Thu, 2 Sep 2010 23:56:32 +0000 (16:56 -0700)]
Fixes a bug with ptsname

Turns out there was some stale object files sitting around between
builds.

8 years agoFixes bug in close_all_files()
Barret Rhoden [Tue, 24 Aug 2010 22:49:03 +0000 (15:49 -0700)]
Fixes bug in close_all_files()

8 years agoFixes bug in spinlock_debug
Barret Rhoden [Tue, 24 Aug 2010 22:14:03 +0000 (15:14 -0700)]
Fixes bug in spinlock_debug

It's possible to call procinfo on a process that never ran (and thus
never set a call-site).

8 years agoFixed file insertion of stdin/stdout/stderr
Barret Rhoden [Tue, 24 Aug 2010 22:06:28 +0000 (15:06 -0700)]
Fixed file insertion of stdin/stdout/stderr

Fork clones, so we don't want to bother inserting for those.  If we did,
we could run into issues with programs that dup then close the original
FDs.  This fix handles that and is reasonable enough.

8 years agosys_read() from /dev/stdin
Barret Rhoden [Tue, 24 Aug 2010 20:37:50 +0000 (13:37 -0700)]
sys_read() from /dev/stdin

Via the readline, used by the monitor.  As a pleasant side effect,
readline and monitor are less ghetto.

8 years agosys_fcntl() supports dup
Barret Rhoden [Tue, 24 Aug 2010 18:59:02 +0000 (11:59 -0700)]
sys_fcntl() supports dup

Fixes a bug in fcntl too, not that anyone uses it.

8 years agoFixes path_lookup() for "/" and LOOKUP_PARENT
Barret Rhoden [Tue, 24 Aug 2010 06:24:33 +0000 (23:24 -0700)]
Fixes path_lookup() for "/" and LOOKUP_PARENT

You can't do that lookup.  It was returning "/", as if it was the
parent.  Now, if you try that lookup, you'll get an error.  There might
be ways to trigger it that we aren't covering yet - the nd->last.name is
getting set by whoever was in a parental role, but link_path_walk() is
tricky.

This patch also fixes up do_file_open() a bit - overall it's a bit
clearer and can handle a lookup for "/" (no need to get the parent if
you can open it directly).

8 years agoFile mode stored in i_mode
Barret Rhoden [Tue, 24 Aug 2010 04:55:42 +0000 (21:55 -0700)]
File mode stored in i_mode

This is what stat and glibc expect, so we do it in the kernel now,
instead of mucking with i_type.  The use of the macros makes this much
nicer anyways.

8 years agobin_run programs can take arguments
Barret Rhoden [Tue, 24 Aug 2010 00:22:44 +0000 (17:22 -0700)]
bin_run programs can take arguments

8 years ago/dev/stdout support via a devfs
Barret Rhoden [Tue, 24 Aug 2010 00:03:50 +0000 (17:03 -0700)]
/dev/stdout support via a devfs

It's not a real FS - just KFS entries that have their f_op overriden.
It's a nice helper so processes can treat the stds as files.  /dev/stdin
is there, but doesn't do anything yet.

8 years agoSyscall tracing improvements
Barret Rhoden [Mon, 23 Aug 2010 20:47:40 +0000 (13:47 -0700)]
Syscall tracing improvements

The tracer now outputs the call's name and records the arguments.

8 years agosys_setuid() and sys_getuid() (XCC)
Barret Rhoden [Mon, 23 Aug 2010 19:30:07 +0000 (12:30 -0700)]
sys_setuid() and sys_getuid() (XCC)

The syscalls don't actually do anything, but it allows processes to
think it worked.  The other option would be to have glibc just lie about
it, but we might do something with these calls in the future.

Rebuild your cross compiler if you want these functions.

8 years agoGlibc networking support (XCC)
Barret Rhoden [Mon, 23 Aug 2010 07:33:45 +0000 (00:33 -0700)]
Glibc networking support (XCC)

Glibc now builds its network-support libraries and subdirs.  It wasn't
before, leading to some ugly hacks elsewhere.  While ROS doesn't support
the networking system calls (lots of stubs will just fail, many
silently), at least some codes will be able to compile and eventually
we'll be able to add in the networking support we need.

This also adds some Documentation about how to work with the glibc
build system we have.  Further documentation about glibc/gcc and all of
that is still a TODO: kevin/andrew.

P.S. Rebuild your cross compiler.

8 years agoFixes MIN, MAX #including
Barret Rhoden [Mon, 23 Aug 2010 07:03:09 +0000 (00:03 -0700)]
Fixes MIN, MAX #including

Glibc has its own, in sys/param.h.

8 years agoAdds sys_mkdir() and sys_rmdir() (XCC)
Barret Rhoden [Sat, 21 Aug 2010 01:09:25 +0000 (18:09 -0700)]
Adds sys_mkdir() and sys_rmdir() (XCC)

Rebuild your cross-compiler.

Adds mkdir and rmdir, and has children incref their parent dir's nlink
count.  There are races with the nlink, and in general with concurrent
operations on the paths and objects.

Also unifies error handling styles in many of the do_whatever VFS
functions.

8 years agosys_chmod()
Barret Rhoden [Fri, 20 Aug 2010 00:15:33 +0000 (17:15 -0700)]
sys_chmod()

We don't use the mode for anything, but you can set it now!  Huzzah!

8 years agoTouched up testing functions
Barret Rhoden [Thu, 19 Aug 2010 23:56:01 +0000 (16:56 -0700)]
Touched up testing functions

The test_random_fs() is just a dumping ground for interactive tests that
I had sitting around in init.c.  Feel free to turn these into real
tests, or ones that panic on failure but are otherwise quiet and
side-effect free.

8 years agosys_umask()
Barret Rhoden [Thu, 19 Aug 2010 23:34:40 +0000 (16:34 -0700)]
sys_umask()

Too bad we don't use the masks or modes for much of anything yet.

8 years agosys_getcwd()
Barret Rhoden [Thu, 19 Aug 2010 23:27:31 +0000 (16:27 -0700)]
sys_getcwd()

Testers, feel free to check out the two ERANGE paths.  As a side note,
the kernel does not yet have a max on the size of the buffers it
allocates on a user's behalf...

8 years agosys_chdir()
Barret Rhoden [Thu, 19 Aug 2010 21:53:56 +0000 (14:53 -0700)]
sys_chdir()

Also fixes up some dentry refcounting issues.

8 years agosys_unlink()
Barret Rhoden [Thu, 19 Aug 2010 19:47:35 +0000 (12:47 -0700)]
sys_unlink()

Note that this isn't fully testable yet, since KFS pins all dentries
forever, which also means our {dentry,inode}_release paths are mostly
unused.  Eagle-eyed readers should know when those functions are called.

8 years agoMonitor function to show inodes
Barret Rhoden [Thu, 19 Aug 2010 19:45:10 +0000 (12:45 -0700)]
Monitor function to show inodes

Also fixes refcounting for the root inode.

8 years agoHard-links, via sys_link()
Barret Rhoden [Thu, 19 Aug 2010 02:23:54 +0000 (19:23 -0700)]
Hard-links, via sys_link()

8 years agoreaddir() and readdir_r() (XCC)
Barret Rhoden [Wed, 18 Aug 2010 05:50:32 +0000 (22:50 -0700)]
readdir() and readdir_r() (XCC)

We're currently allowing processes to read() directory FDs, in part
because that is how it was already.  The alternative is to pull in the
glibc stuff related to how Linux does their getdents(), and write that
syscall for ROS.  We'll see how programs really expect readdir() to work
(man 3 readdir, not man 2 readdir).

This patch also brings about per-filetype file_operations, which has
been on the radar/considered for a while.  Right now, they are just used
for having a different read method (and no write method) for
directories.

Rebuild your cross compiler if you want to use the readdir() functions.

8 years agosys_fcntl()
Barret Rhoden [Tue, 17 Aug 2010 22:53:27 +0000 (15:53 -0700)]
sys_fcntl()

Doesn't support DUPing yet, and probably will never support any of the
more painful POSIX things, like file locking.

8 years agox86: Fixes bug preventing the kernel from trapping
Barret Rhoden [Tue, 17 Aug 2010 17:15:48 +0000 (10:15 -0700)]
x86: Fixes bug preventing the kernel from trapping

You should only proc_restartcore() on a process tf, and the kernel
should return naturally.

8 years agoFixes bug with mprotect() and munmap()
Barret Rhoden [Tue, 17 Aug 2010 08:14:39 +0000 (01:14 -0700)]
Fixes bug with mprotect() and munmap()

This was hidden by the lack of TLB shootdowns (the old TLB entry was
being used still, so the faulty/extra mprotects weren't taking effect.

8 years ago__proc_tlb_shootdown() works for _S
Barret Rhoden [Tue, 17 Aug 2010 06:54:37 +0000 (23:54 -0700)]
__proc_tlb_shootdown() works for _S

It was silently doing nothing for quite a while for _S processes.

8 years agoPrograms think they are named after their symlink
Barret Rhoden [Tue, 17 Aug 2010 06:39:24 +0000 (23:39 -0700)]
Programs think they are named after their symlink

Instead of being named after their file_name(), they get their name from
the path (or whatever is in argv[0]).  Really only applicable to the
manager-spawned processes, but something userspace needs to keep in
mind.

8 years agoload_elf() zeros the BSS via the kernel mapping
Barret Rhoden [Tue, 17 Aug 2010 06:37:02 +0000 (23:37 -0700)]
load_elf() zeros the BSS via the kernel mapping

This needed to be done, will help with making PRIVATE mappings CoW, and
temporarily hid the effects of another bug.

8 years agoAllow the killing of PROC_CREATED processes
Barret Rhoden [Tue, 17 Aug 2010 02:56:14 +0000 (19:56 -0700)]
Allow the killing of PROC_CREATED processes

Might be issues with this, not heavily tested.

8 years agox86 page faults know about the reason for the PF
Barret Rhoden [Tue, 17 Aug 2010 02:16:23 +0000 (19:16 -0700)]
x86 page faults know about the reason for the PF

I love how when I track down a weird bug, I find a TODO at the end.

8 years agoSyscalls for symlink management (XCC)
Barret Rhoden [Tue, 17 Aug 2010 00:55:40 +0000 (17:55 -0700)]
Syscalls for symlink management (XCC)

Rebuild your cross compiler.

8 years agoKFS initrd supports symlinks
Barret Rhoden [Mon, 16 Aug 2010 17:42:40 +0000 (10:42 -0700)]
KFS initrd supports symlinks

8 years agoSymlinks!
Barret Rhoden [Sun, 15 Aug 2010 23:06:48 +0000 (16:06 -0700)]
Symlinks!

The VFS can handle them, for the most part.  KFS can make them, but not
from the CPIO yet.

8 years agofork/exec check for the current_tf
Barret Rhoden [Tue, 17 Aug 2010 18:55:58 +0000 (11:55 -0700)]
fork/exec check for the current_tf

These syscalls (and others) don't make sense remotely.  These two need
some sense of a current_tf (or more hackery) to work remotely (ARCs).
Hasn't been tested, etc.

8 years agoSorted out proc refcounting with ARCs
Barret Rhoden [Tue, 17 Aug 2010 18:31:49 +0000 (11:31 -0700)]
Sorted out proc refcounting with ARCs

8 years agoFixes when we add a new proc to the pidhash
Barret Rhoden [Tue, 17 Aug 2010 18:09:51 +0000 (11:09 -0700)]
Fixes when we add a new proc to the pidhash

Not all code paths use proc_create(), etc.

8 years agoSyncs up Makeconfig and the Makelocal.template
Barret Rhoden [Tue, 17 Aug 2010 17:26:02 +0000 (10:26 -0700)]
Syncs up Makeconfig and the Makelocal.template

There are still some _CONFIG_s that are unused in the kernel, but might
be used in the future (KFS), or that should go away entirely (ghetto
networking hacks).

8 years agoCheck for null location before setting errno and retval.
David Zhu [Mon, 16 Aug 2010 22:09:56 +0000 (15:09 -0700)]
Check for null location before setting errno and retval.

8 years agofixing sparc-specific compilation issues.
David Zhu [Sun, 15 Aug 2010 04:30:02 +0000 (21:30 -0700)]
fixing sparc-specific compilation issues.

8 years agoFixing syscalls to new seterrno and setretval.
David Zhu [Wed, 11 Aug 2010 23:17:12 +0000 (16:17 -0700)]
Fixing syscalls to new seterrno and setretval.

8 years agoMake errno and return value work for async syscalls.
David Zhu [Wed, 11 Aug 2010 06:08:23 +0000 (23:08 -0700)]
Make errno and return value work for async syscalls.

Added a level of indirection so that sparc/i386/async call can
change where to put errno and return value at run time.
Widespread seterrno changes forthcoming after merge.

8 years agoremove some unnecessary printing in the arsc server.
David Zhu [Fri, 6 Aug 2010 00:05:39 +0000 (17:05 -0700)]
remove some unnecessary printing in the arsc server.

8 years agoBring back the ARSC functionality that was removed earlier.
David Zhu [Wed, 4 Aug 2010 22:17:57 +0000 (15:17 -0700)]
Bring back the ARSC functionality that was removed earlier.

ARSC server are now running on a management core.
Separate lists are maintainted for those processes interested in ARSC.
Need to rebuild crosscompiler because of an addition to syscall numbers.

8 years agoKFS defaults (Read this if you have no files)
Barret Rhoden [Wed, 11 Aug 2010 00:23:07 +0000 (17:23 -0700)]
KFS defaults (Read this if you have no files)

You don't have to have anything in KFS (default kern/kfs), but you ought
to have a bin/ with your binaries and a lib/ with ld.so.1 and libc.so.6
(and any other libraries you link against).

There's also no automatic copying of test binaries, either to KFS or the
old FS folder, to save dev time, to keep the FS manageable, and to keep
the image size down for people using static apps.

8 years agolink_path_walk() can handle ../, ./, and lots of /
Barret Rhoden [Tue, 10 Aug 2010 23:52:10 +0000 (16:52 -0700)]
link_path_walk() can handle ../, ./, and lots of /

8 years agoClarifies issues in mprotect with MAP_PRIVATE
Barret Rhoden [Tue, 10 Aug 2010 21:22:37 +0000 (14:22 -0700)]
Clarifies issues in mprotect with MAP_PRIVATE

The main danger here is with dynamically loaded processes overwriting
libc.  Also note that after mprotecting, you may have mergeable VMRs
that aren't merged.

8 years agoAdded monitor command to do an "ls -R"
Barret Rhoden [Tue, 10 Aug 2010 20:31:44 +0000 (13:31 -0700)]
Added monitor command to do an "ls -R"

8 years agoFile modes and permissions
Barret Rhoden [Tue, 10 Aug 2010 06:59:18 +0000 (23:59 -0700)]
File modes and permissions

Better handling for creation modes, separation of flags and modes, and
things like that.  Also, mprotect() allows the upgrading of a file's
mmapping from its open mode to its desired mode, so long as it is
allowed by the inode's mode.

8 years agoFixed mmap() so that offset is a number of pages
Barret Rhoden [Tue, 10 Aug 2010 05:36:39 +0000 (22:36 -0700)]
Fixed mmap() so that offset is a number of pages

While the syscall/mmap() takes a number of pages, the rest of the system
tracks it as bytes - like the file pointer does.  See the change if
you're curious.

8 years agosys_stat() and friends
Barret Rhoden [Tue, 10 Aug 2010 00:27:16 +0000 (17:27 -0700)]
sys_stat() and friends

Not heavily tested, and the numbers are not necessarily "right."  The
syscall accurately reports the values in the inode, but some of them are
neither set properly xnor kept up to date.

8 years agoChanges stat interface
Barret Rhoden [Mon, 9 Aug 2010 22:46:53 +0000 (15:46 -0700)]
Changes stat interface

Rebuild your cross compiler.

struct stat and stat64 are the same (sizes and all), and the kernel
knows about the right sizes.  This also changes the glibc wrappers
around the stat family to not do the buffer conversion that we used to
do with the appserver.

8 years agoAssert to catch 5 args to sysenter
Barret Rhoden [Mon, 9 Aug 2010 19:18:10 +0000 (12:18 -0700)]
Assert to catch 5 args to sysenter

It's more likely that we'll accidentally send five args to sysenter than
actually fix our sysenter so we can have more args or come up with some
other scheme for syscalls with lots of arguments.

8 years agoSyscalls with strings take a length parameter
Barret Rhoden [Mon, 9 Aug 2010 18:34:30 +0000 (11:34 -0700)]
Syscalls with strings take a length parameter

Rebuild your cross compiler!  This has been a TODO for over a year now -
hurray!

8 years agoCatch negative FDs
Barret Rhoden [Mon, 9 Aug 2010 18:33:36 +0000 (11:33 -0700)]
Catch negative FDs

8 years agosys_access()
Barret Rhoden [Sat, 7 Aug 2010 01:06:11 +0000 (18:06 -0700)]
sys_access()

Since we don't have any resembling security or users, we just attempt a
lookup.  It can tell if files don't exist (ENOENT), but that's about it
for now.

8 years agoRemoved sys_brk()
Barret Rhoden [Sat, 7 Aug 2010 00:27:42 +0000 (17:27 -0700)]
Removed sys_brk()

It's been deprecated for a while, and no one uses it.

8 years agosys_read(), sys_write(), and sys_lseek()
Barret Rhoden [Fri, 6 Aug 2010 22:47:38 +0000 (15:47 -0700)]
sys_read(), sys_write(), and sys_lseek()

8 years agouser_strdup() forces null termination
Barret Rhoden [Fri, 6 Aug 2010 20:30:23 +0000 (13:30 -0700)]
user_strdup() forces null termination

The previous version checked for it and failed if it wasn't null
terminated.  This one just makes it null-terminated, and clarifies it's
usage.  Specifically, it is meant for when we know a string's length,
which will be the case for all syscalls eventually (patch pending).

8 years agoChanges the pidhash to be an internal reference
Barret Rhoden [Fri, 6 Aug 2010 19:20:10 +0000 (12:20 -0700)]
Changes the pidhash to be an internal reference

In sync with kref usage patterns, easier to understand, and fixes a bug
with removing from the pidhash before freeing (which messed up
sys_try_wait()).

Side note: this patch changes more documentation than code (which was
really just one change and one move).

8 years agoFork and exec handle files better
Barret Rhoden [Fri, 6 Aug 2010 06:18:43 +0000 (23:18 -0700)]
Fork and exec handle files better

A fork-created process has the same files as its parent, and exec'd
process will close all of its O_CLOEXEC files.  Not tested much.

8 years agoPulled file and directory creation up into the VFS
Barret Rhoden [Fri, 6 Aug 2010 03:16:37 +0000 (20:16 -0700)]
Pulled file and directory creation up into the VFS

8 years agoRevisited dentry and inode creation
Barret Rhoden [Fri, 6 Aug 2010 01:39:50 +0000 (18:39 -0700)]
Revisited dentry and inode creation

Pulled out VFS stuff from the alloc_inode, and reworked how it worked
with get_dentry().  get_dentry() will now have a d_ops set for most
dentries (except for the parentless, which needs to be handled by the
mounting).

8 years agoFile opening revisited
Barret Rhoden [Fri, 6 Aug 2010 00:46:26 +0000 (17:46 -0700)]
File opening revisited

Pulled all of the file opening out of KFS and into the VFS,
and converted old usages of path_to_file() to use do_file_open().

8 years agoAdd a default initramfs path to allow default builds.
David Zhu [Thu, 5 Aug 2010 22:57:58 +0000 (15:57 -0700)]
Add a default initramfs path to allow default builds.

Any builds without a Makelocal file should still work by default.
This change makes that happen.

8 years agoUses kref in the FS, fixes up refcount bugs
Barret Rhoden [Thu, 5 Aug 2010 02:52:35 +0000 (19:52 -0700)]
Uses kref in the FS, fixes up refcount bugs

References are still a bit messy, esp regarding the sb and vfsmounts.
Also, KFS "pins all paths," which makes it difficult to check the dentry
and inode release paths.  Lots of TODOs left.

Also, this changes f_inode to f_dentry for reasons intuitively obvious
to the casual observer.

8 years agoDestroys vmrs on __proc_free()
Barret Rhoden [Wed, 4 Aug 2010 23:08:31 +0000 (16:08 -0700)]
Destroys vmrs on __proc_free()

8 years agoKref changes and tweaks
Barret Rhoden [Tue, 3 Aug 2010 23:56:07 +0000 (16:56 -0700)]
Kref changes and tweaks

No change in usage for processes, but a bunch of changes with how they
will work for the filesystem.

8 years agoAdded krefs, used them for process refcounting
Barret Rhoden [Thu, 29 Jul 2010 01:09:40 +0000 (18:09 -0700)]
Added krefs, used them for process refcounting

krefs: the approved solution for reference counting.

Removes old proc_increfs, decrefs, manual env_refcnting, cries for
lockless refcounting, a couple bugs, and eleven TODOs!

8 years agoAdds useful atomics
Barret Rhoden [Wed, 28 Jul 2010 21:50:44 +0000 (14:50 -0700)]
Adds useful atomics

8 years agoFixes compilation issues for sparc
Barret Rhoden [Wed, 28 Jul 2010 21:50:17 +0000 (14:50 -0700)]
Fixes compilation issues for sparc

8 years agosys_open() and sys_close()
Barret Rhoden [Wed, 28 Jul 2010 03:15:35 +0000 (20:15 -0700)]
sys_open() and sys_close()

A process can open and close files.  There's some refcounting issues,
which will be worked on soonish.

8 years agoConverts sys_exec / proc_create to use umem
Barret Rhoden [Mon, 26 Jul 2010 23:05:05 +0000 (16:05 -0700)]
Converts sys_exec / proc_create to use umem

Also fixes a bug with dynamically linked binaries not starting properly
if they were sys_proc_create()d.  The arguments need to be set before
loading the elf, which can be fixed if we come up with a good way to do
argument passing.

8 years agoFixed bug in reading elf headers
Barret Rhoden [Mon, 26 Jul 2010 22:05:50 +0000 (15:05 -0700)]
Fixed bug in reading elf headers

Need to be careful about reading or writing a file on behalf of the
kernel.  If current is set, the file read/write will think it is the
user, and fail to write to a kernel buffer.  Marked as TODO: KFOP.

8 years agoReorganized user-memory checking/copying functions
Barret Rhoden [Mon, 26 Jul 2010 20:52:58 +0000 (13:52 -0700)]
Reorganized user-memory checking/copying functions

Put them all in one place.  If I missed any, move them to umem.{h,c}.

8 years agoload_elf() uses the FS for dynamics
Barret Rhoden [Mon, 26 Jul 2010 20:05:38 +0000 (13:05 -0700)]
load_elf() uses the FS for dynamics

Though we don't support enough syscalls yet, so don't bother using it.

8 years agosys_exec() uses the FS, sys_proc_create takes args
Barret Rhoden [Mon, 26 Jul 2010 17:43:15 +0000 (10:43 -0700)]
sys_exec() uses the FS, sys_proc_create takes args

Rebuild your cross compiler!

The syscalls take a path, instead of a file descriptor, similarly to
linux, and mostly due to it being unclear whether a process should have
its program open().  Also, sys_open() doesn't use the FS yet...

Both syscalls still use the ghetto-procinfo-style arg packing, since
it's a pain to change.  I like not having the kernel worry about argv
packing, but struct procinfo is about 3 pages huge.

8 years agoFixed up manager macros and fork()'s test
Barret Rhoden [Fri, 23 Jul 2010 23:33:28 +0000 (16:33 -0700)]
Fixed up manager macros and fork()'s test

8 years agoRemoved sys_run_binary()
Barret Rhoden [Fri, 23 Jul 2010 21:30:25 +0000 (14:30 -0700)]
Removed sys_run_binary()

8 years agoGuts load_icode and proc_create() takes a path
Barret Rhoden [Fri, 23 Jul 2010 21:21:15 +0000 (14:21 -0700)]
Guts load_icode and proc_create() takes a path

This guts the old load_icode() way of making a process and makes
proc_create() play with the filesystem.  proc_create() also takes args,
but the syscall doesn't.  Will sort that eventually.

8 years agoGuts the old KFS!
Barret Rhoden [Fri, 23 Jul 2010 18:59:21 +0000 (11:59 -0700)]
Guts the old KFS!

Note that sys_proc_create() hasn't been changed to make processes the
appropriate way, and that a couple of the managers don't work properly,
since they were based on KFS and/or try to load binaries that don't
exist.

8 years agokfs_run and friends use the FS and s/kfs/bin/
Barret Rhoden [Fri, 23 Jul 2010 18:41:06 +0000 (11:41 -0700)]
kfs_run and friends use the FS and s/kfs/bin/

The monitor functions will ls and run programs out of the bin directory,
however you get one of those.  For KFS, make a bin/ directory in
whatever folder you pull from for your initramfs (e.g. kern/kfs) and put
your binaries in there.

8 years agoload_elf() uses the FS for static programs
Barret Rhoden [Fri, 23 Jul 2010 02:50:21 +0000 (19:50 -0700)]
load_elf() uses the FS for static programs

Once we get a couple helper functions, we can load the interp too.

8 years agoMAP_PRIVATE with PROT_WRITE
Barret Rhoden [Fri, 23 Jul 2010 02:31:35 +0000 (19:31 -0700)]
MAP_PRIVATE with PROT_WRITE

Allows mmap() to handle private writable regions.  For now, it will
immediately give you a fresh copy, instead of trying to CoW it when
write-faulted.  Due to the way we'll load elves, we'll need to have the
kernel be able to page fault if we want to change this.

8 years agoRadix Bug - growing quickly
Barret Rhoden [Fri, 23 Jul 2010 02:30:56 +0000 (19:30 -0700)]
Radix Bug - growing quickly

Allows growing by more than one level at a time...

8 years agoFixes radix tree bug
Barret Rhoden [Fri, 23 Jul 2010 00:31:50 +0000 (17:31 -0700)]
Fixes radix tree bug

Be more careful with masking, and write more tests!  This was a pain to
find when the FS was reordering pages somewhere else...

8 years agoPrimitive path_lookup()
Barret Rhoden [Wed, 21 Jul 2010 20:59:14 +0000 (13:59 -0700)]
Primitive path_lookup()

It can't handle mount points, symlinks, and probably a few corner cases.
Its refcounting is probably wrong too, esp related to what gets pinned
from a fs_lookup().  As with everything, it needs testing, bug fixes,
etc...

8 years agoFile <-> file descriptor management
Barret Rhoden [Tue, 20 Jul 2010 02:16:51 +0000 (19:16 -0700)]
File <-> file descriptor management

mmap() now works with file descriptors.  Of course, you the process to
open a file first, which you have to do manually...

8 years agostruct proc FS structures and preprocessor hacks
Barret Rhoden [Mon, 19 Jul 2010 22:01:02 +0000 (15:01 -0700)]
struct proc FS structures and preprocessor hacks

8 years agoUses i_type for the filetype
Barret Rhoden [Mon, 19 Jul 2010 19:56:08 +0000 (12:56 -0700)]
Uses i_type for the filetype

We were using i_flags for the type (directory, file, etc), which is
clearly wrong.  Linux uses the i_mode for type and access, but for now
we'll explicitly have the i_type.

8 years agodo_mmap() checks in with the FS
Barret Rhoden [Mon, 19 Jul 2010 19:41:56 +0000 (12:41 -0700)]
do_mmap() checks in with the FS

8 years agogeneric_file_write() and file holes
Barret Rhoden [Mon, 19 Jul 2010 18:31:17 +0000 (11:31 -0700)]
generic_file_write() and file holes

readpage() is supposed to handle hole (use a 0'd page).  KFS can handle
extending files and dealing with the holes, though they won't get saved,
which may be an issue once we start evicting from the page cache.  Also,
there are no constraints on file sizes or anything like that.

8 years agogeneric_file_read()
Barret Rhoden [Fri, 16 Jul 2010 22:22:21 +0000 (15:22 -0700)]
generic_file_read()

Common read function that most FSs will use, utilizing the page cache.

8 years agoPage cache for memory mapped files
Barret Rhoden [Fri, 16 Jul 2010 20:13:02 +0000 (13:13 -0700)]
Page cache for memory mapped files

Ties the radix trees and page maps into the VFS, KFS, and mmap().  Still
lots of little corner cases, it can't block yet, and I bet we're
screwing something up with page refcounting (which will cause memory
leaks).

Big note: this breaks support for appserver-managed files.  It had to
happen sooner or later.  The memory mapping currently only works for
files through do_mmap, since processes don't know about files yet.

8 years agoRadix Trees!
Barret Rhoden [Wed, 14 Jul 2010 03:44:10 +0000 (20:44 -0700)]
Radix Trees!

Basics of a radix tree, mapping key->void*.  Some very basic testing.

8 years agoInitial page cache structures
Barret Rhoden [Fri, 9 Jul 2010 22:59:15 +0000 (15:59 -0700)]
Initial page cache structures

Also changed a few things with the struct page and some of its
functions, including making it use atomics (albeit poorly).  For now,
don't trust page_incref() and page_decref() to work concurrently.

8 years agommap() errnos
Barret Rhoden [Thu, 8 Jul 2010 22:05:51 +0000 (15:05 -0700)]
mmap() errnos

8 years agommap() merges, fixed 0-page allocation bug
Barret Rhoden [Thu, 8 Jul 2010 21:04:12 +0000 (14:04 -0700)]
mmap() merges, fixed 0-page allocation bug

do_mmap() will attempt to merge its new VMR, which will help a bit
(although it might not be the best way to do things).

There was also a bug with VMR requests for the 0th page, which is now
fixed.  You can create that vmr, but it's not recommended.  mmap() and
friends will check to make sure userspace doesn't affect the 0th page.
Also note that glibc did not like getting the 0 page, for whatever
reason.

8 years agoRenamed vm_prot from vm_perm to be more consistent
Barret Rhoden [Thu, 8 Jul 2010 19:19:03 +0000 (12:19 -0700)]
Renamed vm_prot from vm_perm to be more consistent