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.

11 years ago Added stubs for sys_serial_read and sys_serial_write for remote syscall servicing.
Kevin Klues [Fri, 5 Jun 2009 00:52:44 +0000 (17:52 -0700)]
 Added stubs for sys_serial_read and sys_serial_write for remote syscall servicing.

11 years agoReorganized the directory structure, placing newlib under user/parlib.
Kevin Klues [Fri, 5 Jun 2009 00:43:42 +0000 (17:43 -0700)]
Reorganized the directory structure, placing newlib under user/parlib.

These changes required modifications to some header files as well as some Makefrags to conform to the new structure.

11 years agoFix unnecessary switching of CR3 registers in syscall handling.
David Zhu [Thu, 28 May 2009 21:06:31 +0000 (14:06 -0700)]
Fix unnecessary switching of CR3 registers in syscall handling.

11 years agoSMP boot cleanup
Barret Rhoden [Thu, 28 May 2009 00:58:21 +0000 (17:58 -0700)]
SMP boot cleanup

Deallocates the *page table* used by the smp_boot mapping, which was
being copied into every processes address space, which caused problems.

Need to take a look at UTOP and ULIM and add a check in env_vm_setup to
check for these things in the future.  Do this when gutting UPAGES.

11 years agominor changes, disregard
Barret Rhoden [Wed, 27 May 2009 07:33:27 +0000 (00:33 -0700)]
minor changes, disregard

11 years agoMinor touchups after rebase to make it work
Kevin Klues [Tue, 26 May 2009 05:54:28 +0000 (22:54 -0700)]
Minor touchups after rebase to make it work

11 years agoCan process async calls on processes that die
Barret Rhoden [Mon, 25 May 2009 23:15:15 +0000 (16:15 -0700)]
Can process async calls on processes that die

Has protections and a ref count to keep a process alive while its
address space/context is being used.  Specifically, when processing
async calls.

11 years agoAdds sys_getcpuid and sys_cache_invalidate
Barret Rhoden [Fri, 22 May 2009 07:33:57 +0000 (00:33 -0700)]
Adds sys_getcpuid and sys_cache_invalidate

11 years agoCan run batches of processes repeatedly.
Barret Rhoden [Fri, 22 May 2009 07:03:34 +0000 (00:03 -0700)]
Can run batches of processes repeatedly.

Created a manager function that runs on core 0, which can create batches
of environments, run one on core 0, and then continue.  It's a bit
hacky, since there's the issue of not being able to return from env_run

11 years agoDecouples running remote envs from smp_call
Barret Rhoden [Thu, 21 May 2009 22:14:33 +0000 (15:14 -0700)]
Decouples running remote envs from smp_call

Adds a workqueue, checked from smp_idle, that allows the env to run to
be added from within the smp_call interrupt handler, but then run after
iretting from the interrupt (in smp_idle).  Needs some more logical
organization, as well as work with env_destroy and run from a management
core (core 0).

11 years agoManually needed to copy the shadowed timer.c file from user/parlib/src into kern/src
Kevin Klues [Tue, 26 May 2009 04:13:57 +0000 (21:13 -0700)]
Manually needed to copy the shadowed timer.c file from user/parlib/src into kern/src

11 years agoAnother round at reorganization
Kevin Klues [Tue, 26 May 2009 03:24:57 +0000 (20:24 -0700)]
Another round at reorganization

This time 'parlib' has become the wrapper around newlib stuff, and 'roslib' is our somehwat ghetto libc
implementation weve been using since the beginning.  We also have the notion of architecture specific
includes, as well as includes shared by user/kernel space in the same style as the 'linux' include
directory in a linux distribution.

11 years agoFixed some inconsistent placement of compiled objects
Kevin Klues [Mon, 25 May 2009 15:49:45 +0000 (08:49 -0700)]
Fixed some inconsistent placement of compiled objects

11 years agoMassive reorganizing and making all the makefiles consistent.
Kevin Klues [Mon, 25 May 2009 00:47:38 +0000 (17:47 -0700)]
Massive reorganizing and making all the makefiles consistent.

Only minor code changes to make include directories correct.  Still haven't fixed the problem of the
kernel relying on compiling some user space library files.

11 years agoAll programs should die gracefully now since fixing sbrk to return -1
Kevin Klues [Fri, 22 May 2009 22:46:56 +0000 (15:46 -0700)]
All programs should die gracefully now since fixing sbrk to return -1

