akaros.git
10 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

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

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

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

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

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

10 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

10 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

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

10 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

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

Conflicts:
kern/arch/i386/Makefrag
kern/include/kfs.h
kern/include/ros/syscall.h
kern/src/Makefrag
kern/src/init.c
kern/src/kfs.c
kern/src/kmalloc.c
kern/src/manager.c
kern/src/syscall.c
kern/src/testing.c
user/roslib/inc/sys

10 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

10 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

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

10 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

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

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

10 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

10 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

10 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

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

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

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

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

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

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

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

10 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
issue).

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

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

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

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

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

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

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

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

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

10 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

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

10 years agoMerge branch 'master' into net-dev (with code changes listed below besides normal...
Paul Pearce [Fri, 28 Aug 2009 03:18:57 +0000 (20:18 -0700)]
Merge branch 'master' into net-dev (with code changes listed below besides normal conflict resolution)

1) Kept several kmalloc changes that need to get worked back into the master. This is page_incref and size == 0 check
2) Reworked run_binary syscall to work with the new env/proc method. Now drops into kernel instead of back to matrix (need to fix)
3) Reordered things in kfs.c to match the Makefrag (measurements out of order). Also added draw_nanwan_standalone back into kern/src/Makefrag
4) Fixed some mptable odds and ends regarding entry counts of 0 and a left over variable from a previous commit.
5) Disabled deputy in kern/src/syscall.c. Several net-dev-only syscalls use unannoated structures from the driver, which will be going away with lwip

Conflicts:
kern/arch/i386/trap.c
kern/include/kmalloc.h
kern/include/ros/syscall.h
kern/include/string.h
kern/src/Makefrag
kern/src/env.c
kern/src/init.c
kern/src/kmalloc.c
kern/src/smp.c
kern/src/syscall.c
kern/src/testing.c
user/parlib/inc/parlib.h

10 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

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

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

10 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

10 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

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

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

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

10 years agoAdded IVY support for kmalloc, mptables, pci, string.h (string.h from Zach)
Paul Pearce [Wed, 19 Aug 2009 02:16:19 +0000 (19:16 -0700)]
Added IVY support for kmalloc, mptables, pci, string.h (string.h from Zach)

Included Zach's string.h annotations.

Rewrote mptables to work with ivy. This involved some minor restructoring. Also added IVY to PCI which required no code changes

Added kmalloc annoations.

Added

10 years agoAdded support to boot ROS in VirtualBox and KVM. Expanded MPTables scan, fixed IOAPIC...
Paul Pearce [Sat, 8 Aug 2009 01:31:29 +0000 (18:31 -0700)]
Added support to boot ROS in VirtualBox and KVM. Expanded MPTables scan, fixed IOAPIC bug.

Added another range of memory for mptables.c to scan looking for the mptable. This was required for
VirtualBox. This is also done in BSD.

Fixed a misplaced bit in the IOAPIC that was causing entries to not mask properly when disabling an
IRQ route. This was revealed by VirtualBox's behavior with routing IRQ's.

Increased the wait time in smp_boot() to detect how many cores we have. This was needed as
VirtualBox was occasionally getting the wrong number of cores.

Reworked ioapic pit test. Fixed the name, and changed the timer divisor to be within range.

Both PCI and ISA interrupts are now working inside KVM. Slight note: We can't route IRQ 0
to any core by 0 inside KVM. This is due to a hard coded check inside the kvm kernel module
that was inserted to deal with some TSC instability encountered by the linux guys.

To deal with the KVM situation, I added a check in ioapic_route_irq() that throws a warning
should you try to reroute irq 0 to a core other than 0. This was signed off on by Barret.

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

10 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

10 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

10 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

10 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

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

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

10 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
IA32_FEATURE_CONTROL MSR.

10 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
list).

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.

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

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

10 years agoAdded extremely basic code for the PCI NE2K NIC which is emulated in Bochs/KVM. Reorg...
Paul Pearce [Fri, 7 Aug 2009 03:42:04 +0000 (23:42 -0400)]
Added extremely basic code for the PCI NE2K NIC which is emulated in Bochs/KVM. Reorganized NIC related code to support

