9 years agoRemoved junk, fixes typo, etc.
Barret Rhoden [Thu, 15 Apr 2010 22:26:45 +0000 (15:26 -0700)]
Removed junk, fixes typo, etc.

Removes the process debugging code, and adds a little check in mhello.
Technically, you need to reinstall your kernel headers.  Odds are they
will change again before anyone uses the changed bit.

9 years ago__proc_give_cores correctly adjusts amt_granted
Barret Rhoden [Wed, 14 Apr 2010 03:05:11 +0000 (20:05 -0700)]
__proc_give_cores correctly adjusts amt_granted

9 years agoMassive renaming/cleanup of harts->vcores
Kevin Klues [Thu, 15 Apr 2010 06:18:43 +0000 (23:18 -0700)]
Massive renaming/cleanup of harts->vcores

We also changed a few of the semantics between the way that vcores
interact with the kernel and expose an API to an end user/thread library.

Also fixed up some bugs in the way tests were pulling in stdio.h

Oh, and don't forget to rebuild your cross compiler
(and busybox / any user apps that you plan to run)

9 years agoCheck to make sure an ldt exists before loading it
Kevin Klues [Wed, 14 Apr 2010 22:33:27 +0000 (15:33 -0700)]
Check to make sure an ldt exists before loading it

9 years agoFixed bug with blindly copying procinfo...
Kevin Klues [Wed, 14 Apr 2010 04:51:58 +0000 (21:51 -0700)]
Fixed bug with blindly copying procinfo...

Blindly copying it like it did causes the vcore map to be
overwritten incorrectly.  We have already initialized the procinfo
strruct at the time of fork() so we really shouldn't be doing it
again anyway.  It only really makes sense to be forking and execing
single core processes anyway, as none of this really makes sense
for manycore processes.  SHould work fine for now though.  Maybe consider
moving the stuff stored in procinfo that's needed by glibc onto the
user stack so none of this is necessary though.

9 years agoRun the kernel monitor on the proper core
Kevin Klues [Wed, 14 Apr 2010 04:50:42 +0000 (21:50 -0700)]
Run the kernel monitor on the proper core

Since we introduced the CONFIG option to run a core dedicated
to the kernel monitor, we need to make sure that is the only one
that prints to the terminal controlled by the kernel.

9 years agoAppserver up and running on hardware for x86...
Kevin Klues [Wed, 14 Apr 2010 04:50:13 +0000 (21:50 -0700)]
Appserver up and running on hardware for x86...

9 years agoYield plays nice with preemption
Barret Rhoden [Wed, 14 Apr 2010 01:28:54 +0000 (18:28 -0700)]
Yield plays nice with preemption

Adds a being_nice parameter, which is how the process tells the kernel
it is giving up its resources in response to a preempt_pending.  It's
not tested heavily.

9 years agoAdded the DYING case to proc_get_vcoreid()
Barret Rhoden [Tue, 13 Apr 2010 01:17:20 +0000 (18:17 -0700)]
Added the DYING case to proc_get_vcoreid()

9 years agoPreemption of user cores
Barret Rhoden [Mon, 12 Apr 2010 23:06:48 +0000 (16:06 -0700)]
Preemption of user cores

This provides the basic mechanisms for preempting and restarting a
vcore.  It's been lightly tested for revoking a single core, the entire
gang, cores in notification handlers, and cores needing to be notified
when they start up.

Barret Rhoden [Mon, 12 Apr 2010 22:56:04 +0000 (15:56 -0700)]

Don't enable this if you distrust userspace.

9 years agoFixes unmap bug in __death()
Barret Rhoden [Mon, 12 Apr 2010 06:10:15 +0000 (23:10 -0700)]
Fixes unmap bug in __death()

9 years agopop_ros_tf can handle missed IPIs
Barret Rhoden [Sun, 11 Apr 2010 23:35:55 +0000 (16:35 -0700)]
pop_ros_tf can handle missed IPIs

The issue is that an IPI can arrive (and be ignored) after the queue is
checked and before notifications are enabled.  Check notif_pending and
self notify if this happens.  Check the documentation for more details.

9 years agoUser trapframes can return from sysenter
Barret Rhoden [Sun, 11 Apr 2010 21:59:52 +0000 (14:59 -0700)]
User trapframes can return from sysenter

Also properly handles eflags.