Before, sbrk was trying to actually do something facny which caused us to die because I just pulle
dthis implementation off the newlib page.  I just make it die now returing the proper return value
indicating no memory is available.  This way we can compile/run a printf based applications (which
doesnt' actually print anything), but at least it doesnt case a page fault or an invalid opcode trap
as it was doing before...

11 years agoBeginnings of getting user apps to compile against newlib
Kevin Klues [Fri, 22 May 2009 22:09:57 +0000 (15:09 -0700)]
Beginnings of getting user apps to compile against newlib

I've compiled newlib outside of this source tree with the -nostdinc option for linking so that none
of the libraries from my local machine got bundled with it as it was compiled.  It is installed in
the newlib directory along with some files for providing the necessary libc wrappers for our
platform.  The bodies of the functions found in libc_wrappers.c should be filled in to define how
these functions interact with ROS.  Right now, noe of them do the right thing :)  We will fill them
in as we go along...

11 years agobug fixes for timer and timer training.
David Zhu [Tue, 26 May 2009 00:50:01 +0000 (17:50 -0700)]
bug fixes for timer and timer training.

several bugs fixed.
Serialized read tsc was clobbering register values.
We were getting negative reading for trained timer overhead.
Fixed pool implementation so we can iterate through allocated pool

11 years agoMerged the timing and measurement stuff together and cleaned it up a bit
Kevin Klues [Fri, 22 May 2009 07:50:49 +0000 (00:50 -0700)]
Merged the timing and measurement stuff together and cleaned it up a bit

This involved moving some things around as well as renaiming some things.  I'm still not
happy with the name timer.h/c because these names imply fucntionality such as being able to
set an interrrupt based timer, etc.  But we can change this later if we want to.  I also made
some small modifications to finally get rid of all remnants of the "jos" tainted throughout
our code.  Additionally, there was some reorganization of who includes what header files so as
to be consistent with what is really needed by any individual file.

11 years agoInitial implementation of timer pool and timer tag
David Zhu [Fri, 22 May 2009 03:18:35 +0000 (20:18 -0700)]
Initial implementation of timer pool and timer tag

Each function can call function begin and end macros to do single run measurement and aggregate measurement.
At the end of the run, we can go through the timer pool to print out each timer measurement.

11 years agoAdded some function to read the tsc with start/stop semantics
Kevin Klues [Thu, 21 May 2009 17:29:31 +0000 (10:29 -0700)]
Added some function to read the tsc with start/stop semantics

In addition to these functions, there is a training function that figures out what the correct
overhead of making the calls is so that it can be factored out before returning the time
difference.  This has not been tested on real hardware yet, and is pretty flaky in my
bochs-inside-vmware environment.  Logic seems sound though...

11 years agoLAPIC Timer work
Barret Rhoden [Thu, 21 May 2009 00:44:40 +0000 (17:44 -0700)]
LAPIC Timer work

Adds a wrapper to set up the LAPIC Timer in usec, instead of ticks.
Also tweaks some of the training and testing to avoid extra interrupts.

11 years agoFixed udelay_pit to be aware of the PIT divisor.
Barret Rhoden [Wed, 20 May 2009 23:00:04 +0000 (16:00 -0700)]
Fixed udelay_pit to be aware of the PIT divisor.

11 years agoChanges the serial port to output at 115200
Barret Rhoden [Tue, 12 May 2009 23:05:39 +0000 (16:05 -0700)]
Changes the serial port to output at 115200

11 years agoSYSENTER support on other cores other than core 0.
David Zhu [Tue, 12 May 2009 00:03:55 +0000 (17:03 -0700)]
SYSENTER support on other cores other than core 0.

11 years agoSYSENTER support and using SYSENTER as default syscall method.
David Zhu [Mon, 11 May 2009 23:37:49 +0000 (16:37 -0700)]
SYSENTER support and using SYSENTER as default syscall method.

11 years agoCache-buster syscall, sync and async varieties
Barret Rhoden [Mon, 11 May 2009 01:10:45 +0000 (18:10 -0700)]
Cache-buster syscall, sync and async varieties

Just grabs a lock and writes a value to a certain number of entries to
an array in kernel space.  Right now, the array is sitting at
0xd0000000, which is far from being allocated for anything.

