10 years agoMerge branch 'sparc-dev' of ssh://scm.millennium.berkeley.edu/project/cs/radlab/src...
Kevin Klues [Tue, 1 Dec 2009 04:27:53 +0000 (20:27 -0800)]
Merge branch 'sparc-dev' of ssh://scm.millennium.berkeley.edu/project/cs/radlab/src/parlab/ros into sparc-dev

10 years agoAdded stubs for additional newlib system calls
Kevin Klues [Tue, 1 Dec 2009 04:27:45 +0000 (20:27 -0800)]
Added stubs for additional newlib system calls

10 years agoGCC augmentation fixes
Andrew Waterman [Tue, 1 Dec 2009 04:24:26 +0000 (20:24 -0800)]
GCC augmentation fixes

10 years agoFixed GCC augmentation script
Andrew Waterman [Tue, 1 Dec 2009 04:22:40 +0000 (20:22 -0800)]
Fixed GCC augmentation script

10 years agoFixed some infrastructure stuff related to our crosscompilers
Kevin Klues [Mon, 30 Nov 2009 09:52:12 +0000 (01:52 -0800)]
Fixed some infrastructure stuff related to our crosscompilers

10 years agoTLS works in SPARC
Andrew Waterman [Mon, 30 Nov 2009 11:28:51 +0000 (03:28 -0800)]
TLS works in SPARC

10 years agoMakefile support for sparc-ros-gcc
Andrew Waterman [Mon, 30 Nov 2009 04:47:23 +0000 (20:47 -0800)]
Makefile support for sparc-ros-gcc

10 years agofixed pedantic gcc warning
Andrew Waterman [Mon, 30 Nov 2009 04:21:11 +0000 (20:21 -0800)]
fixed pedantic gcc warning

10 years agoExtern'd some harts functions
Andrew Waterman [Mon, 30 Nov 2009 04:20:25 +0000 (20:20 -0800)]
Extern'd some harts functions

11 years agoAdded external user binary support (usrbin/)
Andrew Waterman [Wed, 25 Nov 2009 00:17:22 +0000 (16:17 -0800)]
Added external user binary support (usrbin/)

Also some misc SPARC changes and minor harts change

11 years agochanged harts interface for proxykernel compat
Andrew Waterman [Tue, 24 Nov 2009 23:38:05 +0000 (15:38 -0800)]
changed harts interface for proxykernel compat

11 years agoremoved user envp to fix link problems
Andrew Waterman [Wed, 11 Nov 2009 04:35:45 +0000 (20:35 -0800)]
removed user envp to fix link problems

11 years agofixed pthread_barrier_wait bug
Andrew Waterman [Wed, 11 Nov 2009 04:35:19 +0000 (20:35 -0800)]
fixed pthread_barrier_wait bug

11 years agoimproved code quality for C++ static constructor calls
Andrew Waterman [Wed, 11 Nov 2009 04:34:24 +0000 (20:34 -0800)]
improved code quality for C++ static constructor calls

11 years agoFixed some parlib newlib errno difficulties
Andrew Waterman [Wed, 4 Nov 2009 06:31:13 +0000 (22:31 -0800)]
Fixed some parlib newlib errno difficulties

11 years agoMade static destructors thread-safe
Andrew Waterman [Wed, 4 Nov 2009 06:30:44 +0000 (22:30 -0800)]
Made static destructors thread-safe

11 years agoAdded changes to support C++ apps
Andrew Waterman [Wed, 4 Nov 2009 06:26:15 +0000 (22:26 -0800)]
Added changes to support C++ apps

Specifically, static initialization and destruction.  Need to
provide to g++ a __CTOR_LIST__ and __DTOR_LIST__ section in
the binary.  Also need to call all the CTORs before entering
main(), and need to use atexit() to call all the DTORs on exit.

11 years agoFixed up parlib pthreads/harts
Andrew Waterman [Wed, 4 Nov 2009 05:43:47 +0000 (21:43 -0800)]
Fixed up parlib pthreads/harts

Added a hart_current_harts() routine, fixed hart_yield()
to decrement that value; I leverage this in pthreads.

11 years agoParlib pthreads depends on fewer libc functions
Andrew Waterman [Mon, 2 Nov 2009 10:52:08 +0000 (02:52 -0800)]
Parlib pthreads depends on fewer libc functions

Also, deleted old pthreads files that should have already been gone

11 years agoFixed page coloring bug
Andrew Waterman [Mon, 2 Nov 2009 10:50:21 +0000 (02:50 -0800)]
Fixed page coloring bug

