akaros.git
3 years agoMove the "home" directory to /
Barret Rhoden [Wed, 6 Apr 2016 16:06:13 +0000 (12:06 -0400)]
Move the "home" directory to /

Everyone works out of here, and we don't really have users.  Be sure to
change any scripts that were putting things in /root, e.g. ssh keys.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCheck block extra_len in checkb()
Barret Rhoden [Tue, 5 Apr 2016 19:36:13 +0000 (15:36 -0400)]
Check block extra_len in checkb()

This helped catch a bug.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoReturn 0 for a timed-out select()
Barret Rhoden [Mon, 4 Apr 2016 21:02:53 +0000 (17:02 -0400)]
Return 0 for a timed-out select()

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow select() calls on FDs that are already ready
Barret Rhoden [Fri, 1 Apr 2016 19:46:31 +0000 (15:46 -0400)]
Allow select() calls on FDs that are already ready

The super-spurious select() required programs to drain an FD completely
(i.e. read until you get an EAGAIN), though it is legal to just keep
asking.  Unfortunately, we have an app that does that (dropbear), so we
need to check if an FD is readable manually.

The bug was:

- packet arrives
- tap fires
- user wakes up
- user reads some of it, but not all of it
- user selects

Then we never way up, since a tap will not fire again.

If the user checks the FD (as we do here) and it has no data, then we can
sleep safely, knowing that an edge-triggered event will occur (since we
know the underlying queue was empty at some point).

Hopefully we don't need to do this for write().

Note that this doesn't work for "normal" disk files.  We don't have a way
to tell if a file is readable.  That's basically kernel support for select.

Also note that this 'fix' could mask errors related to changing the FD set
between successive calls to select().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow a thread to have multiple select() sets
Barret Rhoden [Fri, 1 Apr 2016 19:42:57 +0000 (15:42 -0400)]
Allow a thread to have multiple select() sets

The bug was that a single thread selected in multiple locations in the
code.  One select() call would consume the events from another call.  Then
the latter call would sleep, since it's event was gone.

We might still have issues where the same {thread, callsite} combo consumes
events for other invocations from that same location.  This could happen if
a program changes its fdsets.  Once something is selected, the event can be
consumed anywhere.  Here's the scenario:

- select on FD 1
- select on FD 2 (can return for FD 1 or 2)
- assume it was FD 2, and don't check FD 1.  your fd_set from the select
  call will only show FD 2, since we just return whatever you passed us.