Went through and added a basic interrupt sanity check for the NE2K Nic. This is so we can determine the functionality
of PCI based interrupts in a virtual (Bochs/KVM) enviroment. If the device is detected it starts the device, generates
two interrupts, then falls back out.

Code was also reoganized to roughly support two nic drivers existing in the same space. This doesn't allow them
to function at the same time, just coexist.

There is a really nasty Bochs bug that causes PCI interrupts to show up at 2 locations in the IOAPIC. The source
of the bug has been determined, and a bug report filed with Bochs. There are two ways to fix it, if they choose
way 1 the code in this commit will allow PCI interrupts to function properly through the IOAPIC. If they choose
way 2 (or some other way I haven't though of) some ioapic_init() code will need to be rewritten to support the
broken mptable case.

Note: There was a line in .gitignore that caused the two new ne2k files to be ignored. This change to gitignore
is critical to correct functionality!

10 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

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

10 years agoRestore basic kmalloc/network functionality which was broken with the merge.
Paul Pearce [Wed, 5 Aug 2009 01:36:25 +0000 (18:36 -0700)]
Restore basic kmalloc/network functionality which was broken with the merge.

Fixed a bug in env_setup_vm that was causing kmalloc to crash. A page ref
was not being increased nor page_inserted(). This is a quick hack until Kevin
finishes channels.

Rewrote parts of the nic interrupt / rx packet handler to deal with multiple
packet receptions at bad times. The use of interrupts on a different core
uncovered a bug in which data could be written after an interrupt flag was raised,
the driver now clears the interrupt bit immediately, loops until totally clear,
and does an extra 1 off check for new data incase more data came in between
our clear and our check.

run_remote_binary support is still broken from the merge.

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

10 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

Conflicts:
kern/src/Makefrag
kern/src/manager.c

10 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

Conflicts:
kern/arch/i386/trap.c
kern/arch/i386/x86.h
kern/boot
kern/include/env.h
kern/include/monitor.h
kern/include/ros/env.h
kern/include/ros/syscall.h
kern/include/smp.h
kern/src/Makefrag
kern/src/atomic.c
kern/src/env.c
kern/src/init.c
kern/src/manager.c
kern/src/monitor.c
kern/src/pmap.c
kern/src/smp.c
kern/src/syscall.c
kern/src/testing.c
kern/src/workqueue.c
user/parlib/inc/parlib.h
user/parlib/src/syscall.c

10 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

10 years agoMerge branch 'master' into net-dev
Kevin Klues [Sat, 1 Aug 2009 18:41:47 +0000 (11:41 -0700)]
Merge branch 'master' into net-dev

Conflicts:
.gitignore
kern/boot
kern/include/ros/syscall.h
kern/src/Makefrag
kern/src/init.c
kern/src/smp.c
kern/src/syscall.c
kern/src/testing.c
user/parlib/inc/parlib.h
user/parlib/src/newlib_backend.c
user/parlib/src/syscall.c

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

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

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

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

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

10 years agoAdded support for bochs/kvm broken mptables, added pit reroute test, fixed imcr bug
Paul Pearce [Wed, 29 Jul 2009 02:17:32 +0000 (19:17 -0700)]
Added support for bochs/kvm broken mptables, added pit reroute test, fixed imcr bug

Added support for mismatched pci bus and mptables settings. Specifically, fixed
an issue where bochs and kvm say there is no pci bus in the mptable, but have
a pci bus that is readable. The missing devices seem to show up as isa devices
in the mptable. This code trys to gracefully handle this. It is untested, in
terms of interrupts coming from pci devices in bochs/kvm, as we don't have a
way to generate such interrupts right now (quickly).

Added test_ioapic_pic_reroute() in testing.c that routes the pit to a core,
using the given ioapic_reroute_irq() interface, enables the pit, then unroutes
it using ioapic_unroute_irq().

Fixed a bug where the interupt mode bit mask in the mptable was a 16 bit field
instead of an 8 bit field.

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

10 years agoMoved IOAPIC functionality into ioapic.c, added support for ISA IRQs (pit keyboard...
Paul Pearce [Sat, 25 Jul 2009 02:40:01 +0000 (19:40 -0700)]
Moved IOAPIC functionality into ioapic.c, added support for ISA IRQs (pit keyboard, etc)

Net result is we can now reroute any IRQ on the PCI or ISA bus, this includes
anything that is listed on the ISA bus (in mptables), such as the PIT,
Keyboard, etc.

Moved ioapic_reroute_irq() into ioapic.c. Also added an ioapic_init() function
that runs through the PIC and ISA structures (discussed below) and creates an
IRQ->IOAPIC mapping, so there is a single source of truth as far as the route
functions are concerned.

Added an ioapic_unroute_irq() that basically masks an irq.

Added ISA IRQ related parsing to MPTables that allows for things like the PIT
to be routed via the IOAPIC. This creates a structure like the one found for
pci that maps IRQ's to ioapic entries. This is used in ioapic_init()

Added ioapic_init() to the init process after pci_init.

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

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

10 years agoFirst run at migrating from PIC to IOAPIC. Includes mptable parsing, moving pci to...
Paul Pearce [Thu, 23 Jul 2009 04:33:13 +0000 (21:33 -0700)]
First run at migrating from PIC to IOAPIC. Includes mptable parsing, moving pci to its own file, and reworking the init order.

1) Moved PCI out of the NIC driver and into its own file. Created structures that map from irq->pci device, and pci device->irq
2) Created mptables.c, which parses the mptables and creates a ton of structures that allows us to locate an ioapic interupt line
   based on pci device, so we can ...