The round-robin allocator was always using next_color = prev_color,
rather than next_color = (prev_color + 1) % num_colors.

11 years agobacked out an accidental printk commit
Andrew Waterman [Mon, 2 Nov 2009 10:46:55 +0000 (02:46 -0800)]
backed out an accidental printk commit

11 years agoAdded kernel command line to SPARC port
Andrew Waterman [Mon, 2 Nov 2009 10:41:31 +0000 (02:41 -0800)]
Added kernel command line to SPARC port

11 years agoadded atoi()
Andrew Waterman [Mon, 2 Nov 2009 10:41:01 +0000 (02:41 -0800)]
added atoi()

11 years agoChanged hackish argc/argv setup
Andrew Waterman [Mon, 2 Nov 2009 10:40:10 +0000 (02:40 -0800)]
Changed hackish argc/argv setup

No longer uses varargs; instead taks argv array

11 years agoMore verbose multicore debugging
Andrew Waterman [Mon, 2 Nov 2009 10:39:03 +0000 (02:39 -0800)]
More verbose multicore debugging

We print out the pid for which a core has been started.

11 years agoMoved pthreads into parlib
Andrew Waterman [Thu, 29 Oct 2009 07:33:45 +0000 (00:33 -0700)]
Moved pthreads into parlib

11 years agoImproved user binary loading
Andrew Waterman [Thu, 29 Oct 2009 03:37:38 +0000 (20:37 -0700)]
Improved user binary loading

load_icode no longer requires the new process' cr3 to be loaded.
Binaries can now be loaded from another process' address space
directly, so a large number of contiguous physical pages is
no longer needed.  This fixes a kmalloc failure on SPARC.

11 years agoFixed pthread library null-pointer dereference
Andrew Waterman [Wed, 28 Oct 2009 23:51:22 +0000 (16:51 -0700)]
Fixed pthread library null-pointer dereference

11 years agoAccidentally turned off output lock. Oops! Fixed.
Andrew Waterman [Wed, 28 Oct 2009 23:33:26 +0000 (16:33 -0700)]
Accidentally turned off output lock.  Oops!  Fixed.

11 years agoMerge branch 'sparc-dev' of ssh://waterman@scm.millennium.berkeley.edu/project/cs...
Andrew Waterman [Wed, 28 Oct 2009 15:19:41 +0000 (08:19 -0700)]
Merge branch 'sparc-dev' of ssh://waterman@scm.millennium.berkeley.edu/project/cs/radlab/src/parlab/ros into sparc-dev

11 years agoWay faster FDIV/FSQRT on SPARC
Andrew Waterman [Wed, 28 Oct 2009 15:19:19 +0000 (08:19 -0700)]
Way faster FDIV/FSQRT on SPARC

I hand-rolled a Newton-Raphson iterator that runs with
traps disabled! scary!

11 years agoFinished up the page coloring stuff
Kevin Klues [Wed, 28 Oct 2009 08:07:49 +0000 (09:07 +0100)]
Finished up the page coloring stuff

There are now functions to alloc/free colors on a process
by process basis, as well as alloc/free pages based on the
colors owned by a process.  See kern/include/colored_pages.h
and kern/include/page_alloc.h for the function definitions.

Also, a new matrix program has been added called run_binary_colored
which takes advantage of the fact that colors can be allocated
to a process.  Run it and try it out

11 years agomade some fixes to support gcc3 on sparc
Andrew Waterman [Wed, 28 Oct 2009 06:28:06 +0000 (23:28 -0700)]
made some fixes to support gcc3 on sparc

11 years agomade some fixes to support gcc3 on sparc
Andrew Waterman [Wed, 28 Oct 2009 06:27:50 +0000 (23:27 -0700)]
made some fixes to support gcc3 on sparc

11 years agoPrevented hart_max_harts() from returning 0
Andrew Waterman [Tue, 27 Oct 2009 06:28:13 +0000 (23:28 -0700)]
Prevented hart_max_harts() from returning 0

The current algorithm is hart_max_harts() == num_cpus-1,
because core 0 is reserved.  However, single-core processes
still need something to run on, so on uniprocessor systems
we return 1 rather than 1-1.

11 years agoAdded FPU emulation to SPARC port
Andrew Waterman [Tue, 27 Oct 2009 05:27:14 +0000 (22:27 -0700)]
Added FPU emulation to SPARC port

Our HW FPU does not execute all instructions (namely div, sqrt),
and it doesn't handle IEEE-754 exceptions or denorms.  So we
emulate instructions in a few cases.  The SPARC FP decoder is
borrowed from my functional simulator, and the generic soft FP
code is from SoftFloat, courtesy John Hauser.

