8 years agoChanged type of variable to match type in kernel
Kevin Klues [Sun, 2 May 2010 10:53:59 +0000 (03:53 -0700)]
Changed type of variable to match type in kernel

8 years agoAdded a barrier test for pthreads that stress tests them
Kevin Klues [Sun, 2 May 2010 10:46:37 +0000 (03:46 -0700)]
Added a barrier test for pthreads that stress tests them

8 years agoFixed bug in pthread barrier code
Kevin Klues [Sun, 2 May 2010 10:45:42 +0000 (03:45 -0700)]
Fixed bug in pthread barrier code

Needed to reset some more state after the barrier is cleared, but before
opening the floodgates.  Also needed a memory barrier in the pthread_mutex()
code to ensure the write to the count variable and the write to the lock variable
are in the proper order.  This one was a bitch to track down.

8 years agoMade stuff work on SPARC HW
Andrew Waterman [Sun, 2 May 2010 03:31:22 +0000 (20:31 -0700)]
Made stuff work on SPARC HW

Three issues:

1) Not HW related, but need 96 bytes on stack before TF.  This
   is because bytes 64-96 are reserved for spilling the args of
   a variadic function.  So if your ISR called printk immediately,
   it would trash the user's trap frame.

2) An MMU bug spuriously set the FSR, causing the spill/fill handlers
   to have false-positive stack-fucks.  Fixed by clearing FSR before
   doing spill/fill.

3) GLIBC doesn't use FLUSHes in all necessary places in the RTLD.
   Added them in.

8 years agoFix for experimental processes
Barret Rhoden [Sat, 1 May 2010 21:12:25 +0000 (14:12 -0700)]
Fix for experimental processes

And also procinfo pid was lying about refcnts.

8 years agoMonitor enhancements
Barret Rhoden [Sat, 1 May 2010 06:15:50 +0000 (23:15 -0700)]
Monitor enhancements

Allows for reading the procinfo (unlocked!) of a process, which would
deadlock the system if the lock was already held.  Also allows for the
unlocking of arbitrary locks (you provide the address).

This will help with killing the EXPER_TRADPROCs, which don't want to die
anymore.  Just unlock them, and they will go away.  Yikes.

8 years agoFix dependency on vcoreid in barrier and cond var.
David Zhu [Sat, 1 May 2010 04:34:04 +0000 (21:34 -0700)]
Fix dependency on vcoreid in barrier and cond var.

Bthread used vcoreid to find the unique waiter, but that is incorrect in
pthread, since threads can yield and move to another vcore. For the barrier
and condition variable impelmentation, it only requires a unique waiter.
So we allocate that unique waiter from an array of them.

next slot is just an optimization to give us a better chance of finding
an empty slot quickly. So the race on that is benign.

8 years agovcore_id() is now implemented using TLS
Andrew Waterman [Sat, 1 May 2010 04:53:44 +0000 (21:53 -0700)]
vcore_id() is now implemented using TLS

on both SPARC and x86.  Rebuild your xcc.

8 years agoLoad balancing for EXPER_TRADPROC
Barret Rhoden [Sat, 1 May 2010 04:23:00 +0000 (21:23 -0700)]
Load balancing for EXPER_TRADPROC

Runs once every 100ms, for now.

8 years agoMonitor command to run the monitor on another core
Barret Rhoden [Sat, 1 May 2010 01:46:00 +0000 (18:46 -0700)]
Monitor command to run the monitor on another core

And some other cosmetic changes...  Also, if you aren't on the core you
want, enter a garbage command - it'll allow another core (the one you
want) to win the race for the spinlock.  Interrupts are always disabled
in the monitor (for now), so don't worry about that.

8 years agoFP save/restore on x86
Barret Rhoden [Fri, 30 Apr 2010 23:24:06 +0000 (16:24 -0700)]
FP save/restore on x86

