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

11 years agoFixed bug in adding Makefrags as a depenendency for files to be recompiled
Kevin Klues [Wed, 26 Aug 2009 01:00:53 +0000 (18:00 -0700)]
Fixed bug in adding Makefrags as a depenendency for files to be recompiled

11 years agoFix conflict
Zach Anderson [Mon, 24 Aug 2009 21:51:12 +0000 (14:51 -0700)]
Fix conflict

11 years agoFixed up ivy annotations on the new structure supporting page_coloring.
Kevin Klues [Mon, 24 Aug 2009 01:57:14 +0000 (18:57 -0700)]
Fixed up ivy annotations on the new structure supporting page_coloring.

Additionally, this commit contains code that fixes up makefile dependencies
on header files and makes each source file also depend on changes made to
the Makefrag used to generate it.

Finally, a new facility for generating documentation using doxygen has
been added:
  make docs

You need to have both doxygen and graphviz (dot) installed in order to
generate the documentation properly using this command.

11 years agosmall fix for user_mem_strlcpy
Zach Anderson [Mon, 24 Aug 2009 19:04:56 +0000 (12:04 -0700)]
small fix for user_mem_strlcpy

11 years agoAdded page-coloring support to SPARC port
Andrew Waterman [Fri, 21 Aug 2009 22:12:11 +0000 (15:12 -0700)]
Added page-coloring support to SPARC port

11 years agoMajor reworking to integrate cache coloring into the kernel.
Kevin Klues [Sun, 16 Aug 2009 03:18:36 +0000 (20:18 -0700)]
Major reworking to integrate cache coloring into the kernel.

A number of new files have been introduced to allow kernel functions
to allocate pages based on page color rather than from a general purpose
allocator.  The biggest change was in a massive reorganization of pmap.c
and the inclusion of some new that are used to implement the page coloring
semantics for a given cache.

11 years agoDone deputizing
Zach Anderson [Fri, 21 Aug 2009 21:09:20 +0000 (14:09 -0700)]
Done deputizing

11 years agoDone Deputizing kernel
Zach Anderson [Wed, 19 Aug 2009 04:18:01 +0000 (21:18 -0700)]
Done Deputizing kernel

11 years agoStill annotating the kernel
Zach Anderson [Mon, 17 Aug 2009 03:50:25 +0000 (20:50 -0700)]
Still annotating the kernel

11 years agoAnnotated i386/smp_boot.c init.c manager.c monitor.c and multiboot.c
Zach Anderson [Sat, 15 Aug 2009 01:09:24 +0000 (18:09 -0700)]
Annotated i386/smp_boot.c init.c manager.c monitor.c and multiboot.c

11 years agoAnnotated i386/smp.c i386/smp_boot.c
Zach Anderson [Fri, 14 Aug 2009 23:56:03 +0000 (16:56 -0700)]
Annotated i386/smp.c i386/smp_boot.c

11 years agoAdded annotations to i386/pmap.c i386/kdebug.c and i386/cpuinfo.c
Zach Anderson [Fri, 14 Aug 2009 04:49:55 +0000 (21:49 -0700)]
Added annotations to i386/pmap.c i386/kdebug.c and i386/cpuinfo.c

11 years agoMakefile fixes for error logging and patchfile for newlib
Zach Anderson [Tue, 11 Aug 2009 22:31:08 +0000 (15:31 -0700)]
Makefile fixes for error logging and patchfile for newlib

11 years agoFixed things up with header file dependencies in the makes ystem
Kevin Klues [Thu, 13 Aug 2009 03:37:46 +0000 (20:37 -0700)]
Fixed things up with header file dependencies in the makes ystem

Now if we modfiy a header file that a c file includes, the makesystem will be sure and recompile that file.

11 years agox86 core_id() uses the LAPIC again
Barret Rhoden [Wed, 12 Aug 2009 18:43:20 +0000 (11:43 -0700)]
x86 core_id() uses the LAPIC again

Was using cpuid, due to a bug in KVM.  If you're using a bad version of
kvm (85 < x < 89), locally change this to lapic_get_default_id().