9 years agoUser stackpointers moved to the vcpd structs
Barret Rhoden [Sat, 10 Apr 2010 01:14:50 +0000 (18:14 -0700)]
User stackpointers moved to the vcpd structs

They are per-core, and contain all the procdata settings the kernel and
userspace use for vcore mamangement.

Update your kernel headers.

9 years agoEnsures __notify took the user trapframe as an arg
Barret Rhoden [Sat, 10 Apr 2010 00:28:48 +0000 (17:28 -0700)]
Ensures __notify took the user trapframe as an arg

Previously, __notify would not work when processing routine kernel
messages (tf was 0).

9 years agoset_current_tf only applies to user trapframes
Barret Rhoden [Fri, 9 Apr 2010 22:18:01 +0000 (15:18 -0700)]
set_current_tf only applies to user trapframes

This bug could have manifested itself with craziness when trying to
return from a syscall if an interrupt arrived while servicing the

9 years agoRemoved the tf_to_run from the vcoremap
Barret Rhoden [Fri, 9 Apr 2010 21:57:22 +0000 (14:57 -0700)]
Removed the tf_to_run from the vcoremap

It is no longer necessary for the kernel to care about transplanting TFs
to other vcores, and it cleans up some parts of the process code.

You should reinstall your kernel headers.

9 years ago_M procs start up at _start/hart_entry for vcore0
Barret Rhoden [Fri, 9 Apr 2010 18:07:20 +0000 (11:07 -0700)]
_M procs start up at _start/hart_entry for vcore0

The kernel will save the calling context in vcore0's notif_tf slot.
Userspace should set up its scheduler/code so that it can restart the
thread/context that was in _S mode.

9 years agoFixes trap-based syscalls on x86
Barret Rhoden [Fri, 9 Apr 2010 01:06:15 +0000 (18:06 -0700)]
Fixes trap-based syscalls on x86

You need to reinstall your kernel headers (at least the affected file).

9 years agoUserspace saving/restoring of TLS
Barret Rhoden [Thu, 8 Apr 2010 23:13:41 +0000 (16:13 -0700)]
Userspace saving/restoring of TLS

Example in mhello of what a scheduler would need to do.

9 years agoFixes a null pointer bug in cprintf
Barret Rhoden [Wed, 7 Apr 2010 08:02:13 +0000 (01:02 -0700)]
Fixes a null pointer bug in cprintf

Not that it matters much - it would only happen if you passed a 0 to
cprintf/printk, and you should rarely pass a string directly (format
string issues).  If this bug hit, you'd trap and then deadlock on the
output lock.  Looking at this was on the todo list for a long time, but
it was suddenly triggerable with kfunc cprintf.

9 years agoFixed smp_percpu_init() on sparc; added asserts
Kevin Klues [Fri, 9 Apr 2010 02:17:09 +0000 (19:17 -0700)]
Fixed smp_percpu_init() on sparc; added asserts

9 years agoFixed up register window fill code
Andrew Waterman [Fri, 9 Apr 2010 23:29:09 +0000 (16:29 -0700)]
Fixed up register window fill code

In preparation for (possibly) enhancing the
performance of kernel crossings sometime soon

9 years agoAdded test for kernel crossing time
Andrew Waterman [Fri, 9 Apr 2010 22:31:13 +0000 (15:31 -0700)]
Added test for kernel crossing time

9 years agoFixed bug in userspace brk
Andrew Waterman [Fri, 9 Apr 2010 01:36:13 +0000 (18:36 -0700)]
Fixed bug in userspace brk

The current break should be set to what the user *thinks* the break
is, not the internal, page-aligned break.

9 years agoFixes bug in userspace's brk
Barret Rhoden [Thu, 8 Apr 2010 22:09:29 +0000 (15:09 -0700)]
Fixes bug in userspace's brk

You need to rebuild glibc.

9 years agoFixed Makefile for the cross-compiler
Kevin Klues [Wed, 7 Apr 2010 20:29:39 +0000 (13:29 -0700)]
Fixed Makefile for the cross-compiler

Wasn't making the sys-include, which hurt on fresh installs.

9 years agoCleaned up extraneous symlink
Barret Rhoden [Wed, 7 Apr 2010 05:22:50 +0000 (22:22 -0700)]
Cleaned up extraneous symlink