Also added a wrapper function to get both an async and a sys desc, which
seems to be the common case for a lot of syscalls.

11 years agoHandles multiple simultaneous synchronous syscalls
Barret Rhoden [Sat, 9 May 2009 22:17:16 +0000 (15:17 -0700)]
Handles multiple simultaneous synchronous syscalls

Running multiple processes has worked before, but we needed a per-core
curenv to track which process was in the kernel on that specific core
while processing a syscall.

Also changed some debugging statements to include the core number.

11 years agoAsync error handling
Barret Rhoden [Sat, 9 May 2009 05:45:01 +0000 (22:45 -0700)]
Async error handling

Receives error return values and passes them back up the userspace
stack.  It's up to the top levels to deal with them.  cprintf currently
does not, and null does.

Also adjusted measure_ to handle an error (presumably RING_FULL), and
not try that iteration again.  The numbers may be a little odd from it
if the error doesn't happen on the first outer iteration.

Also, for any real measurements, note the final parameter of

11 years agoAsync call responses
Barret Rhoden [Sat, 9 May 2009 02:48:35 +0000 (19:48 -0700)]
Async call responses

Pass back some sort of response from the syscalls within an async call.
Could consider passing in a function that does the aggregation of
responses, since it may be syscall specific.

Also, process_syscalls no longer resets the machine when trying to
process the syscalls of a process that's been freed.  Though there is no
sync protection with that yet.

11 years agoAdded an asynchronous sys_null_async() call and wrappers
Kevin Klues [Fri, 8 May 2009 01:06:53 +0000 (18:06 -0700)]
Added an asynchronous sys_null_async() call and wrappers

11 years agoMeasurement for async syscalls
Barret Rhoden [Thu, 7 May 2009 22:48:47 +0000 (15:48 -0700)]
Measurement for async syscalls

Needs error checking on the userspace syscall path.

11 years agoAsync call tweaks
Barret Rhoden [Thu, 7 May 2009 21:06:38 +0000 (14:06 -0700)]
Async call tweaks