Saves and restores FP regs.  This will also save SSE registers, but
supposedly only if the appropriate bit is set in cr4.  This might not be
logically correct, especially with the _S state, but it will save and
restore them for preemptions, which should be good enough for OSDI.  We
still need to think through the best places to put them and under what
conditions we need to save/restore.

The pthread library still needs to handle it's own save and restore (on
both sparc and x86).

You need to reinstall your kernel headers (or at least x86's

8 years agoFixed EXPER_TRADPROC unmapping/remapping
Barret Rhoden [Fri, 30 Apr 2010 20:15:15 +0000 (13:15 -0700)]
Fixed EXPER_TRADPROC unmapping/remapping

Slight race, sorted with a spin_on.

8 years agoFixed EXPER_TRADPROC mmaping
Barret Rhoden [Fri, 30 Apr 2010 20:13:54 +0000 (13:13 -0700)]
Fixed EXPER_TRADPROC mmaping

Uses the true_proc for all memory related functions, since there is one
shared address space.  Previously, we could have had odd page faults or
unexpected mappings.

8 years agoFix for EXPER_TRADPROC and vcore0
Barret Rhoden [Fri, 30 Apr 2010 19:31:34 +0000 (12:31 -0700)]
Fix for EXPER_TRADPROC and vcore0

Needed to do some ugliness to get the vcore0 fake proc to start up the
right way.  For those curious, this looked like a mystery page fault in
glibc (locale shit).  Git pointed to the culprit commit.

8 years agoMinor (mostly harmless) pthread fixes
Barret Rhoden [Fri, 30 Apr 2010 03:58:43 +0000 (20:58 -0700)]
Minor (mostly harmless) pthread fixes

8 years agoMPC TLB shootdowns
Barret Rhoden [Fri, 30 Apr 2010 03:53:56 +0000 (20:53 -0700)]
MPC TLB shootdowns

This should work for now, though it doesn't actually check that other
cores receive the message before returning (which is a slight race).
See the discussion in the documentation for more details.  Could add a
checklist to be safe (though don't put in a barrier, unless you don't
include the caller, which is a minor pain).

8 years agoSupport for preempting and yielding btwn two procs
Barret Rhoden [Thu, 29 Apr 2010 04:08:12 +0000 (21:08 -0700)]
Support for preempting and yielding btwn two procs

Ghetto support for OSDI to have one process preempt another's cores when
there aren't enough idle cores.  Send the REQ_SOFT flag in the higher
priority process.  This will also give any cores yielded back to the
most recent preemption victim.  It's really only made for interactions
between two MCPs.

8 years agoFix to e1000 driver
Kevin Klues [Fri, 30 Apr 2010 06:15:00 +0000 (23:15 -0700)]
Fix to e1000 driver

8 years agoFixed backtracing w.r.t. SPARC kernel entry
Andrew Waterman [Thu, 29 Apr 2010 01:50:26 +0000 (18:50 -0700)]
Fixed backtracing w.r.t. SPARC kernel entry

For a good time, don't use -pthread

8 years agoFixes a bug in _pthread_init that blocks notifs
Barret Rhoden [Thu, 29 Apr 2010 01:09:07 +0000 (18:09 -0700)]
Fixes a bug in _pthread_init that blocks notifs

Need to enable notifications so that __startcore will properly bring up
vcore0 at _start.  Otherwise, it will start that _S thread as if it was
a preemption, but with a notif_pending, meaning you'll never receive an
active notification til you clear that flag.

8 years agoMakes "measure kill" work with the appserver
Barret Rhoden [Wed, 28 Apr 2010 19:31:39 +0000 (12:31 -0700)]
Makes "measure kill" work with the appserver

Note the measurement will suck a bit, since it won't count the time it
takes to __proc_free(), but it should be better than before.  If not,

8 years agoRemoved MAX_VCORE reference from pthread cond vars
Barret Rhoden [Wed, 28 Apr 2010 19:24:31 +0000 (12:24 -0700)]
Removed MAX_VCORE reference from pthread cond vars

8 years agoFixed register clobbering in SPARC
Andrew Waterman [Wed, 28 Apr 2010 08:13:20 +0000 (01:13 -0700)]
Fixed register clobbering in SPARC

If an interrupt came in while in the kernel context, the global
registers would be clobbered.  Now, that's fixed.  Currently, the
pthread_test program runs fine with or without TRADPROC.

8 years agoAdded fillmeup support for the e1000 driver
Kevin Klues [Wed, 28 Apr 2010 05:18:42 +0000 (22:18 -0700)]
Added fillmeup support for the e1000 driver

8 years agoChange the kernel panic in frontend syscall to a warning.
David Zhu [Wed, 28 Apr 2010 03:08:22 +0000 (20:08 -0700)]
Change the kernel panic in frontend syscall to a warning.

8 years agoFixed deadlock issue in pthread barrier wait.
David Zhu [Wed, 28 Apr 2010 02:57:55 +0000 (19:57 -0700)]
Fixed deadlock issue in pthread barrier wait.

While a thread is waiting on a barrier, it can call pthread_yield and may come
back on a different vcore. Using vcore id as the index into the sense array
is wrong. Use pthread id instead.

In the future, we might dynamically allocate the sense array based on how
many pthreads will wait on a barrier, instead of having the static array.

8 years agoPreemption functions
Barret Rhoden [Wed, 28 Apr 2010 02:40:30 +0000 (19:40 -0700)]
Preemption functions

Half-temporary functions to preempt or warn about preemption for a
process's core (or all cores).  There are also test apps to run while
this is going on (msr_nice_while will yield when warned).  There are
monitor functions added to measure to test these things.

The time to preempt is really low, enough so that I wonder if it's
working or not.

8 years agoAdded a spin_on() macro
Barret Rhoden [Wed, 28 Apr 2010 02:30:53 +0000 (19:30 -0700)]
Added a spin_on() macro

It will spin while the condition is true, like while (1), but will
eventually time out based on a number of spins, print a warning, and
proceed.  Useful for places you want to wait, but don't want to

8 years agoTest app to measure vcore_request()
Barret Rhoden [Tue, 27 Apr 2010 05:04:29 +0000 (22:04 -0700)]
Test app to measure vcore_request()

See the comment at the top of msr_get_cores.c for details.

8 years agoFixed DISABLE_SMT to report the right max_vcores
Barret Rhoden [Tue, 27 Apr 2010 02:27:49 +0000 (19:27 -0700)]
Fixed DISABLE_SMT to report the right max_vcores

8 years agochange fillmeup syscall to use an int32 field to indicate the position within the...
David Zhu [Tue, 27 Apr 2010 23:09:43 +0000 (16:09 -0700)]
change fillmeup syscall to use an int32 field to indicate the position within the circular buffer.

8 years agoReenable irq_save() for the proclock in proc_incref and proc_decref
Kevin Klues [Tue, 27 Apr 2010 05:09:21 +0000 (22:09 -0700)]
Reenable irq_save() for the proclock in proc_incref and proc_decref

8 years agoAdd fillmeup support for the realtek driver
Kevin Klues [Tue, 27 Apr 2010 05:08:32 +0000 (22:08 -0700)]
Add fillmeup support for the realtek driver

8 years agoSyscall tracing
Barret Rhoden [Tue, 27 Apr 2010 01:57:51 +0000 (18:57 -0700)]
Syscall tracing

Turn it on in the monitor, or however.  The monitor defaults are loud
(prints as they happen) and for all processes.  Pass anything other than
0 for silent (treated as a bool).  Currently only traces 1024 events, so
quit making vcoreid calls.

8 years agoMonitor function to notify a proc
Barret Rhoden [Mon, 26 Apr 2010 19:54:33 +0000 (12:54 -0700)]
Monitor function to notify a proc

Used for debugging, mostly.  Note that it will not send a notif event,
just a number, which will be seen in the bitmask.  Userspace currently
does not check the mast, so mhello and friends will say it was type 0.

8 years agoFixed packetizer tool to take arguments
Kevin Klues [Mon, 26 Apr 2010 23:27:43 +0000 (16:27 -0700)]
Fixed packetizer tool to take arguments

8 years agoFor OSDI, gettimeofday should be processed locally.
David Zhu [Mon, 26 Apr 2010 19:21:02 +0000 (12:21 -0700)]
For OSDI, gettimeofday should be processed locally.

Going to app server would lead to inaccurate measurement.

8 years agoConfig option to "disable" SMT/hyperthreading
Barret Rhoden [Mon, 26 Apr 2010 19:10:19 +0000 (12:10 -0700)]
Config option to "disable" SMT/hyperthreading

It just adds all odd cores to the idle core map.  The other, non-zero
cores will remain halted.  This assumes you're okay with running the
manager, monitor, and NIC code on core 0.  You can run them on the other
cores, but those cores will still be given out to _Ms.

8 years agoMCPs -> Many Filthy _S Ps
Barret Rhoden [Mon, 26 Apr 2010 01:42:12 +0000 (18:42 -0700)]
MCPs -> Many Filthy _S Ps

When in _M mode, a process (the true_proc) gets n children (the vcores).
When the process dies, all of the children die and eventually the parent
dies, using the normal process mechanics.

Sort of works.  No yielding allowed (just returns).  Usually is okay,
though there are some user page faults from time to time.

8 years agoAdded the CONFIG_OSDI option to the template
Barret Rhoden [Mon, 26 Apr 2010 02:25:08 +0000 (19:25 -0700)]
Added the CONFIG_OSDI option to the template

8 years agoFixes deadlocks with the monitor
Barret Rhoden [Mon, 26 Apr 2010 01:17:43 +0000 (18:17 -0700)]
Fixes deadlocks with the monitor

The monitor can be called from interrupt context, and it doesn't return
if you call kfs_run.

8 years agoRevert "Make floating point work (no ancillary ...
Barret Rhoden [Sun, 25 Apr 2010 23:38:50 +0000 (16:38 -0700)]
Revert "Make floating point work (no ancillary ...

This reverts commit ff4059da0f765ebe0fd8e69c2068bad9dd00d17a.

Was already applied two lines up.

8 years agoMade fillmeup compile on SPARC
Andrew Waterman [Sun, 25 Apr 2010 22:16:15 +0000 (15:16 -0700)]
Made fillmeup compile on SPARC

The struct was defined in i686.  SPARC doesn't have a NIC, so we
just return -1.

8 years agoAdded a fillmeup syscall
Kevin Klues [Sun, 25 Apr 2010 10:03:06 +0000 (03:03 -0700)]
Added a fillmeup syscall

This syscall is used for setting up data structures in the kernel that
allow it to stream pcaketized files directly into its memory space.
Designed for helping us specifically with our measurements for our OSDI
paper.  Will be removed at some point in the future.

8 years agoFixed bug with setting parameters properly for the self_notify trap
Kevin Klues [Sun, 25 Apr 2010 10:02:27 +0000 (03:02 -0700)]
Fixed bug with setting parameters properly for the self_notify trap

8 years agoMake floating point work (no ancillary state yet though)
Kevin Klues [Sun, 25 Apr 2010 09:59:02 +0000 (02:59 -0700)]
Make floating point work (no ancillary state yet though)

8 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

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

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

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

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

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

8 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

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

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

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

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

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

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

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

8 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

8 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

8 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

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

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

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

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

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

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

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

8 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

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

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

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



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

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

8 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

8 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

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

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

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

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

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

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

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

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

8 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

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

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

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

8 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

8 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

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

8 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

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

8 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

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

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

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

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