9 years agoSYS_notify and SYS_self_notify
Barret Rhoden [Wed, 7 Apr 2010 05:14:51 +0000 (22:14 -0700)]
SYS_notify and SYS_self_notify

Processes can notify themselves (pick a vcore) or another process (which
will check the notif_methods for the vcoreid and if the notif is
wanted).  Example code in mhello.

You'll need to update your kernel headers (though you won't need a full
glibc recompile).

9 years agoFixes bug in x86 atomics
Barret Rhoden [Wed, 7 Apr 2010 05:13:18 +0000 (22:13 -0700)]
Fixes bug in x86 atomics

Can't use an "r" on the register constraints when the register will be
used in a byte operation (movb) on 32 bit x86.  Use "q" instead.

9 years agox86: Userspace code to restart ROS TFs
Barret Rhoden [Tue, 6 Apr 2010 23:49:28 +0000 (16:49 -0700)]
x86: Userspace code to restart ROS TFs

A user scheduler can pop a TF provided by the kernel, and enable
notifications.  This is the way to leave the transition stack / start up
a user context.

TLSs aren't dealt with in particular.  The code will maintain whatever
gs is loaded, which is set per vcore.  The user scheduler will need to
set up the appropriate LDT entry (on x86) for the TLS/TCB of the user
context it's attempting to load.

This doesn't work on sparc yet.  It will just silently fail (and panic
in mhello).

9 years agoUserspace udelay()
Barret Rhoden [Tue, 6 Apr 2010 18:56:03 +0000 (11:56 -0700)]
Userspace udelay()

Made a little timing file and put udelay in it, using the tsc_freq from

9 years agoFixed kernel messages on SPARC
Andrew Waterman [Tue, 6 Apr 2010 21:57:22 +0000 (14:57 -0700)]
Fixed kernel messages on SPARC

Additionally, made the return paths more similar to those on x86;
trap handlers now simply return, rather than explicitly popping
the trapframe.  (The wrapper around trap handlers does the pop.)

9 years agoAdded CONFIG flag to dedicate core to the monitor
Kevin Klues [Tue, 6 Apr 2010 03:58:46 +0000 (20:58 -0700)]
Added CONFIG flag to dedicate core to the monitor

The kernel monitor that is.  This is useful when running
the appserver on x86, with busybox running printing to the
appserver window in one terminal, and the kernel monitor
accessible from another.

9 years agopthread_mutex_trylock() and friends return values
Kevin Klues [Tue, 6 Apr 2010 03:57:59 +0000 (20:57 -0700)]
pthread_mutex_trylock() and friends return values

They should return positive values, not negative ones...

9 years agoAdded support for another pthread related function
Kevin Klues [Tue, 6 Apr 2010 03:57:11 +0000 (20:57 -0700)]
Added support for another pthread related function

This function is needed to compile fluidanimate, but
is currently meaningless in our current implementation of

9 years agoFixed problem with open() mode flags not matching
Kevin Klues [Tue, 6 Apr 2010 03:53:57 +0000 (20:53 -0700)]
Fixed problem with open() mode flags not matching

We want the ROS mode flags and the appserver mode flags
to match.  This commit makes them that way.

9 years agoMakefiles take an adjustable number of jobs
Barret Rhoden [Tue, 6 Apr 2010 00:39:42 +0000 (17:39 -0700)]
Makefiles take an adjustable number of jobs

