9 years agoExt2 uses the page cache for block metadata
Barret Rhoden [Wed, 29 Sep 2010 01:56:21 +0000 (18:56 -0700)]
Ext2 uses the page cache for block metadata

This is a cool commit - everything just worked (or seemed to), including
the untested readpage().  Just say it has a page mapping, then call
pm_load_page(), and you get an incref'd page back.

9 years agoBlock requests consist of buffer heads
Barret Rhoden [Wed, 29 Sep 2010 00:11:45 +0000 (17:11 -0700)]
Block requests consist of buffer heads

Compared to just a start position and length.  This will allow
submitting multiple (possibly unrelated) blocks in one request, and
simplifies sleeping when we potentially want to submit several requests
at once.

9 years agoConverts page_map for bdev usage
Barret Rhoden [Tue, 28 Sep 2010 22:33:09 +0000 (15:33 -0700)]
Converts page_map for bdev usage

Both inodes and blockdevs now have page mappings.  The block_readpage is
untested (and unused).

9 years agoChanged readpage() to not require a file
Barret Rhoden [Tue, 28 Sep 2010 20:41:31 +0000 (13:41 -0700)]
Changed readpage() to not require a file

It's just about the page mapping, not about a file.

9 years agoFixed gcc build issue
Barret Rhoden [Mon, 27 Sep 2010 21:02:14 +0000 (14:02 -0700)]
Fixed gcc build issue

Some systems are pickier than others about ghetto usages of patch.

9 years agoFixes Makeconfig bug
Barret Rhoden [Mon, 27 Sep 2010 18:15:05 +0000 (11:15 -0700)]
Fixes Makeconfig bug

9 years agoBuffer heads to track page mappings -> block num
Barret Rhoden [Fri, 24 Sep 2010 19:55:31 +0000 (12:55 -0700)]
Buffer heads to track page mappings -> block num

Just for the page mapping so far (no other IO uses it).

9 years agoFixes bug with radix_delete()
Barret Rhoden [Fri, 24 Sep 2010 07:10:41 +0000 (00:10 -0700)]
Fixes bug with radix_delete()

Some minor issues still, which we'll have to sort when we delete the
whole tree.  Either way works...

9 years agoFixes page reference counting wrt to upage_alloc()
Barret Rhoden [Thu, 23 Sep 2010 23:44:06 +0000 (16:44 -0700)]
Fixes page reference counting wrt to upage_alloc()

upage_alloc() returns a reference counted page.  page_insert() and
friends will incref it when it stores the reference.  When you are done
using the struct page * that upage_alloc() returned, you must decref.
Just like other pointers and objects.

9 years agoCleaned up page_free()
Barret Rhoden [Thu, 23 Sep 2010 22:19:22 +0000 (15:19 -0700)]
Cleaned up page_free()

Removed it, actually, putting its functionality in page_release(), and
removing the few places that called it directly.  The way to free a page
is to decref it, not to call page_free() (or release).  This might
change when we get a decent buddy allocator.

We'll keep __page_decref() around for a while; it exists to optimize
bulk page freeing (adding to the page free list).

9 years agoRemoved some unused page functions
Barret Rhoden [Thu, 23 Sep 2010 21:51:23 +0000 (14:51 -0700)]
Removed some unused page functions

Also gutted the unmaintained shared page syscall.  It will need a
rewrite given the latest kernel functions, whenever we get around to
needing it.

9 years agoUses kref for struct page
Barret Rhoden [Thu, 23 Sep 2010 21:47:45 +0000 (14:47 -0700)]
Uses kref for struct page

Some ghettoness, due to the way upage_alloc works.

9 years agoFixes icache_put on creation and KFS refcounting
Barret Rhoden [Thu, 16 Sep 2010 00:55:10 +0000 (17:55 -0700)]
Fixes icache_put on creation and KFS refcounting

KFS decrefs its pinned-path on rmdir/unlink, and doesn't drop a ref when
parsing the cpio.

9 years agoDentry cache pruning function
Barret Rhoden [Thu, 16 Sep 2010 00:24:02 +0000 (17:24 -0700)]
Dentry cache pruning function

Ideally, this will be called whenever the kernel realizes it is running
low on memory or when it proactively wants to flush unused (or at least
just negative) dentries.

Also, this replaces sys/queue.h with a more recent BSD one.

9 years agoFixes TLS for statically linked apps in _M mode
Barret Rhoden [Wed, 15 Sep 2010 02:14:41 +0000 (19:14 -0700)]
Fixes TLS for statically linked apps in _M mode

9 years agoFixed sparc compiling
Barret Rhoden [Wed, 15 Sep 2010 02:09:52 +0000 (19:09 -0700)]
Fixed sparc compiling

9 years agoRevised coding and development policies
Barret Rhoden [Tue, 14 Sep 2010 17:55:44 +0000 (10:55 -0700)]
Revised coding and development policies

9 years agormdir() can't remove mountpoints
Barret Rhoden [Mon, 13 Sep 2010 23:57:17 +0000 (16:57 -0700)]
rmdir() can't remove mountpoints