Can run a cleanup function for an entire async call.  Also manages POOL
memory better (frees and 0's).

11 years agocprintf_async works with strings greater than 256
Barret Rhoden [Thu, 7 May 2009 08:36:33 +0000 (01:36 -0700)]
cprintf_async works with strings greater than 256

Had to change all of the vprintf family of functions to pass a **buf
instead of just a *buf, so putch_async could change the buffer in use
when it submitted an async call.

Also turned off deputy in kern/printf.c.  Sorry Zach.

11 years agoCleanup functions for syscalls
Barret Rhoden [Thu, 7 May 2009 07:39:31 +0000 (00:39 -0700)]
Cleanup functions for syscalls

11 years agoCan wait on async library calls
Barret Rhoden [Thu, 7 May 2009 06:22:12 +0000 (23:22 -0700)]
Can wait on async library calls

Also uses Pools for the allocation of bookkeeping for the syscall and
async call returns.  Still can't free, and printfing more than 256
doesn't work right.

11 years agoAsync waiting right above the kernel
Barret Rhoden [Wed, 6 May 2009 22:06:30 +0000 (15:06 -0700)]
Async waiting right above the kernel

Can wait on a descriptor for an async syscall from any frontring.
Currently waits manually in cprintf_async right after making the calls.

11 years agoMeasurement infrastructure
Barret Rhoden [Wed, 6 May 2009 18:16:49 +0000 (11:16 -0700)]
Measurement infrastructure

TSC frequency is stored in the env_t for now.

11 years agoAdded pool implementation for statically sized pools
Kevin Klues [Wed, 6 May 2009 23:02:06 +0000 (16:02 -0700)]
Added pool implementation for statically sized pools

11 years agolapic_wait_to_send tests
Barret Rhoden [Tue, 21 Apr 2009 21:43:04 +0000 (14:43 -0700)]
lapic_wait_to_send tests

Initial work, just blasts IPIs, can adjust to not wait, etc.

11 years agoAsync syscall handling
Barret Rhoden [Wed, 6 May 2009 02:27:09 +0000 (19:27 -0700)]
Async syscall handling

Separate function that processes generic async syscalls.  The backring
is in the env_t.  Currently pushes responses back to userspace, though
userspace doesn't know how to get responses.  All syscalls are processed
synchronously once actually in the kernel.

11 years agouse tsc directly in userspace until user level timer facility is made
David Zhu [Tue, 5 May 2009 22:50:43 +0000 (15:50 -0700)]
use tsc directly in userspace until user level timer facility is made

11 years agolapic timer calibration and gettimer/getfreq
David Zhu [Tue, 5 May 2009 22:03:37 +0000 (15:03 -0700)]
lapic timer calibration and gettimer/getfreq

Implemented lapic timer calibration and provide abstraction of gettimer
and getfreq to be used in the future to choose between different timers.

11 years agoAdded the null syscall and a userapp that exploits it.
Kevin Klues [Tue, 5 May 2009 06:24:44 +0000 (23:24 -0700)]
Added the null syscall and a userapp that exploits it.

Still need to make an async version of the null syscall and change
init.c to run it correctly.  I made the changes locally, but didn't want
to push the changes in init.c to the global tree.

11 years agoXen Ring Buffers
Barret Rhoden [Sat, 2 May 2009 03:48:14 +0000 (20:48 -0700)]
Xen Ring Buffers

Adds Xen's ring buffers and uses them in a rudimentary manner to do the
cprintf_async syscalls.  The lib/syscall currently prints the string
twice.  Done just for testing, will be gone next commit.

11 years agoPoor-mans async printf support for userspace
Barret Rhoden [Fri, 1 May 2009 23:30:37 +0000 (16:30 -0700)]
Poor-mans async printf support for userspace

It's very rudimentary.  Not threadsafe, and it only allows 10
cprintf_asyncs.  Ever.  No tracking of when the async calls are done.
If putch uses more than one buffer, the overall count return is a lie
too.  The userspace side of syscall_async can only send two calls.

11 years agoChanged some handlers to use void*
Barret Rhoden [Fri, 1 May 2009 22:07:07 +0000 (15:07 -0700)]
Changed some handlers to use void*

Also uses the run_env handler to start two processes on different cores,
and shows how to receive their async syscalls.

11 years agoInterrupt handlers and smp_calls take a void*
Barret Rhoden [Mon, 27 Apr 2009 08:17:39 +0000 (01:17 -0700)]
Interrupt handlers and smp_calls take a void*

Allows the passing of a pointer to the receiver, set on a per-handler
basis.  Can now have several functions in flight that have different

11 years agosmp_call backend removed, other async tweaks
Barret Rhoden [Mon, 27 Apr 2009 06:47:37 +0000 (23:47 -0700)]
smp_call backend removed, other async tweaks

Merged the back and frontend to just one checklist, since they both
needed to be waited on.  Added some other checks to prevent trying to
grab a handler when none are available and will never become available
(like if they are all being waited on and the caller could be the
waiter).  Uses a global counter to track the number of outstanding
calls.  Also has support for commit_checklist to preemptively abort if
it knows it will take a while (locked or not clear).

11 years agosmp_call wait / backend work
Barret Rhoden [Mon, 27 Apr 2009 01:06:55 +0000 (18:06 -0700)]
smp_call wait / backend work

Fixes the problem mentioned in the previous commit, where you would
deadlock if you tried to use the same wrapper you were currently waiting
on.  There is still the possibility of deadlocking by holding too many
waits and then not being able to find a free handler, (get stuck in the
while loop).

Also, the backend is looking rather redundant with the front end.  Might
be time to get rid of the front end, and have the only toggling happen
on the backend of running the handler.  It'd mean we can't reuse the
vector until everyone is complete, not just everyone knows what function
to run.  But we can't reliably wait without that.  The other way would
be to have the backend list be on the caller's stack, so there's no
chance of clobbering.

11 years agosmp_call_function's wait is split out
Barret Rhoden [Mon, 27 Apr 2009 00:03:13 +0000 (17:03 -0700)]
smp_call_function's wait is split out

waiting on an smp_call can be done via a separate function afterwards,
so that you can do other things before waiting.

need to be very careful with this currently - you can easily deadlock
the system if you try to do an smp_call with a wait while having an
outstanding wait.  you could try to grab the same wrapper as the one you
are currently waiting on, and if the front end is clean, you'll spin
trying to commit to the backend checklist.  need to sort this.

11 years agoInvariant TSC check and SMP timeouts tweaked.
Barret Rhoden [Sat, 25 Apr 2009 06:22:41 +0000 (23:22 -0700)]
Invariant TSC check and SMP timeouts tweaked.

Had a case in KVM where core1 was lagging long enough to not even get to
increment the semaphore before everyone was done and the udelay was
done.  Adjusted up the timings more in accordance with some things
mentioned in the SDM.  We'll see if it works.

The invariant TSC is fairly new.  Supposedly it means it will always be
as good as wall-clock time.  That's probably true.

11 years agoRough asynchronous syscalls
Barret Rhoden [Sat, 25 Apr 2009 00:34:14 +0000 (17:34 -0700)]
Rough asynchronous syscalls

Creates an async mechanism to pass syscalls through the UDATA mapping.
Right now, it's just a struct Syscall right at the beginning of UDATA.
There's a cprintf_async userspace function that uses the sys_cputs_async
call (which is the only async call for now).  However, the userspace
printf functions aren't built to have multiple printfs in flight (async
or otherwise), so be careful.