Set MAKE_JOBS in your Makelocal if you want to provide an argument to
make -j (like if you don't have an obscene number of cores).

9 years agoVcore0 can restart in _M mode
Barret Rhoden [Mon, 5 Apr 2010 22:25:18 +0000 (15:25 -0700)]
Vcore0 can restart in _M mode

When notified or for other reasons that may cause a restart, vcore0 will
come up on a fresh transition stack (not USTACKTOP) with a fresh TLS
region.  In essence, the context from _S mode is just a user thread that
will need to be managed by a scheduler that needs to be invoked from

Rebuild your cross compiler.

9 years agoPrints stderr to the kernel monitor
Barret Rhoden [Mon, 5 Apr 2010 00:11:23 +0000 (17:11 -0700)]
Prints stderr to the kernel monitor

For apps that write directly to file descriptor 2, it will be
interpreted as an attempt to write to stderr.  While not complete, it
will catch some error messages when the appserver isn't configured.

9 years agoNotification support in the kernel
Barret Rhoden [Mon, 29 Mar 2010 23:40:11 +0000 (16:40 -0700)]
Notification support in the kernel

The kernel can send notifications to a process.  Will need some merging
work with the glibc branch, especially regarding transition stacks and
userspace's job.  mhello has example code for what low-level user code
needs to do to request and receive notifications.

Note that you cannot notify vcore0 at this point, due to some glibc

9 years agoAdded BCQs to the preempt structs in procdata
Barret Rhoden [Fri, 26 Mar 2010 23:43:18 +0000 (16:43 -0700)]
Added BCQs to the preempt structs in procdata

This involved duplicating the code for atomic operations (though for
now, only CAS was needed, and that might go away).  On sparc, this means
copying all of the spinlock stuff too.

Also, bcq_struct.h is included with the structure and other things, with
the actual work done in bcq.h.  This is because libc includes
bcq_struct, but doesn't actually do the ops, and we want to limit the
amount of crap in the ros interface (like comp_and_swap).

9 years agoPer-arch user include directories
Barret Rhoden [Mon, 5 Apr 2010 04:56:49 +0000 (21:56 -0700)]
Per-arch user include directories

Accessible via arch/*.  I don't particularly care how they are arranged
(the way they are, or the way the kernel does it), so long as it's easy
to figure out and not sharing the kernel's files.

9 years agoUserspace no longer includes the kernel's arch/*
Barret Rhoden [Mon, 5 Apr 2010 04:10:50 +0000 (21:10 -0700)]
Userspace no longer includes the kernel's arch/*

The kernel and userspace still share kern/include/ros/arch, which points
to arch specific folders, but not the entire kern/arch/XXX/ folder
(which is what kern/include/arch pointed to).  This helps sort out some
issues with repeated symbols (reboot in arch/arch.h conflicts with
libc), makes the kernel interface more explicit, and will help us to
avoid making changes to the kernel for no reason other than userspace
includes its files.

There are a few places where things are ghetto - mostly because they
ought to be solved properly (read_tsc()) or will go away with future
commits (segmentation stuff).

Long term, I'd like to minimize the amount of stuff in kern/include/ros,
even if it means having copies of arch-specific things.  And the copies
are not always copies - often there are slight differences between the
kernel and userspace.

9 years agoBounded concurrent queues (BCQ)
Barret Rhoden [Fri, 26 Mar 2010 11:46:36 +0000 (04:46 -0700)]
Bounded concurrent queues (BCQ)

First implementation and interface for BCQs.  They are lock-free,
concurrent producer-consumer (one-way) queues based on a fixed (bounded)
buffer.  They are also designed for an untrusted consumer.  The producer
will not block, and it will bail out after a certain number of failed
attempts to enqueue.  All data is stored inside the BCQ (there is a
header), making it small and easy to program with.

In theory (sort of), these should be able to handle multiple concurrent
producers and consumers, but has only been tested with one core so far.

The initial use case will be the notification entries, per-process,

9 years agoCompare and Swap
Barret Rhoden [Fri, 26 Mar 2010 01:34:12 +0000 (18:34 -0700)]
Compare and Swap

Provides atomic primitives for compare and swap.  The sparc ones are
horrendous, relying on a global lock.  Hopefully there's some hardware
support for that, and if not, then we'll need a better implementation.

9 years agoproc messages are routine instead of immediate
Barret Rhoden [Tue, 23 Mar 2010 08:24:22 +0000 (01:24 -0700)]
proc messages are routine instead of immediate

This should solve the races we haven't seen yet where a core is in the
kernel with interrupts enabled but in a situation where the kernel
cannot abandon its stack yet when a __death or similar message comes in.

9 years agoCall arbitrary functions from the monitor
Barret Rhoden [Tue, 23 Mar 2010 07:39:37 +0000 (00:39 -0700)]
Call arbitrary functions from the monitor

This is sweet.  And like Chuck Norris, it shows no mercy.  You have been

9 years agoHandles routine kmsgs before returning to userspace
Barret Rhoden [Tue, 23 Mar 2010 05:45:40 +0000 (22:45 -0700)]
Handles routine kmsgs before returning to userspace

Renames and splits proc_startcore() to proc_restartcore() and
__proc_startcore(), and changes proc_run() to use a kmsg to start a _S.
Check the Doc and comments for specific reasons.

9 years agoManagement cores check for routine k_msgs
Barret Rhoden [Tue, 23 Mar 2010 01:10:21 +0000 (18:10 -0700)]
Management cores check for routine k_msgs

Shouldn't be a a big deal.  We don't want to lose messages sent to
Core0.  We shouldn't have any right now, so if it happens, I'd like to
know about it to think about any other issues.

9 years agoRemoved the workqueue
Barret Rhoden [Tue, 23 Mar 2010 01:00:43 +0000 (18:00 -0700)]
Removed the workqueue

And the run_env_handler().  Workqueue functionality should use routine
k_msgs.  Some old tests were removed, which might be of interest to
someone doing measurement stuff.

9 years agoRoutine kmsg processing
Barret Rhoden [Tue, 23 Mar 2010 00:34:16 +0000 (17:34 -0700)]
Routine kmsg processing

Processes routine kernel messages in smp_idle().  Doesn't do it on
management cores yet (they call manager(), for now).

9 years agoSparc kernel messages
Barret Rhoden [Sat, 20 Mar 2010 03:35:25 +0000 (20:35 -0700)]
Sparc kernel messages

Changes sparc to use x86-style kernel messages, so that it can handle
routine calls and whatnot.  There are some differences, and it might not
work for some weird arch-specific reason.

9 years agoKernel messages infrastructure
Barret Rhoden [Sat, 20 Mar 2010 02:42:22 +0000 (19:42 -0700)]
Kernel messages infrastructure

Expands the old active messaging mechanisms to support different types
of messages: Immediate and Routine.  This will be the main way of moving
work around (either to another core or delaying with an alarm).  All
usages of existing active messages have been switched to kernel messages
in the immediate mode (which is what they were doing before).  Sparc
does not support routine calls yet, but will shortly.  Read the
Documentation for more details.

This hasn't been tested fully yet - the test cases won't do much, since
the kernel doesn't check for routine messages yet, and the tests occur
during an smp_idle() loop.

9 years ago__startcore uses the vcore/pcore maps for info
Barret Rhoden [Fri, 19 Mar 2010 02:18:08 +0000 (19:18 -0700)]
__startcore uses the vcore/pcore maps for info

Instead of sending information like vcoreid and the trapframe to run in
the active message, we put this info in the vcoremap (it's already
there, and we only need to add the info for the tf).  This will help us
when we use some sort of broadcast messaging system.

9 years agoVcores are unmapped by message receivers
Barret Rhoden [Fri, 19 Mar 2010 01:39:10 +0000 (18:39 -0700)]
Vcores are unmapped by message receivers

9 years agox86: waits after sending IPIs
Barret Rhoden [Fri, 19 Mar 2010 00:07:00 +0000 (17:07 -0700)]
x86: waits after sending IPIs

Instead of checking before, wait afterwards.  It should provide the same
protection from losing IPIs (since all IPI-making functions adhere to
this), but now the send functions return once the IPI should have made
it to the distant end.  This way, we don't need to wait twice or have a
separate call for an IPI-barrier (like the wmb()s).

9 years agoseq counters to protect vcoremap changes
Barret Rhoden [Thu, 18 Mar 2010 00:33:15 +0000 (17:33 -0700)]
seq counters to protect vcoremap changes

The kernel uses the seq counter when updating vcore-pcore mappings and
the number of vcores.  Userspace may need to check the counter when
trying to perform certain operations.

Also, this introduces a reference seq lock, that is an example of how to
use it.  It relies on a spinlock, which isn't that flexible.

9 years agosys_getvcoreid uses the proc calls
Barret Rhoden [Sat, 13 Mar 2010 05:29:44 +0000 (21:29 -0800)]
sys_getvcoreid uses the proc calls

Not a big deal, esp since we might get rid of sys_getvcoreid once all
userspaces cache their vcoreid in TLS right after startup.

9 years agoAdds a pcoremap for reverse lookups
Barret Rhoden [Sat, 13 Mar 2010 05:08:08 +0000 (21:08 -0800)]
Adds a pcoremap for reverse lookups

Introduces a per-process pcoremap, and helper functions to manage the
vcore->pcore mapping.  The pcore valid bool isn't truly necessary, but
nice for now.  This structure will speed up common lookups.

Eagle-eyed readers should know why the pcoremap has to be per process,
instead of global.

9 years agoNew vcoremap in procinfo
Barret Rhoden [Sat, 13 Mar 2010 02:23:01 +0000 (18:23 -0800)]
New vcoremap in procinfo

The vcoremap contains new items (not just pcoreids), and it is exposed
via procinfo (along with num_vcores).  -1 no longer means invalid
either; it's more clear to have a bool for that.  Eventually we'll
signal userspace that the vcoremap (or a pcoremap) is being changed with
the seq_ctr.

If it turns out we are exposing too much info, we can move the vcoremap
back and push updates, but I'd rather not do that.

9 years agoInitial notification and preemption headers
Barret Rhoden [Fri, 5 Mar 2010 03:54:52 +0000 (19:54 -0800)]
Initial notification and preemption headers

Check the documentation if you're curious how this all should work.

9 years agox86: Fixes TLS bug causing kernel page faults
Barret Rhoden [Wed, 3 Mar 2010 19:51:42 +0000 (11:51 -0800)]
x86: Fixes TLS bug causing kernel page faults

When loading the gs register (or any segmentation register), the
hardware will fill in the internal segmentation registers by looking up
the segment, which can page fault.  The kernel was doing this for
unabandoned, yet unmapped, LDTs from old processes when it tried to
return from an interrupt.

Note that the current TLS implementation is vulnerable to a malicious
process mucking with the LDT.

9 years agoKFS cat / generic files
Barret Rhoden [Fri, 12 Feb 2010 22:08:36 +0000 (14:08 -0800)]
KFS cat / generic files

Basic support for KFS to have files other than compiled binaries -
mostly just for intermediate testing of the VFS (which isn't in this

9 years agox86: allows panic earlier in the boot process
Barret Rhoden [Fri, 12 Feb 2010 23:44:52 +0000 (15:44 -0800)]
x86: allows panic earlier in the boot process

Sets the hw_coreid and os_coreid table in assembly, so they can be used
by the panic code before smp_boot.  Cleaner and easier to do it there
than in an arch-specific early init function.

9 years agoMoved brk/sbrk into user-space
Andrew Waterman [Mon, 5 Apr 2010 01:49:25 +0000 (18:49 -0700)]
Moved brk/sbrk into user-space

glibc now does it with mmap.  BRK_END is used
to demarcate between the maximum break size
and where non-MAP_FIXED mmap starts allocating,
so the heap and mmap'd memory won't collide.

sys_brk still exists for compatibility with newlib;
someone might want to delete this in the future.

Recompile the cross-compiler, as procinfo changed.

9 years agoFixed upage_alloc bug with page-coloring disabled
Andrew Waterman [Mon, 5 Apr 2010 01:18:55 +0000 (18:18 -0700)]
Fixed upage_alloc bug with page-coloring disabled

We forgot to zero-fill the page if requested.  This bug
was a bear and took about 3 hours to track down :|

9 years agoAdded SPARC ISA simulator targets to Makelocal
Andrew Waterman [Sun, 4 Apr 2010 00:30:18 +0000 (17:30 -0700)]
Added SPARC ISA simulator targets to Makelocal

9 years agoFixed proc_init breaking with only one core
Andrew Waterman [Sun, 4 Apr 2010 00:18:46 +0000 (17:18 -0700)]
Fixed proc_init breaking with only one core

Now, core 1 is put on the idle core map if networking
support is disabled.  If networking support is enabled,
check to make sure we have at least 2 cores.

9 years agoFixed error messages in cross-compiler makefile
Andrew Waterman [Sat, 3 Apr 2010 23:56:28 +0000 (16:56 -0700)]
Fixed error messages in cross-compiler makefile

Previously, "make ramp" or "make x86" would not trigger
the "busted" target on error; only straight-up "make" would.

9 years agoFixes TLS on x86 (take 3)
Barret Rhoden [Sat, 3 Apr 2010 20:00:45 +0000 (13:00 -0700)]
Fixes TLS on x86 (take 3)

Fixes the segmentation limit, which somehow didn't make it into previous
commits.  The kernel is still vulnerable to a bad segment crashing the

You MUST rebuild your cross compiler, and remake all of your apps with
it (make userclean, make tests, etc).

9 years agoMaking static tests is faster
Barret Rhoden [Sat, 3 Apr 2010 04:34:33 +0000 (21:34 -0700)]
Making static tests is faster

By disabling the automatic disassembly of the test binaries.  Each one
was about 6.4MB of ASCII.

9 years agoFixed tls bug for addressing tls variables
Kevin Klues [Sat, 3 Apr 2010 02:47:33 +0000 (19:47 -0700)]
Fixed tls bug for addressing tls variables

Also fixed bug with CFLAGS vs. KERN_CFLAGS and USER_CFLAGS
You need to rebuild your cross compiler if you checkout this commit.

9 years agoFinally got KFS stuff sorted out on the new setup
Kevin Klues [Sat, 3 Apr 2010 02:45:18 +0000 (19:45 -0700)]
Finally got KFS stuff sorted out on the new setup

We also touched up a few issues relating to the last commit
with the configuration options.  Specifically, with the SINGLE_CORE option.
Incidentally, this option seems to be broken at the moment, but at least
we fixed the logic as to when it should be turned on.

9 years agoCleaned up the way ifdefs are handled
Kevin Klues [Sat, 3 Apr 2010 00:00:12 +0000 (17:00 -0700)]
Cleaned up the way ifdefs are handled

We now have a Makeconfig file that defines all of the configuration
options you can compile with.  Take a look in there to see what you can
turn on and off.  You should add configurations you want enabled into
your private Makelocal file.

9 years agoFixed problems with running static programs
Kevin Klues [Fri, 2 Apr 2010 22:04:44 +0000 (15:04 -0700)]
Fixed problems with running static programs

Fixed the sys_brk system call, and made the tests/pthread_test application
thread safe as well as removed some erroneous print statements.

9 years agoFixed TLS on i386
Andrew Waterman [Tue, 30 Mar 2010 23:45:52 +0000 (16:45 -0700)]
Fixed TLS on i386

A static initialization variable was living in two places (ld.so
and crt0), causing double-initialization of the LDT when a hart
comes in, crashing the first core.

Had to reorganize files so they could be included by the vastly-
included tls.h file in glibc.

9 years agoAvoids deadlock in cases where interrupts enabled
Kevin Klues [Thu, 1 Apr 2010 00:38:46 +0000 (17:38 -0700)]
Avoids deadlock in cases where interrupts enabled

If a system call is made on the same core the NIC is running on,
then deadlock might occur if irqsave is used.

9 years agoDedicated core 1 to NIC functionality
Kevin Klues [Thu, 1 Apr 2010 00:37:23 +0000 (17:37 -0700)]
Dedicated core 1 to NIC functionality

9 years agomade mhello work on sparc
Andrew Waterman [Tue, 30 Mar 2010 08:19:42 +0000 (01:19 -0700)]
made mhello work on sparc

9 years agoFixed hart stack allocation
Andrew Waterman [Tue, 30 Mar 2010 08:16:38 +0000 (01:16 -0700)]
Fixed hart stack allocation

Two changes: (1) use mmap with MAP_POPULATE for SPARC;
(2) the stack pointer was set to stack bottom, rather than top. oops

9 years agoMade tests build on SPARC
Andrew Waterman [Tue, 30 Mar 2010 07:55:59 +0000 (00:55 -0700)]
Made tests build on SPARC

9 years agoGot rid of manager printing "loading busybox"
Kevin Klues [Tue, 30 Mar 2010 04:32:30 +0000 (21:32 -0700)]
Got rid of manager printing "loading busybox"

9 years agoAdded all of the old tests from roslib back in
Kevin Klues [Tue, 30 Mar 2010 04:31:20 +0000 (21:31 -0700)]
Added all of the old tests from roslib back in

Also had to chnge the makefiles to support compiling all
c files contained in the tests directory without explicitly
listing them.

9 years agoAdded ability to query what arch you are building
Kevin Klues [Fri, 26 Mar 2010 08:10:42 +0000 (01:10 -0700)]
Added ability to query what arch you are building

Just run 'make arch'

9 years agoAdded support for building simple user programs
Kevin Klues [Fri, 26 Mar 2010 08:06:16 +0000 (01:06 -0700)]
Added support for building simple user programs

This includes the addition of some files in the
tests directory that test libraries built in user/parlib

9 years agoWe never actually removed <ros/error.h>, now we do
Kevin Klues [Fri, 26 Mar 2010 07:57:51 +0000 (00:57 -0700)]
We never actually removed <ros/error.h>, now we do

This caused alot of files to trivially change to include
the new <error.h> file that replaced it.

9 years agoMade real* names more consistent in Makefiles
Kevin Klues [Fri, 26 Mar 2010 07:41:07 +0000 (00:41 -0700)]
Made real* names more consistent in Makefiles

In the last commit I made it possible to switch targets more easily.
In this commit I made it more clear what it meant to make the realclean
and realall targets.  This actually fixed a small bug that caused erroneous
simlinks to be created by certain targets.

9 years agoMade pmap.c more consistent with demand paging
Andrew Waterman [Tue, 30 Mar 2010 07:21:09 +0000 (00:21 -0700)]
Made pmap.c more consistent with demand paging

Used the PAGE_PRESENT, etc. macros more consistently, and
made page_remove do the right thing if the page is paged out

9 years agoRemoved env_segment_alloc/free
Andrew Waterman [Tue, 30 Mar 2010 06:13:48 +0000 (23:13 -0700)]
Removed env_segment_alloc/free

The remaining uses (sys_brk and load_icode) have been replaced
with calls to mmap.  This makes load_icode ugly, but that will
be removed soon anyway.

9 years agoAdded MAP_POPULATE
Andrew Waterman [Tue, 30 Mar 2010 05:18:07 +0000 (22:18 -0700)]

Faults pages in before returning from mmap.
This will let us get rid of env_segment_alloc.
Also, fixed up handle_page_fault a bit

9 years agoFixed bug in SPARC trap entry
Andrew Waterman [Tue, 30 Mar 2010 04:55:50 +0000 (21:55 -0700)]
Fixed bug in SPARC trap entry

Condition codes were being clobbered by the kernel.  This
didn't show up until demand paging was added, because this
caused more random kernel crossings.

9 years agoAdded icache flushing
Andrew Waterman [Sat, 27 Mar 2010 08:38:17 +0000 (01:38 -0700)]
Added icache flushing

Some ISAs (cough) require icache flushes after code has been
self-modified, e.g. after faulting in a new page.  The lack
of this support caused the RAMP HW to crash.  I've added an
arch-specific "icache_flush_page" primitive; it's a nop on
x86, and on SPARC it flushes the I$/D$.

9 years agoAdded demand paging support
Andrew Waterman [Sat, 27 Mar 2010 04:06:31 +0000 (21:06 -0700)]
Added demand paging support

mmap'd pages are now faulted in on demand.  Metadata about paged-out
pages are stored in the unused bits of the PTE when the PTE is invalid.
Metadata comes in the form of a pointer to type pfault_info_t.

The main thing to keep in mind is it's often no longer sufficient to
check user PTEs against PTE_P to determine their state.  Use the
exactly one of the three must be true at any time.

On any call to mmap with fd != -1, a new struct file is instantiated.
It is reference-counted, once per mmap'd page.  When a page is faulted
in, or when a paged-out page is freed, the file is decref'd.  Allocating
and freeing a pfault_info_t will automatically incref/decref the associated
file, if any.

9 years agoFiles are represented with struct file
Andrew Waterman [Sat, 27 Mar 2010 00:52:26 +0000 (17:52 -0700)]
Files are represented with struct file

Right now, struct file pretty much just wraps an appserver fd,
but this provides enough abstraction so that the future
demand-paging stuff doesn't look so ghetto.

(Additionally, sys_exec now takes an fd, rather than a string.)

9 years agoMoved pte_t definition to arch-specific file
Andrew Waterman [Sat, 27 Mar 2010 00:38:34 +0000 (17:38 -0700)]
Moved pte_t definition to arch-specific file

Andrew Waterman [Fri, 26 Mar 2010 22:20:07 +0000 (15:20 -0700)]

These macros are helpful for page table management.
At this point, only the first two can be true.  In
general, exactly one must be true for any PTE.

9 years agoUse env_segment_alloc for stacks, not mmap
Andrew Waterman [Fri, 26 Mar 2010 22:17:05 +0000 (15:17 -0700)]
Use env_segment_alloc for stacks, not mmap

SPARC register window handlers expect the stack to be
mapped-in at all times.  Thus, demand-paging the stack
will break SPARC.  This restriction is not fundamental,
but it would be very difficult to work around.

9 years agofrontend_syscall now accepts NULL for &errno
Andrew Waterman [Fri, 26 Mar 2010 22:15:32 +0000 (15:15 -0700)]
frontend_syscall now accepts NULL for &errno

This reduces lots of typing when we don't actually care about errno