11 years agoChecks for hardware virtualization support
Barret Rhoden [Wed, 12 Aug 2009 01:52:14 +0000 (18:52 -0700)]
Checks for hardware virtualization support

x86_64 specific, or at least (intel) processors that support the

11 years agoProcess running / destruction outline
Barret Rhoden [Tue, 11 Aug 2009 02:14:41 +0000 (19:14 -0700)]
Process running / destruction outline

Sorts out a decent outline for how proc_run, proc_startcore, and
proc_destroy interact, given multicored processes.  The state
transitions should be good with regard to a lot of races.  cr3's are
protected with incref.

Schedule related functions have a better interface, and processes now
sit on TAILQs (lists) and can move around between lists (like a runnable

Things to keep in mind: when do we leave a process's context, and when
do we need to bundle kernel state (stack) so we can "restart" kernel
processing later?  Among other things.

11 years agoReworked the user VM map and added sysevent queue
Kevin Klues [Tue, 11 Aug 2009 01:10:56 +0000 (18:10 -0700)]
Reworked the user VM map and added sysevent queue

I cleaned up the virtual memory map exposed to user space and created
structs that define the contents of our new procdata and procinfo
structures that the user can use to share data with the kernel.  The
procinfo structures are read only and the procdata structures are
read-write.  Additionally, some of the cruft has now been removed from
the memlayout that was still in there from the ut austin labs we based
our original code on.

Some other changes needed to be made to the way ring buffers are
initialized as well, so that we can statically define their types to be
of a certain size, rather than relying on the open-ended buffers that
were there originally.

Also, just some general cleanup of where certain header files are
included was done as well.

Finally, I mirrored the directory structure created by andrew under
user/parlib into user/roslib.

11 years agoFixing lingering syscall bug, warnings on compilation.
David Zhu [Mon, 10 Aug 2009 21:47:13 +0000 (14:47 -0700)]
Fixing lingering syscall bug, warnings on compilation.

Buster was using syswrapper functions that assume 1 to 1 correspondance between
async desc and syscall desc, which is not the case for buster.

Possible removal of these wrapper functions as they are no longer needed.

11 years agounbroke sparc front-end server protocol
Andrew Waterman [Fri, 7 Aug 2009 19:57:20 +0000 (12:57 -0700)]
unbroke sparc front-end server protocol

11 years agoadded sparc newlib backend
Andrew Waterman [Wed, 5 Aug 2009 01:39:32 +0000 (18:39 -0700)]
added sparc newlib backend

11 years agofixed sparc atomics; added sparc newlib
Andrew Waterman [Tue, 4 Aug 2009 02:52:31 +0000 (19:52 -0700)]
fixed sparc atomics; added sparc newlib

added sparc udelay (prototype now in kern/include/timing.h)

11 years agoMerge branch 'master' into proc-work
Barret Rhoden [Tue, 4 Aug 2009 02:44:41 +0000 (19:44 -0700)]
Merge branch 'master' into proc-work


11 years agoMerge branch 'master' into proc-work
Barret Rhoden [Tue, 4 Aug 2009 00:08:31 +0000 (17:08 -0700)]
Merge branch 'master' into proc-work


11 years agoFinished sparc port merge, fixed symlink cleaning
Andrew Waterman [Mon, 3 Aug 2009 21:34:16 +0000 (14:34 -0700)]
Finished sparc port merge, fixed symlink cleaning

11 years agoBeginnings of an implementation of channels for ROS
Kevin Klues [Thu, 30 Jul 2009 18:10:39 +0000 (11:10 -0700)]
Beginnings of an implementation of channels for ROS

The channel implementation uses shared memory for the communication channel. The create / delete API consists of user level library code that makes system calls to set up shared memory pages between 2 processes (environments).  For each direction of the channel 2 pages are needed.  One for holding the ring buffer, and one for storing the data.  The ring buffer page is mapped in as read/write by both processes, while the data page is read/write for the creator of the channel, but read only by the listener on the channel.  For bidirectional channels, two of these single directional channels are necessary.

To support channels in this way, a range of addresses in the virtual address space has now been reserved for sysevents, much like the space reserved for asynchronous system calls that we had before.  The space reserved for sysevents contains a ring buffer that the user space program can poll on to see if the kernel has tried sending it any events.  Eventntually we will want to allow the user space process to register events of interest with the kernel so that it will be interrupted if they come in, rather than needing to explicitly poll for them.

Additionally, the directory structure and proper symlinks, etc. for getting everything to compile for parlib with the new directory structure is now in place.

11 years agoIntegrated with x86
Barret Rhoden [Fri, 31 Jul 2009 00:07:09 +0000 (17:07 -0700)]
Integrated with x86

Tweaked makefiles and fixed a filthy console.c bug (couldn't tab!).
Also removes ancient chinese bochs secrets from the Makefile.  They are
just commented out, in case anyone is curious.

11 years agoRearranged arch-specific directory hierarchy
Andrew Waterman [Thu, 30 Jul 2009 22:56:31 +0000 (15:56 -0700)]
Rearranged arch-specific directory hierarchy

11 years agoAndrew's port to sparc
Andrew Waterman [Thu, 30 Jul 2009 21:48:32 +0000 (14:48 -0700)]
Andrew's port to sparc

11 years agoSplit env_run into proc_startcore, early work
Barret Rhoden [Thu, 30 Jul 2009 19:51:04 +0000 (12:51 -0700)]
Split env_run into proc_startcore, early work

Lots of TODOs and gotchas in here, esp related to kernel stacks,
bundling process context, and process state.  I'm fairly confident the
lcr3 and refcnting is okay.  It probably isn't.  (TODO).

11 years agoFixes a race in console.c
Barret Rhoden [Mon, 27 Jul 2009 00:28:01 +0000 (17:28 -0700)]
Fixes a race in console.c

Putting a character now has it's own lock, since the printf-family is not currently
the only way to get to cons_putc() (reading a key, for example).  This also
means that now there is one less weird race where serial out will get something
different than the console (could have happened before).

Note that this bug was noticed by Ivy (deputy), which detected an overflow of
crt_buf[crt_pos++], which is usually caused by unhandled concurrency in console.c.

11 years agoWorkqueue interface and coreid()
Barret Rhoden [Fri, 24 Jul 2009 22:39:57 +0000 (15:39 -0700)]
Workqueue interface and coreid()

Cleaned up the workqueue interface, even though it still only has capacity for
one item.  This will make things easier when we have to check it when
env_running, among other things.

Also, replaced all lapic_get_id()s with coreid(), which uses the cpuid
instruction.  We can change this later, but for now I'm stuck with it. (KVM
thing, maybe).

11 years agoProcess state work, initial steps
Barret Rhoden [Fri, 24 Jul 2009 18:19:51 +0000 (11:19 -0700)]
Process state work, initial steps

Created the states we want, put in some basic framework for using them,
and started moving away from env.c/env.h.  Outstanding issues include
transition between complicated states, esp with races during the
transitions.  env_run needs to be split up, and we need to make sure we
never automatically bundle the kernel state and try to restart it, since
everything on the stack will be gone.

11 years agoRemoved the notion of environments from userspace
Barret Rhoden [Sat, 18 Jul 2009 01:21:16 +0000 (18:21 -0700)]
Removed the notion of environments from userspace

Merged include/ros/env.h into include/env.h, and userspace can't see it
anymore.  All previous uses were changed to use some form of
sys_getpid().  Userspace can cache it in a library call to getpid() if
it wants.

11 years agoConverted curenv calls into an opaque macro
Barret Rhoden [Sat, 18 Jul 2009 00:07:31 +0000 (17:07 -0700)]
Converted curenv calls into an opaque macro

11 years agoSupport for proc_create and proc_run from KFS
Barret Rhoden [Fri, 17 Jul 2009 21:42:59 +0000 (14:42 -0700)]
Support for proc_create and proc_run from KFS

Userspace can create processes and run them (a two-phase deal) from
files stored as binary blobs at the end of the kernel (KFS).  Eventually
will have some sort of VFS support.  You can also list and run these
programs from the kernel monitor.  KFS entries need to be statically
specified in kern/src/Makefrag and kern/src/kfs.c.  Fixed various other
issues with environments (parent id, page table changes) and some other
things in the process.

11 years agoFixed up error codes to all have a positive 'defined' value and a -negative return...
Kevin Klues [Wed, 1 Jul 2009 19:23:06 +0000 (12:23 -0700)]
Fixed up error codes to all have a positive 'defined' value and a -negative return value

11 years agoSyscall work, interrupt enabling, sysenter tweaks
Barret Rhoden [Tue, 30 Jun 2009 17:42:51 +0000 (10:42 -0700)]
Syscall work, interrupt enabling, sysenter tweaks

Interrupts are enabled for all syscalls (whether trap or sysenter),
env_run can handle returning from something other than sysenter (will
happen when we handle traps better), EFLAGS are saved and restored, can
fully inline sysenters if desired, and a couple other tweaks.

11 years agoProcess management work, yield syscall
Barret Rhoden [Mon, 29 Jun 2009 04:46:56 +0000 (21:46 -0700)]
Process management work, yield syscall

Very basic mechanisms to yield a core, as well as a rudimentary
'schedule' function to pick the next process to run.  Adds shells for
proc_create and proc_run.  Also moved around some syscalls, to keep them
in the same order throughout the different files.  Haven't added
anything to parlib.

11 years agoFixed up sysenter/sysexit semantics to allow another environment to be run on exit
Kevin Klues [Sat, 27 Jun 2009 04:05:03 +0000 (21:05 -0700)]
Fixed up sysenter/sysexit semantics to allow another environment to be run on exit

Looking at the diff files it should be fairly obvious what was done.  Also, I fixed up some errors we had in the 'ifdefs' for SERIAL_IO in console.c

11 years agoPulled out the standard gcc header files into a fixed directory to compile against
Kevin Klues [Wed, 24 Jun 2009 18:06:44 +0000 (11:06 -0700)]
Pulled out the standard gcc header files into a fixed directory to compile against

I used the ones from my i386-elf cross compiler on my macbook.  By pulling these out we are sure that whoever is compiling our kernel with any version of gcc / some other compiler, they will always include the same headers.

11 years agoFixes page refcounts in smp boot
Barret Rhoden [Thu, 18 Jun 2009 04:01:29 +0000 (21:01 -0700)]
Fixes page refcounts in smp boot

11 years agoProperly unmasks master PIC for IRQs 8 and up
Barret Rhoden [Wed, 17 Jun 2009 22:07:14 +0000 (15:07 -0700)]
Properly unmasks master PIC for IRQs 8 and up

11 years agoAdded beginnings of a proper kmalloc implementation.
Kevin Klues [Wed, 17 Jun 2009 20:44:32 +0000 (13:44 -0700)]
Added beginnings of a proper kmalloc implementation.

Right now the algorithm is vdery simple and there is lots of wasted space.  The goal is to start writing kernel code that can properly use the kmalloc interface and innovate on its implementation as we move forward.

11 years agoKernel and roslib now use newlib's queue.h
Barret Rhoden [Tue, 9 Jun 2009 03:05:04 +0000 (20:05 -0700)]
Kernel and roslib now use newlib's queue.h

Newlib's queue.h remains unchanged.  The kernel and roslib use a
modified copy (with ivy annotations), but is otherwise the same
(specifically regarding typedefing).  roslib's sys/queue.h is actually a
symlink to the kernel's - can think about changing this.

Note that due to ros/env.h, the kernel and roslib need to have the same
include path to queue.h (sys/queue.h).  The env.h interface will change

Also, changed the asynccall to use a TAILQ, and moved the userspace
specific syscall_desc list to userspace.

11 years agoDeputizes env.c. Update your Ivy!
Zach Anderson [Sun, 7 Jun 2009 20:53:59 +0000 (13:53 -0700)]
Deputizes env.c.  Update your Ivy!

Annotates env.c and includes.  There are still a few TODOs.  Barret
added a couple things to make it work with some of the changes already
on master (UGDATA, run_env_handler).

11 years agoMinor changes to some makefiles to make things work in the presence of a cross-compiler.
Kevin Klues [Sat, 6 Jun 2009 07:03:44 +0000 (00:03 -0700)]
Minor changes to some makefiles to make things work in the presence of a cross-compiler.

FINALLY got things to compile on my mac by setting up a cross compiler.  Now I can do native development and not rely on that stupid virtual machine that kept crashing my computer....

11 years agoSerial I/O is toggleable
Barret Rhoden [Sat, 6 Jun 2009 01:17:44 +0000 (18:17 -0700)]
Serial I/O is toggleable

If you want serial I/O, make with SERIAL_IO defined.  That will turn off
serial console output and enable the serial read/write syscalls.

11 years agoSplit atomic library
Barret Rhoden [Sat, 6 Jun 2009 01:08:28 +0000 (18:08 -0700)]
Split atomic library

Now an arch/atomic that has lower layer atomic primitives, and the
regular include/atomic (and a userspace version) with higher level
primitives (which should be renamed or changed later).  Esp since they
are still arch specific.

Also removed printks from some userspace apps, and changed back the
printk macro.

11 years agoMeasurement infrastructure and tests
Barret Rhoden [Fri, 5 Jun 2009 20:42:07 +0000 (13:42 -0700)]
Measurement infrastructure and tests

test_run_measurements and measurements.c are closely coupled.  Make sure
the case statements match up.

11 years agoFix some races with env destruction and dispatch
Barret Rhoden [Thu, 4 Jun 2009 23:11:29 +0000 (16:11 -0700)]
Fix some races with env destruction and dispatch

11 years agoAdded cache_buster syscall
Barret Rhoden [Tue, 26 May 2009 03:05:07 +0000 (20:05 -0700)]
Added cache_buster syscall

The cache-buster syscall takes a few more options, so we don't have
to change it to run a different test.  Also changed the roslib syscall
wrappers to have a meaningful name.

11 years agoUserspace atomics library
Barret Rhoden [Thu, 4 Jun 2009 21:50:48 +0000 (14:50 -0700)]
Userspace atomics library

11 years agoAdds a shared RW page to every address space
Barret Rhoden [Thu, 4 Jun 2009 21:33:31 +0000 (14:33 -0700)]
Adds a shared RW page to every address space

11 years agoFixed how errno is handled with isatty()
Paul Pearce [Thu, 4 Jun 2009 02:08:46 +0000 (22:08 -0400)]
Fixed how errno is handled with isatty()

For some reason, isatty() defines an error response to be a return value of 0, not -1. In that case
errno is set. I modified parts of newlib_backend.c to handle this unique case.

11 years agoCleaned up send_message, corrected errno scope, added errno support.
Paul Pearce [Thu, 4 Jun 2009 01:15:30 +0000 (21:15 -0400)]
Cleaned up send_message, corrected errno scope, added errno support.

Rewrote send_message to reduce redundent code. Also made changes to
function to facilitate reporting errno for all file io syscalls. Made
change to the file syscalls themselves to deal with errno reporting.
Removed #undef .. extern in newlib_backend.h that was creating 2 copies
of errno. This now lets userlab apps get access to errno by simply
including errno.h. Also made various housekeeping code changes.

Created a new test file, file_error to test errno functionality, and put
hooks into matrix.c.

11 years agoCleaned up the newlib file functions and headers to conform to ros standards.
Paul Pearce [Wed, 3 Jun 2009 21:25:43 +0000 (17:25 -0400)]
Cleaned up the newlib file functions and headers to conform to ros standards.

Made all lines (sans TODO comments) 80 char max, also changed from
syscall_id to syscall_id_t, with an explicit definition of size to uint32_t.
Also lost the byte macro and replaced it with just a char reference.
Cleaned up some random code tidbits.

11 years agoMove file_io to a matrix-run app. Cleaned up matrix and file_io.
Paul Pearce [Mon, 1 Jun 2009 06:03:00 +0000 (02:03 -0400)]
Move file_io to a matrix-run app. Cleaned up matrix and file_io.

Rewrote file_io to be an application executed from our "shell" app. Cleaned
up both matrix and file_io to be more presentable for the retreat. Changed
the tests in file_io to be more interactive. Done.

11 years agoChanged the format of the stat struct to conform to MAC OSs format.
Kevin Klues [Fri, 5 Jun 2009 01:19:57 +0000 (18:19 -0700)]
Changed the format of the stat struct to conform to MAC OSs format.

11 years agoFixed print macros in stdio.h, fixed bug in readline.c, expanded matrix.c
Paul Pearce [Sun, 31 May 2009 23:42:24 +0000 (19:42 -0400)]
Fixed print macros in stdio.h, fixed bug in readline.c, expanded matrix.c

Fixed a bug in the arguments of the printk and printd macros in stdio.h. This bug
caused strange behavior in user land apps, such as the arguments to sbrk being

Corrected the behavior of readline() to detect errors on the return value, not
the character returned, and removed a floating point printf format character.

Expanded matrix.c to include the full help message and execute the correct apps.

11 years agoAdded some more apps / functionality to the matrix shell
Kevin Klues [Sun, 31 May 2009 04:35:07 +0000 (21:35 -0700)]
Added some more apps / functionality to the matrix shell

11 years agoDelete open_read.c
Paul Pearce [Sun, 31 May 2009 21:50:05 +0000 (17:50 -0400)]
Delete open_read.c

11 years agoAdded serial hw flow control, rest of the file syscalls, updated tests
Paul Pearce [Sun, 31 May 2009 21:46:31 +0000 (17:46 -0400)]
Added serial hw flow control, rest of the file syscalls, updated tests

Set two bits high in the serial control register, to enable hardware
flow control. Also filled in the bodies for lseek, link, unlink, stat,
and fstat. However I did not enable fstat/stat over serial, as the stat
structure is still inconsistent between ros and server.

Also changed open_read.c to file_io.c, and added additional tests.

11 years agoThe beginnings of a shell for launching user apps and taling over serial to a remote...
Kevin Klues [Sat, 30 May 2009 12:01:20 +0000 (05:01 -0700)]
The beginnings of a shell for launching user apps and taling over serial to a remote server.

11 years agoCleaned up the return values for all system calls.
Kevin Klues [Sat, 30 May 2009 09:55:06 +0000 (02:55 -0700)]
Cleaned up the return values for all system calls.

Defined a type intreg_t and uintreg_t to denote values stored into variables in a platform
independent manner.  This type is now returned by the top level syscall handler, with the
semantics of its meaning needing to be interpreted by the caller upon its return.  Also cleaned
up a bit of newlib backends handling of the standard stream file descriptors.

11 years agoChanged debug() format inside newlib_backend, added multiline print test
Paul Pearce [Sat, 30 May 2009 00:22:16 +0000 (20:22 -0400)]
Changed debug() format inside newlib_backend, added multiline print test


11 years agoExpanded on open/read test, fixing some small bugs along the way.
Kevin Klues [Fri, 5 Jun 2009 01:12:09 +0000 (18:12 -0700)]
Expanded on open/read test, fixing some small bugs along the way.

11 years agoDisabled IVY for user apps. Altered the open/read userapp test.
Paul Pearce [Fri, 29 May 2009 07:20:43 +0000 (03:20 -0400)]
Disabled IVY for user apps. Altered the open/read userapp test.


11 years agoChanged return type of serial_read_byte(), removed debugging comments.
Paul Pearce [Fri, 29 May 2009 00:04:31 +0000 (20:04 -0400)]
Changed return type of serial_read_byte(), removed debugging comments.

Fixed the return type of serial_read_byte() to be of type int, instead of
uint16. This prevented a return value of -1 to denote no data avaiable.
Also removed several printk statements specifying the systemcall occuring

11 years agoFixed our newlib_backend to use the systems unistd for func decls.
Kevin Klues [Thu, 28 May 2009 14:17:41 +0000 (07:17 -0700)]
Fixed our newlib_backend to use the systems unistd for func decls.

Before we had all definitions in a newlib_backend.h file, now we are doing things the more
correct way.  Applications should #include unistd.h and other similar header files to get access
to teh funciton declarations for the system call wrappers implemented in newlib_backend.c

11 years agoFixed up return value for sys_serial_write on both kern/user
Kevin Klues [Thu, 28 May 2009 13:37:05 +0000 (06:37 -0700)]
Fixed up return value for sys_serial_write on both kern/user

11 years agoAdded open_read, enabled it to run.
Paul Pearce [Thu, 28 May 2009 19:19:53 +0000 (15:19 -0400)]
Added open_read, enabled it to run.

11 years ago Implemented the bodies of the serial read/write syscalls on both user/kernel...
Kevin Klues [Thu, 28 May 2009 10:11:52 +0000 (03:11 -0700)]
Implemented the bodies of the serial read/write syscalls on both user/kernel side

    We should consider creating a kern/serial.c file for serial stuff instead of bundling it in

11 years agoFixed return type of strnlen(), removed sseek, swrite, added debug stmts
Kevin Klues [Wed, 27 May 2009 22:32:41 +0000 (15:32 -0700)]
Fixed return type of strnlen(), removed sseek, swrite, added debug stmts

Changed the return type of strnlen() to be size_t instead of int.
Removed sseek and swrite from newlib_backend, as well as added in
  the function prototypes for the 19 syscall wrappers.
Added in debugging print statements into the various calls, and redefined
  debug to print nothing.

11 years agoFixed those damn __sseek and __swrite problems!
Kevin Klues [Wed, 27 May 2009 19:59:41 +0000 (12:59 -0700)]
Fixed those damn __sseek and __swrite problems!

Needed to recompile newlib undefining all linux/unix specific macros defined by gcc.  To do this
you use a -U on the command line, and to even see what these defines are you can do a -dM.

11 years agoAdded a debug statement for debugging stuff in parlib.
Kevin Klues [Wed, 27 May 2009 16:40:39 +0000 (09:40 -0700)]
Added a debug statement for debugging stuff in parlib.

Just pulled out printf implementation from roslib and renamed everything debug*.  Also hacked the
menager to only run our one single enviroment and then die.

11 years agoFixed up some stuff to try and get printf from newlib to work since sbrk is now in...
Kevin Klues [Wed, 27 May 2009 13:38:44 +0000 (06:38 -0700)]
Fixed up some stuff to try and get printf from newlib to work since sbrk is now in place.

Doesn't seem to work yet though.  I basically have a redirect in teh body of the write() function
that says if its a write to stdout to call the sys_cputs syscall instead.  Somehow there is
something weird going on in the manager though where I can't just create one environment, run it
and then panic immediately.  I get stuck in some weird infinite loop where it creates an
environment, destroys it, gives me a whole bunch of kernel warnings, and then repeats.  Looking
into this now...

11 years agoMinimal implementation of sbrk that allocates from a static array
Kevin Klues [Wed, 27 May 2009 11:03:47 +0000 (04:03 -0700)]
Minimal implementation of sbrk that allocates from a static array

What we really need is to request memory from the OS and return pointers from there until we run
out and need to request more.  Barret and I talked a bit about this yesterday i.e. why not just
return chunks of pages through sbrk?  It could just as easily "malloc" pages of memory from the
OS and return pointers to those instead of relying on the presence of a HEAP that grows towards
the stack.

11 years agoAdded function bodies for open, close, read, and write, as well as supporting functio...
Paul Pearce [Wed, 27 May 2009 03:16:08 +0000 (20:16 -0700)]
Added function bodies for open, close, read, and write, as well as supporting functions, in parlib.c/h

Filled in the function bodies, as well as creating send_message(), write_to_channel(), and read_from_channel() to parlib.c.
Also added supporting macros to parlib.h, as well as the new prototypes for the new functions.