11 years agoCan use per-process shared data page
Barret Rhoden [Fri, 24 Apr 2009 19:17:03 +0000 (12:17 -0700)]
Can use per-process shared data page

Basics to communicate from user -> kernel through shared memory, across
cores.  Just prints a string right now.

11 years agoAdded shared info/data pages and removed UENVS
Barret Rhoden [Wed, 22 Apr 2009 22:03:54 +0000 (15:03 -0700)]
Added shared info/data pages and removed UENVS

Changed the memory mappings and create per-process shared info (RO) and
shared data (RW) pages at specific locations in the address space.  Plus
assorted changes to pmap and env to handle the loss of UENVS and the new
mappings.  Also had to adjust userspace slightly to use the new labels.
Will need to sort the TODOs when we create actual structures to go in
each shared page.

11 years agofixing master branch compilation error and minor reorg
David Zhu [Sat, 25 Apr 2009 02:34:04 +0000 (19:34 -0700)]
fixing master branch compilation error and minor reorg

11 years agoupdated smpboot to use udelay
David Zhu [Sat, 25 Apr 2009 02:12:51 +0000 (19:12 -0700)]
updated smpboot to use udelay

also fixed printing of debug message in udelay, bochs specific stuff

11 years agoMinor reorginization and additional #defines / enums
Kevin Klues [Fri, 24 Apr 2009 02:20:00 +0000 (19:20 -0700)]
Minor reorginization and additional #defines / enums

11 years agoCompiles on 64 bit machines.
Barret Rhoden [Thu, 23 Apr 2009 23:35:18 +0000 (16:35 -0700)]
Compiles on 64 bit machines.

11 years agoScrollback buffer works with Shift held down
Barret Rhoden [Thu, 23 Apr 2009 00:17:05 +0000 (17:17 -0700)]
Scrollback buffer works with Shift held down

11 years agoAdded scrolling console
Kevin Klues [Wed, 22 Apr 2009 09:40:19 +0000 (02:40 -0700)]
Added scrolling console

Added the ability to scroll through the console.  Shift-UP (or Shift-PGUP) scroll up, Shift-DN (or Shift-PGDN)
shift down, and Shift-RT reset to the bottom.  Typing a new character also resets you back to the bottom.

