8 years agoErrno must not be touched before TCB is initialized.
David Zhu [Tue, 23 Nov 2010 07:06:07 +0000 (23:06 -0800)]
Errno must not be touched before TCB is initialized.

Now making sbrk ignore errno in libc.
The alternative is to replicate the logic of sbrk for this particular
call of sbrk, which is even uglier.

Also added some documentation on errno, probably need more docs on TLS.

8 years agoQuick hack to fix e1000
Barret Rhoden [Tue, 23 Nov 2010 23:26:26 +0000 (15:26 -0800)]
Quick hack to fix e1000

You need to have CONFIG_E1000_MMIO_HACK and pick a machine (like
CONFIG_E1000_ON_S142) so that it will detect a MAC - even if that's not
your machine!  Some serious ghettoness is lying in wait for whoever
tries to make this work.

8 years agoPCI: vendor/device/class identification
Barret Rhoden [Mon, 22 Nov 2010 22:41:00 +0000 (14:41 -0800)]
PCI: vendor/device/class identification

You can adjust the verbosity of the PCI output during bootup with the
Makelocal variable.

8 years agoPCI cleanup
Barret Rhoden [Sun, 21 Nov 2010 22:03:18 +0000 (14:03 -0800)]
PCI cleanup

Shame on Paul, there was some really ghetto shit in there.  The IOAPIC
stuff might still work, though it'll need sorted a bit when we get the
ACPI stuff working.

Also required a rewrite of how the NICs config themselves.  Note, you
probably shouldn't have device drivers accessing PCI config space...

8 years agox86: pcpu init called before idling
Barret Rhoden [Fri, 19 Nov 2010 23:42:01 +0000 (15:42 -0800)]
x86: pcpu init called before idling

Technically, something could have gotten messed up in the future, since
we access pcpui before finalizing the smp_boot process.

8 years agoRemoved set_current_proc()
Barret Rhoden [Fri, 19 Nov 2010 20:21:14 +0000 (12:21 -0800)]
Removed set_current_proc()

It was just confusing (what with __set_proc_current(), which actually
did something).  Also finally moved those macros to smp.h.

8 years agoMore careful with cur_tf in syscalls
Barret Rhoden [Fri, 19 Nov 2010 20:06:18 +0000 (12:06 -0800)]
More careful with cur_tf in syscalls

Once we check for it, we need to make sure we use it before we block
(not that proc_alloc() or the resource request stuff block (yet)).

8 years agoAdds a Makelocal option for resetting the stack
Barret Rhoden [Fri, 19 Nov 2010 19:56:38 +0000 (11:56 -0800)]
Adds a Makelocal option for resetting the stack

This is so that cycles involving smp_idle() never grow without bound.
It's not much of a big deal anyway, since whenever you pop to user
space, it would reset.

If you enable this option, you won't be able to backtrace beyond

8 years agoOptimize local routine kernel messages
Barret Rhoden [Fri, 19 Nov 2010 19:33:11 +0000 (11:33 -0800)]
Optimize local routine kernel messages

Minor thing: there's no need to send an IPI that will just get ignored.

8 years agoSyscall return paths cleaned up
Barret Rhoden [Fri, 19 Nov 2010 18:16:54 +0000 (10:16 -0800)]
Syscall return paths cleaned up

The first syscall will return naturally via proc_restartcore() (which
does nothing if the core was already restarted and there is no

This also disables batching for now (not that anyone uses it, or the
asynchrony for that matter).  In the future, we can use kmsgs
(carefully) for batched syscalls, being careful of the *tf passed around
in the kmsg functions...

8 years agoproc_restartcore() only used for current_tf, etc
Barret Rhoden [Fri, 19 Nov 2010 15:42:28 +0000 (07:42 -0800)]
proc_restartcore() only used for current_tf, etc

It has been like this for a while, with the exception of proc_run()'s _S
case.  With the usage of cur_tf as a ptr, this works out well.  This is
also the place to intercept the "returning twice" problem.

8 years agoCopies out current_tf to pcpui
Barret Rhoden [Fri, 19 Nov 2010 02:30:02 +0000 (18:30 -0800)]
Copies out current_tf to pcpui

This is in response to a pretty bad bug/design issue.  The documentation
has a lot about it and about what to expect in future patches.  The
TODOs and checks in kthread.c will go away in a couple patches.

Ultimately, we want to avoid copying the TF multiple times, but that's
asm for another day.  Recommend writing the location of actual_tf at the
top of the stacktop (avoid computing it, simplify the code, etc).

Note: this compiles on sparc, and might actually work!  Hard to tell,
with that glibc-ish bug floating around.

8 years agoSplit pcpui->syscalls into a current and next
Barret Rhoden [Fri, 12 Nov 2010 22:46:47 +0000 (14:46 -0800)]
Split pcpui->syscalls into a current and next

Instead of using pcpui->syscalls for both who to run next as well as
which call is currently being serviced.

Now it's more clear that a kthread is running a syscall (or none if ==
0), and we now can use signal_current_sc() after a block point (which
could happen (sys_exec()), though it is rare).

And since there is a cur_sysc active during each syscall, we can use
that struct for errno, instead of the errno_loc (which was originally
used for accessing inside an arch-dependent TF, back when we used a
register for errno).

8 years agoKthreads stop zeroing the current_tf
Barret Rhoden [Fri, 12 Nov 2010 22:01:52 +0000 (14:01 -0800)]
Kthreads stop zeroing the current_tf

Should have been done a few patches ago.  The kthreads were still saving
the current_tf, preventing us from really popping out to userspace
(though we were still smp_idling and running other processes - just not
the one that 'blocked').

8 years agoFixes mmap() to use all six args (XCC)
Barret Rhoden [Fri, 12 Nov 2010 06:22:10 +0000 (22:22 -0800)]
Fixes mmap() to use all six args (XCC)

Rebuild your cross compiler.

sys_mmap() doesn't have to do the ghetto 6-arg hack, now that the kernel
can take real 6-arg syscalls.

8 years agoSyscalls now can take six arguments (XCC)
Barret Rhoden [Fri, 12 Nov 2010 05:56:43 +0000 (21:56 -0800)]
Syscalls now can take six arguments (XCC)

Rebuild your cross compiler.

This also cleans up argument naming.  Specifically, we 0-index the
syscall arguments, like good little C programmers.

If someone feels productive, they can make variants (or macro magic) to
cut down on the number of arguments getting passed around for syscalls
that we know only need a few args (in userspace).

8 years agox86: cleans up syscalls, fixes pop_ros_tf() (XCC)
Barret Rhoden [Fri, 12 Nov 2010 04:22:25 +0000 (20:22 -0800)]
x86: cleans up syscalls, fixes pop_ros_tf() (XCC)

Rebuild your cross compiler.

Since we do async syscalls, pop_ros_tf() needed fixed for the cases
where it calls sys_self_notify() from within the asm.

Side note: I probably wouldn't have noticed this for a while had I not
been cleaning out the errno and extra registers from
__ros_arch_syscall(), which arguably wasn't a big deal.  Turns out it
was worth the time after all.

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!