3) Added a function in apic.c that allows us to route an irq to a specific lapic, based on the info from the mptables and pci bus
4) Changed the init order to setup the nic after smp boot. This is needed since we want to route interupts to a core
   that wasn't yet booted (in the old init order).

Note: PIT functionality is not yet known. Also the ioapic_route_irq() relies on a few constants that need to be expanded into structs.

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

10 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

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

10 years agoMerge commit 'origin' into net-dev
Kevin Klues [Wed, 1 Jul 2009 21:08:27 +0000 (14:08 -0700)]
Merge commit 'origin' into net-dev

Conflicts:
include/ros/syscall.h
kern/src/Makefrag
kern/src/env.c
kern/src/manager.c
kern/src/syscall.c

10 years agocleaned up the error checking in the run_binary code and fixed some bugs in kmalloc
Kevin Klues [Tue, 30 Jun 2009 03:33:22 +0000 (20:33 -0700)]
cleaned up the error checking in the run_binary code and fixed some bugs in kmalloc

10 years agoAdded ability to load an arbitrary binary from an ethernet server and launch it
Kevin Klues [Sat, 27 Jun 2009 06:05:58 +0000 (23:05 -0700)]
Added ability to load an arbitrary binary from an ethernet server and launch it

Right now everything has only been tested with a single application, draw_nanwan_standalone, but hopefully other programs will work as well.  This impolementation relies on the changes made to master to allow syscalls made with sysenter to return to a different context than the calling one.

10 years agoReworked the ethernet driver to use kmalloc properly. Fixed up kmalloc.
Paul Pearce [Thu, 18 Jun 2009 19:42:01 +0000 (12:42 -0700)]
Reworked the ethernet driver to use kmalloc properly. Fixed up kmalloc.

Fixed some issues with my kmalloc ethernet port. It now works and compiles correctly. I also fixed some
issues with pages in kmalloc. Made needed changes to newlib backend to support the new kmalloc.

10 years agoFixed a bug in apic.c for irq's > 7. Rewrote/organized nic driver to use kalloc
Paul Pearce [Wed, 17 Jun 2009 22:02:27 +0000 (15:02 -0700)]
Fixed a bug in apic.c for irq's > 7. Rewrote/organized nic driver to use kalloc

Fixed a bug in apic.c that masked out the wrong irq in PIC1 for IRQ's over 7
in PIC2.

Rewrote parts of the realtek driver to use kalloc instead of page_alloc, also
reorganized the driver and header in a better manor. Isolated out the hacky
stuff and cleaned up as much as possible.