Also had some random cleanups including automatic sizing of the checklist mask array at initialization time
instead of requiring a zeros.h file (which we hadn't even bothered making yet).

11 years agoMakefile supports local targets
Barret Rhoden [Wed, 22 Apr 2009 07:47:42 +0000 (00:47 -0700)]
Makefile supports local targets

Add your targets to Makelocal in the root directory.

11 years agosmp_call_function with checklists
Barret Rhoden [Wed, 22 Apr 2009 04:49:20 +0000 (21:49 -0700)]
smp_call_function with checklists

uses the table of vectors from 0xf0-f4 for general purpose remote
function calls.  mostly done.

11 years agoUpdate to cycle through multiple IPI vectors
Kevin Klues [Tue, 21 Apr 2009 12:39:14 +0000 (05:39 -0700)]
Update to cycle through multiple IPI vectors

11 years agomore smp_call_function with checklists
Barret Rhoden [Tue, 21 Apr 2009 03:14:26 +0000 (20:14 -0700)]
more smp_call_function with checklists

actual use of "wait" and initial testing.

11 years agoTransitioning smp_call_function to use checklists
Barret Rhoden [Tue, 21 Apr 2009 01:16:31 +0000 (18:16 -0700)]
Transitioning smp_call_function to use checklists

WIP, will probably mash this commit.

11 years ago timer works in bochs and on physical machine. need global definition for bochs...
David Zhu [Wed, 22 Apr 2009 01:59:06 +0000 (18:59 -0700)]
  timer works in bochs and on physical machine. need global definition for bochs specific udelay_pit

11 years ago Cleanup JOS references and add typedefs
David Zhu [Wed, 22 Apr 2009 01:22:30 +0000 (18:22 -0700)]
Cleanup JOS references and add typedefs

    Cleaned up all legacy references to JOS and turned them into ROSs.  Also typedefed all structs to be a
    *_t type.

11 years agoBarrier work
Barret Rhoden [Sat, 18 Apr 2009 00:58:47 +0000 (17:58 -0700)]
Barrier work

Changed barrier to use a counter instead of a mask.

11 years agoChecklists
Barret Rhoden [Fri, 17 Apr 2009 23:09:58 +0000 (16:09 -0700)]

Implemented and passes some tests.  Some more BIT macros and atomic ops.

11 years agoCan support up to 1GB of RAM
Barret Rhoden [Thu, 16 Apr 2009 02:01:30 +0000 (19:01 -0700)]
Can support up to 1GB of RAM

The pages struct array will map all of physical RAM, but the KERNBASE
mapping will only map as much as can be held in it's VA space (a little
less than a GB, due to the APIC mappings at the top).

11 years agoSmall commits to the .gitignore file
Kevin Klues [Thu, 16 Apr 2009 01:44:17 +0000 (18:44 -0700)]
Small commits to the .gitignore file

11 years agoAdded memory detection using multiboot_info
Kevin Klues [Wed, 15 Apr 2009 20:21:04 +0000 (13:21 -0700)]
Added memory detection using multiboot_info

Changed to using multiboot_info structure to extract the available RAM on the system. Also changed the ghetto
timeouts from smp.c to be contained in a #define in smp.h so that they can be customized to the specific
machine you are running on. Right now we just have values for the default architecture and the __BOCHS__
architecture. To define the architecture in use, simply add ARCH=__BOCHS__ or similar on the command line when
you compile

11 years agoAdded bitmask macros
Barret Rhoden [Wed, 15 Apr 2009 19:15:53 +0000 (12:15 -0700)]
Added bitmask macros

11 years agoAdmin / Makefile
Barret Rhoden [Tue, 14 Apr 2009 18:23:48 +0000 (11:23 -0700)]
Admin / Makefile

merged my makefile changes, so i don't have to keep hiding them every
time i commit.  also added .bochsrc to .gitignore.

11 years agoGlobal pages support.
Barret Rhoden [Tue, 14 Apr 2009 08:00:13 +0000 (01:00 -0700)]
Global pages support.

Used for all of the boot_mappings.  Someone should check to see if they
are getting applied.  More difficult would be to see how effective they
are (TLB hits on context switches for the kernel mappings), and if the
non-jumbo PDEs do anything with the PTE_G flag.

11 years agoSMP MTRRs
Barret Rhoden [Tue, 14 Apr 2009 07:32:44 +0000 (00:32 -0700)]

Sets up the MTRRs the same (and hopefully correctly) across all cores.
Fixes up a couple minor details in the SMP booting and LAPIC ExtINT

11 years agodisable_irqsave can be called first
Barret Rhoden [Mon, 13 Apr 2009 23:27:15 +0000 (16:27 -0700)]
disable_irqsave can be called first

enable and disable can be called with either first, with ints being the
same as they were at the beginning of the pair.  also allows for nesting
on the same state variable.  comes with a test and some macros for
printd and printk.

11 years agoBasic MTRRs
Barret Rhoden [Mon, 13 Apr 2009 21:30:13 +0000 (14:30 -0700)]
Basic MTRRs

Set up for Core0 to enable its MTRRs.  Will later do all cores at once
in SMP boot.

11 years agoMoved SMP Boot functions into kern/smp.{h,c}
Barret Rhoden [Thu, 9 Apr 2009 22:36:26 +0000 (15:36 -0700)]
Moved SMP Boot functions into kern/smp.{h,c}

11 years agoSMP function call helpers
Barret Rhoden [Thu, 9 Apr 2009 04:45:43 +0000 (21:45 -0700)]
SMP function call helpers

