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.

11 years agoMore PIC, PIT, and registration of ISRs
Barret Rhoden [Tue, 24 Mar 2009 02:31:42 +0000 (19:31 -0700)]
More PIC, PIT, and registration of ISRs

Additional PIC functionality (masking), ability to program the PIT, and
a mechanism to register an interrupt handler.  Changed the smp_boot to
use the new registration system.

11 years agoBochs compatible SMP
Barret Rhoden [Mon, 23 Mar 2009 08:50:25 +0000 (01:50 -0700)]
Bochs compatible SMP

PSE is set in assembly for APs, the LAPIC timer wait is cranked down,
and the PIC is masked.  KVM didn't need to mask the PIC - masking LINT0
was enough to block the ExtINT, but Bochs was still getting the PIT

11 years agoSMP Booting, APIC, and IRQs
Barret Rhoden [Mon, 23 Mar 2009 06:01:01 +0000 (23:01 -0700)]
SMP Booting, APIC, and IRQs

Lots of things in this, would have liked to split it up, but they are
rather woven together.  Primitive SMP booting, some basic APIC work,
basic IRQ work, and other x86 infrastructure.  Backtrace works too.

11 years agoLAPIC memory mapping
Barret Rhoden [Sun, 8 Mar 2009 21:45:17 +0000 (14:45 -0700)]
LAPIC memory mapping

Creates page table mapping for the APIC area (0xfee00000), which should
be removed when we have MTRR support, I think.

11 years agoTrap work
Barret Rhoden [Sun, 8 Mar 2009 21:37:04 +0000 (14:37 -0700)]
Trap work

Set all IDT entries to use interrupt gates for now, til IRQ and APIC
issues are sorted.  DF might need to be NOEC (is now, though the books
say it generates an EC).  Long range, DF might be a task gate (it is in

11 years agoMSR support and more CPUID info
Barret Rhoden [Sat, 7 Mar 2009 23:44:05 +0000 (15:44 -0800)]
MSR support and more CPUID info

11 years agoSome Deputization with IN_HANDLER
Zach Anderson [Wed, 4 Mar 2009 02:30:09 +0000 (18:30 -0800)]
Some Deputization with IN_HANDLER

Putting IN_HANDLER in some of the places it should go, and added empty
handler entry and exit functions.

11 years agoAdds support for DANGEROUS annotation
Zach Anderson [Wed, 4 Mar 2009 00:21:31 +0000 (16:21 -0800)]
Adds support for DANGEROUS annotation

Used to mark userspace pointers, which can't be dereferenced
until checked.  Also sorts some Makefrag and pgdir issues.

11 years agoDeputy turned on. YOU NEED TO UPDATE YOUR IVY
Zach Anderson [Fri, 27 Feb 2009 20:03:10 +0000 (12:03 -0800)]
Deputy turned on.  YOU NEED TO UPDATE YOUR IVY

Compiles with --deputy now, with select files ignored with #pramga
nodeputy.  Most files are currently ignored, but this will allow
incremental deputization of the project.

11 years agoRemoved parallel output
Barret Rhoden [Wed, 25 Feb 2009 02:22:43 +0000 (18:22 -0800)]
Removed parallel output

Each character put was really slow when trying to output it to the
parallel port on real hardware (presumably because nothing is listening,
or perhaps due to the ugly delay()ing).  The only thing that used it was
Bochs, so just go ahead and redirect your serial out to a terminal like
a real man/woman.

11 years agoFriendly with GCC > 4.1
Barret Rhoden [Wed, 25 Feb 2009 01:17:12 +0000 (17:17 -0800)]
Friendly with GCC > 4.1

11 years agoFencepost
Barret Rhoden [Mon, 23 Feb 2009 21:48:20 +0000 (13:48 -0800)]

11 years agoMemory protection and page fault handling
Barret Rhoden [Mon, 23 Feb 2009 09:13:13 +0000 (01:13 -0800)]
Memory protection and page fault handling

Moved and improved the user memory check function, new panics on kernel
page faults, and processes learn their Env* early on.  User processes
provide some testing.