9 years agoMake the realtek driver route interrupts like the other drivers
Kevin Klues [Sun, 25 Apr 2010 09:58:07 +0000 (02:58 -0700)]
Make the realtek driver route interrupts like the other drivers

9 years agoMassive cleanup of SPARC kernel entry code
Andrew Waterman [Sun, 25 Apr 2010 06:01:50 +0000 (23:01 -0700)]
Massive cleanup of SPARC kernel entry code

1) Routine kernel messages no longer crash if currently in the kernel.

2) More sane handling of stack-fucking.

3) Performance enhancements when taking interrupts in the kernel.

4) Userspace vcore stuff fixed.  This is a combination of allocating
   space near the top of the stack, and also an artifact of #2.

9 years agoMonitor now runs on whatever core panics
Andrew Waterman [Sun, 25 Apr 2010 05:58:30 +0000 (22:58 -0700)]
Monitor now runs on whatever core panics

There's a monitor lock, though, so only one core will ever
be in the monitor polling for keyboard input.

9 years agoFixed handling of appserver/interrupts
Andrew Waterman [Sun, 25 Apr 2010 05:57:28 +0000 (22:57 -0700)]
Fixed handling of appserver/interrupts

Instead of toggling interrupts on and off, we assert that they
are enabled at the top of frontend_syscall.  This is because if
the programmer intended interrupts to be disabled, they had better
be disabled!

9 years ago__proc_unlock_ipipending() changed
Barret Rhoden [Sun, 25 Apr 2010 02:47:11 +0000 (19:47 -0700)]
__proc_unlock_ipipending() changed

Was changed to represent its real usage, now that we have routine kmsgs
for proc management.  There should be no real change to functionality.

9 years agoproc_lock is no longer an irqsave
Barret Rhoden [Sun, 25 Apr 2010 02:09:51 +0000 (19:09 -0700)]
proc_lock is no longer an irqsave

Do not grab it from interrupt context.  Technically, this includes the
monitor, if you have the CONFIG_MONITOR_ON_INT flag set.  I'll address
those issues in a later patch.  Calling schedule() from a timer
interrupt also does this.  That'll get fixed later, and probably won't
cause a problem for now.

9 years agoBasic FP support on x86
Barret Rhoden [Sun, 25 Apr 2010 00:08:53 +0000 (17:08 -0700)]
Basic FP support on x86

It doesn't save or restore, but it at least makes sure the FP units are

9 years agoEthnic sensitivity patch
Barret Rhoden [Sat, 24 Apr 2010 22:16:58 +0000 (15:16 -0700)]
Ethnic sensitivity patch

9 years agoRedefine exit to simply destroy a process
Kevin Klues [Sat, 24 Apr 2010 00:17:45 +0000 (17:17 -0700)]
Redefine exit to simply destroy a process

Need to sort out the right way to do this, but currently
glibc sometimes calls sys_yield() on its exit path, which
breaks process destruction in many-core mode.

9 years agoMade pthreads work with our hack to never yield the last core
Kevin Klues [Sat, 24 Apr 2010 00:11:59 +0000 (17:11 -0700)]
Made pthreads work with our hack to never yield the last core

Need a while loop, since sys_yield() may now return instead of
actually yielding.

9 years agoEnable irqs around the while loop waiting on magic memory
Kevin Klues [Fri, 23 Apr 2010 23:46:41 +0000 (16:46 -0700)]
Enable irqs around the while loop waiting on magic memory

This is necessary if we happen to make frontend system calls on
cores that take interrupts (i.e. the NIC filling in that magic memory).

9 years agoAdded comment about danger of dropping into monitor()
Kevin Klues [Fri, 23 Apr 2010 23:45:02 +0000 (16:45 -0700)]
Added comment about danger of dropping into monitor()

9 years agoSet errno when we make a resource request....
Kevin Klues [Fri, 23 Apr 2010 23:44:02 +0000 (16:44 -0700)]
Set errno when we make a resource request....

9 years agoMade a global num_mgmtcores variable
Kevin Klues [Fri, 23 Apr 2010 23:43:18 +0000 (16:43 -0700)]
Made a global num_mgmtcores variable

Replaces the local num_reserved variable in proc_init()
so that it can be used in other functions throughout the file.

Also added a __CONFIG_OSDI__ variable for hacky stuff
related to our upcoming OSDI submission.  Need to think
more about how to fix this properly... The problem is
that the code below this hack is the 'proper' solution,
but our kernel level scheduler currently can't properly
handle processes in the manycore state.

9 years agoZero out gs and fs whenever we enter the kernel
Kevin Klues [Fri, 23 Apr 2010 23:39:02 +0000 (16:39 -0700)]
Zero out gs and fs whenever we enter the kernel

9 years agoEnabled interrupts in the int driven kernel monitor
Kevin Klues [Fri, 23 Apr 2010 23:34:09 +0000 (16:34 -0700)]
Enabled interrupts in the int driven kernel monitor

9 years agoForce interrupts to core 0 on network drivers
Kevin Klues [Fri, 23 Apr 2010 23:28:31 +0000 (16:28 -0700)]
Force interrupts to core 0 on network drivers