11 years agoAdded (temporary) mechanism to pass argc/argv
Andrew Waterman [Tue, 27 Oct 2009 05:24:03 +0000 (22:24 -0700)]
Added (temporary) mechanism to pass argc/argv

Obviously, the kernel should not be responsible for passing
args to user programs; that's a job for the runtime system.
However, to run real programs from within the manager, this
is a necessary evil.

I pass argc/argv inside of the procinfo struct.  They
are set using a call to proc_init_argc_argv(), and they
are read out by user programs within parlibmain().  The
latter no longer expects to be passed argc/argv; instead,
it grabs them from procinfo.

11 years agoAdded non-preemptive pthreads support.
Andrew Waterman [Mon, 26 Oct 2009 22:56:15 +0000 (15:56 -0700)]
Added non-preemptive pthreads support.

The pthreads wrapper builds on harts.  It generates libpthread.a,
which users must link against to run a subset of pthreads programs.
It's barely tested on SPARC and not at all on i386, but there's no
arch-specific code, so it may well work...

11 years agoFixed SPARC console I/O wrt interrupts
Andrew Waterman [Mon, 26 Oct 2009 10:57:31 +0000 (03:57 -0700)]
Fixed SPARC console I/O wrt interrupts

11 years agoConsole locking
Barret Rhoden [Fri, 23 Oct 2009 05:32:00 +0000 (22:32 -0700)]
Console locking

Changed the console locking to only lock after successfully polling for
a character.  This avoids some weird lockups in VMs where a printf hangs
until you hit the keyboard.

Note that there are no locks protecting the keyboard or serial polling.
Core0 is the only one that is allowed to enter the monitor, so it's not
currently an issue.  We'll need different locks there anyways if we ever
allow concurrent access to those devices (since there's more that one
way to get to the device).

11 years agoFixed env_segment_free bug
Andrew Waterman [Mon, 26 Oct 2009 10:43:19 +0000 (03:43 -0700)]
Fixed env_segment_free bug

We called page_decref rather than page_remove, so PTEs weren't zeroed.

11 years agoi386 parlib follows sparc parlib stack conventions
Kevin Klues [Mon, 26 Oct 2009 09:22:13 +0000 (10:22 +0100)]
i386 parlib follows sparc parlib stack conventions

11 years agoFixes sysenter stack pointer bug
Barret Rhoden [Sat, 24 Oct 2009 22:52:17 +0000 (15:52 -0700)]
Fixes sysenter stack pointer bug

Sysenter needs to have interrupts turned on before calling sysexit,
during which it needs to have a good stack pointer in case an interrupt
comes in.  If this fails, the interrupt mechanism will use the current
stack pointer (often in the struct proc!) as the kernel stack and start
clobbering things.  This manifested itself as a proc that was
incorrectly locked.

11 years agoFixed lots of bugs in the SPARC port wrt multithreading
Andrew Waterman [Mon, 26 Oct 2009 07:21:46 +0000 (00:21 -0700)]
Fixed lots of bugs in the SPARC port wrt multithreading

Also added the Harts threading interface and added
a getvcoreid system call.  Added gettimeofday to SPARC.

Added an arch-specific subfolder to include/ros.  Moved
a few key things that must be exposed to userspace there,
e.g. PGSIZE and relax()

11 years agoAdding allocation of colors for processes
Kevin Klues [Fri, 23 Oct 2009 06:20:12 +0000 (08:20 +0200)]
Adding allocation of colors for processes

Lots of files changed, mostly for getting things to work both on x86 and sparc.  Fixed a bug in sparc as well.... l2 page table freed too many times.

11 years agoAdding support for the brk system call
Kevin Klues [Wed, 21 Oct 2009 07:46:06 +0000 (00:46 -0700)]
Adding support for the brk system call

11 years agoPorted process stuff to SPARC port
Andrew Waterman [Wed, 14 Oct 2009 01:00:00 +0000 (18:00 -0700)]
Ported process stuff to SPARC port

11 years agoSlab allocator
Barret Rhoden [Mon, 19 Oct 2009 00:09:04 +0000 (17:09 -0700)]
Slab allocator

Introduces a slab allocator, and uses it to back kmalloc allocations
less than 32 pages.  Kmalloc only guarantees 16 byte alignment, so if
you want something better (like page alignment), use get_cont_pages().

11 years agoYield for single and parallel processes
Barret Rhoden [Fri, 2 Oct 2009 01:09:10 +0000 (18:09 -0700)]
Yield for single and parallel processes