This commit will not compile, as I'm about to rebase based on the new master
branch that will have kalloc.

10 years agoDisabled the printf() workaround to avoid remote syscalls.
Paul Pearce [Tue, 16 Jun 2009 07:14:46 +0000 (00:14 -0700)]
Disabled the printf() workaround to avoid remote syscalls.

Commented out the hack in fstat() and isatty() to avoid remote syscalls. This hack allows printf to work
even without remote syscalls functioning. Now, remote syscalls are needed for printf.

10 years agoGot the File IO tests up and running over ethernet.
Paul Pearce [Tue, 16 Jun 2009 06:59:05 +0000 (23:59 -0700)]
Got the File IO tests up and running over ethernet.

This is incredibly hacky. I am simulating UDP/IP at the driver/syscall level because we lack a network stack.
The code in handle_rx_packet() is really really ugly and a total hack. This needs to go away.

I also fixed the tcp/ip/udp checksum flags in the descriptor register. Their offsets are now correct
(and undocummented in the spec sheet). They need to be handled as part of the vlan field instead of command.
Note: The nic is stupid. If you send a UDP packet with the TCP checksum enabled, it sticks 16 bits where
it thinks it should go, right over your data.

10 years agoFixed bug with sysenter not restoring interrupts. Cleaned up mistakenly left in debug...
Paul Pearce [Mon, 15 Jun 2009 04:28:59 +0000 (21:28 -0700)]
Fixed bug with sysenter not restoring interrupts. Cleaned up mistakenly left in debug lines in nic driver

Sysenter, somewhat covertly, disables the IF bit in the eflags register upon its invokation. This is
described only in the RTL, not the functional description. The result of this is upon entering userland,
if syscalls were serviced by the sysenter facility, interrupts would be disabled and not come back online.
The fix is to force the IF bit back  on as soon as we get inside the syscall wrapper.

Also removed some debugging stuff from rl8168.c.

10 years agoFixed a typo in syscall.c introduced in last commit.
Paul Pearce [Sat, 13 Jun 2009 05:17:15 +0000 (22:17 -0700)]
Fixed a typo in syscall.c introduced in last commit.

I accidently removed a definition instead of a debug statement before commiting before.

10 years agoBuilt a basic framework for sending ethernet packets from userland. Switched from...
Paul Pearce [Sat, 13 Jun 2009 04:50:39 +0000 (21:50 -0700)]
Built a basic framework for sending ethernet packets from userland. Switched from measurements to matrix.

Built a syscall framework called sys_eth_write/read that sends and receives packets. It does this by (stupidly) wrapping the data to send with
hard coded ETH/IP/UDP headers, and pushing it out on the NIC. There is currently no mechinism for receiving packets, as userland interrupts are not
working, and those are required for incoming notification. This current version will send properly formatted UDP packets out on the wire.

I also modified newlib_backend to use this new medium, and (for debugging) reenabled the hacks on isatty and fstat to make printf not go over the wire.

I also merged back in the code to switch  to the user enviroment, and run matrix.c.

10 years agoFixed a typo in monitor.c
Paul Pearce [Thu, 11 Jun 2009 21:46:42 +0000 (14:46 -0700)]
Fixed a typo in monitor.c

Upon typing showmapping, it responds saying the usage is showmappings, with
an s. I just removed the s. When merging this branch in, may want to include
this change.

10 years agoMoved all NIC related stuff into rl8168.c/h from testing. Cleaned up nic code
Paul Pearce [Thu, 11 Jun 2009 20:44:32 +0000 (13:44 -0700)]
Moved all NIC related stuff into rl8168.c/h from testing. Cleaned up nic code

I moved all the PCI/NIC related work from testing.c/h into rl8168.c/h. rl8168
is the chipset used in the development boxes. It is the rl8168d/8111d. I made
the required changes to the Makefrag, and called the initalize function from
init.c.

I also cleaned up the code greatly. I moved each phase of the startup process
into its own function, moved print msgs to macros for easy on/off, and moved
all magic numbers to be #define's at the top of the file, with sensible names.

The location of the #define's will move from .c to .h when I'm further along
in the dev process.

10 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

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

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

10 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

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