Also make the ne2k driver work with MPTABLES disabled

9 years agoMake slab allocator panic when contiguous memory is not available.
David Zhu [Fri, 23 Apr 2010 23:06:16 +0000 (16:06 -0700)]
Make slab allocator panic when contiguous memory is not available.

9 years agoFixed page coloring given __CONFIG_PAGE_COLOR__
Kevin Klues [Fri, 23 Apr 2010 22:51:21 +0000 (15:51 -0700)]
Fixed page coloring given __CONFIG_PAGE_COLOR__

9 years agoAdding a test case for file write/read testing etc.
David Zhu [Wed, 21 Apr 2010 01:27:59 +0000 (18:27 -0700)]
Adding a test case for file write/read testing etc.

9 years agoTrigger the monitor with an interrupt
Barret Rhoden [Thu, 22 Apr 2010 02:56:21 +0000 (19:56 -0700)]
Trigger the monitor with an interrupt

It will respond to keyboard or serial input (so it works with VMs).  Hit
the char, drop into the monitor.  Exit it to return from the interrupt.
To use it, set the __CONFIG_MONITOR_ON_INT__ variable in your Makelocal.

Careful KFS running from this.  In fact, you don't want to, since it
won't return, meaning you won't return from the keyboard interrupt to
whatever process you were running before.

9 years agosys_halt_core() and an idle process
Barret Rhoden [Thu, 22 Apr 2010 00:16:46 +0000 (17:16 -0700)]
sys_halt_core() and an idle process

Schedule the idle process after busybox or whatever, and it will halt
the core for 5 sec and yield.

Note the timer_interrupt() will fire too, and that the syscall takes no
precautions about any outstanding per-core timers.

You need to reinstall your kernel headers.

9 years agoExp: per-core runqueues and timer ticks
Barret Rhoden [Tue, 20 Apr 2010 18:03:25 +0000 (11:03 -0700)]
Exp: per-core runqueues and timer ticks

This is for the experiment with traditional style process work.  There
are per-core runqueues and a local timer tick to call a basic schedule
function (FCFS).  It's all #ifdef'd by __CONFIG_EXPER_TRADPROC__.

9 years agoFixed dirent struct alignment
Kevin Klues [Thu, 22 Apr 2010 01:55:09 +0000 (18:55 -0700)]
Fixed dirent struct alignment

So now it's the same size on all ISAs, which makes the appserver behave.

9 years agoAdded appserver support to the e1000 driver
Kevin Klues [Wed, 21 Apr 2010 21:42:14 +0000 (14:42 -0700)]
Added appserver support to the e1000 driver

9 years agoChanges to support the 64 core boxboro machine
Kevin Klues [Tue, 20 Apr 2010 19:04:21 +0000 (12:04 -0700)]
Changes to support the 64 core boxboro machine

This code allows the disabling the mptables via
__CONFIG_DISABLE_MPTABLES__, and the use of the 64 core boxboro machine.

This is ugly. You've been warned.

9 years agoMoved the E1000 MMIO addr to a makelocal variable.
Kevin Klues [Tue, 20 Apr 2010 18:48:47 +0000 (11:48 -0700)]
Moved the E1000 MMIO addr to a makelocal variable.

The physical address the E1000 device expects its MMIO to be at is
now controlable via a #def in the makelocal. Specifically,
E1000_MMIO_ADDR. Without that set, it does nothing for MMIO.

9 years agoFirst run at an E1000 driver, with various LWIP fixes.
Kevin Klues [Tue, 20 Apr 2010 17:55:11 +0000 (10:55 -0700)]
First run at an E1000 driver, with various LWIP fixes.

This is the first pass at a functional E1000 driver for both qemu
and the 8 core nehalem box (s142). This specifically will not work
on other hardware, due to a hard coding of the MMIO addr. This is
a temporary measure until we have a way to handle MMIO better.

This also fixes my COMPLETELY BROKEN recursive lock implimentation.
Woops, my bad. I don't know what the hell I was thinking.

This also adds remote reboot functionality to the webserver. Let's
not talk about it.



9 years agoExposed per-core timer interrupts on SPARC
Andrew Waterman [Tue, 20 Apr 2010 21:19:12 +0000 (14:19 -0700)]
Exposed per-core timer interrupts on SPARC

timer_interrupt() will be called on a timer interrupt.  set_timer(usec) arms
a core's timer.  Beware that, internally, we only support a power-of-2 number
of cycles as the timer period, so the usec value will be rounded up to the
next power-of-2 cycle count.  Also, the max period is 2^24 cycles (~60 HZ for
a 1 GHz target clock).

9 years agofixing pthread lib dependency to include mcs and debug.
David (Yu) Zhu [Tue, 20 Apr 2010 01:07:29 +0000 (18:07 -0700)]
fixing pthread lib dependency to include mcs and debug.

9 years agoPthreads has safe synchronization using yields
Barret Rhoden [Mon, 19 Apr 2010 23:48:40 +0000 (16:48 -0700)]
Pthreads has safe synchronization using yields