Creates helpers to call functions across all cores or a subset of cores,
mostly just registration and IPI sending.  Needs work, esp with knowing
when to proceed (esp when overwriting the IDT), and some wmb() love.

11 years agoSMP barrier is reusable
Barret Rhoden [Wed, 8 Apr 2009 22:58:02 +0000 (15:58 -0700)]
SMP barrier is reusable

can now be called multiple times (resets itself) after having been
initialized.  also renamed to barrier_all.

11 years agoFixed double page count incrementing in seg alloc
Barret Rhoden [Wed, 8 Apr 2009 20:25:27 +0000 (13:25 -0700)]
Fixed double page count incrementing in seg alloc

11 years agoprimitive barrier and testing helpers
Barret Rhoden [Wed, 8 Apr 2009 18:43:04 +0000 (11:43 -0700)]
primitive barrier and testing helpers

added a barrier, needs to be init'd.  moved the atomics to kern/, and
added some more testing infrastructure.

11 years agoBochs compatible SMP booting and enable_irqsave()
Barret Rhoden [Fri, 3 Apr 2009 23:58:19 +0000 (16:58 -0700)]
Bochs compatible SMP booting and enable_irqsave()

Bochs didn't like receiving a second SIPI when HLTed (or ever, I think).
This removes the second SIPI, which kvm and the corei7 don't need.  Also
adds some functionality to enable/disabling interrupts.

11 years agoSMP booting race and caching
Barret Rhoden [Fri, 3 Apr 2009 20:55:41 +0000 (13:55 -0700)]
SMP booting race and caching

Reworked some timing and locking in smp_boot / smp_entry to avoid some
race issues.  Read the comments.  Also fixed some cache-enabling issues.
Also, Bochs doesn't like the HLT in smp_entry.S.  Don't care for now.

11 years agoMoved some functions into kern/testing
Barret Rhoden [Fri, 27 Mar 2009 23:05:35 +0000 (16:05 -0700)]
Moved some functions into kern/testing

This could use some work - making them more useful, adding
new ones, and reincarnating old tests from elsewhere.

11 years agospin_lock_irqsave
Barret Rhoden [Fri, 27 Mar 2009 20:50:10 +0000 (13:50 -0700)]

11 years agoAdded mon_cpuinfo and removed an annoying warning
Barret Rhoden [Thu, 26 Mar 2009 21:24:49 +0000 (14:24 -0700)]
Added mon_cpuinfo and removed an annoying warning

11 years agoLAPIC logical ID support for IPIs
Barret Rhoden [Thu, 26 Mar 2009 06:12:49 +0000 (23:12 -0700)]
LAPIC logical ID support for IPIs

Also removed some (unnecessary) segmentation register reloading.  Left
commented out for now.  Also has a variety of IPI tests, left for
posterity in this commit.  Successfully runs on a 16 way KVM.  Booya.

11 years agoSMP booting (mostly) done
Barret Rhoden [Thu, 26 Mar 2009 00:44:36 +0000 (17:44 -0700)]
SMP booting (mostly) done

APs are loaded and capable of receiving IPIs on their own stacks.
Would like a better way to wait for all cpus having booted.  The timer
thing is decent, and will probably be the best way - once I take out
those time-intensive cprintfs.

11 years agoSpinlock work
Barret Rhoden [Wed, 25 Mar 2009 23:06:12 +0000 (16:06 -0700)]
Spinlock work

Fixed spin_lock, templated spin_lock_irqsave, and protect vcprintfs with
a lock (allows interleaving of output at the vcprintf granularity)

11 years agoSMP stacks and initial INT handling
Barret Rhoden [Wed, 25 Mar 2009 01:28:17 +0000 (18:28 -0700)]
SMP stacks and initial INT handling

Per-core stacks, pages of which include per-core GDT and Taskstates.
Currently using the same IDT for all cores, and the same
interrupt_handler table.  Also removed the old "sizeof(struct
Trapframe)" from the bootstack_top and smp variety.  Not sure why it was
there, and it works fine without it.

11 years agoSpinlock and SMP booting
Barret Rhoden [Tue, 24 Mar 2009 06:48:34 +0000 (23:48 -0700)]
Spinlock and SMP booting

Added spin_lock and some initial other atomic ops.  Used them to hack up
a way for core0 to wait a bit (timer), then wait for the other cores to
finish their smp_main()s.