Can yield cores out of order, get the appropriate ones back, and
somewhat save vcore0's state.  Currently it doesn't restart vcore0 where
it left if you stay in RUNNING_M.  We can do whatever - pending some
discussions with Ben about how we really want to handle core0.

You can do some yield testing with proctests (single core yields), and
mhello (a variety).  You'll need to program it to do whatever thing you
want, like yield out of order, then ask for more cores.  There are a
bunch of tests built in that need to be selected at compile time.

The enum is error.h is ghetto and needs a fix that works with newlib.
Right now, we conflict on error numbers (and naming, if we #define like
we ought to).

Disclaimer: doesn't compile with ivy.

11 years agoResource request calls and core request handling
Barret Rhoden [Tue, 22 Sep 2009 21:45:41 +0000 (14:45 -0700)]
Resource request calls and core request handling

This establishes an interface to request resources from the kernel.
Currently uses a syscall per resource request, which avoids some
complexities.  Processes can use this interface to issue requests for

This also adds internal functions for the giving and taking of cores.
Currently, this family doesn't change state, requiring the processes to
be RUNNING_M or RUNNABLE_M.  See the comments for details (in

11 years agoStacks and syscall support for parallel processes
Barret Rhoden [Thu, 10 Sep 2009 21:15:17 +0000 (14:15 -0700)]
Stacks and syscall support for parallel processes

Userspace creates stacks via a primitive sys_mmap() in entry.S.  Tweak
as needed (such as bigger stacks, room for a guard page, etc).  The
kernel trap and systenter paths can now handle concurrent "trappers".
Blocking syscalls are still difficult (and not done).

x86 specific: sparc needs to make some functions and do similar things
in its entry.S and libmain.c.

11 years agoInitial mmap()
Barret Rhoden [Sun, 6 Sep 2009 08:26:45 +0000 (01:26 -0700)]
Initial mmap()

Userspace must specify the address, it must be page aligned, and
everything must be free.  It's pretty much MAP_FIXED | MAP_ANONYMOUS
semantics, regardless of what userspace asks for, for now.

Needs locking and some love from mm.h, which is just a WIP for now.

11 years agoRestored ivy based compilation.
Paul Pearce [Fri, 9 Oct 2009 23:13:10 +0000 (16:13 -0700)]
Restored ivy based compilation.

The simu branch got merged into master without being checked against
ivy. This commit restores the ability to compile with ivy.

Bound annotations were added as needed to the nic related files

Bound annotations WERE NOT added to the new  Hashtable. I simply
disabled deputy for that file until someone has the time to properly
annotate the file.

Note: This wasn't tested against hardware. (It was done @ 34,000ft).

11 years agoFixed an issue with calling strnlen with no n argument
Paul Pearce [Thu, 8 Oct 2009 21:21:03 +0000 (14:21 -0700)]
Fixed an issue with calling strnlen with no n argument

Just replaced it with strlen. In this case it seems like the best option,

11 years agoFixed up a few small bugs in the syscall_server stuff
Kevin Klues [Tue, 6 Oct 2009 00:08:10 +0000 (02:08 +0200)]
Fixed up a few small bugs in the syscall_server stuff

Additionally, I added a Makefile under tools/newlib that will go through the process of downloading newlib, compiling it, and installing it for use in ROS.

Also, there is now a completely UNTESTED hashtabel implementation in kern/src

11 years agoAdded (hacky) ne2k functionality. Modified syscall server for udp.
Paul Pearce [Thu, 1 Oct 2009 05:53:25 +0000 (01:53 -0400)]
Added (hacky) ne2k functionality. Modified syscall server for udp.

With this commit we can now do remote system calls entirely inside a VM.

The majority of this commit is a new ne2k.c/h that allows packet sending
and receiving. In support of this was a new nic_common.c/h framework
that broke some of the common def's and vars into a central location
and syscall.c now relies upon this.

Newlib_backend now keys off of __NETWORK__ when deciding how to ship out

Modified the syscall server to work with UDP. Added new generic read/write
functions for the pipe and pty methods, as the udp method needs more
complicated functionality than just read().

Note: Not tested with ivy. Not tested with old RealTek nic in hardware.
This is mainly a WIP commit.

11 years agoAdded translation layer for all things that might be different between newlib and...
ROS Developer [Thu, 1 Oct 2009 00:48:11 +0000 (02:48 +0200)]
Added translation layer for all things that might be different between newlib and a native syscall

11 years agoFixed bug with user_mem_assert in sparc
ROS Developer [Tue, 29 Sep 2009 04:33:50 +0000 (06:33 +0200)]
Fixed bug with user_mem_assert in sparc

11 years agoMore sparc related fixes
ROS Developer [Tue, 29 Sep 2009 03:52:59 +0000 (05:52 +0200)]
More sparc related fixes

11 years agoFixed the warnings in the sparc compilation...
ROS Developer [Mon, 28 Sep 2009 08:34:07 +0000 (10:34 +0200)]
Fixed the warnings in the sparc compilation...

11 years agoMerged in all of the recent changes for compiling on sparc
Sarah Bird [Wed, 23 Sep 2009 22:51:43 +0000 (15:51 -0700)]
Merged in all of the recent changes for compiling on sparc

11 years agoModified some stuff to cleanup the syscall_server build process
ROS Developer [Mon, 28 Sep 2009 05:05:37 +0000 (07:05 +0200)]
Modified some stuff to cleanup the syscall_server build process

This also involved adding a sandbox directory under the serial_server directory.  All files accessed by ROS will be relative to this sandbox.  There is currently no suport for preventing one from using ".." to break out of the sandbox.  Presumably a real server would run with itself as a user with no priveleges other than to access files in the sandbox directory and nowhere else.

11 years agoStarted trying to get the syscall forwading stuff working between BOCHS and my native...
ROS Developer [Sat, 26 Sep 2009 02:30:38 +0000 (04:30 +0200)]
Started trying to get the syscall forwading stuff working between BOCHS and my native machine

11 years agoFixed issues building without ivy and without __NETWORK__
Paul Pearce [Tue, 29 Sep 2009 20:57:44 +0000 (13:57 -0700)]
Fixed issues building without ivy and without __NETWORK__

There was an issue where the libc_patch.i file was being included by a pair
of userspace Makefrags, regardless of ivy being set as the compiler. This caused
the build process to fail if ivy was not installed on the system trying to build
the OS. This is now fixed.

I moved a pair of cases in the main syscall switch inside of a __NETWORK__ ifdef.
Previously they were inside of an __i386__ ifdef. This meant an error would occur
if the combination of __i386__ was set without __ NETWORK__.

11 years agoCreated architecture specific init processes, fixed gcc warnings
Paul Pearce [Fri, 25 Sep 2009 01:20:26 +0000 (18:20 -0700)]
Created architecture specific init processes, fixed gcc warnings

Broke architecture specific init sequences into their own files
inside of arch/init.c/h. These files contain the sequences based
on the point they diverged in the old init.c (timer_init()).
Architecture specific init is trigged via arch_init().

I also fixed some issues where i386 specific items were being pulled in on sparc
inside of syscall.c. These items are now wrapped in a __NETWORK__ ifdef

I also fixed some gcc warnings regarding incompatible types when
the ivy modified newlib_backend was compiled with gcc.

11 years agoChanged user_mem_check(), user_mem_assert() to throw kernel warnings on len = 0
Paul Pearce [Wed, 23 Sep 2009 00:54:33 +0000 (17:54 -0700)]
Changed user_mem_check(), user_mem_assert() to throw kernel warnings on len = 0

Previously calling one of these functions with a length of 0 would cause an
ivy assertion warning, but continue on. This wasn't desirable, so now an
explicit check is in place to throw a kernel warning and return failure
in the event of such a call. We've deemed such a call to be a bug.

11 years agoCorrected issues relating to the networking code / newlib and Ivy Annotations.
Paul Pearce [Mon, 21 Sep 2009 22:51:10 +0000 (15:51 -0700)]
Corrected issues relating to the networking code / newlib and Ivy Annotations.

Corrected a struct packing issue with the new rl8168_header struct. This was causing
incorrect packet headers and corruption.

Fixed issues with the bound annoations on the eth syscalls. Calling with a length of 0
was causing failures down the line. There is still an issue with user_mem_assert() but
this needs to be addressed with an additional commit.

Fixed problems with sys_run_binary() syscall. With the annotations the original user space
addr was being referenced. However, that addr was not mapped in the new enviorment. Reverted
back to a kmalloc'd addr.

11 years agoFixes for newlib_backend
Zach Anderson [Sat, 19 Sep 2009 02:04:45 +0000 (19:04 -0700)]
Fixes for newlib_backend

11 years agoMoved Ivy lock tracking into per cpu info
Zach Anderson [Fri, 18 Sep 2009 03:17:48 +0000 (20:17 -0700)]
Moved Ivy lock tracking into per cpu info

11 years agoAdd const to sharc instrumentation functions
Zach Anderson [Fri, 18 Sep 2009 02:04:53 +0000 (19:04 -0700)]
Add const to sharc instrumentation functions

11 years agoMerge with master
Zach Anderson [Fri, 18 Sep 2009 01:49:55 +0000 (18:49 -0700)]
Merge with master

11 years agoAdded Ivy annotations to Paul's recent commit
Zach Anderson [Thu, 17 Sep 2009 23:30:48 +0000 (16:30 -0700)]
Added Ivy annotations to Paul's recent commit

11 years agoMerge branch 'net-dev'. See body of commit for details.
Paul Pearce [Thu, 17 Sep 2009 00:42:04 +0000 (17:42 -0700)]
Merge branch 'net-dev'. See body of commit for details.

This is a merge of the mptable, ioapic, pci, ethernet, and ethernet based remote syscall code.

By default on x86, the mptable, ioapic, and pci code is enabled. Network code is not.

In order to enable the ethernet driver, you must define __NETWORK__
in your make local, and set USER_MAC_ADDRESS to the correct value
in order to communicate with your front end machine. The front end
server app now lives in tools/. Setting __NETWORK__ will cause the
driver to initialize on real hardware, or perform a series of interrupt
tests for simulation. This will also cause parlab_matrix to be the userspace
application booted, instead of the standard apps in manager.c. Network
support is x86 dependent.

Other things handled in this commit include:

Updated doxygen support. Doxygen will now strip out ivy annotations, and
be optimized for C code.

Rewritten newlib_backend. The code is now several orders of magnitude better
(no seriously, look at it).


11 years agoAdding SharC annotations. Type checker off
Zach Anderson [Tue, 15 Sep 2009 01:50:02 +0000 (18:50 -0700)]
Adding SharC annotations. Type checker off

11 years agoGet last commit to compile with gcc
Zach Anderson [Sun, 13 Sep 2009 22:51:18 +0000 (15:51 -0700)]
Get last commit to compile with gcc

11 years agoAdded more SharC annotations
Zach Anderson [Sun, 13 Sep 2009 22:30:25 +0000 (15:30 -0700)]
Added more SharC annotations

11 years agoMerge branch 'master' of ssh://scm.millennium.berkeley.edu/project/cs/radlab/src...
Zach Anderson [Sun, 13 Sep 2009 19:30:49 +0000 (12:30 -0700)]
Merge branch 'master' of ssh://scm.millennium.berkeley.edu/project/cs/radlab/src/parlab/ros

11 years agoAdding SharC annotations
Zach Anderson [Sun, 13 Sep 2009 19:29:38 +0000 (12:29 -0700)]
Adding SharC annotations

11 years agoRewrote cache colored page allocation functions
Kevin Klues [Sat, 12 Sep 2009 09:26:22 +0000 (02:26 -0700)]
Rewrote cache colored page allocation functions

This rewrite now allocates pages from the proper "shade" of color when trying to allocate from a cache that isn't the last level cache.  Implementing things this way allowed me to rip out the multiple linked lists I was useing for managing the free lists for each cache color.  I now only maintain one list per color on the last level cache.  All allocations come out of these lists, and the proper shades are maintained when requesting colors from lower level caches.

Additionally, I fixed up some warnings that resulted from my newer version of gcc.

11 years agoGet the previous commit working with gcc
Zach Anderson [Fri, 11 Sep 2009 18:36:56 +0000 (11:36 -0700)]
Get the previous commit working with gcc

11 years agore-Deputized some things and added Deputy polymorphic types to active messages
Zach Anderson [Thu, 10 Sep 2009 23:18:19 +0000 (16:18 -0700)]
re-Deputized some things and added Deputy polymorphic types to active messages

11 years agoUse one lock in console.c and re-Deputized i386/page_alloc.c
Zach Anderson [Thu, 10 Sep 2009 17:35:10 +0000 (10:35 -0700)]
Use one lock in console.c and re-Deputized i386/page_alloc.c

11 years agoCorrected mismatched types in process_generic_syscalls.
Paul Pearce [Wed, 9 Sep 2009 21:15:28 +0000 (14:15 -0700)]
Corrected mismatched types in process_generic_syscalls.

The prototype in syscall.h did not match the function definition
in syscall.c. This was only throwing errors on Paul's machine, for
some reason.

11 years agoMoved x86 specific files into the arch/i386 directory. Modified files as needed.
Paul Pearce [Wed, 9 Sep 2009 03:04:56 +0000 (20:04 -0700)]
Moved x86 specific files into the arch/i386 directory. Modified files as needed.

11 years agoCompiles with GCC
Barret Rhoden [Sat, 5 Sep 2009 04:49:24 +0000 (21:49 -0700)]
Compiles with GCC

Set COMPILER in your Makelocal to GCC if you want to not compile with
Ivy.  It will compile and run with Ivy or gcc, though there were a few
places where they are mutually unhappy, or we couldn't figure out nice
ways to do the annotations.  For instance, the struct work isn't
supposed to be TP(env_t*) all the time.  Also, cil destroys our attempts
at unbounded arrays.  Look for pragma nodeputy in a few places.

Also changed types so we can eventually have our own, um, i guess we
still need to have our own types.h for the kernel, but we cleaned it up a
bit is the point, right? (Kevin, verbatim)

Some work in progress for mmap and other stuff, but I never did any of
that.  Just ignore it for now.

11 years agoRewrote most of newlib_backend to be more "robust". Added sycall server to tree
Paul Pearce [Thu, 3 Sep 2009 19:48:04 +0000 (12:48 -0700)]
Rewrote most of newlib_backend to be more "robust". Added sycall server to tree

My first pass at newlib_backend was functional,  but ultimately not maintainable.
It was also not able to be annotated with Ivy, so I rewrote it with Ivy in mind.
The code is now much cleaner, shorter, and will be easier to annoate with Ivy.

Removed the inclusion of newlib_backend.h in parlib.h (not needed, casued errors).

Added a tools directory to the repo with the syscall server.

11 years agoFixed user_mem_check()
Barret Rhoden [Thu, 3 Sep 2009 15:50:25 +0000 (08:50 -0700)]
Fixed user_mem_check()

It was only considering the permissions on the last level of the
pagetable walk, instead of the cumulative permissions.  The sparc
version still uses the old style (the result of pgdir_walk).

11 years agoVcore mapping and idle core management
Barret Rhoden [Mon, 31 Aug 2009 20:48:13 +0000 (13:48 -0700)]
Vcore mapping and idle core management

Infrastructure for tracking idle cores (needed becauses processes can
kill themselves).  In general, the vcoremap (and idlecoremap) are set
before proc_run(), and deallocated/fixed up *during* proc_destroy.

Also this makes __startcore and __death (somewhat) arch independent.
__startcore now sets the vcoreid (instead of just 1 to signal an extra
core), which is easy with active messages.

If you run it with deputy on, try backtracing or kfs_running

11 years agoFixed up doxygen to do the right thing with Ivy annotations.
Paul Pearce [Mon, 31 Aug 2009 22:38:47 +0000 (15:38 -0700)]
Fixed up doxygen to do the right thing with Ivy annotations.

Took Ivy's annotation macros defined in the ivy tree as deputy-include/deputy/annots.h
and moved that file into doc/include/annots.h and modified it to work with doxygen.
Including this file now has the effect of stripping out ivy annotations.
This does the right thing for things like TC, so if you say TC(variable) it
replaces that with (variable), but COUNT(n) becomes nothing.

I modified the rosdoc.cfg to include this new file, and then set it up to expand
only enumerated macros. I then (based on annots.h) enumerated all Ivy annotations
so they would expand to the definitions found in annots.h. This means doxygen will
only expand ivy macros, and will basically remove them. Other macros remain untouched.

11 years agoProcess management via active messages
Barret Rhoden [Sat, 22 Aug 2009 01:19:16 +0000 (18:19 -0700)]
Process management via active messages

Replaces those horribly hackish send_ipi's with active messages.  Note
that the messages are being sent with the sync wrapper, which is just a
while(send) cpu_relax().  Meaning that it can deadlock the system,
especially when sending to yourself.  We need to do something a little
more intelligent for these situations (which is an arch-independent

Also fixed the x86 active messages to handle functions that don't return
(which was the point of all this in the first place).

11 years agoActive messages for x86
Barret Rhoden [Fri, 21 Aug 2009 21:32:21 +0000 (14:32 -0700)]
Active messages for x86

Moved the sparc active messages interfaces to inc/trap.h.  Only supports
a unicast active messages.  Both arches should be providing in-order
reception and some sort of push-back if delivery fails.  x86's involves
modifying the destinations's per_cpu_info (memory).

11 years agoSorted some races with proc IPIs, poorly.
Barret Rhoden [Thu, 20 Aug 2009 22:13:25 +0000 (15:13 -0700)]
Sorted some races with proc IPIs, poorly.

In general, sending IPIs and having separate IPIs for startcore, death,
and preempt just sucks on x86.  Next commit will replace all the TODO:
(AM) with some x86 active messaging support, so we can be guaranteed
in-order receipt of messages sent in-order.

Also, here's the deal with the vcoremap:
- the vcoremap is the list of cores allocated to a process,  regardless
  of whether or not it is running there yet (or still).
- you can only mess with a process's vcoremap when you hold its lock.
- you can only mess with a core (send it a proc_mgmt IPI/AM) when you hold
  the lock of the process that has its vcoremapping.

11 years agoKilling of parallel processes
Barret Rhoden [Wed, 19 Aug 2009 02:35:14 +0000 (19:35 -0700)]
Killing of parallel processes

proc_destroy() should be able to kill anything now, notably RUNNING_M
processes, via the DEATH IPI.

Also reworked smp_idle so that any core can call it.  Management cores
(core 0) will enter the manager(), while others will check their
workqueue.  Eventually want to merge these paths.

This is not heavily tested, so there are probably some issues.  Also
note the dirty hack with decref.

11 years agoproc_run supports dispatching of RUNNABLE_Ms
Barret Rhoden [Tue, 18 Aug 2009 21:52:40 +0000 (14:52 -0700)]
proc_run supports dispatching of RUNNABLE_Ms

Using proc_run, you can dispatch a process on a set of cores.  Set the
physical coreid of cores allocated to a process in its vcoremap[] list
and set num_vcores (virtual cores).  It will pop the main struct
trapframe on vcore 0.

Still are issues with the silly state, trapframes, and RAMP needing
corresponding wrappers for send_ipi.  Also, userspace still just spins
on its off-cores.

11 years agoBare support for dispatching parallel processes
Barret Rhoden [Mon, 17 Aug 2009 11:05:46 +0000 (04:05 -0700)]
Bare support for dispatching parallel processes

Reworked some of the interrupt handling so we can directly call
functions from the IDT handler.  Very basic userland support (they just
spin if they are an extra core).  Gritty example of how to use this from
the kernel in manager...

11 years agoAdded doxygen support to pci/mptables/ioapic.c. General code cleanup across all files...
Paul Pearce [Mon, 31 Aug 2009 05:37:53 +0000 (22:37 -0700)]
Added doxygen support to pci/mptables/ioapic.c. General code cleanup across all files. Restored run_binary support. Changed manager() startup process

Went through and redocumented / expanded documentation for ioapic.c, pci.c, mptables.c. I also added doxygen support for the 3 files.
Note: Currently doxygen does not like the ivy annotations and is doing really bizzare things. Zach has been notified.

Went through and cleaned up the code and variables in general for the 3 files and their headers.
This involved a few minor changes in the nic drivers.

Adjusted a doxygen configuration option that keeps random structs from showing up on versions of
doxygen newer than kevin's

Edited the GNUmakefile to no longer try to compile all of the kernel before building the docs.

Edited sys_run_binary() to restore support for dropping back into the previous enviroment, instead of the monitor.
This involved editing manager() to behave differently as well. I also setup manager() to run matrix instead of hello.

11 years agoCorrected runtime errors with multiboot_detect_memory() and page_init()
Paul Pearce [Sat, 29 Aug 2009 01:12:13 +0000 (21:12 -0400)]
Corrected runtime errors with multiboot_detect_memory() and page_init()

Corrected the argument to multiboot_detect_memory() in init.c to no longer
call KADDR, as KADDR relies on npages being set (and multiboot_detect_memory()
is the function that sets npages). We now add KERNBASE manually.

Removed a call to ROUNDUP() on the argument to boot_alloc() inside of
page_init(). This was unneeded, and ended up causing a runtime Ivy assertion

11 years agoMerge branch 'ivy'
Zach Anderson [Fri, 28 Aug 2009 19:55:22 +0000 (12:55 -0700)]
Merge branch 'ivy'

11 years agoGetting SharC to check some locking
Zach Anderson [Fri, 28 Aug 2009 19:49:24 +0000 (12:49 -0700)]
Getting SharC to check some locking

11 years agoFixed kmalloc bugs with incref and passing size of 0. Disabled debug printing
Barret Rhoden [Fri, 28 Aug 2009 00:58:01 +0000 (17:58 -0700)]
Fixed kmalloc bugs with incref and passing size of 0. Disabled debug printing

Long standing issues, incref fix should have been merged back on 18 June from
net-dev.  This is part of the issue of not increfing or inserting after
a page_alloc (of any sort).

The size of 0 fix should have been merged from 29 June also from net-dev.
Passing kmalloc a size of 0 can result in numerous runtime assertion failures.

Also disabled the kmalloc debug print statements.