8 years agoRemoves some struct proc* refcnting
Barret Rhoden [Fri, 12 Nov 2010 00:37:45 +0000 (16:37 -0800)]
Removes some struct proc* refcnting

We only do it when calling out of syscall.c into something that might
not return and wants a reference it can decref (other than current).

We can just get rid of this completely, making proc_yield() take a
current for a ref, and core_request handling itself.  The only reason we
don't yet is that core_request() could be called remotely (current isn't
loaded), so for now we'll keep having it expect an 'edible' reference.

8 years agoAll local system calls are asynchronous (XCC)
Barret Rhoden [Thu, 11 Nov 2010 02:32:44 +0000 (18:32 -0800)]
All local system calls are asynchronous (XCC)

Rebuild your cross compiler.

For now, userspace just submits a call and then spins on the response
(synchronous in userspace, but async in the kernel).  When the kernel
blocks, it first attempts to start/run more syscalls, then restarts the
current_tf (which gets the process back to where it trapped into the
kernel).  The kernel will return how many syscalls it started, (similar
to Xen's interface), so if you batch calls, you need to make sure they
all started.

Regardless of whether the call blocked or not, the kernel will return
via smp_idle().  A blocked call will simply post its results and
smp_idle(), just like when it didn't block.  Current_tf only has meaning
the "first time", when the process first trapped in.  After a kthread
unblocks, current_tf has already restarted, so it no longer has meaning
(and should be 0'd).  Things get a bit tricky with some syscalls that
don't return (like yield, resource_req, exec, etc).  Fork is also a bit

I can see why people like synchronous calls backed by a single kernel
task - but this is quite awesome when it works right.

8 years agoFixes glibc for make 3.8.2
Barret Rhoden [Tue, 9 Nov 2010 05:04:09 +0000 (21:04 -0800)]
Fixes glibc for make 3.8.2

IAW the upstream patch 32cf40699346d37fabfa887bbd95e95004799ae1

8 years agoProactively clears current_tf
Barret Rhoden [Fri, 5 Nov 2010 23:37:16 +0000 (16:37 -0700)]
Proactively clears current_tf

We don't want this accidentally left valid when we are done with it
(reasons will be clearer in later patches).

Also changes abandon_core() to just abandon, but not implicitly

8 years agoCleaned up some kthread business
Barret Rhoden [Sun, 31 Oct 2010 01:18:44 +0000 (18:18 -0700)]
Cleaned up some kthread business

8 years agosleep_on() checks the semaphore early
Barret Rhoden [Fri, 29 Oct 2010 23:27:02 +0000 (16:27 -0700)]
sleep_on() checks the semaphore early

For those cases where we are not sleeping, this ought to make things a
bit faster/simpler.  For example, we lock_page() a lot in blockdev.c,
even though it will usually be uncontested.

8 years agolock_page() uses semaphores/kthreads
Barret Rhoden [Fri, 29 Oct 2010 21:07:11 +0000 (14:07 -0700)]
lock_page() uses semaphores/kthreads

This isn't heavily tested - it requires two processes/kthreads to be
trying to readpage() on the same file page.

8 years agoCONFIG_EXT2 controls the loading of the fs_type
Barret Rhoden [Thu, 28 Oct 2010 18:53:30 +0000 (11:53 -0700)]
CONFIG_EXT2 controls the loading of the fs_type

The display of the message Supports the EXT2 FS is conditioned on the
Makelocal setting, instead of always loading the FS type.

8 years agox86: interrupt return path checks kmsgs
Barret Rhoden [Wed, 27 Oct 2010 00:46:00 +0000 (17:46 -0700)]
x86: interrupt return path checks kmsgs

It's a little slower (due to checks for current and such), but this way
we'll be sure to handle the kmsg that a given interrupt caused.  Note,
interrupts are still disabled during the handling of the kmsg.

8 years agoproc_run() handles kmsgs before running
Barret Rhoden [Wed, 27 Oct 2010 00:32:45 +0000 (17:32 -0700)]
proc_run() handles kmsgs before running

There was a race where we would miss the message (present since we made
the proc_lock a non-irqsave lock), though we never had the messages til
now that could cause the issue.  So proc_run() calls restartcore now.

A necessary part of the change is that process_routine_kmsg() takes a
tf, which is the user TF you want the kernel to pass to the kernel
message (*p->env_tf for proc_run's case).

Also note that the system probably isn't ready yet to overlap proc
management messages (like __death()) with a __launch_kthread() (which
tries to schedule the current process).

8 years agoSleep on block requests using kthreads
Barret Rhoden [Tue, 26 Oct 2010 22:02:30 +0000 (15:02 -0700)]
Sleep on block requests using kthreads

There's a bunch of complications, and also note that the page cache's
page_lock doesn't sleep yet - this is just the breq itself.

There will likely be issues with where and on who's core we run
kthreads.  For now, it works.  Likewise, there are potential issues with
schedule returning (the old concern was running off the stack) and how
we wait for IO.  Right now, we have a couple ghetto hacks to prevent us
from being in the monitor when an IO (aka timer interrupt) finishes.

Also, note KVM's sense of time with set_core_timer() seems off.  We
shouldn't have to wait 10s of ms to go through a couple function calls.
It might be using the real core's timer instead of the emulated timer.
Whoever works on the time infrastructure ought to take a look at that.

8 years agoKthread infrastructure
Barret Rhoden [Thu, 21 Oct 2010 23:42:00 +0000 (16:42 -0700)]
Kthread infrastructure

Note this does not run on sparc yet - someone will need to write those
functions in k/a/sparc/trap.c.  Read the documentation for more info.

8 years agox86: Stores core 0's stack as a KVA
Barret Rhoden [Mon, 18 Oct 2010 20:27:39 +0000 (13:27 -0700)]
x86: Stores core 0's stack as a KVA

Instead of a virtual address (like 0xbfc00000).

8 years agoFixes usages of lock_page()
Barret Rhoden [Mon, 18 Oct 2010 06:04:35 +0000 (23:04 -0700)]
Fixes usages of lock_page()

We had a bunch of extra unlock_page()s floating around ever since we
pushed the unlocking into readpage().  Don't expect it to stay around
much longer either.

8 years agoChangeable kernel stacks
Barret Rhoden [Sun, 17 Oct 2010 07:02:38 +0000 (00:02 -0700)]
Changeable kernel stacks

We can now set and query the default kernel stack (the one you'll trap
in to).  On x86, this info is saved in the TSS.  On sparc, it's in an
array.  If that array gets a lot of cache traffic, we'll need to put it
in per_cpu_info, which is a minor pain.

8 years agoFixes a bug with sparc's atomic_sub_and_test()
Barret Rhoden [Fri, 15 Oct 2010 01:14:56 +0000 (18:14 -0700)]
Fixes a bug with sparc's atomic_sub_and_test()

Careful with negative (or large) numbers with these tricksy atomics!
Also touches up a couple other things that were discovered while messing
with sparc.

8 years agox86: decouples the GDT/TS/ETC from the stack
Barret Rhoden [Thu, 14 Oct 2010 20:21:43 +0000 (13:21 -0700)]
x86: decouples the GDT/TS/ETC from the stack

Also allows us to find the per-core TSS quickly.

8 years agoBlock responses are interrupt driven (on x86)
Barret Rhoden [Thu, 14 Oct 2010 19:34:08 +0000 (12:34 -0700)]
Block responses are interrupt driven (on x86)

We'll need a little bit of work to make this work on sparc.

8 years agoFixes a minor bug in sys_halt_core()
Barret Rhoden [Wed, 13 Oct 2010 21:19:25 +0000 (14:19 -0700)]
Fixes a minor bug in sys_halt_core()

We need to make sure the alarm is turned off, and we don't have an
arch-independent one-shot timer (SPAAAAAAAAAAAAAAAAAAAAAAAARC!).
Wonder if this helped muck with things in the old x264 tests...

8 years agoBlock requests come with a completion method
Barret Rhoden [Wed, 13 Oct 2010 20:07:35 +0000 (13:07 -0700)]
Block requests come with a completion method

breq_submit_request() doesn't require you sleep on the breq, but since
it is common (to both callers!) we provide helpers for it.  This also
splits up the usage of lock_page() to both block on IO as well as block
on waiting for a page to be ready (blocking on someone else's IO).

8 years agoCleaned up naming conventions in blockdev
Barret Rhoden [Wed, 13 Oct 2010 18:28:02 +0000 (11:28 -0700)]
Cleaned up naming conventions in blockdev

Also put a check for block 0.  There are probably some legitimate uses,
but not yet.

8 years agoext2_create()
Barret Rhoden [Wed, 13 Oct 2010 01:46:43 +0000 (18:46 -0700)]

We can now create ext2 files (alloc their inodes, etc) and insert them
in directories (and possibly grow the directory).

8 years agoext2_get_ino_metablock() will allocate blocks
Barret Rhoden [Wed, 13 Oct 2010 01:17:39 +0000 (18:17 -0700)]
ext2_get_ino_metablock() will allocate blocks

If there isn't a block already for ino_block, it will allocate and 0
one, similar to what goes on in mappage and readpage (just smoother,
since it's in the blockdev buffer cache).

8 years agoFixes bug with ext2_readdir()
Barret Rhoden [Wed, 13 Oct 2010 01:15:42 +0000 (18:15 -0700)]
Fixes bug with ext2_readdir()

It was dropping some items near the end of directories (since not all
dirents are 8 + 256 bytes long).

8 years agoClarifies how to refcnt with the page cache
Barret Rhoden [Mon, 11 Oct 2010 18:43:29 +0000 (11:43 -0700)]
Clarifies how to refcnt with the page cache

8 years agoIndividually manages buffers in the buffer cache
Barret Rhoden [Sat, 9 Oct 2010 01:42:42 +0000 (18:42 -0700)]
Individually manages buffers in the buffer cache

Check the docs, expect this to change (issues with refcnting and how we
can rip an individual block out of the buffer cache).

The main point of this is to make sure that PGSIZE worth of buffers are
*not* pulled in at the same time in the blockdev's buffer cache, since
they all are not necessarily metadata blocks.

8 years agoFixes ext2 lookup bug
Barret Rhoden [Wed, 6 Oct 2010 01:22:52 +0000 (18:22 -0700)]
Fixes ext2 lookup bug

You could match on example.txt with example.txtttttt, since lookup
stopped caring after the number of chars in the real file name.

8 years agoExt2 directory operations use the page cache
Barret Rhoden [Wed, 6 Oct 2010 00:50:08 +0000 (17:50 -0700)]
Ext2 directory operations use the page cache

8 years agoApplies FD flags per file desc, not per file
Barret Rhoden [Tue, 5 Oct 2010 23:49:18 +0000 (16:49 -0700)]
Applies FD flags per file desc, not per file

Was causing stderr messages to be ignored for programs spawned by
busybox.  (O_CLOEXEC on a duped FD of stderr before forking).

8 years agoAllocates blocks for files ending un-PG-aligned
Barret Rhoden [Tue, 5 Oct 2010 23:12:46 +0000 (16:12 -0700)]
Allocates blocks for files ending un-PG-aligned

Side note: stat() should return the ideal blocksize to use in file IO,
not the size of the blocks reported.  The size of "blocks" (and
i_blocks) is 512B.  man 2 stat for details.

8 years agoExt2 grows files and inode tables on demand
Barret Rhoden [Mon, 4 Oct 2010 06:11:17 +0000 (23:11 -0700)]
Ext2 grows files and inode tables on demand

8 years agoExt2 file seeking
Barret Rhoden [Mon, 4 Oct 2010 05:51:47 +0000 (22:51 -0700)]
Ext2 file seeking

8 years agoConvenience wrapper to start busybox's shell
Barret Rhoden [Sat, 2 Oct 2010 01:00:13 +0000 (18:00 -0700)]
Convenience wrapper to start busybox's shell

8 years agoExt2 block allocation
Barret Rhoden [Sat, 2 Oct 2010 00:46:10 +0000 (17:46 -0700)]
Ext2 block allocation

Untested outside the targets block group, etc.

8 years agoExt2: can read files from the page cache
Barret Rhoden [Thu, 30 Sep 2010 07:34:19 +0000 (00:34 -0700)]
Ext2: can read files from the page cache

Maps BHs to pages, reads the page, etc.  Can't fill in holes or extend a
file yet.  make_request() can handle multiple BHs too.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8 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

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

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

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

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

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

8 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

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

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

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

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

8 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

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

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

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

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

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

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

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

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

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

8 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!

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

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

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

Also fixes up some dentry refcounting issues.

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

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

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

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

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.