7 years agoPadding in MCS-PDR qnodes (XCC)
Barret Rhoden [Wed, 20 Mar 2013 23:29:32 +0000 (16:29 -0700)]
Padding in MCS-PDR qnodes (XCC)

Check the comment about weird padding issues.  Either way, we want some
padding.  Too much wasn't right either, for some reason.

Reinstall kernel headers.

7 years agoKernel uses ARCH_CL_SIZE (XCC)
Barret Rhoden [Wed, 20 Mar 2013 23:28:56 +0000 (16:28 -0700)]
Kernel uses ARCH_CL_SIZE (XCC)

Instead of the older HW_CACHE_ALIGN or whatever.

Reinstall kernel headers.

7 years agoRemoves the MCS-PDR lock holder optimization (XCC)
Barret Rhoden [Wed, 20 Mar 2013 22:17:50 +0000 (15:17 -0700)]
Removes the MCS-PDR lock holder optimization (XCC)

Was an optimization for making preemption recovery fast, but was making
the locking common case slow.

Reinstall your kernel headers if you want (it'll still build okay).

7 years agoMCS PDR locks use memalign
Barret Rhoden [Wed, 20 Mar 2013 22:15:10 +0000 (15:15 -0700)]
MCS PDR locks use memalign

To ensure we get the right alignment, and not only the right size, for
the malloc'd qnodes.

7 years agox86: tsc cycles test
Barret Rhoden [Tue, 19 Mar 2013 18:39:23 +0000 (11:39 -0700)]
x86: tsc cycles test

Simple benchmark to determine if TSC ticks are equivalent to cycles,
given that the CPU frequency doesn't vary.

7 years agox86: handle overflow when setting the lapic timer
Barret Rhoden [Tue, 19 Mar 2013 01:40:27 +0000 (18:40 -0700)]
x86: handle overflow when setting the lapic timer

Note that if you have a long-running alarm and a short periodic alarm
that goes off frequently, the long-runner will continue to be reset
every time the periodic runs off.  For a brief moment, the long-runner
will be the next up, which will cause an overflow calculation, til the
periodic resets itself (depending on the nature of the periodic reset.
The ksched does the reset outside of the handler, for instance).

7 years agox86: changes LAPIC timer divisor to 32
Barret Rhoden [Tue, 19 Mar 2013 00:25:44 +0000 (17:25 -0700)]
x86: changes LAPIC timer divisor to 32

Seems like a reasonable choice.  128 wasn't working on c89, since the
bus was so slow (100MHz) that we couldn't express 1 usec.  We could
allow some runtime setting/resetting, but 32 should be fine for anything
we need.

7 years agoPXELINUX booting configs
Barret Rhoden [Sat, 16 Mar 2013 05:53:09 +0000 (22:53 -0700)]
PXELINUX booting configs

Feel free to use my PXE make target (for those of your with access).

7 years agoExport timing overhead via procinfo (XCC)
Barret Rhoden [Thu, 14 Mar 2013 23:53:58 +0000 (16:53 -0700)]
Export timing overhead via procinfo (XCC)

You need to rebuild absolutely everything.  In addition to the cross
compiler, you also need to rebuild any out-of-tree apps, such as busybox
or Parsec benchmarks.

7 years agoReworks timing infrastructure (XCC)
Barret Rhoden [Thu, 14 Mar 2013 23:31:18 +0000 (16:31 -0700)]
Reworks timing infrastructure (XCC)

All of the old timing training stuff is moved out of kernel headers, and
is more in line with the recent TSC knowledge.  People can still use
stop_ and start_timing as convenience wrappers around

Remove /ros/time.h from your cross compiler's kernel headers.  For
instance, for x86, rm YOUR_XCC_LOC/i686-ros/sys-include/ros/time.h.

7 years agoChanges rdtsc serialization methods
Barret Rhoden [Thu, 14 Mar 2013 22:52:08 +0000 (15:52 -0700)]
Changes rdtsc serialization methods

In short, use lfence;rdtsc; instead of cpuid;rdtsc.  For the long
version, read the info at the beginning of k/a/i/rdtsc_test.c.

Also, this will attempt to detect whether or not your hardware has any
issues preventing the reliable use of a TSC.  This includes not having
an invariant TSC, as well as getting SMI interrupts.  Again, read

7 years agoUINT64_MAX and friends available in the kernel
Barret Rhoden [Thu, 14 Mar 2013 20:08:12 +0000 (13:08 -0700)]
UINT64_MAX and friends available in the kernel

7 years agoHandle rdtscp
Barret Rhoden [Mon, 11 Mar 2013 22:10:49 +0000 (15:10 -0700)]
Handle rdtscp

rdtscp has a bunch of benefits for measurements (stay tuned for more
commits), but it only works on more recent x86 hardware, and doesn't
work on my old core2 development machine running qemu.

x86 will now catch the rdtscp invalid opcode trap and fake the command.
This will not give accurate numbers for measurement.  During boot, look
for whether or not RDTSCP is supported if you are curious.

In the future, we could have a flag that replaces rdtscp calls with
rdtsc at compile time, if someone wanted more accurate measurements on
older hardware.  For now, I'm not too concerned with those older
machines when it comes to measuring performance.

7 years agoAdds a C++ stream test and test/ C++ make rules
Barret Rhoden [Thu, 7 Mar 2013 21:24:00 +0000 (13:24 -0800)]
Adds a C++ stream test and test/ C++ make rules

The stream test is very basic; it was what I used in the previous

The test infrastructure can now handle C++ files - just drop them in the
tests/ directory and they should make just like the .c files.

7 years agoFixes C++ streams (XCC)
Barret Rhoden [Thu, 7 Mar 2013 20:27:09 +0000 (12:27 -0800)]
Fixes C++ streams (XCC)

Stream file code under the hood wasn't opening files.  It would call a
few functions, and due to having large file support built in (which we
do want), it would try to call open64, which was not built in glibc due
to the lack of _G_OPEN64.  Conveniently enough, the fopen calls didn't
have stub warnings; they just returned ENOSYS.

Turns out there is a _G_config.h file in sysdeps/gnu/ that I think Linux
uses.  We're now using that same file, with minor changes (no __mremap).

Rebuild your cross compiler (either make clean or copy over the -ros

7 years agolibstdc++ doesn't try to call ioctl() (XCC)
Barret Rhoden [Thu, 7 Mar 2013 02:36:48 +0000 (18:36 -0800)]
libstdc++ doesn't try to call ioctl() (XCC)

showmanyc() should still work via the alternate mechanism (via regular
files).  If it doesn't work, and simply returns 0, I'm not actually sure
what the consequences are, though glibc seems to allow that.

Regarding the ctype files in config/os/ros/, I just grabbed the files
from the generic directory, which were the ones we were using before
this patch (generic is the default).

Rebuild your cross compiler.  Simply making won't suffice, since you
need new config/make files, so either make clean, or rm the gcc
configure files and build directories.

7 years agoUse EFAULT instead of EINVAL for bad user pointers
Barret Rhoden [Wed, 6 Mar 2013 21:19:13 +0000 (13:19 -0800)]
Use EFAULT instead of EINVAL for bad user pointers

And don't reset errno when using the memcpy errno helpers.

7 years agoFixes bug in sys_symlink
Barret Rhoden [Wed, 6 Mar 2013 21:09:46 +0000 (13:09 -0800)]
Fixes bug in sys_symlink

Clearly we should have been using the trusted / memduped strings,
instead of the user strings.  What's more interesting is that this used
to work, but recently page faults.

For those curious, the actual page fault happened a few bytes into
new_path, during link_path_walk().  Checking out 'showmappings' (look at
the page table), the page is mapped, but it is only mapped read-only.
Since the kernel honors read only flags in PTEs (due to the CR0 flag),
the kernel page faulted on an illegal write access on a read-only page.

Now as to why this didn't happen 2.5 years ago, either we've done
something since then to honor read-only mappings of binaries, the
compiler decided to make it read-only, or qemu/kvm wasn't previously
honoring the CR0 flag.

7 years ago64 bit file seeking (XCC)
Barret Rhoden [Wed, 6 Mar 2013 02:27:58 +0000 (18:27 -0800)]
64 bit file seeking (XCC)

The kernel now tracks all file offsets as 64 bit values, and the old
lseek syscall is now llseek.  This call can handle 64 bit or 32 bit
offsets on both 64 and 32 bit systems.  It compiles and works on a 32
bit system (I don't have a 64 bit Akaros system to test out the 64 bit
stuff).  The ghetto file_test was updated to do a very basic lseek64 as

glibc's lseek64 now uses the new syscall as well.

Rebuild your cross compiler, and copy-over the lseek files from the -ros
directory (or do a complete make clean).

7 years agoRemoves side effects from asserts in tests/
Barret Rhoden [Fri, 1 Mar 2013 21:39:31 +0000 (13:39 -0800)]
Removes side effects from asserts in tests/

We shouldn't have necessary work happen inside assert(), in case we
optimize it later.

Plus we now have potential error messages when pthread_create fails, if
errno was set properly, which it isn't yet.  That's something we need to
fix in pthread code, instead of printing profanities.

7 years agoProvisioning syscall and helper program (XCC)
Barret Rhoden [Wed, 27 Feb 2013 20:55:53 +0000 (12:55 -0800)]
Provisioning syscall and helper program (XCC)

Basic syscall for resource provisioning.  It only handles cores, does no
permissions checks, and is basically a syscall wrapper around

To use it, check out the test program 'prov'.  For now, it will operate
on a PID like so:

$ prov --help
$ prov -t c -p PID -v 4  (provision pcore 4 to PID)
$ prov -t c -p PID -m    (provision all pcores to PID)
$ prov -s (ghetto interface to tell the kernel to print the prov map)

Reinstall your kernel headers.

7 years agoFixes glibc's errno strings (XCC)
Barret Rhoden [Wed, 27 Feb 2013 20:53:05 +0000 (12:53 -0800)]
Fixes glibc's errno strings (XCC)

Whenever you change ros/errno.h, you need to rerun the script and
rebuild the glibc.

Rebuild glibc if you want to get proper error messages from calls like

7 years agoFixes bugs with waitpid()
Barret Rhoden [Tue, 26 Feb 2013 01:56:07 +0000 (17:56 -0800)]
Fixes bugs with waitpid()

Should return -1 when there are no children; looks like I misread the
man page.  Also, we always return a status (when requested), and not
just for certain results.  Finally, we properly put the return value in
the correct byte.

We still don't do anything with signalling, stopping, etc.

7 years agoUpdates doc with new image file and instructions
Barret Rhoden [Sat, 23 Feb 2013 01:28:36 +0000 (17:28 -0800)]
Updates doc with new image file and instructions

I built a new, larger virtual machine image file with grub and akaros

Or follow the updated instructions on how to make your own.  The image
will actually be smaller (in space consumed) if you make it yourself,
and will only grow up to 268MB if you use all of that space.

7 years agoChanges user's slab from MCS-PDR to Spin-PDR
Barret Rhoden [Fri, 22 Feb 2013 01:16:28 +0000 (17:16 -0800)]
Changes user's slab from MCS-PDR to Spin-PDR

MCS-PDR locks need to allocate memory for their locks, and can run into
chicken-egg scenarios for initializing some memory allocators (in this
case, any allocator that relies on the slab indirectly).

Also note that glibc isn't using a PDR lock at all for its internals,

7 years agoChanges DTLS to use spin-pdr-locks
Barret Rhoden [Fri, 22 Feb 2013 01:15:22 +0000 (17:15 -0800)]
Changes DTLS to use spin-pdr-locks

These funcs can get called from vcore context, so we need them to use
PDR locks.

7 years agoSpin-PDR locks (preemption detection and recovery)
Barret Rhoden [Fri, 22 Feb 2013 00:45:46 +0000 (16:45 -0800)]
Spin-PDR locks (preemption detection and recovery)

Two variants: with and without CAS.  You can control which one you get
via the CONFIG var in your makelocal.  The default is to use CAS, and
RISCV will get NO_CAS (in spinlock.h) regardless of what you ask for.

The main drawback to the NO_CAS variety is the race where a lockholder
isn't advertised yet, and we're forced to do a linear scan of the
vcoremap to make sure all possible vcores are not preempted.  It won't
deadlock, but it could suck (though it might just be a minor
inconvenience compared to being preempted).

7 years agoFixes bug with pop_ros_tf
Barret Rhoden [Fri, 22 Feb 2013 00:27:57 +0000 (16:27 -0800)]
Fixes bug with pop_ros_tf

Removing memset() in 0a19848d0 was a little hasty.  We don't need to
zero out the entire struct, but we did need to have zeroed flags.  o/w,
the kernel might see the SC_UEVENT flag set, and think userspace wants
an event sent to whatever gibberish is on the stack at sysc->ev_q.

7 years agoFills out documentation about GETTING_STARTED
Barret Rhoden [Fri, 8 Feb 2013 02:11:23 +0000 (18:11 -0800)]
Fills out documentation about GETTING_STARTED

Other devs, (esp Andrew/RISCV) feel free to add info to sections 4 or 5.

7 years agoFixes 4.6.1 compiler build with gcc 4.7 (XCC)
Barret Rhoden [Tue, 5 Feb 2013 18:23:21 +0000 (10:23 -0800)]
Fixes 4.6.1 compiler build with gcc 4.7 (XCC)

Gcc 4.7 can't build 4.6.1.  Check out
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51969 for more info.

All of this takes place in tools/compilers/gcc-glibc/:

- If you want to build gcc with 4.7 and have a dirty working directory,
  rm .i686-ros-gcc-stage1-configure (or whatever) and gcc-4.6.1/, and a
  fresh 'make x86' ought to extract and patch 4.6.1's sources (and test
  the Makefile for new people).

- Alternatively, just patch (-p1) the new patch, or do a make clean.

- If you do nothing, you might have an issue in the future when your
  distro upgrades to 4.7.

7 years agoRemoves unnecessary memset() from pop_ros_tf
Barret Rhoden [Sat, 26 Jan 2013 01:48:43 +0000 (17:48 -0800)]
Removes unnecessary memset() from pop_ros_tf

Was adding quite a bit (~22ns) to context switch overhead.

7 years agoAdds a microbenchmark test program
Barret Rhoden [Sat, 26 Jan 2013 01:08:36 +0000 (17:08 -0800)]
Adds a microbenchmark test program

It can run some basic functions and measure the time elapsed.  Check the
top of microb_test.c for more details.

7 years agoRemoves side effects from assert() in userspace
Barret Rhoden [Thu, 24 Jan 2013 23:18:01 +0000 (15:18 -0800)]
Removes side effects from assert() in userspace

This way we can remove all asserts without affecting the logic of
the program, at the expense of a couple lines here and there.

7 years agoBasic POSIX signal handling (XCC)
Barret Rhoden [Wed, 23 Jan 2013 00:30:32 +0000 (16:30 -0800)]
Basic POSIX signal handling (XCC)

Can register sighandlers/sigactions for POSIX signals.  You can signal
with kill or raise.

Check signal.c for details, esp concerning all the things we don't do.

Rebuild your cross compiler.

7 years agoAdded GETTING_STARTED file
Kevin Klues [Tue, 22 Jan 2013 22:07:27 +0000 (14:07 -0800)]

7 years agoFixes memset() bug
Barret Rhoden [Wed, 9 Jan 2013 02:54:46 +0000 (18:54 -0800)]
Fixes memset() bug

When you cast an int such as 0xfe to a char, you get 0xfffffffe, and not

7 years agoRemoves excessive notif_pending check
Barret Rhoden [Wed, 9 Jan 2013 01:26:45 +0000 (17:26 -0800)]
Removes excessive notif_pending check

The check, signal, check-again pattern is excessive there, unlike below
when we muck with the vcore list.

7 years agoLock depth checking allows panicy prints
Barret Rhoden [Wed, 9 Jan 2013 01:00:01 +0000 (17:00 -0800)]
Lock depth checking allows panicy prints

We use locks when printing, so once one lock failed, it would
recursively fail if the condition remained true (such as having a bad
kernel stack depth).  This would happen for any kernel trap or trace
coretf, or any other place where I don't care about the deadlock but
want to get the printf.

Note that there are a couple locks involved in printing - two on the
printk path.  If we fail (e.g. for IRQSAVE reasons) on the SECOND lock
(after grabbing the first lock), we will still deadlock, since we
basically grabbed lock 1, failed when getting 2, then attempted to get 1
again for another printk.  In lieu of making this debug code more
robust, we just will leave those locks as irqsave for a long time.

7 years agoAdd MCS qnode static initializer, assumed by Lithe
Andrew Waterman [Tue, 8 Jan 2013 20:01:01 +0000 (12:01 -0800)]
Add MCS qnode static initializer, assumed by Lithe

7 years agoAdd helper that reenters vcore context at top of stack
Andrew Waterman [Tue, 8 Jan 2013 20:00:02 +0000 (12:00 -0800)]
Add helper that reenters vcore context at top of stack

7 years agoIn libc, execute vcore_event_init before ctors
Andrew Waterman [Tue, 8 Jan 2013 19:57:55 +0000 (11:57 -0800)]
In libc, execute vcore_event_init before ctors

Otherwise, ctors can't spawn uthreads.

7 years agoDon't declare gettimeofday in parlib.h
Andrew Waterman [Tue, 8 Jan 2013 08:56:03 +0000 (00:56 -0800)]
Don't declare gettimeofday in parlib.h

sys/time.h does so, and it uses a different signature, causing an error
for c++ programs.

7 years agonotif_pending short circuits handle_events()
Barret Rhoden [Tue, 8 Jan 2013 01:14:40 +0000 (17:14 -0800)]
notif_pending short circuits handle_events()

The kernel always sets notif_pending after posting to a VC mbox, so we
can use this check to avoid checking the full mbox (UCQs and other

This also cleans up a couple things and removes clear_notif_pending(),
which was doing basically what the new handle_events does.  Also,
clear_notif had a bug in it, where it would never return TRUE.

Finally, note that it is only required to have one handle_events() call
when we're in VC context.  Right now we have one in uth_vc_entry and
another in the 2LS (in pth's loop).  Due to how the pth code is set up,
we need the uth one at least (in case we immediately call run_cur_uth).

We also have a few 'optimization' locations when leaving VC ctx (either
by cur_uth or by yielding/idling).

Slimming these down yielded a couple ns on the pth_test benchmark, so we
might go with that in the future.

7 years agoDon't boot RISC-V cores with coreid >= num_cpus
Andrew Waterman [Tue, 8 Jan 2013 00:21:12 +0000 (16:21 -0800)]
Don't boot RISC-V cores with coreid >= num_cpus

7 years agoFields of struct timeval have sizeof(long)
Andrew Waterman [Tue, 8 Jan 2013 00:19:36 +0000 (16:19 -0800)]
Fields of struct timeval have sizeof(long)

7 years agoMake pthread_test use only fixed-point computation
Andrew Waterman [Tue, 8 Jan 2013 00:17:53 +0000 (16:17 -0800)]
Make pthread_test use only fixed-point computation

7 years agoChanges BITMASK_FOR_EACH to a macro
Barret Rhoden [Mon, 7 Jan 2013 23:36:14 +0000 (15:36 -0800)]
Changes BITMASK_FOR_EACH to a macro

Need this to avoid needlessly taking the address of the function being
executed on each bit.  Helps with performance, esp on RISCV.

7 years agoTemporarily add RISC-V GCC CAS routines to parlib
Andrew Waterman [Mon, 7 Jan 2013 03:39:13 +0000 (19:39 -0800)]
Temporarily add RISC-V GCC CAS routines to parlib

7 years agoAdd memory clobber to RISC-V set_stack_pointer
Andrew Waterman [Mon, 7 Jan 2013 03:38:52 +0000 (19:38 -0800)]
Add memory clobber to RISC-V set_stack_pointer

7 years agoFor manager_waterman, just run busybox
Andrew Waterman [Mon, 7 Jan 2013 03:37:10 +0000 (19:37 -0800)]
For manager_waterman, just run busybox

7 years agoFix logic bug in RISC_V env_user_mem_walk
Andrew Waterman [Mon, 7 Jan 2013 03:33:43 +0000 (19:33 -0800)]
Fix logic bug in RISC_V env_user_mem_walk

Manifested itself as sys_fork causing a kernel page fault

7 years agoFor RISC-V, don't save/restore FP regs
Andrew Waterman [Mon, 7 Jan 2013 03:32:38 +0000 (19:32 -0800)]
For RISC-V, don't save/restore FP regs

Before making this work correctly for no-FP machines, we need to sort out how
we handle silly state.  I think the plan is to only ever restore it lazily,
but that requires many changes to the mainline kernel.

7 years agoFix outdated printd statements that didn't compile
Andrew Waterman [Sun, 6 Jan 2013 09:54:41 +0000 (01:54 -0800)]
Fix outdated printd statements that didn't compile

7 years agoRemoves the -ros folder updating in gcc/glibc(XCC)
Barret Rhoden [Thu, 3 Jan 2013 21:25:26 +0000 (13:25 -0800)]
Removes the -ros folder updating in gcc/glibc(XCC)

The old change doesn't work well with the riscv patches.  Until one day
when we get rid of the -ros directories and have separate repos for
glibc/gcc, we'll stick with the current style:

If there are changes to files in the -ros directory and you don't want
to make clean / whatever, then you need to manually copy those files
over from the -ros directory to the untarred directory (e.g.

7 years agoupdate risc-v gcc, enabling riscv-ros-gccgo
Andrew Waterman [Thu, 27 Dec 2012 23:55:28 +0000 (15:55 -0800)]
update risc-v gcc, enabling riscv-ros-gccgo

7 years agoRename libgomp's local futex.h to libgomp_futex.h
Kevin Klues [Fri, 21 Dec 2012 20:35:11 +0000 (12:35 -0800)]
Rename libgomp's local futex.h to libgomp_futex.h

I would think the visibility changes would allow us to use the same file
name, but apparently not...

7 years agoFixes bug with semaphores and futexes
Barret Rhoden [Fri, 21 Dec 2012 04:15:28 +0000 (20:15 -0800)]
Fixes bug with semaphores and futexes

All code using the pthread 2LS that calls uthread_yield() needs to call
the pthread generic yield helper.  It was static, but since we have sync
methods in other files (sem/futex), we should have it available.

omp_hello was getting corrupt lists, since simply putting it on the
sem's queue without first removing it from the active list ends up with
the threads being on multiple lists.  Once again, the active list keeps
us honest.

7 years agoMoves futex.h to user/pthread (XCC)
Barret Rhoden [Fri, 21 Dec 2012 04:09:20 +0000 (20:09 -0800)]
Moves futex.h to user/pthread (XCC)

As far as I can tell, libgomp isn't even building with the ros/bar.c or
ros/futex.h (garbage in those files still compiles), and if it does for
some configuration, then libgomp.a doesn't have futex as an undefined
symbol, which is a bad configuration.

For now, just move it out of the kernel headers, since it isn't helping
much there at all.

The linux version of futex.h seems to think we need to change the
visibility too, so putting that in for now.

Reinstall your kernel headers.  I'd also remove the old ros/futex.h

7 years agoFixes bug with debugged spinlocks
Barret Rhoden [Fri, 21 Dec 2012 00:39:16 +0000 (16:39 -0800)]
Fixes bug with debugged spinlocks

Left over from moving the ifdefs around...

7 years agoInlines spinlocks when not using SPINLOCK_DEBUG
Barret Rhoden [Thu, 20 Dec 2012 03:20:34 +0000 (19:20 -0800)]
Inlines spinlocks when not using SPINLOCK_DEBUG

This one's for Andrew.  =)  Additionally, this moves the responsibility
for memory barriers to the architectures, which cuts down on the number
of full mb()s needed by RISCV (esp since Andrew was already doing one in

Also, I imagine sparc wasn't compiling, so this might work for them too,
if anyone still uses it.

7 years agoOptimizes run_once(_safe) (XCC)
Barret Rhoden [Thu, 20 Dec 2012 02:57:52 +0000 (18:57 -0800)]
Optimizes run_once(_safe) (XCC)

Takes the old run_once_safe and optimizes it for being completed, so we
don't hit an atomic_swap (and a couple branches) each time through.
Given this, I don't mind using it in more places, so the non-safe
version is now the 'racy' version (same with init_once()).

Reinstall your kernel headers.

7 years agoCleans up vcore/uth/pth init code
Barret Rhoden [Thu, 20 Dec 2012 02:37:56 +0000 (18:37 -0800)]
Cleans up vcore/uth/pth init code

All init routines fail loudly, instead of passing values back where we
just assert or printf profanities.

Some of the code can be called from a few places - some for testing
reasons (pth), and others for todo-reasons (vcore, in case we have a
separate vc slim init).

7 years agoGcc/Glibc make will patch in the -ros files
Barret Rhoden [Thu, 20 Dec 2012 01:28:49 +0000 (17:28 -0800)]
Gcc/Glibc make will patch in the -ros files

When rebuilding gcc/glibc after commits that add or modify files in the
-ros directories (e.g. glibc-XXX-ros), you no longer need to worry about
copying the changed files from the -ros directories into the main
directory; the make process will patch it for you.

One thing it won't do is restore files that were overwritten by -ros
files if the -ros file is subsequently removed.  Meaning, if a commit
removes files from a -ros directory, you need to either blow away the
main directory (glibc-XXX, for instance), or extract the original
version of the specific file from the tarball and put it in the
appropriate place in the main directory.

7 years agoIfdefs out the kernel from futex.h
Barret Rhoden [Wed, 19 Dec 2012 20:06:35 +0000 (12:06 -0800)]
Ifdefs out the kernel from futex.h

I'm not a fan of having a file in the kernel headers that is not part of
our kernel interface.

7 years agoCleans up run_once and friends (XCC)
Barret Rhoden [Wed, 19 Dec 2012 19:56:42 +0000 (11:56 -0800)]
Cleans up run_once and friends (XCC)

run_once() -> run_once_safe().  The safe one can handle races.  The
others (run_once and init_once) are for known-single-threaded areas.

Reinstall your kernel headers.

7 years agoFixes slab page allocators
Barret Rhoden [Wed, 19 Dec 2012 19:31:12 +0000 (11:31 -0800)]
Fixes slab page allocators

The user space one was wrong; the freeing side would free a rounded up
value.  We don't need the power-of-2 allocation at all in userspace.

In the kernel, I've clarified how the allocation works a little bit.

7 years agoUse run_once() macro for initialization
Kevin Klues [Tue, 18 Dec 2012 20:15:40 +0000 (12:15 -0800)]
Use run_once() macro for initialization

7 years agoRace in kmem_cache_init fixed
Kevin Klues [Tue, 18 Dec 2012 20:13:33 +0000 (12:13 -0800)]
Race in kmem_cache_init fixed

We need to make sure that one one else starts using the slab allocatior
until it has fully initialized.  There was a race on one guy starting to
initialize it, not finishing, and another one starting to use it.

I fixed up the logic and am using the new run_once() macro in
ros/common.h to accomplish this task properly.

7 years agoAdded generic macro for running a function exactly once (XCC)
Kevin Klues [Tue, 18 Dec 2012 20:12:45 +0000 (12:12 -0800)]
Added generic macro for running a function exactly once (XCC)

7 years agoAdded futex barriers to libgomp for ros
Kevin Klues [Tue, 18 Dec 2012 08:39:40 +0000 (00:39 -0800)]
Added futex barriers to libgomp for ros

7 years agoImplementation of the futex interface for pthreads
Kevin Klues [Tue, 18 Dec 2012 08:39:03 +0000 (00:39 -0800)]
Implementation of the futex interface for pthreads

7 years agoAdd header file for proper compilation
Kevin Klues [Tue, 18 Dec 2012 08:35:31 +0000 (00:35 -0800)]
Add header file for proper compilation

7 years agoMove position of blocking state in semaphore impl
Kevin Klues [Tue, 18 Dec 2012 08:32:44 +0000 (00:32 -0800)]
Move position of blocking state in semaphore impl

7 years agoBug in emaphoe implementation now fixed
Kevin Klues [Sat, 15 Dec 2012 21:51:10 +0000 (13:51 -0800)]
Bug in emaphoe implementation now fixed

7 years agoTest for omp hello world (not yet working)
Kevin Klues [Sat, 15 Dec 2012 05:22:09 +0000 (21:22 -0800)]
Test for omp hello world (not yet working)

7 years agoAllow sysconf to get numcpus as max_vcores() (XCC)
Kevin Klues [Sat, 15 Dec 2012 05:19:18 +0000 (21:19 -0800)]
Allow sysconf to get numcpus as max_vcores() (XCC)

7 years agofix risc-v userspace atomics
Andrew Waterman [Sat, 15 Dec 2012 05:23:33 +0000 (21:23 -0800)]
fix risc-v userspace atomics

7 years agoimplement spinlock_t without atomic_t
Andrew Waterman [Sat, 15 Dec 2012 05:18:58 +0000 (21:18 -0800)]
implement spinlock_t without atomic_t

on 64b architectures, there's no reason to use a 64b var for a 1b lock

7 years agouse spinlock_t instead of atomic_t
Andrew Waterman [Sat, 15 Dec 2012 05:17:40 +0000 (21:17 -0800)]
use spinlock_t instead of atomic_t

7 years agofor risc-v, add __spin_lock and __spin_unlock
Andrew Waterman [Sat, 15 Dec 2012 00:35:14 +0000 (16:35 -0800)]
for risc-v, add __spin_lock and __spin_unlock

7 years agouse new risc-v i/o abi
Andrew Waterman [Sat, 15 Dec 2012 00:10:00 +0000 (16:10 -0800)]
use new risc-v i/o abi

7 years agofor risc-v, assume all cores boot at same time
Andrew Waterman [Sat, 15 Dec 2012 00:08:55 +0000 (16:08 -0800)]
for risc-v, assume all cores boot at same time

7 years agofor risc-v, don't store irq mask in trapframe
Andrew Waterman [Sat, 15 Dec 2012 00:08:19 +0000 (16:08 -0800)]
for risc-v, don't store irq mask in trapframe

7 years agouse test-and-test-and-set lock
Andrew Waterman [Fri, 14 Dec 2012 23:59:56 +0000 (15:59 -0800)]
use test-and-test-and-set lock

7 years agoNeed to blow out the parlib archive before building glibc
Kevin Klues [Sat, 15 Dec 2012 03:32:17 +0000 (19:32 -0800)]
Need to blow out the parlib archive before building glibc

7 years agoPsuh dtls stuff into pthread_get/set specific
Kevin Klues [Sat, 15 Dec 2012 00:53:02 +0000 (16:53 -0800)]
Psuh dtls stuff into pthread_get/set specific

7 years agoAdd dynamic-tls (dtls) implementation to parlib
Kevin Klues [Fri, 14 Dec 2012 22:45:34 +0000 (14:45 -0800)]
Add dynamic-tls (dtls) implementation to parlib

7 years agoAdd userspace spinlock implementation
Kevin Klues [Fri, 14 Dec 2012 22:45:09 +0000 (14:45 -0800)]
Add userspace spinlock implementation

7 years agoNeeded to remove -lparlib from cp30's Makefrag
Kevin Klues [Fri, 14 Dec 2012 20:35:24 +0000 (12:35 -0800)]
Needed to remove -lparlib from cp30's Makefrag

7 years agoRemove force_parlib_symbols.
Kevin Klues [Fri, 14 Dec 2012 04:24:04 +0000 (20:24 -0800)]
Remove force_parlib_symbols.


7 years agoUse --whole-archive instead of -u for -lparlib
Kevin Klues [Fri, 14 Dec 2012 04:21:50 +0000 (20:21 -0800)]
Use --whole-archive instead of -u for -lparlib

For reasons unknown, dynamically-linked busybox simply failed to respond
to keypresses with -u force_parlib_symbols as the mechanism to force
linkage against libparlib--even though the symbols appeared not to be
weak!  This other mechanism works, and it's also cleanear since we can
remove force_parlib_symbols.

7 years agoremove old bthread library
Kevin Klues [Fri, 14 Dec 2012 03:52:57 +0000 (19:52 -0800)]
remove old bthread library

We don't use bthreads anymore, and some symbols conflicted
with those in libpthread.

7 years agoFixes mmap assertion check
Barret Rhoden [Thu, 13 Dec 2012 22:33:31 +0000 (14:33 -0800)]
Fixes mmap assertion check

Check for MAP_FAILED (-1), not 0, like other allocations...

7 years agoUserspace slab allocator
Barret Rhoden [Tue, 11 Dec 2012 00:42:36 +0000 (16:42 -0800)]
Userspace slab allocator

Note the caches lock use MCS-PDR locks, which for now call malloc() when
initializing.  So you can't currently use the slabs for something that
you need to implement malloc().

7 years agoAdded force_parlib_symbols as default param to gcc
Kevin Klues [Mon, 10 Dec 2012 23:23:53 +0000 (15:23 -0800)]
Added force_parlib_symbols as default param to gcc

Allowed us to remove the busybox patch that diabled looping over
included libs and not including them if they wre not needed.

We previously had to override this because we always wanted parlib
included, but now it is included by default as part of invoking gcc.

7 years agoAdded gcc compiler magic to get libgomp to build for akaros
Kevin Klues [Wed, 5 Dec 2012 04:31:18 +0000 (20:31 -0800)]
Added gcc compiler magic to get libgomp to build for akaros

Still need to implement stubs for pthread_key nonsense, but hopefully
after that, things will just work.

7 years agoMake exit call _exit instead of syscall directly
Kevin Klues [Wed, 5 Dec 2012 04:27:14 +0000 (20:27 -0800)]
Make exit call _exit instead of syscall directly

Needed to get libgomp to work correctly because it required its call to
exit() to be for a function that had a noreturn attribute.  Arguably, we
should have been doing this all along, and the direct syscall was
probably extreme legacy code before we had glibc properly integrated.

7 years agoMake procinfo.h c89 compliant (i.e. no gnu99isms)
Kevin Klues [Wed, 5 Dec 2012 04:25:11 +0000 (20:25 -0800)]
Make procinfo.h c89 compliant (i.e. no gnu99isms)

7 years agoChange default directory for installing riscv
Kevin Klues [Wed, 5 Dec 2012 04:24:10 +0000 (20:24 -0800)]
Change default directory for installing riscv

7 years agoImplemented a few more stubs for PTHREAD compliance
Kevin Klues [Wed, 5 Dec 2012 04:23:06 +0000 (20:23 -0800)]
Implemented a few more stubs for PTHREAD compliance

(Including signal stuff)