- select on FD 1 (the event was consumed, so we're going to wait forever).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a get_stack_pointer() helper to parlib
Barret Rhoden [Fri, 1 Apr 2016 19:42:03 +0000 (15:42 -0400)]
Add a get_stack_pointer() helper to parlib

I went with the same naming convention as set_stack_pointer.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Add the RQ and WQ len to ipchaninfo
Barret Rhoden [Fri, 1 Apr 2016 19:30:10 +0000 (15:30 -0400)]
net: Add the RQ and WQ len to ipchaninfo

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the special casing of #pipe in lseek
Barret Rhoden [Fri, 1 Apr 2016 19:26:18 +0000 (15:26 -0400)]
Remove the special casing of #pipe in lseek

If we want to disallow seeks on a per-device basis, then we need a device
op (probably use chan_ctl).  None of this crappy special casing.
Incidentally, we'd probably want to do it for #ip too, and who knows what
is running on the other end of a server (or across a mount point!).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Remove the old qnonblock()
Barret Rhoden [Thu, 31 Mar 2016 18:53:16 +0000 (14:53 -0400)]
qio: Remove the old qnonblock()

This was the old interface used to set both ends of a queue to
non-blocking.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd O_NONBLOCK support to pipes
Barret Rhoden [Thu, 31 Mar 2016 18:35:21 +0000 (14:35 -0400)]
Add O_NONBLOCK support to pipes

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Fixup socket shims use of O_NONBLOCK (XCC)
Barret Rhoden [Thu, 31 Mar 2016 17:09:19 +0000 (13:09 -0400)]
net: Fixup socket shims use of O_NONBLOCK (XCC)

Chans are now nonblocking, not conversations.  We find out about the desire
for SOCK_NONBLOCK from socket()'s type argument.  We save that in the
Rock's sopts, and we check it whenever we open a chan *for that socket*
(but not for new accepts).

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Fixup iplib based on the O_NONBLOCK rules
Barret Rhoden [Wed, 30 Mar 2016 22:42:19 +0000 (18:42 -0400)]
net: Fixup iplib based on the O_NONBLOCK rules

Previously, we could open the CTL with O_NONBLOCK, and that would set the
entire conversation non-blocking.  O_NONBLOCK is now a per-chan thing.  Now
there's no reason to open the CTLs non-blocking when making a conversation,
but we do need to open the DATAs O_NONBLOCK.  We still need to open the
LISTENs O_NONBLOCK (which returns a CTL fd...).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Use chan flag O_NONBLOCK for nonblocking
Barret Rhoden [Wed, 30 Mar 2016 22:37:42 +0000 (18:37 -0400)]
net: Use chan flag O_NONBLOCK for nonblocking

Instead of setting the entire conversation (and thus the queues underneath)
to nonblocking, we now use the chan flag.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Add a helper chan2conv()
Barret Rhoden [Wed, 30 Mar 2016 21:03:47 +0000 (17:03 -0400)]
net: Add a helper chan2conv()

Cleans up a few places.  There still are some places that walk the
inscrutable pointer chain from FS to CV, but whatever.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Provide helpers for O_NONBLOCK operations
Barret Rhoden [Wed, 30 Mar 2016 20:49:29 +0000 (16:49 -0400)]
qio: Provide helpers for O_NONBLOCK operations

We can now q{b,}{read,write}() in a non-blocking manner, such that each
operation is non-blocking, independently of the rest of the queue.

The old qnonblock style was setting the entire queue to be non-blocking.
This would be a big surprise to the distant end of the queue.  We didn't
notice it with #ip, since the other end of the queue was usually doing a
non-blocking op anyways (or was just buggy!).  We definitely noticed with
pipe, especially when busybox suddenly had its read of stdin throw EAGAIN.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Consolidate readers into __qbread()
Barret Rhoden [Wed, 30 Mar 2016 18:08:45 +0000 (14:08 -0400)]
qio: Consolidate readers into __qbread()

There are a bunch of different functions that read from a queue:
- qread()
- qbread()
- qget()
- qdiscard()

And I'll be adding more soon.

They all had slightly different semantics, but mostly did the same thing.
I consolidated them into one __qbread(), which returns a blocklist.  The
functions do whatever they want with the list.

To some extent, this will be a little slower than before.  Other than just
stuff like branching, qdiscard was able to just free as it went, instead of
transferring them to a new list (meaning it never needed the 'spare' block
for allocations).  Same goes for qread().

OTOH, qread was holding a spinlock and writing to user memory.  Not
anymore!  So that will save us from a source of complexity later.

We do have slightly different semantics now.  __qbread() will *attempt* to
get up to len, but might return early (with amt > 0) while there is more
data in the queue.  Some of the functions, like qdiscard(), can't handle
this.  I used a somewhat racy loop around __qbread() in that case.

There's now only one source of producer wakeup, where I preserved
Presotto's comment and change to the heuristic.  Who knows if that was
supposed to apply in other places, or if it was just added to the place
that popped up during profiling.  Now there's just one site.

A lot of QIO is an unclear mess.  Why does qbread return only one block?
(Note in #mnt that a dev.bread expects to get a blocklist back).  Why is a
blocklist different than a block in many places?   Good thing we have
blocklen() (length of a block list) and BLEN() (length of a block).   Why
are so many functions mucking with queues without locks?  (e.g. qaddlist())
Good times.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake freeb() and freeblist() return the old size
Barret Rhoden [Wed, 30 Mar 2016 03:08:58 +0000 (23:08 -0400)]
Make freeb() and freeblist() return the old size

A few functions like to know this.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMove SIZE_MAX into common.h
Barret Rhoden [Wed, 30 Mar 2016 02:56:31 +0000 (22:56 -0400)]
Move SIZE_MAX into common.h

Note that this is the *kernel's* common.h, not the kernel header
ros/common.h.

Also note that all C files in the kernel are built with common.h
included automatically.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoPass the buf to block_append_extra()
Barret Rhoden [Mon, 28 Mar 2016 19:34:08 +0000 (15:34 -0400)]
Pass the buf to block_append_extra()

Instead of assuming that they want us to allocate the block, we just take
any old buffer of kmalloc'd memory.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Remove qconsume()
Barret Rhoden [Mon, 28 Mar 2016 18:00:56 +0000 (14:00 -0400)]
qio: Remove qconsume()

It's nasty and no one uses it (in Akaros).  It looks like the uart code
from Plan 9 used it.  This is the same deal as qproduce(), I think.

Specifically, qconsume() consumes up to len from the queue, but only from
the first non-empty block.

If we ever need this, we can bring it back or reimplement it with qget() or
something.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove qnonblock from the profiler
Barret Rhoden [Thu, 31 Mar 2016 18:51:21 +0000 (14:51 -0400)]
Remove qnonblock from the profiler

This was never supposed to be in the code in the first place, since it does
nothing to have both it and qdropoverflow().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop calling qremove() outside qio.c
Barret Rhoden [Mon, 28 Mar 2016 16:45:38 +0000 (12:45 -0400)]
Stop calling qremove() outside qio.c

That function was meant to be called with the queue locked.  #mnt doesn't
lock it - nor does it or any other file have a mechanism to do so.  So it's
always a bad idea to call qremove.  It looks like #mnt wants qget().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Consolidate producer functions
Barret Rhoden [Fri, 25 Mar 2016 22:11:36 +0000 (18:11 -0400)]
qio: Consolidate producer functions

There are a bunch of qio functions for adding to a queue:
- qbwrite (append a single block)
- qibwrite (append a single block from IRQ ctx)
- qwrite (wrapper and calls qbwrite)
- qiwrite (mostly the same wrapper, calls qibwrite)
- qpass (append a string of blocks)
- qpassnolim (same, but with no limit)

Anyway, all of these functions do very similar things, but with a few
options.  Now all of those functions call the same underlying function
(with the same front-wrapper for qwrite/qiwrite), subject to a few flags.

There are some subtle changes.  qpass didn't call kick or bypass before.
Although I could control that with a QIO flag, it seems like if someone
wanted a bypass, then they should always get it.

Of course, kick and bypass seem rather special purpose, and might just need
overhauled at some point.

Part of the motivation for this, other than understandability and ease of
maintenance, was that I'll be adding more QIO functions to control whether
or not we block on an individual call (think chan->flag & O_NONBLOCK).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop setting a kick for TCP's RQ
Barret Rhoden [Fri, 25 Mar 2016 21:42:22 +0000 (17:42 -0400)]
Stop setting a kick for TCP's RQ

We never call it, since the RQ is written to by qpassnolim(), which doesn't
call kick internally.  I verified (out-of-tree) with a fake kick method and
netperf that the kick wasn't called, at least in normal operation.

It caused a problem when I tried to clean up qio.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: remove qproduce()
Barret Rhoden [Fri, 25 Mar 2016 20:18:54 +0000 (16:18 -0400)]
qio: remove qproduce()

If we ever need it, we can resurrect it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Clean up locking
Barret Rhoden [Fri, 25 Mar 2016 15:26:25 +0000 (11:26 -0400)]
qio: Clean up locking

Locking was a bit of a mess, including qlocks and spinlocks.

For the most part, the ordering was qlock->spinlock, but most everything
was protected by the spinlock and the qlock didn't do much.

There are a few issues:

The rlock/wlock qlocks seem mostly to serialize rendez sleepers.  Plan 9
needed this; we do not.  There might be a 'thundering herd' wakeup effect
if you have a large number of sleepers (wake up just to see the condition,
vs sleeping on the qlock that doesn't get released until at least one
thread woke up).  If that's an issue, we can fix it later; maybe in rendez
or at least closer to the rendez.  The qlocks might also be 'protecting'
the spinlock, but it don't see much value in that.

The mess with 'should_free' can be ripped out too - we just free the block
in a couple cases, and now we're explicit about it.  That was nasty.

qwait() was doing weird things with locks too.  It internally unlocks for
you.  Surprise!  Instead I'll just have it lock for you when it returns -
no mystery.

The rlock might have been protecting things related to bl2mem, where we
briefly let go of the spinlock.  The qlock might have been preserving some
invariant (who knows?!).  I decided to just hold the spinlock across
bl2mem.  I avoided doing that in the past since that function could PF.
But we're busted regardless of whether we had a qlock or a spinlock; either
would deadlock if the PF handler tries to use the device to resolve the
fault.

Plus we have a host of memcpys and memmoves that touch user memory in qio.
We need to fix PFs overall - this patch should have made things no worse in
that regard (and hopefully much clearer).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake all block allocations use the same func [2/2]
Barret Rhoden [Fri, 25 Mar 2016 16:45:25 +0000 (12:45 -0400)]
Make all block allocations use the same func [2/2]

Other than ns.h and allocb.c, this was done with
scripts/spatch/malloc.cocci.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake iallocb just an _allocb(x, 0) [1/2]
Barret Rhoden [Fri, 25 Mar 2016 16:01:15 +0000 (12:01 -0400)]
Make iallocb just an _allocb(x, 0) [1/2]

Part 1 of making block allocation controlled by a flag, like all other
memory allocation.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRename KMALLOC_* -> MEM_* [2/2]
Barret Rhoden [Fri, 25 Mar 2016 16:28:55 +0000 (12:28 -0400)]
Rename KMALLOC_* -> MEM_* [2/2]

The rename were done with this:

@@
@@
-KMALLOC_WAIT
+MEM_WAIT

@@
@@
-KMALLOC_ERROR
+MEM_ERROR

except for uses of the names in comments.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRework memory allocation flags [1/2]
Barret Rhoden [Fri, 25 Mar 2016 16:13:31 +0000 (12:13 -0400)]
Rework memory allocation flags [1/2]

We might need something for an atomic allocation.  We've just been writing
'0' all over the place, which is a little hard to keep track of.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the O_NONBLOCK fcntl() intercept (XCC)
Barret Rhoden [Fri, 25 Mar 2016 14:36:58 +0000 (10:36 -0400)]
Remove the O_NONBLOCK fcntl() intercept (XCC)

We need to change how nonblocking works, and make it a flag on the chan.
It's too much of a pain to have special casing for every device type -
let's just support fcntl and have O_NONBLOCK be one of its uses.

This will temporarily break non-blocking #ip conversations from glibc.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a chan_ctl devop; support fcntl on chans
Barret Rhoden [Thu, 31 Mar 2016 19:10:23 +0000 (15:10 -0400)]
Add a chan_ctl devop; support fcntl on chans

fcntl() works on chans.  A device can intercept the operation, do whatever
it needs to do, and optionally error out.  I imagine #devmnt will need to
send a new 9p message for this.

If there are no errors, the chan flags get updated (the CEXTERNAL_FLAGS).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix chan ref leak in fd_setfl()
Barret Rhoden [Thu, 31 Mar 2016 19:03:20 +0000 (15:03 -0400)]
Fix chan ref leak in fd_setfl()

We could have thrown an error and leaked a ref to the chan.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoIntercept vfprintf() instead of printf() (XCC)
Barret Rhoden [Thu, 24 Mar 2016 16:46:59 +0000 (12:46 -0400)]
Intercept vfprintf() instead of printf() (XCC)

This will protect vcore context from much more of the family of the printf
functions.  We still need akaros_printf(), due to the 'multiple libcs'
problem.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake akaros_vfprintf() take a stream (XCC)
Barret Rhoden [Thu, 24 Mar 2016 16:45:16 +0000 (12:45 -0400)]
Make akaros_vfprintf() take a stream (XCC)

We were implying stdout, but the caller could use something else.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProperly align vcore stacks on x86
Barret Rhoden [Thu, 24 Mar 2016 16:39:05 +0000 (12:39 -0400)]
Properly align vcore stacks on x86

Glibc _start expects a 16-byte aligned stack, since it is working in asm.
However, the vcore stacks were also getting a 16-byte aligned stack, but
they were C functions and needed to be odd-8-byte aligned.

This commit creates arch-dependent vcore entry functions.  x86's is in
assembly, where it can restore the odd-8-byte invariant.

Note that we can't have both vcore.S and vcore.c - both will be built as
vcore.o.  I renamed the asm ones with _asm.

Incidentally, this happened on a printf with floats/xmms in vcore context,
and was triggered by the "movaps xmm,rbp" due to the variadic function ABI.
It also shows that we weren't touching xmm's in vcore context, since we
would have GP faulted.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSend SIGCHLD to the parent when a process exits
Barret Rhoden [Thu, 24 Mar 2016 13:14:35 +0000 (09:14 -0400)]
Send SIGCHLD to the parent when a process exits

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove SYS_cgetc (XCC)
Barret Rhoden [Wed, 23 Mar 2016 22:10:27 +0000 (18:10 -0400)]
Remove SYS_cgetc (XCC)

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove SYS_cputs (XCC)
Barret Rhoden [Wed, 23 Mar 2016 22:06:53 +0000 (18:06 -0400)]
Remove SYS_cputs (XCC)

As Ron said, "Alas, SYS_cputs, we knew you well."  It was probably our
first syscall, but we no longer need it.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse write() in parlib/debug.c
Barret Rhoden [Wed, 23 Mar 2016 22:05:51 +0000 (18:05 -0400)]
Use write() in parlib/debug.c

This is the printf that gets called from vcore context.  We want those
prints to go to wherever stdout is, instead of always to the kernel
directly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse the POSIX isatty() (XCC)
Barret Rhoden [Wed, 23 Mar 2016 20:16:41 +0000 (16:16 -0400)]
Use the POSIX isatty() (XCC)

This is somewhat bullshit, since our tcgetattr() always returns whatever my
Linux terminal said back in 2009.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMap PTEs for MAP_SHARED | MAP_LOCKED files on fork
Barret Rhoden [Wed, 23 Mar 2016 19:23:05 +0000 (15:23 -0400)]
Map PTEs for MAP_SHARED | MAP_LOCKED files on fork

If you had a process that forked but did not exec, then the read-only parts
of the binary would not be in its address space.  Those parts would be in
the page cache, so long as the parent was still around (which had the VMR
MAP_LOCKED) (or if it left and we flushed the cache).

Then later, the child asks the kernel to perform a syscall on one of its
addresses in the read-only section, e.g. .rodata.  The kernel would then
page fault.

Right now, the kernel won't attempt to handle a PF *of its own* by talking
to the page cache.  Eventually we'll need to do this.  But it's also just
wrong for us to not have MAP_LOCKED VMRs present in a process's page table.

I <3 fork.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix minor leaks in mm.c
Barret Rhoden [Wed, 23 Mar 2016 19:21:08 +0000 (15:21 -0400)]
Fix minor leaks in mm.c

If we ever had an error, we'd bail out but forget to decref and free
memory.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the double-close() warning
Barret Rhoden [Tue, 22 Mar 2016 21:45:49 +0000 (17:45 -0400)]
Remove the double-close() warning

It's legal to attempt to close a bad FD.  We had a nasty bug that this
caught a long time ago, but now we have programs that do this all the time
(ssh).

Since I fixed the shutdown() problem, we no longer have any known-buggy
programs that are double-closing.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoBump the size of the ancillary state (XCC)
Michael Taufen [Thu, 31 Mar 2016 16:19:14 +0000 (09:19 -0700)]
Bump the size of the ancillary state (XCC)

Increases the size of extended_region by 8 bytes to accommodate
the PKRU

Reinstall your kernel headers and maybe rebuild apps.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[rebuild warning]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMoved timing parameters into proc_global_info (XCC)
GanShun [Tue, 29 Mar 2016 18:26:31 +0000 (11:26 -0700)]
Moved timing parameters into proc_global_info (XCC)

Moved tsc_freq, timing_overhead and bus freq into __proc_global_info.
PIT stuff is now in k/a/x/time.c as a static. timing_overhead has been
renamed to tsc_overhead.

Reinstall your kernel headers.

Signed-off-by: GanShun <ganshun@gmail.com>
[kernel headers warning, removed extraneous comment]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove unused variable from prep_syscalls().
Dan Cross [Wed, 30 Mar 2016 20:44:28 +0000 (16:44 -0400)]
Remove unused variable from prep_syscalls().

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a control file in #cons to support killing children.
Ronald G. Minnich [Fri, 25 Mar 2016 15:59:42 +0000 (08:59 -0700)]
Add a control file in #cons to support killing children.

This is needed for ssh support for ^C.
The ssh server, when it sees a ^C, opens and writes a command
to #cons/killkids.

Right now the command is ignored, but that might change.

We might at some point decide to implement /proc/self, and this can
move there. It's arguably a bit gross to have it in #cons.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[ slight touchups ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agopasswd: put in a one line passwd file for Unix programs
Ronald G. Minnich [Thu, 24 Mar 2016 21:19:25 +0000 (14:19 -0700)]
passwd: put in a one line passwd file for Unix programs

This is unfortunate but we'll never see the end of it otherwise.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoApic msr exit handling added with timer thread support
GanShun [Thu, 24 Mar 2016 17:54:05 +0000 (10:54 -0700)]
Apic msr exit handling added with timer thread support

Added emsr_apic in user/vmm/vmxmsr to write all apic msr writes to the
vapic page. Started the timer thread using the vector linux writes to the
timer msr. We ignore the initial count as long as its not 0 and we just
inject a timer interrupt at 100hz.

Signed-off-by: GanShun <ganshun@gmail.com>
[touched up function declaration formatting]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMoved Trap Injection macros to the correct location (XCC)
GanShun [Wed, 23 Mar 2016 16:59:36 +0000 (09:59 -0700)]
Moved Trap Injection macros to the correct location (XCC)

Reinstall your kernel headers.

Signed-off-by: GanShun <ganshun@gmail.com>
[kernel header warning]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCosmetic: Change tabs to spaces in glibc Versions file.
Dan Cross [Tue, 22 Mar 2016 21:20:42 +0000 (17:20 -0400)]
Cosmetic: Change tabs to spaces in glibc Versions file.

This is purely a cosmetic change: change tabs to spaces
in glibc-2.19-akaros/sysdeps/akaros/Versions for consistency.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCorrect multicast setup to make ipv6 work reliably.
Geoff Collyer [Thu, 17 Mar 2016 23:32:43 +0000 (16:32 -0700)]
Correct multicast setup to make ipv6 work reliably.

Signed-off-by: Geoff Collyer <geoff.collyer@gmail.com>
[checkpatch touchups]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUpgrade parlib fp state handling, use proc_global_info (XCC)
Michael Taufen [Fri, 11 Mar 2016 00:04:50 +0000 (16:04 -0800)]
Upgrade parlib fp state handling, use proc_global_info (XCC)

Rebuild kernel headers and all user apps!

This upgrades parlib so it also has the fp state upgrades
recently made to the Akaros kernel (xsave, xsaveopt, xrstor),
and also makes Akaros use proc_global_info for x86_default_xcr0

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[ touched up a checkpatch warning ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUser library changes to take a guest_thread instead of a vmctl.
GanShun [Tue, 22 Mar 2016 00:15:21 +0000 (17:15 -0700)]
User library changes to take a guest_thread instead of a vmctl.

Removed vmctls from user/. user libraries just use a guest_thread now.

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoModify cpu feat barrier for enabling CR4_OSXSAVE
Michael Taufen [Tue, 22 Mar 2016 16:17:46 +0000 (09:17 -0700)]
Modify cpu feat barrier for enabling CR4_OSXSAVE

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement sched_getcpu() (XCC)
Dan Cross [Tue, 22 Mar 2016 19:45:56 +0000 (15:45 -0400)]
Implement sched_getcpu() (XCC)

Added a 'sched_getcpu()' routine that returns the
current pcore ID, as an analog to the routine of
the same name in Linux. Rebuild your toolchain.

Signed-off-by: Dan Cross <crossd@gmail.com>
[changed the commit subject from Linux compat changes]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMinor changes to build C++ threads in gcc (XCC)
Dan Cross [Tue, 22 Mar 2016 16:32:47 +0000 (12:32 -0400)]
Minor changes to build C++ threads in gcc (XCC)

Added a constant and modified our Makefile to enable
C++ thread support when building GCC. Rebuild your
toolchain.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd debugging info to ipchaninfo()
Barret Rhoden [Tue, 22 Mar 2016 19:43:08 +0000 (15:43 -0400)]
Add debugging info to ipchaninfo()

Reports nonblock status and whether or not the conv is tapped.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement shutdown() (XCC)
Barret Rhoden [Tue, 22 Mar 2016 19:39:22 +0000 (15:39 -0400)]
Implement shutdown() (XCC)

We had been just closing the FD, which is clearly wrong (you may have been
getting warnings from the kernel about this).  Best case, you just get a
warning.  Worst case, you accidentally close another FD in a concurrent
program.

I don't know if the TCP code is right.  It sends a FIN.  Maybe it doesn't
send it the right way, or maybe we should do things for the other states
too.

It's better than it was before.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix a bunch of Rock warnings (XCC)
Barret Rhoden [Tue, 22 Mar 2016 15:53:38 +0000 (11:53 -0400)]
Fix a bunch of Rock warnings (XCC)

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse a fork callback in select()
Barret Rhoden [Tue, 22 Mar 2016 15:20:03 +0000 (11:20 -0400)]
Use a fork callback in select()

We need to flush our state in the child on a fork.  Otherwise we'll think
we are still tracking the FDs, even though the underlying taps weren't
inherited.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd callbacks for fork() (XCC)
Barret Rhoden [Tue, 22 Mar 2016 15:16:09 +0000 (11:16 -0400)]
Add callbacks for fork() (XCC)

If a process forks but does not exec, some user-level subsystems (e.g.
select) will need to run a callback in the child.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Fire read taps on actual edges
Barret Rhoden [Tue, 22 Mar 2016 14:02:05 +0000 (10:02 -0400)]
qio: Fire read taps on actual edges

We were only firing when the queue was Qstarved, which means that someone
had to attempt to drain the queue at some point.  Thus if the queue was
drained exactly, but no one waited, then the tap wouldn't fire.

Now we fire whenever the queue was empty, not when it thought it had a
someone who starved it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Fire writeable taps immediately
Barret Rhoden [Tue, 22 Mar 2016 14:01:08 +0000 (10:01 -0400)]
qio: Fire writeable taps immediately

We were only firing when the queue was drained below the flow control
limit.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd git helper scripts and update Doc/Contributing
Barret Rhoden [Wed, 16 Mar 2016 17:40:10 +0000 (13:40 -0400)]
Add git helper scripts and update Doc/Contributing

This updates the Contributing guidelines, providing instructions and
examples for how to submit code to the mailing list, e.g. send-email and
request-pull.

Of the scripts/git files, contributors will be most interested in
git-checkpatch and git-akaros-request-pull.  All of the git scripts will
work as git subcommands if you put them in your PATH.  e.g.

$ git checkpatch master..my_branch

or

$ git akaros-request-pull master my_repo my_branch

akaros-request-pull is just like the request-pull, but with an added
github URL for those who want to look at the patches on the world wide
web.

The other scripts, such as track-review, are mostly useful for code
reviewers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement write combining on x86
Kanoj Sarcar [Thu, 10 Mar 2016 19:28:26 +0000 (11:28 -0800)]
Implement write combining on x86

MLX uses WC to write data payload into HCA buffers. The performance boost
over UC/UC- is significant.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
[ removed pat_init() and used the new PTE_ flags ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd write-combining memory mapping mode (XCC)
Barret Rhoden [Fri, 11 Mar 2016 19:40:39 +0000 (14:40 -0500)]
Add write-combining memory mapping mode (XCC)

Use PTE_WRITECOMB for PTEs if you're manually building a mapping.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Initialize the PAT MSR
Barret Rhoden [Fri, 11 Mar 2016 19:33:14 +0000 (14:33 -0500)]
x86: Initialize the PAT MSR

This sets up PAT so we can have WB, WC, WT, and UC- memory types via the
__PTE flags.  The PCD and PWT bits don't necessarily disable caching or set
write-through anymore; they are indexes into the PAT table.  (This was
always happening btw, since anything we run on has PAT support).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop using PTE_PCD and PTE_PWT directly (XCC)
Barret Rhoden [Fri, 11 Mar 2016 19:21:22 +0000 (14:21 -0500)]
Stop using PTE_PCD and PTE_PWT directly (XCC)

If you want caching disabled, use PTE_NOCACHE.  I'll be changing the
specific PAT settings shortly so accessing those bits directly will cause
trouble.

Regarding the change to compat.h, there's no difference between PTE_NOCACHE
and just a raw PTE_PCD in Akaros as of right now (PCD == UC- and
PCD|PWT == UC, and the minus only matters if MTRRs set WC, which they
aren't at the moment).

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix implicit declaration in procinfo.h (XCC)
Barret Rhoden [Fri, 11 Mar 2016 15:06:59 +0000 (10:06 -0500)]
Fix implicit declaration in procinfo.h (XCC)

The user-specific part of procinfo has a helper function that makes a
syscall.  That was implying __ros_syscall_errno() existed.  Ideally, we
wouldn't do that, but doing otherwise causes include loops.

Alternatively, we could just move or remove the functions.  Considering
they are for debugging, just externing in the function seems fine.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove cpu_feats from kernel-features.h (XCC)
Barret Rhoden [Fri, 11 Mar 2016 14:55:21 +0000 (09:55 -0500)]
Remove cpu_feats from kernel-features.h (XCC)

It turns out that glibc doesn't need its own copy of the cpu_feats, and it
can just include parlib's.  It may be that some code in glibc won't be
able to include parlib files.  If that's the case, and those files need
cpu_feats, then we can revisit this.

This popped up as a problem when a file in glibc included both
kernel-features. and parlib/cpu_feat.h.

Rebuild glibc if you want.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemoving extra run_vmthread calls.
GanShun [Thu, 10 Mar 2016 21:39:15 +0000 (13:39 -0800)]
Removing extra run_vmthread calls.

These calls should only be made at the bottom of the while loop, otherwise
we run the risk of missing a vmexit.

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoReturn real vendor/part id in query_device
Kanoj Sarcar [Thu, 10 Mar 2016 19:24:57 +0000 (11:24 -0800)]
Return real vendor/part id in query_device

ofed_perftest tool cares about vendor/part id.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up logic in MSR read/write functions.
Dan Cross [Tue, 8 Mar 2016 19:48:59 +0000 (14:48 -0500)]
Clean up logic in MSR read/write functions.

These code paths could be cleaned up and a level of indentation removed.
Also, remove the use of atomic types as they are unneeded in this case.

Signed-off-by: Dan Cross <crossd@gmail.com>
[minor git-fu]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded comment to note that fninit clears FOP
Michael Taufen [Sat, 5 Mar 2016 00:27:20 +0000 (16:27 -0800)]
Added comment to note that fninit clears FOP

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFP save/restore security patch for AMD processors
Michael Taufen [Sat, 5 Mar 2016 00:25:44 +0000 (16:25 -0800)]
FP save/restore security patch for AMD processors

AMD processors do not save/restore the FOP/FIP/FDP values from/to the
x87 FPU unless an unmasked FPU exception is pending. This can result in
a state leak between processes during a context switch, and is a
potential security hole.

See CVE-2006-1056 and CVE-2013-2076 on cve.mitre.org.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoExtended state AMD backwards compatibility updates (XCC)
Michael Taufen [Thu, 3 Mar 2016 21:32:05 +0000 (13:32 -0800)]
Extended state AMD backwards compatibility updates (XCC)

Rebuild your universe (kernel headers and user apps)!

These updates allow Akaros to defer to FXSAVE instructions in the event
that the processor does not support the XSAVE instructions. This is
necessary for Akaros to run on older AMD processors (pre bulldozer).

Akaros will still refuse to boot if you do not have support for FXSAVE.

These updates also include additional CPU feature detection,
particularly x86 vendor detection and support for the XSAVE instruction.

Finally, these updates allow the use of XSAVE in the absence of
XSAVEOPT, because it was an easy patch and we don't have to be that
mean.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded vmrunkernel option for extending the kernel command line passed to the guest
Michael Taufen [Sat, 27 Feb 2016 00:03:11 +0000 (16:03 -0800)]
Added vmrunkernel option for extending the kernel command line passed to the guest

vmrunkernel now targets the launcher program in our linux fork's initramfs
instead of init (see rminnich/linux and mtaufen/ak-vm-tests)

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up IPv6 sources.
Dan Cross [Wed, 9 Mar 2016 16:30:10 +0000 (11:30 -0500)]
Clean up IPv6 sources.

I'm diving into IPv6 code to get it working. These are trivial
cleanups that I don't want to obscure potential future changes
that would be more substantive.

Remove redundant or unused headers, whitespace cleanups, etc.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoARRAY_SIZE is the standard in the kernel.
Dan Cross [Tue, 8 Mar 2016 20:38:15 +0000 (15:38 -0500)]
ARRAY_SIZE is the standard in the kernel.

Trivial change to follow the convention used elsehwere in the
kernel.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up profiler configure and usage functions.
Dan Cross [Tue, 8 Mar 2016 16:54:42 +0000 (11:54 -0500)]
Clean up profiler configure and usage functions.

An incidental cleanup that became evident from the last cleanup;
the 'profiler_configure' function was unnecessarily hard to
follow due to lack of an early return.

Also, there was this odd function to return an array of strings
that could be used to construct an error message, but that were
used nowhere else; this was an encapsulation failure.  Change
that to just construct the error message and call it.

Arguably, the configure function should just call 'error()'. Oh
well.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up profiler variables and formatting.
Dan Cross [Tue, 8 Mar 2016 16:39:46 +0000 (11:39 -0500)]
Clean up profiler variables and formatting.

Remove unused variables, move loop indices to their loop,
use void* instead of char* in several places, clean up
declaration formatting.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix formatting: leading spaces to tabs, and fix continued-line alignment.
Dan Cross [Tue, 8 Mar 2016 15:37:27 +0000 (10:37 -0500)]
Fix formatting: leading spaces to tabs, and fix continued-line alignment.

Indent using tabs, not spaces.

In the event that a line must be broken due to length, the coding
standard says to break it so that we use tabs to advance the
continued line to the level of indentation of the broken line,
and then spaces to align to the opening parenthesis.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd in more uverbs backward compatilibity
Kanoj Sarcar [Tue, 8 Mar 2016 00:33:32 +0000 (16:33 -0800)]
Add in more uverbs backward compatilibity

Add in support for older style extended query device.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd rdmsr and wrmsr utilities
Barret Rhoden [Mon, 7 Mar 2016 19:07:17 +0000 (14:07 -0500)]
Add rdmsr and wrmsr utilities

Note that wrmsr writes the same MSR value to *all* cores.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a helper for querying the number of cores
Barret Rhoden [Mon, 7 Mar 2016 19:04:04 +0000 (14:04 -0500)]
Add a helper for querying the number of cores

The info is exposed via #vars.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove MAX_VCORES
Barret Rhoden [Mon, 7 Mar 2016 19:23:11 +0000 (14:23 -0500)]
Remove MAX_VCORES

This was limiting us to 64 vcores.  Instead of cranking the number up, I
opted to just remove the #define completely.  We should be able to figure
these things out dynamically.

Right now MAX_NUM_CORES is 256 for x86.  That was due to the old xAPIC.
One of these days we'll actually want to run on a large-scale SMP machine
and will want to increase that.  And then we'll also start worrying about
the size of things that grow O(MAX_NUM_CORES) for every process, e.g.
procdata.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove MCS dissemination barrier
Barret Rhoden [Mon, 7 Mar 2016 19:20:12 +0000 (14:20 -0500)]
Remove MCS dissemination barrier

It's a cool thing, but it has a few problems.
- It wants to know statically how many vcores there are (max, at least).
- It doesn't pad its dissem structure properly (it adds 64 bytes extra, not
  of padding, but just an array).
- It doesn't handle preemption.

All of these can be fixed, if we actually want the barriers.  In that case,
we can bring this code back and fix up the above three things.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Fix devarch's MSR error handling
Barret Rhoden [Mon, 7 Mar 2016 18:58:59 +0000 (13:58 -0500)]
x86: Fix devarch's MSR error handling

In some cases, we weren't even setting errno, just returning -1.  Then on
error, we'd get crap from perror() like:

pread: Success

Now get meaningful errstrs and at least have errno set.

E.g.

(On a machine without IA32_PERF_CTL)
/ $ rdmsr 0x199
pread: Bad address, read_msr() faulted on MSR 0x199
/ $ wrmsr 0x198 88888
pwrite: Operation not permitted, MSR 0x198 not in write whitelist

Most of the other errors would be triggered by a rdmsr or wrmsr bugging
out.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Properly initialize MSR whitelists
Barret Rhoden [Mon, 7 Mar 2016 18:56:37 +0000 (13:56 -0500)]
x86: Properly initialize MSR whitelists

The address ranges need to be initialized so that they are sorted.
Otherwise, whoever adds entries needs to know the actual value of the MSRs
and maintain their ordering manually.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Use FSGSBASE for TLS changes (XCC)
Barret Rhoden [Mon, 29 Feb 2016 23:34:45 +0000 (18:34 -0500)]
x86: Use FSGSBASE for TLS changes (XCC)

When the CPU feature is available, userspace and the kernel will use the
instructions (e.g. wrfsbase) to change TLS.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: use setters/getters for MSR_{FS,GS}_BASE
Barret Rhoden [Mon, 29 Feb 2016 23:24:40 +0000 (18:24 -0500)]
x86: use setters/getters for MSR_{FS,GS}_BASE

We need to be a little careful in the kernel with using these before cr4 is
set.  We'll eventually set cr4 to enable this usage in arch_pcpu_init.  For
the most part, any MSR accesses of this sort will happen after smp_boot,
which is fine.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Detect XSAVEOPT
Barret Rhoden [Mon, 29 Feb 2016 20:49:24 +0000 (15:49 -0500)]
x86: Detect XSAVEOPT

This is an  examples of how the kernel can set and query CPU features.  For
the most part, we should do all of the cpu_set_feat() very early during
boot in cpuinfo.

XSAVEOPT implies XSAVE, so we have just CPU_FEAT_X86_XSAVEOPT.

With these changes, both the user and the kernel can check at runtime for
XSAVEOPT and adapt accordingly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd CPU feature detection (XCC)
Barret Rhoden [Mon, 29 Feb 2016 20:45:13 +0000 (15:45 -0500)]
Add CPU feature detection (XCC)

Userspace, Glibc, and the kernel can now query whether the CPU has certain
features with

bool cpu_has_feat(int feature);

Some CPU features are architecture independent, such as the support for
virtual machines.  Most others will be architecture dependent.  I added a
few feature bits as an example, though they are not used yet.

To use within the kernel:

#include <cpu_feat.h>

To use within glibc:

#include <kernel-features.h>

To use in generic userspace (e.g. user/*, tests/*, etc):

#include <parlib/cpu_feat.h>

Reinstall your kernel headers to use the features.  Rebuild glibc to make
sure I didn't mess anything up.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd proc_global_info (XCC)
Barret Rhoden [Mon, 29 Feb 2016 18:38:35 +0000 (13:38 -0500)]
Add proc_global_info (XCC)

This is a read-only, shared-memory region mapped into every process's
address space.

Rebuild the world.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix mxcsr boot time init
Michael Taufen [Mon, 29 Feb 2016 16:57:53 +0000 (08:57 -0800)]
Fix mxcsr boot time init

The mxcsr register should be initialized to its power on default of 0x1f80.
This masks all SIMD floating point exceptions and clears all SIMD
floating-point exception flags, sets rounding control to round-nearest
disables flush-to-zero mode, and disables denormals-are-zero mode.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[ removed a couple extra newlines ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVirtualization changes to handle X2APIC mode.
GanShun [Thu, 17 Dec 2015 22:43:30 +0000 (14:43 -0800)]
Virtualization changes to handle X2APIC mode.

These are changes to the vmm to allow it to handle the new MSR based
accesses. This includes allowing the direct msr access in vmx.c,
otherwise vmexiting will occur.

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoEnabling X2APIC
GanShun [Thu, 17 Dec 2015 01:36:39 +0000 (17:36 -0800)]
Enabling X2APIC

Changing all offsets from the old XAPIC mode to the newer X2APIC mode and
removing lapic_wait_to_send. All interaction with the X2APIC is done with
apicrput, apicrget or apicsendipi. Removed memory allocation in pmap64.c
and value check in check_sym_val

Signed-off-by: GanShun <ganshun@gmail.com>
[ removed some debugging comments, fixed pb_ktest ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemoved lapic_set_id and lapic_set_logid functions
GanShun [Wed, 16 Dec 2015 20:21:09 +0000 (12:21 -0800)]
Removed lapic_set_id and lapic_set_logid functions

These functions are not used and are no longer allowed once we swap to the
X2APIC. Removing them in preparation for activating the X2APIC

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>