akaros.git
3 years agoEnable build info rebuild upon HEAD commit ID change
Davide Libenzi [Mon, 21 Dec 2015 19:24:36 +0000 (11:24 -0800)]
Enable build info rebuild upon HEAD commit ID change

Enable build info rebuild upon HEAD commit ID change.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd QEMU port forwarding options for UDP as well as TCP
Edward Hyunkoo Jee [Thu, 11 Feb 2016 01:26:13 +0000 (17:26 -0800)]
Add QEMU port forwarding options for UDP as well as TCP

Signed-off-by: Edward Hyunkoo Jee <edjee@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove #nix
Barret Rhoden [Wed, 10 Feb 2016 23:22:44 +0000 (18:22 -0500)]
Remove #nix

That was an old experiment that we haven't touched in over a year and will
probably never use again.  If we do, we can resurrect it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Fix missed posted IRQs
Barret Rhoden [Wed, 10 Feb 2016 19:22:52 +0000 (14:22 -0500)]
VMM: Fix missed posted IRQs

There's a couple parts to it:

- vmrunkernel was not posting the IRQ properly; it wasn't setting the
  outstanding notification bit.

- We need to self_ipi when that bit is set.  We had previously lost a race
  when poking the guest pcore (IPI was sent, but not received while in a
VM).  We just resend the IPI.

For ease of access, I now store the posted_irq_desc in the GPC.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add a syscall to poke a guest pcore (XCC)
Barret Rhoden [Mon, 8 Feb 2016 17:29:27 +0000 (12:29 -0500)]
VMM: Add a syscall to poke a guest pcore (XCC)

Posted IRQs in VMX are a lot like poking the guest pcore, so we'll just use
a syscall for it.

There's a bit of nastiness with error handling.  So far, it's a real pain
to find out if a posted IRQ landed on the VM and handling if it didn't.
(When the POKE IRQ lands and the core wasn't a VM, how do we know for
certain which VM we were supposed to interrupt, without doing something
painful?).

The general Akaros philosophy here is to post a bit in memory and poke
spuriously.  When it comes to notifying vcores, we set notif_pending, send
a (possibly spurious) __notify, and if we missed it, we'll see the
notif_pending the next time we __startcore.  Hopefully we can do something
similar with posted IRQs.

This also cleans up all of the vmctl hacks, none of which are needed
anymore.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRename SYS_setup_vmm -> SYS_vmm_setup (XCC)
Barret Rhoden [Fri, 5 Feb 2016 21:39:26 +0000 (16:39 -0500)]
Rename SYS_setup_vmm -> SYS_vmm_setup (XCC)

This will make having multiple VMM syscalls slightly cleaner.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Use the I_POKE_CORE IRQ for posted IRQs
Barret Rhoden [Fri, 5 Feb 2016 19:19:48 +0000 (14:19 -0500)]
VMM: Use the I_POKE_CORE IRQ for posted IRQs

Posting IRQs is a lot like poking a core, especially when you try and think
about it in an architecture independent manner.  I_POKE_CORE is normally a
way to make sure a core isn't halted.  For VMs, it's now also a way to poke
the VMX hardware to inject an IRQ if necessary.

Note that if we want to post an IRQ and send an I_POKE_CORE, but the VM
exits before the IRQ gets there, we just run the regular POKE_ handler,
which does nothing.

This also makes our life a little easier, in that handle_vmexit_ext_irq()
doesn't need to think about getting an I_POKE.  Poke's aren't full-up IRQs
(requiring a registered handler) regardless of whether they are sent to a
core running a VM or a 'regular' core.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Remove unused tests
Barret Rhoden [Fri, 5 Feb 2016 21:38:54 +0000 (16:38 -0500)]
VMM: Remove unused tests

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agomlx4: Enable QP destruction
Kanoj Sarcar' via Akaros [Wed, 10 Feb 2016 23:18:17 +0000 (15:18 -0800)]
mlx4: Enable QP destruction