9 years agoInode cache
Barret Rhoden [Sat, 11 Sep 2010 02:43:49 +0000 (19:43 -0700)]
Inode cache

Much easier than the dentry cache...  Which should tell you something
about the relative difficulty of different kref models.

Incidentally, these caches are necessary, at least for the in-use
objects, so that multiple lookups get the same object.  imagine having an
open file, while some other thread tries a lookup.  Without a dentry
cache, you'd get different in-memory objects for the same path.  Without
the inode cache, you'd get different objects for the same disk file if
you came in via different hard links.

9 years agoDentry cache
Barret Rhoden [Fri, 10 Sep 2010 23:58:20 +0000 (16:58 -0700)]
Dentry cache

This is pretty hefty, and shows some of the issues associated with the
'cached kref'.

9 years agoext2_dealloc_inode(), clarifies dealloc vs delete
Barret Rhoden [Wed, 8 Sep 2010 01:37:24 +0000 (18:37 -0700)]
ext2_dealloc_inode(), clarifies dealloc vs delete

9 years agoReaddir fixes, ext2_readdir()
Barret Rhoden [Wed, 8 Sep 2010 00:18:03 +0000 (17:18 -0700)]
Readdir fixes, ext2_readdir()

Ext2 directories can now be read / ls'd.  Note we are leaking inodes.

This also decouples d_off from the implementation of generic_dir_read(),
such that it's an FS-internal hint.  Also fixes a couple bugs and allows
"fs ls" to cross mount points.

9 years agoPushes the empty dir check into fs->rmdir()
Barret Rhoden [Mon, 6 Sep 2010 04:07:36 +0000 (21:07 -0700)]
Pushes the empty dir check into fs->rmdir()

9 years agoreaddir() now reports . and ..
Barret Rhoden [Mon, 6 Sep 2010 03:50:25 +0000 (20:50 -0700)]
readdir() now reports . and ..

Change was only to KFS, and also has the root ("/") dentry track itself
as its parent.

9 years agoFixed a dir's i_nlink to track only child dirs
Barret Rhoden [Mon, 6 Sep 2010 02:07:51 +0000 (19:07 -0700)]
Fixed a dir's i_nlink to track only child dirs

And not child files.  I didn't make up the rules.

9 years agoMonitor FS commands query all superblocks
Barret Rhoden [Sat, 4 Sep 2010 00:59:21 +0000 (17:59 -0700)]
Monitor FS commands query all superblocks

9 years agoext2: lookup() and read_ino_block()
Barret Rhoden [Sat, 4 Sep 2010 00:23:34 +0000 (17:23 -0700)]
ext2: lookup() and read_ino_block()

Note the read_ino_block() is completely untested for anything requiring
any levels of indirection (files larger than 12KB).

9 years agoext2: alloc_ and read_inode()
Barret Rhoden [Thu, 2 Sep 2010 22:41:20 +0000 (15:41 -0700)]
ext2: alloc_ and read_inode()

Also keeps the memory copy of the block group descriptor table around
(along with the disk SB).

9 years agoMounts ext2
Barret Rhoden [Wed, 1 Sep 2010 20:01:12 +0000 (13:01 -0700)]
Mounts ext2

Mounts the ext2 FS from a block device (at /mnt in KFS).  We have only
stubs for the FS-specific files, so nothing will work.

9 years agoBlock layer and ext2 headers
Barret Rhoden [Wed, 1 Sep 2010 00:41:00 +0000 (17:41 -0700)]
Block layer and ext2 headers

This adds a non-blocking block layer, suitably only for ramdisks
(make_request() just does the block driver part).  This also adds the
first ext2 bits.  It'll look for an image file formatted with ext2 (no
disk partitions or anything.  Or cells).

9 years agoRemoved ancient useless file
Barret Rhoden [Mon, 30 Aug 2010 18:05:12 +0000 (11:05 -0700)]
Removed ancient useless file

It was bothering me when I tab-complete for kern/include/ext2-whatever.

9 years agoEndian conversion functions
Barret Rhoden [Mon, 30 Aug 2010 00:42:47 +0000 (17:42 -0700)]
Endian conversion functions

9 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

9 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()

9 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).

9 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.

9 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.

9 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.

9 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

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).

9 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.

9 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

9 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.

9 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.

9 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.

9 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.

9 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.

9 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

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

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

9 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.

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

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

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

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...

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

Also fixes up some dentry refcounting issues.

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

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.

9 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.

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

9 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

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

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

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

9 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.

9 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.

9 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.

9 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

9 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.

9 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.

9 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.

9 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.

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

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

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

9 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.

9 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

9 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.

9 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).

9 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.

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

9 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.

9 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.

9 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.

9 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.

9 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.

9 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 /

9 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.

9 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"

9 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.

9 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.

9 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.

9 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.

9 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.

9 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 -

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

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

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.

9 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.

9 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()

9 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).

9 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

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

9 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.

9 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

9 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

9 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().

9 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.

9 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.

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