The mutexes and barriers will spin for a little and yield if they don't
win (adaptive mutexes) to avoid deadlock/horrible inefficiences if the
lock holder or slow one is descheduled.  pthread_join() also won't spin

9 years agoPthread fix to let the _S thread yield
Barret Rhoden [Mon, 19 Apr 2010 20:55:55 +0000 (13:55 -0700)]
Pthread fix to let the _S thread yield

9 years agoMade pthreads work on SPARC
Andrew Waterman [Mon, 19 Apr 2010 22:13:29 +0000 (15:13 -0700)]
Made pthreads work on SPARC

Some nastiness with TLS and vcoreids.  Both live in
registers set up by the trapframe, so they require
special care when popping the tf.

9 years agopthread_yield()
Barret Rhoden [Mon, 19 Apr 2010 06:28:33 +0000 (23:28 -0700)]

This allows a pthread to yield, which basically saves its state, puts it
on the ready queue, and jumps to the transition stack / vcore_entry().
Lightly tested.

This needs save_ros_tf() to be implemented on sparc.

9 years agoUserspace printd macro
Barret Rhoden [Mon, 19 Apr 2010 06:21:10 +0000 (23:21 -0700)]
Userspace printd macro

9 years agoFixes pthread exit with -O2
Barret Rhoden [Mon, 19 Apr 2010 00:56:28 +0000 (17:56 -0700)]
Fixes pthread exit with -O2

-O2 was breaking the delicate balance in "set_stack_pointer() and then
call a function."  Setting __pthread_exit to noreturn keeps the compiler
from trying to use the stack to save info.

Saving space at the top of the stack needs to happen in an
arch-dependent manner in set_stack_pointer().  If you have page faults
around 0x20009000, it's because you are walking off the top of a
transition stack, and it's because you don't have enough room.

9 years agoMakes userspace debuginfo configurable
Barret Rhoden [Mon, 19 Apr 2010 00:15:55 +0000 (17:15 -0700)]
Makes userspace debuginfo configurable

Glibc will continue to be built with -g, but if the CONFIG_USERDEBUG
flag isn't set, the make process won't compile user/ and tests/ with -g
and will strip the debuginfo from the binaries, which decreases the size
of the programs (and the kernel when using KFS).

Also, this fixes a bug where the USER_CFLAGS were getting clobbered.

9 years agoPthread create, join, and exit
Barret Rhoden [Sat, 17 Apr 2010 22:42:10 +0000 (15:42 -0700)]
Pthread create, join, and exit

Primitive pthread scheduler.  It doesn't handle notifications, yield
between pthreads, support non-spinning sync, etc.  It just executes each
pthread to completion, FCFS, on whatever vcores are in the system.

P.S. - careful of races with free on exit/join...

9 years agoFixes potential issue with x86 TLS
Barret Rhoden [Sat, 17 Apr 2010 11:25:26 +0000 (04:25 -0700)]
Fixes potential issue with x86 TLS

Don't worry about it.  Not like you should be worrying about sbrk().

9 years agoFixes sbrk for the third time
Barret Rhoden [Sat, 17 Apr 2010 11:20:53 +0000 (04:20 -0700)]
Fixes sbrk for the third time

I can't fucking believe that we sat here for 11 hours debugging
something that was a one-characater change to fix.  And it's all because
Andrew is a fucking asshole.  P.S. I hate you.
--klueska  dictated, but not read.

9 years agoUserspace source code is in disassembled binaries
Barret Rhoden [Sat, 17 Apr 2010 11:19:09 +0000 (04:19 -0700)]
Userspace source code is in disassembled binaries

9 years agoMade ros_pop_tf work on SPARC
Andrew Waterman [Sat, 17 Apr 2010 01:23:20 +0000 (18:23 -0700)]
Made ros_pop_tf work on SPARC

Unfortunately, this involves a kernel crossing.  The "good" news
is that register window flushing is necessary anyway, so the
actual overhead of the kernel crossing isn't substantial.

9 years agoThe kernel migrates silly state when becoming _M
Barret Rhoden [Fri, 16 Apr 2010 01:16:03 +0000 (18:16 -0700)]
The kernel migrates silly state when becoming _M

It will use the preempt slot and fake a notification to get the _M
process to start up at _start on vcore0.

9 years agoInitial pthreads library on top of vcores
Barret Rhoden [Fri, 16 Apr 2010 00:50:51 +0000 (17:50 -0700)]
Initial pthreads library on top of vcores

The old pthreads is now bthreads.  The current pthreads library can
handle restarting vcore0 after a transition, but other than that it
doesn't do anything.

9 years agoFixed cpu_halt on SPARC
Andrew Waterman [Fri, 16 Apr 2010 00:00:15 +0000 (17:00 -0700)]
Fixed cpu_halt on SPARC

Return from IPI now breaks out of halt

9 years agoRunning SPARC FS now rebuilds kernel if needed
Andrew Waterman [Thu, 15 Apr 2010 23:59:41 +0000 (16:59 -0700)]
Running SPARC FS now rebuilds kernel if needed

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.