QP destruction panics because radix_tree_delete() is panic-stubbed. Implement
a version using linked lists that allows deletion.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
[ tagged commit with mlx4: ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow CQ destruction in core mlx4/ logic.
Kanoj Sarcar' via Akaros [Wed, 10 Feb 2016 23:10:21 +0000 (15:10 -0800)]
Allow CQ destruction in core mlx4/ logic.

Enable CQ destruction.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoACPI changes for DMAR and new directory hierarchy.
Dan Cross [Fri, 5 Feb 2016 20:36:13 +0000 (15:36 -0500)]
ACPI changes for DMAR and new directory hierarchy.

Add the DMAR parser, and rationalize the ACPI directory
hierarchy to make it traversable from the shell. There
is additional work to do here on the latter, but that is
not critical path and this gets Gan the DMAR code he
needs for virtualization.

Signed-off-by: Dan Cross <crossd@gmail.com>
[ Fixed 16 -> KMALLOC_ALIGNMENT ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSet up root home for ssh
Ronald G. Minnich [Tue, 9 Feb 2016 20:59:25 +0000 (12:59 -0800)]
Set up root home for ssh

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoBind #random to /dev during ifconfig
Barret Rhoden [Fri, 5 Feb 2016 15:29:34 +0000 (10:29 -0500)]
Bind #random to /dev during ifconfig

Most programs expect to find random/urandom there.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse the new RNG for the networking stack
Barret Rhoden [Thu, 4 Feb 2016 23:35:41 +0000 (18:35 -0500)]
Use the new RNG for the networking stack

And remove the old version.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse random_read() for small urandom_read() calls
Barret Rhoden [Thu, 4 Feb 2016 23:33:17 +0000 (18:33 -0500)]
Use random_read() for small urandom_read() calls

urandom_read() starts with a random 8 byte seed.  If we need less than
that, we can (probably) just go with those bytes, as if we called
random_read() directly.

This also exposes random_read() and urandom_read() to external callers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove major stack consumers from procread()
Barret Rhoden [Thu, 4 Feb 2016 22:36:57 +0000 (17:36 -0500)]
Remove major stack consumers from procread()

procread() is a disaster.  This makes it less of a disaster.  We were
running off the end of the kernel stack when running with 4K stacks, due to
the 1K or so procread needed.  We're already deep in 9ns, and that was
enough to clobber memory.

I also removed all of the functionality that was #if 0'd out.  If we ever
need it, we can recreate it or get it from Plan 9 / Harvey.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix strace flow control and data extraction issues
Barret Rhoden [Thu, 4 Feb 2016 18:34:11 +0000 (13:34 -0500)]
Fix strace flow control and data extraction issues

There were a few issues.

- Using qwrite() was causing us to block at a bad time.  Using qiwrite()
  won't block, but it also won't do any flow control.  Instead, we do our
own flow control.  Note that we only check on the trace before the syscall.
If we have a start entry, we should have an exit entry, regardless of the
queue size.

- When we procread(), we were grabbing a reference on the proc.  However,
  if the process already exited, then we'd fail.  This prevented us from
draining the queue after the hangup.

- We drop traces.  Now we report the numbers.  If your console is slow, try
  redirecting to a file (e.g. strace foo 2> trace_file).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoChange qfull() to check limits
Barret Rhoden [Thu, 4 Feb 2016 17:35:23 +0000 (12:35 -0500)]
Change qfull() to check limits

Instead of checking Qflow flags, we just check the len vs the limit.  This
way, we can use qfull() when we're filling a queue with qiwrite/qibwrite
(which don't bother setting Qflow).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix page faults in strace
Barret Rhoden [Thu, 4 Feb 2016 03:00:24 +0000 (22:00 -0500)]
Fix page faults in strace

There are a couple issues, one of which we had.  For one, if the tracer
turned on halfway through a syscall, then kthread->strace might have
been garbage.  Probably not, but better safe than sorry.

The other issue is that the syscall struct could be gone by the time the
syscall ends and we finish the trace.  This could happen with
sys_exec().  We clear kthread->sysc, since the memory it points to was
already freed during the exec.

sctrace() will get cleaned up a little once we merge it with the
original tracer.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix warnings due to the declaration of serialize_*
Barret Rhoden [Thu, 4 Feb 2016 02:46:52 +0000 (21:46 -0500)]
Fix warnings due to the declaration of serialize_*

We missed these in commit 1fe2ed47726f ("Fix parameter types for
sys_proc_create() (XCC)").

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a random device; remove old genrandom junk; remove random from #cons
Ronald G. Minnich [Thu, 4 Feb 2016 03:09:02 +0000 (19:09 -0800)]
Add a random device; remove old genrandom junk; remove random from #cons

Compiles just fine.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoGet the basic random number generator functions to compile
Ronald G. Minnich [Thu, 4 Feb 2016 02:48:37 +0000 (18:48 -0800)]
Get the basic random number generator functions to compile

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFormat with .clang-format, included herein for reference
Ronald G. Minnich [Thu, 4 Feb 2016 02:22:18 +0000 (18:22 -0800)]
Format with .clang-format, included herein for reference

BasedOnStyle: LLVM
IndentWidth: 4
TabWidth: 4
UseTab: Always
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
AlignAfterOpenBracket: true

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImport new random number generator files from harvey
Ronald G. Minnich [Thu, 4 Feb 2016 01:52:35 +0000 (17:52 -0800)]
Import new random number generator files from harvey

This is the unchanged version; they will not compile at all
and need formatting.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a .clang-format
Ronald G. Minnich [Thu, 4 Feb 2016 01:53:52 +0000 (17:53 -0800)]
Add a .clang-format

This essentially follows the linux format save for tab indent of 4.

I've used this to format big blocks of code and it removes almost all
warnings from checkpatch, and the only ones left were
known to be bogus.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoNew and easy strace framework.
Ronald G. Minnich [Mon, 25 Jan 2016 22:26:22 +0000 (14:26 -0800)]
New and easy strace framework.

echo straceon > /proc/pid/strace
cat /proc/pid/strace

echo straceme if you don't want inheritance.
echo straceoff > /proc/pid/strace to stop it.

That's it. strace acts like a file.

and you'll see syscall info (enter and exit) for the process.

So strace is now spelled cat, dd, grep, or, well,
anything that reads files.

Inheritance is working.

But this is a very efficient way to trace processes, even better than
the tracer I wrote for Plan 9.
A single read from strace can read many system call records.

This now dumps read, write, and open information.

Included is a sample strace program which works. You can even
strace a shell now and watch the children.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[ various fixups, side by side with Ron! ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix parameter types for sys_proc_create() (XCC)
Barret Rhoden [Wed, 3 Feb 2016 23:29:33 +0000 (18:29 -0500)]
Fix parameter types for sys_proc_create() (XCC)

There were too many consts in there.  The new ones are exactly from
execv()'s parameters.

Technically, you should rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoReplace old ether82563.c with new driver.
Dan Cross [Mon, 25 Jan 2016 23:44:14 +0000 (18:44 -0500)]
Replace old ether82563.c with new driver.

Replace the old ether82563.c driver with the new driver
taken from Plan 9, incorporating Geoff Collyer's recent work
on the i218.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoLatest ether82563.c: integrate into Akaros.
Dan Cross [Mon, 25 Jan 2016 19:46:25 +0000 (14:46 -0500)]
Latest ether82563.c: integrate into Akaros.

Get the latest ether82563 driver building and running on Akaros;
integrate Akaros-specific changes into the driver. Document further
work.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agolindent on ether82563.c
Dan Cross [Fri, 22 Jan 2016 22:12:11 +0000 (17:12 -0500)]
lindent on ether82563.c

Run 'lindent' on ether82563.c.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agospatch plan9-ether82563.c
Dan Cross [Fri, 22 Jan 2016 22:11:31 +0000 (17:11 -0500)]
spatch plan9-ether82563.c

Run 'spatch' on ether82563.c from Plan 9.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImport latest ether82563.c from Plan 9
Dan Cross [Fri, 22 Jan 2016 22:05:59 +0000 (17:05 -0500)]
Import latest ether82563.c from Plan 9

Bring in the latest copy of the Intel ether82563 driver
from Plan 9. This is the unmodified driver, save for
ensuring the correct copyright statement is at the top
of the file.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Rename vmx_vcpu -> guest_pcore (XCC)
Barret Rhoden [Tue, 2 Feb 2016 17:40:09 +0000 (12:40 -0500)]
VMM: Rename vmx_vcpu -> guest_pcore (XCC)

"Virtual CPU" is a little too close to "Virtual Core", which is something
completely different.  "Guest pcore" seems a little clearer, given Akaros's
current naming conventions.  Let me know if you have a better name.

This also moves the vcpu / gpc from the kernel header, since userspace
doesn't need to know about it.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Clean up VMX setup
Barret Rhoden [Tue, 2 Feb 2016 17:25:02 +0000 (12:25 -0500)]
VMM: Clean up VMX setup

The pcpui->vmxarea was only used to pass the vmx buffer from setup() to
enable().

We can just merge those two functions and put their guts into
intel_vmm_pcpu_init().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Remove unused code (XCC)
Barret Rhoden [Tue, 2 Feb 2016 17:20:57 +0000 (12:20 -0500)]
VMM: Remove unused code (XCC)

This removes a lot of the KVM "bag on the side".

For whatever reason, struct vmx_vcpu is in a kernel header, so reinstall
your headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Use VM contexts [2/2]
Barret Rhoden [Tue, 2 Feb 2016 17:02:24 +0000 (12:02 -0500)]
VMM: Use VM contexts [2/2]

The bulk of this commit changes vmrunkernel to use VM contexts, but without
changing the overall structure of the program.  We now use two uthreads:
one for the VM and one for the controller (i.e. int main()).  They pass
control back and forth with a mutex (the ball).

The other changes are to actually use the vmexit_handler in the kernel
(HOST_RIP) and to just assume we are notifying GPC 0 (which is what we've
been doing).  IPI injection needs a little work.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add kernel support for VM contexts [1/2]
Barret Rhoden [Tue, 2 Feb 2016 16:58:24 +0000 (11:58 -0500)]
VMM: Add kernel support for VM contexts [1/2]

The kernel now knows how to pop VM contexts and handle VM exits.

As of this commit, we're still using the old KVM loop.  The HOST_RIP on
resume is still set to use the old KVM loop, IPI injection still uses the
vmctl, and userspace does not ask it to use contexts.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Factor out irq_dispatch() from handle_irq()
Barret Rhoden [Tue, 2 Feb 2016 16:54:59 +0000 (11:54 -0500)]
x86: Factor out irq_dispatch() from handle_irq()

I'll need to call irq_dispatch() when VMs exit due to external interrupts.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add custom exit reasons (XCC)
Barret Rhoden [Tue, 2 Feb 2016 15:38:20 +0000 (10:38 -0500)]
VMM: Add custom exit reasons (XCC)

We'll need these types for when the kernel fails to pop a VM context.  In
that case, we'll reflect the context back to the 2LS, and we'll need exit
reasons to explain what went wrong.

I also cleaned up the #defines a little.  We had multiple copies of the
exit reasons throughout the codebase.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop zeroing current_ctx before popping a TF
Barret Rhoden [Mon, 1 Feb 2016 22:50:13 +0000 (17:50 -0500)]
Stop zeroing current_ctx before popping a TF

I'll need to use current_ctx when popping a VM_TF fails.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Clean up per-cpu VMCS state
Barret Rhoden [Mon, 1 Feb 2016 21:53:59 +0000 (16:53 -0500)]
VMM: Clean up per-cpu VMCS state

When we want to run a VM on a new host pcore, we need to set up a bunch of
per-core info, such as the stacktop, TLS, and GDT.

This is a bit of a cleanup of the old code, which needed to handle things
we didn't, such as the 32 bit SYSENTER_ESP.  It was also a classic "bag on
the side," where instead of just using the pcpui, it was reading the
hardware state (e.g. 'str') and using those values.

In the newer version, we just save whatever we know we need, using pcpui
for the source of all of the info.  In the process, we remove a lot of
unnecessary code.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Enumerate reserved eflags (XCC)
Barret Rhoden [Mon, 1 Feb 2016 17:08:54 +0000 (12:08 -0500)]
x86: Enumerate reserved eflags (XCC)

Eflags/rflags has a few reserved fields.  If you attempt a VM enter with a
reserved bit set incorrectly, vmlaunch/resume will fail due to the bad
state.  Interestingly enough, this won't happen if you attempt to popfl a
bad rflags.  So VMX is picky, but the regular hardware isn't.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add a gva2gpa() helper
Barret Rhoden [Mon, 1 Feb 2016 16:44:39 +0000 (11:44 -0500)]
VMM: Add a gva2gpa() helper

Instead of just assuming we can do the math for Linux's KERNBASE mapping,
this will check the page tables.

'cr3' is guest physical / user (ring 3) memory.  This should be safe from
unmapped user memory or other issues, thanks to copy_from_user().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Move MSR emulation to vmm.c [4/4]
Barret Rhoden [Mon, 1 Feb 2016 16:33:09 +0000 (11:33 -0500)]
VMM: Move MSR emulation to vmm.c [4/4]

It's now vendor independent, so we can move it out of vmx.c.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Decouple MSR emulation from VMX [3/4]
Barret Rhoden [Mon, 1 Feb 2016 16:27:45 +0000 (11:27 -0500)]
VMM: Decouple MSR emulation from VMX [3/4]

We just use our own #defines to say whether we want a read or write,
instead of VMX exit reasons.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Clear upper 32 bits on MSR reads [2/4]
Barret Rhoden [Mon, 1 Feb 2016 16:19:31 +0000 (11:19 -0500)]
VMM: Clear upper 32 bits on MSR reads [2/4]

MSR reads in hardware should clear the upper 32 bits of rax and rdx.  Our
emulation code was going out of its way to keep the upper 32 bits as they
were on the trap, instead of clearing them.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add a helper to emulate MSRs [1/4]
Barret Rhoden [Mon, 1 Feb 2016 16:11:53 +0000 (11:11 -0500)]
VMM: Add a helper to emulate MSRs [1/4]

The existing msrio() is too ingrained in the KVM/Dune style of operations.
It'll work a little easier with pointers to the registers and not having a
ret value that is a VMX header value.

The existing implementation of MSR emulation is in vmx.c, though for the
most part it is VMX-independent.  The one bit that is from VMX is using the
opcodes from VMX exits to specify whether we're reading or writing.  That
will change shortly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Remove x86_get_ip_hw()
Barret Rhoden [Mon, 1 Feb 2016 16:08:10 +0000 (11:08 -0500)]
x86: Remove x86_get_ip_hw()

We have another function that does the same thing: get_hwtf_pc().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add helpers for loading guest pcores
Barret Rhoden [Mon, 1 Feb 2016 16:03:03 +0000 (11:03 -0500)]
VMM: Add helpers for loading guest pcores

These are similar to the old vmx_{get,put}_cpu().  Those are somewhat of a
mess.

These helpers deal with concurrency (multiple cores trying to load the same
VM core at a time) and don't have any of the baggage from KVM/Dune.
Specifically, we don't need things like 'launched' or to handle cases where
the VMCS was already loaded.

I attempted, perhaps in vain, to keep most of this vendor-independent.  For
the most part, Intel or AMD will need to do the same things in
load_guest_pcore(), minus the VMCS particulars (maybe?).  Also, struct
vmx_vcpu will eventually be guest_pcore or something.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: Add helpers for vmcs_read() and vmcs_write()
Barret Rhoden [Mon, 1 Feb 2016 15:40:17 +0000 (10:40 -0500)]
VMM: Add helpers for vmcs_read() and vmcs_write()

VMCS read and write always transfer 64 bits (since we're in 64 bit mode)
regardless of the size of the field.

Additionally, I added a return value to vmcs_write(), so that callers can
check if a write failed.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: refactor MSR emulation
Barret Rhoden [Wed, 27 Jan 2016 16:46:22 +0000 (11:46 -0500)]
VMM: refactor MSR emulation

The main change is to take pointers to rcx/rdx/rax instead of the vcpu.  It
simplifies the code a bit and, more importantly, doesn't tie us to the
vcpu.

This change mostly looks like:
s/vcpu->regs.tf_rax/*rax/

I also changed the return value to be a bool, which will plug into VM ctx
fault handling a little easier, and dropped the unused 'qual' parameter.  I
also moved emsr_ok, which was out of place compared to its buddies.

I didn't change any of the logic in the MSR emulation functions, but a few
of them need attention.  There's a bunch of copy-paste going on, and the
semantics aren't always clear for things like mustmatch.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Add a helper for loading cr2
Barret Rhoden [Tue, 26 Jan 2016 19:55:52 +0000 (14:55 -0500)]
x86: Add a helper for loading cr2

We'll need to manually save and restore it for VMs.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRestrict uva2kva() to only work for user addresses
Barret Rhoden [Mon, 25 Jan 2016 19:34:53 +0000 (14:34 -0500)]
Restrict uva2kva() to only work for user addresses

Previously, we were allowing uva2kva() to work on KVAs.  That's a little
surprising, given the name.

The new version takes a length and protection field, so the caller can
check permissions at the same time.  Note the permissions check is only for
the address space limit - not an actual mmap() permission.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: perform per-guest-pcore init at setup (XCC)
Barret Rhoden [Mon, 25 Jan 2016 19:23:15 +0000 (14:23 -0500)]
VMM: perform per-guest-pcore init at setup (XCC)

The EOI bitmap, PIR, VAPIC, and APIC pages all need to be set up per
VMCS/vcpu/guest pcore.  We had been doing this during the REG_RSP_RIP_CR3,
which was shorthand for "first time through."  Now, we do that during
initializing the entire proc VMM.

Most of the changes involve passing the guest pcore init info down through
the syscall and init paths.  I also made a helper for setting up the VMCS
pages, since the PIR, VAPIC, and APIC all follow the same pattern.  That
helper is also able to fail, which wasn't considered before.

Reinstall your kernel headers (vmctl changed).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoVMM: init the vmexit counters when initing the VMM
Barret Rhoden [Mon, 25 Jan 2016 16:42:08 +0000 (11:42 -0500)]
VMM: init the vmexit counters when initing the VMM

Previously, this was just done during the first vmctl command
(REG_RSP_RIP_CR3).  It's really a "once per VMM per process" thing.  In the
future, we could add commands to reset the counters or something.  Still,
the initial initialization should be when setting up the VMM in the first
place.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSuppressed prints for CPUID exit RIPS and removed timer thread
GanShun [Tue, 17 Nov 2015 22:12:00 +0000 (14:12 -0800)]
Suppressed prints for CPUID exit RIPS and removed timer thread

Commented out timer pthread create in vmrunkernel.c and changed printk to
printd in vmx.c for CPUID exit prints.

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSplit up reflect_unhandled_trap()
Barret Rhoden [Thu, 21 Jan 2016 21:46:32 +0000 (16:46 -0500)]
Split up reflect_unhandled_trap()

reflect_unhandled_trap() was doing two things: putting the trap info into
the hardware context and reflecting that context back to the 2LS.  This
commit pulls out the latter part, which will be used when reflecting vm
exits.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoChange the 2LS reflected fault op to take a ctx
Barret Rhoden [Thu, 21 Jan 2016 20:49:47 +0000 (15:49 -0500)]
Change the 2LS reflected fault op to take a ctx

VM exits are another type of reflected fault.  The existing reflected fault
code assumes they are hardware faults.  For the most part, the handling of
the two types of contexts is the same, as far as uthread.c is concerned.

By passing the context, instead of interpretting the context, directly to
the 2LS, we'll eventually be able to handle VM exits as well, without the
parlib / uthread code caring at all.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake HW trap reflection more arch-independent
Barret Rhoden [Thu, 21 Jan 2016 19:44:08 +0000 (14:44 -0500)]
Make HW trap reflection more arch-independent

This isn't perfect, since the list of traps is somewhat arch-dependent, but
it's a little better.  For the most part, we're probably only ever going to
handle certain common traps, and I'd like to avoid duplicate code.

If an architecture is unable to produce certain traps, then they can just
pick an unused trap number.  So long as they are all distinct, the switch
statement will be fine.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMove trap reflection bits into their own header
Barret Rhoden [Thu, 21 Jan 2016 19:26:50 +0000 (14:26 -0500)]
Move trap reflection bits into their own header

I'll be adding more to this soon, and it makes sense to separate this from
vcore.h.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd user support for VM contexts
Barret Rhoden [Wed, 20 Jan 2016 22:34:44 +0000 (17:34 -0500)]
Add user support for VM contexts

VM contexts are a lot like HW contexts.  The FP state may be dirty, and it
is in the processor's FP registers (or VCPD, if the kernel saved it).  The
FP state is independent of the general purpose registers as far as VMX
goes, which works out well: the VM ctx is just another general purpose
context, albeit one that needs kernel support to enter or exit.

And of course, a VMM needs to build a VM context and try to run it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStub out kernel support for VM contexts (XCC)
Barret Rhoden [Wed, 20 Jan 2016 22:22:53 +0000 (17:22 -0500)]
Stub out kernel support for VM contexts (XCC)

The places that need implemented are marked with TODO: (VMCTX).  This just
provides the framework for the actual kernel support and a first cut at
what a VM context looks like.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agox86: Use a common lock for printing all trapframes
Barret Rhoden [Thu, 21 Jan 2016 16:57:15 +0000 (11:57 -0500)]
x86: Use a common lock for printing all trapframes

The lock is just there for sanity reasons.  What happens on occasion is
that the kernel faults on multiple cores at the same time and tries to
print trapframes at the same time.  Those get interleaved, which is a minor
pain.  Using different locks for different TF types doesn't actually help,
so this just uses the one lock.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProvide a syscall to pop a user context (XCC)
Barret Rhoden [Wed, 20 Jan 2016 16:47:00 +0000 (11:47 -0500)]
Provide a syscall to pop a user context (XCC)

x86 will need help running VM contexts, which is the only intended use for
this syscall.

The syscall works for any type of context, but be careful actually using
it.  As noted in the comments, Parlib manages TLS separately from
pop_user_ctx(), but this syscall will set the TLS.  When testing, I had
parlib 0 FS base in the the ctx, then had proc_pop_ctx only change the FS
base if it wasn't 0.  Technically, they could want us to set a FS base of
0, so it's not really a fix.  Another solution would be to have parlib read
fsbase, then fill that into the context.  Considering there's no real need
for the kernel to pop HW or SW contexts, none of it is worth doing.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow copy_*_user to be included from umem.h
Barret Rhoden [Wed, 20 Jan 2016 16:44:04 +0000 (11:44 -0500)]
Allow copy_*_user to be included from umem.h

Previously, we needed to include arch/uaccess.h to get access to the
copy_*_user helpers.  This way, we have just one header for all functions
related to user memory, which was the original intent.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoPass in file offset into mmap() handlers.
Kanoj Sarcar' via Akaros [Sat, 30 Jan 2016 00:25:32 +0000 (16:25 -0800)]
Pass in file offset into mmap() handlers.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSlices: A growable list of pointers.
Dan Cross [Fri, 22 Jan 2016 19:26:11 +0000 (14:26 -0500)]
Slices: A growable list of pointers.

Introduce the slice library; a growable list of pointers.
Loosely modeled after the 'slice' abstraction in the Go
programming language.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoerror: return usable error strings, not nothing.
Ronald G. Minnich [Fri, 22 Jan 2016 18:47:20 +0000 (10:47 -0800)]
error: return usable error strings, not nothing.

This is a way to get us to clean up our act on errstrs.
Bare errnos are frequently unusable, as were the Plan 9
canned error strings. At the very least, this will
show the file that produced the error. It should show
the line number but does not (why?).

But it's way better than nothing.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[fixed the macro to show the line number]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRe-enabled event injection via vmctl during vmx RESUME
Michael Taufen [Fri, 22 Jan 2016 18:28:41 +0000 (10:28 -0800)]
Re-enabled event injection via vmctl during vmx RESUME

We need to use event injection to get certain interrupts, like #GP, to the
VM. It turns out that due to the way Intel designed the virtual interrupt
delivery mechanism, we cannot use it to send interrupts 0x00 through 0x0f.
This is because the interrupt will only be processed if the high 4 bits
(7:4) of the Requesting Virtual Interrupt (RVI) portion (this is where we
put the interrupt id) of the Guest Interrupt Status field (which is part
of the Virtual Machine Control Structure) are STRICTLY greater than bits
7:4 of the Virtual Processor-Priority Register (VPPR). The VPPR has a
minimum value of 0. So bits 7:4 of RVI can never be strictly greater than
those of the VPPR for the first 16 interrupts.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd taps for pipes.
Ronald G. Minnich [Tue, 5 Jan 2016 01:31:35 +0000 (17:31 -0800)]
Add taps for pipes.

Almost certainly wrong!

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[minor fixes, almost certainly right!]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProvide select() on top of epoll()
Barret Rhoden [Wed, 6 Jan 2016 16:30:50 +0000 (11:30 -0500)]
Provide select() on top of epoll()

Our version of select will spuriously return, so your applications need
to handle being told an FD is ready even if it isn't.  If your operation
needs to not block, then use O_NONBLOCK.  This is somewhat similar to
Linux, where the man pages says:

Under Linux, select() may report a socket file descriptor as "ready
for reading", while nevertheless a subsequent read blocks.

Except in Akaros, this happens all the time.

For more caveats, see select.c.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove _sock_get_listen_fd() [3/3] (XCC)
Barret Rhoden [Wed, 6 Jan 2016 15:43:36 +0000 (10:43 -0500)]
Remove _sock_get_listen_fd() [3/3] (XCC)

I kept it around briefly so epoll could compile.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove epoll's listen_fd acrobatics [2/3]
Barret Rhoden [Wed, 6 Jan 2016 15:40:44 +0000 (10:40 -0500)]
Remove epoll's listen_fd acrobatics [2/3]

The Rock code maintains an always-open listen_fd, so epoll no longer
needs to do get and close the FD.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoTrack listen FDs in socket rocks [1/3] (XCC)
Barret Rhoden [Wed, 6 Jan 2016 15:14:52 +0000 (10:14 -0500)]
Track listen FDs in socket rocks [1/3] (XCC)

Instead of only opening the listen file on demand and having our user
close it (which is a huge mess), we just open it right away and close it
when the socket / Rock is closed.

This will help out epoll, which currently will deadlock if it attempts
to close a listen_fd while holding its own locks, since epoll itself has
a close callback.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a close callback for socket Rocks (XCC)
Barret Rhoden [Tue, 22 Dec 2015 21:26:44 +0000 (16:26 -0500)]
Add a close callback for socket Rocks (XCC)

These FDs are the return value from socket().  Under the hood, they are
data FDs.  There are a bunch of things that can be cleaned up now that
we get a callback when the app closes the FD.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement run_once() without atomic_t (XCC)
Barret Rhoden [Wed, 6 Jan 2016 15:01:59 +0000 (10:01 -0500)]
Implement run_once() without atomic_t (XCC)

Using the atomic_t created a dependency on an atomic header.  It's not a
huge deal, since most every place that uses run_once() was already
including the header, but it was a minor annoyance.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoclose() will trigger a epoll_ctl_del()
Barret Rhoden [Fri, 18 Dec 2015 23:01:25 +0000 (18:01 -0500)]
close() will trigger a epoll_ctl_del()

Epoll on Linux will remove an FD from all sets when it is closed.  Now we
do the same.

Once you create an epoll instance, every call to close() will call the
epoll callback.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd callbacks to close() (XCC)
Barret Rhoden [Fri, 18 Dec 2015 22:59:09 +0000 (17:59 -0500)]
Add callbacks to close() (XCC)

Akaros has various utilities in userspace that operate on FDs, but those
facilities are in the kernel in other OSs.  These facilities would like to
know when the FD is closed.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoTrack the FD assigned to a user FD (XCC)
Barret Rhoden [Fri, 18 Dec 2015 22:52:22 +0000 (17:52 -0500)]
Track the FD assigned to a user FD (XCC)

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoTrack all epoll controllers on a global list
Barret Rhoden [Fri, 18 Dec 2015 21:04:56 +0000 (16:04 -0500)]
Track all epoll controllers on a global list

This is needed to handle close() of FDs that are members of epoll sets.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse mutexes in epoll instead of spinlocks
Barret Rhoden [Tue, 5 Jan 2016 16:08:52 +0000 (11:08 -0500)]
Use mutexes in epoll instead of spinlocks

Many of the calls technically could block, so we ought to use mutexes
instead.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProvide a fake mutexes for the thread0 2LS
Barret Rhoden [Tue, 5 Jan 2016 15:34:38 +0000 (10:34 -0500)]
Provide a fake mutexes for the thread0 2LS

Programs with a single thread do not need mutexes.  The default
implementations would probably be safe, since the mutex should be
unlocked, unless a program recursively locked the same mutex.  In that
case, they are in trouble anyways (deadlock, usually).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a 2LS-independent mutex interface
Barret Rhoden [Tue, 5 Jan 2016 15:14:56 +0000 (10:14 -0500)]
Add a 2LS-independent mutex interface

We need a way to wait on a mutex from 2LS-independent code.  Unlike
spinlocks, mutexes might need a custom implementation for a given 2LS.

We now provide a generic mutex code that most 2LSs can use.  Others can
override these methods if they desire.

Note that the current pthread mutex implementation is a glorified
busy-wait.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove typedef for struct uthread
Barret Rhoden [Tue, 5 Jan 2016 12:14:06 +0000 (07:14 -0500)]
Remove typedef for struct uthread

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix the lack of a return in sigreturn (XCC)
Barret Rhoden [Fri, 18 Dec 2015 21:43:49 +0000 (16:43 -0500)]
Fix the lack of a return in sigreturn (XCC)

Rebuild glibc, if you happen to need sigreturn to actually return a value.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllows IRQs to be disabled while proc_destroy()ing
Barret Rhoden [Wed, 6 Jan 2016 17:36:38 +0000 (12:36 -0500)]
Allows IRQs to be disabled while proc_destroy()ing

While cleaning up the various places in trap handling code where IRQs
are enabled, I noticed we were enabling it before calling
proc_destroy().

Thanks to git-blame and a good commit message, it turns out that we
don't need this any more (and haven't for quite a while).  This was
originally done in commit 850e1a46dbe8 ("Ensures IRQs are enabled when
proc_destroy()ing"), and this commit mostly undoes that commit.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProperly finalize contexts when reflecting traps
Barret Rhoden [Wed, 6 Jan 2016 17:18:31 +0000 (12:18 -0500)]
Properly finalize contexts when reflecting traps

I missed this when doing the partial context work.  We were still doing
a manual copy of the context, which wasn't also calling
arch_finalize_ctx().  This means the core was in a potentially unstable
state.

I noticed this because a page faulting SCP was rebooting my VM.  I'm
surprised it didn't pop up earlier, since all it took was a null pointer
dereference.  Might be something weird with my VM.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix ipv6 icmp bugs in locking and freeing in icmphostunr() per current Plan 9.
Geoff Collyer [Tue, 12 Jan 2016 01:05:19 +0000 (17:05 -0800)]
Fix ipv6 icmp bugs in locking and freeing in icmphostunr() per current Plan 9.

Signed-off-by: Geoff Collyer <geoff@collyer.net>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up 'devgen()' a bit.
Dan Cross [Fri, 8 Jan 2016 19:42:01 +0000 (14:42 -0500)]
Clean up 'devgen()' a bit.

Try to make this a tad cleaner and clearer, and be a bit more
defensive in the implementation. In particular, we try to check
the validity of table the table index and associated entry before
dereferencing, thus ensuring the function's preconditions hold.

Clean up the comments a bit, to make it less ambiguous whether
they refer to '.' or '..'. Also fix a (presumed?) grammar error.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCreated a new Makefrag-user-app helper for building binaries
Davide Libenzi [Tue, 15 Dec 2015 23:46:36 +0000 (15:46 -0800)]
Created a new Makefrag-user-app helper for building binaries

Created a new Makefrag-user-app helper for building binaries.
It works on a similar line of Makefrag-user-lib, allowing apps to
specify a minimal makefile, and providing clean stdout output.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
[touched up some comments leftover from Makefrag-user-lib]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow for certain device APIs to be NULL
Davide Libenzi [Tue, 15 Dec 2015 22:42:17 +0000 (14:42 -0800)]
Allow for certain device APIs to be NULL

Allow for certain device APIs to be NULL, to avoid simple devices to
have to declare them empty, and populate the devtab with them.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMade Akaros perf to use the new #version device for kernel path
Davide Libenzi [Tue, 15 Dec 2015 14:07:23 +0000 (06:07 -0800)]
Made Akaros perf to use the new #version device for kernel path

Made Akaros perf to use the new #version device for kernel path.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded #version device
Davide Libenzi [Tue, 15 Dec 2015 04:23:39 +0000 (20:23 -0800)]
Added #version device

Added #version device to host the Akaros build version information.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemoved from source control auto generated file
Davide Libenzi [Tue, 15 Dec 2015 21:47:16 +0000 (13:47 -0800)]
Removed from source control auto generated file

Removed from source control auto generated file.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded makefile machinary to generate the build information data
Davide Libenzi [Tue, 15 Dec 2015 03:15:35 +0000 (19:15 -0800)]
Added makefile machinary to generate the build information data

Added makefile machinary to generate the build information data.
A kern/src/build_info.c is automatically generated, exporting build
information.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded weak attribute definition
Davide Libenzi [Tue, 15 Dec 2015 13:37:41 +0000 (05:37 -0800)]
Added weak attribute definition

Added weak attribute definition.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded new kmalloc flag KMALLOC_ERROR
Davide Libenzi [Tue, 8 Dec 2015 19:58:57 +0000 (11:58 -0800)]
Added new kmalloc flag KMALLOC_ERROR

Added new kmalloc flag KMALLOC_ERROR, to allow kernel allocation APIs to
throw error() in case of memory allocation failures.
This in turn allow code not to check for kmalloc return code, even in
case where KMALLOC_WAIT would not fit the model.

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoShould be index 2, not index 3
Kevin Klues [Thu, 8 May 2014 03:58:32 +0000 (20:58 -0700)]
Should be index 2, not index 3

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClean up the PTE() macro (XCC)
Barret Rhoden [Thu, 17 Dec 2015 19:31:19 +0000 (14:31 -0500)]
Clean up the PTE() macro (XCC)

The PTE macro was a bit of a mess.  Every user of it had the PA handy.  But
they always converted to the PPN.  Plus, x86's kpte_write() wasn't even
using it.

It also didn't need to be in a kernel header, which was causing some
collisions for some applications.  The mmu header is so that userspace can
be aware of their address space and walk their own page tables.  PTE() was
something that could build a page table entry, which they don't need.

I didn't compile the RISC-V stuff.  It's slowly rotting.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove unused helpers from mmu.h (XCC)
Barret Rhoden [Thu, 17 Dec 2015 19:14:50 +0000 (14:14 -0500)]
Remove unused helpers from mmu.h (XCC)

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>