6 years agoLinker functions
Barret Rhoden [Wed, 22 Jan 2014 20:56:54 +0000 (12:56 -0800)]
Linker functions

We can run functions automatically during kernel initialization.  If you
want a void foo(void) func to run, write it like this:


The functions will run in any order within a level, and lower levels
will run before higher levels.

6 years agoRestores ifconfig to its normal setting
Barret Rhoden [Wed, 22 Jan 2014 19:26:42 +0000 (11:26 -0800)]
Restores ifconfig to its normal setting

You can now:

$ ash ifconfig
$ ping

with the rtl8139.

6 years agortl8139 port
Barret Rhoden [Wed, 22 Jan 2014 19:07:34 +0000 (11:07 -0800)]
rtl8139 port

We don't support some of the ether->opts yet, probably due to a lack of
archether().  If we had it, the detection would make a little more sense
(they alloc a ctlr for every NIC, and then later find out via the opts
if it's an 8139).

We also don't do some of the mmu stuff, though maybe we should.

6 years agoCalls devtabreset()
Barret Rhoden [Wed, 22 Jan 2014 19:06:40 +0000 (11:06 -0800)]
Calls devtabreset()

Not sure if we should do reset before or after init.  Inferno, nxm, and
plan9 might have had different meanings for these.

6 years agoFixes MAC addr formatting
Barret Rhoden [Wed, 22 Jan 2014 18:59:50 +0000 (10:59 -0800)]
Fixes MAC addr formatting

This is actually really important.  etherbind eventually calls
netifread, and translates the string back and forth.  So writing it out
in decimal then reading it back as hex resulted in some messed up
bindings, where our card thought it had the wrong address.  Ah, strings.

6 years agoFixes qio irqsave lock
Barret Rhoden [Wed, 22 Jan 2014 18:18:22 +0000 (10:18 -0800)]
Fixes qio irqsave lock

6 years agoFixes netif binding
Barret Rhoden [Sun, 20 Oct 2013 17:01:28 +0000 (10:01 -0700)]
Fixes netif binding

We were setting the netfile's type to 0, which means we would never
detect/match any incoming packets.  This includes broadcast packets that
we sent ourselves (such as an arp, telling us that we are

The root issue is atoi vs strtol.  I ran into this issue a while ago,
and atoi should catch any further cases of this.

6 years agoLindented 8139
Barret Rhoden [Wed, 22 Jan 2014 04:47:59 +0000 (20:47 -0800)]
Lindented 8139

Might as well do it sooner than later.

6 years agoInitial cut at srv device
Ronald G. Minnich [Wed, 22 Jan 2014 18:48:20 +0000 (10:48 -0800)]
Initial cut at srv device

This is from inferno but is quite cut down.
Needs more work but at least it builds.
Not functional.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFirst pass at proc
Ronald G. Minnich [Wed, 22 Jan 2014 17:41:08 +0000 (09:41 -0800)]
First pass at proc

This is a placeholder.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd %E, %I, and %M formats.
Ronald G. Minnich [Wed, 22 Jan 2014 17:24:48 +0000 (09:24 -0800)]
Add %E, %I, and %M formats.

%E will print an enet mac.

%I will take a uint8_t * and figure out what kind of address
it is and print it. %M does that for masks.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd eipconvtest.c to user libraries
Ronald G. Minnich [Wed, 22 Jan 2014 16:43:38 +0000 (08:43 -0800)]
Add eipconvtest.c to user libraries

Leave at top level for now. Not sure where it belongs.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFix up eipconvtest.c
Ronald G. Minnich [Wed, 22 Jan 2014 16:41:16 +0000 (08:41 -0800)]
Fix up eipconvtest.c

This runs under linux now and it prints out IP address strings.
The only problem is ... we don't know the right value. The unit
test did not include them. Ah well, at least it *seems* right.

This file will get copied to user libraries and then it's time to
fix it up for the kernel.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoMoved 8139 NIC driver to k/d/net/
Barret Rhoden [Wed, 22 Jan 2014 00:39:44 +0000 (16:39 -0800)]
Moved 8139 NIC driver to k/d/net/

6 years agoFixes OREAD / omode checks
Barret Rhoden [Tue, 21 Jan 2014 22:08:40 +0000 (14:08 -0800)]
Fixes OREAD / omode checks

The idea behind 424240126 was alright, but when we masked with OREAD, we
were just zeroing everything out.  Did I mention having OREAD/O_RDONLY
the value zero is a bad idea?

Now, we can use the more clear helper IS_RDONLY().  Which we can change
later if so desired.

6 years agoFix a bunch of %lud and %lux
Barret Rhoden [Tue, 21 Jan 2014 21:51:48 +0000 (13:51 -0800)]
Fix a bunch of %lud and %lux

Plan9 has a bunch of trailing ds and xs that our printks don't support.

6 years agoPipe cleanup (XCC)
Barret Rhoden [Tue, 21 Jan 2014 21:16:52 +0000 (13:16 -0800)]
Pipe cleanup (XCC)

Using the 9ns pipes exclusively, so no need for SYS_npipe.

Note the omode change.  That goes back to 424240126c, and it'll be a
concern for all new devices.

Reinstall your kernel headers (or just don't use SYS_npipe).

6 years agoFix VFS hack bug
Barret Rhoden [Tue, 21 Jan 2014 21:09:03 +0000 (13:09 -0800)]
Fix VFS hack bug

Dup wasn't returning the lowest available FD, since the VFS wasn't
telling 9ns about closing its FDs.

6 years agoAdds bind to userspace
Barret Rhoden [Tue, 21 Jan 2014 18:59:37 +0000 (10:59 -0800)]
Adds bind to userspace

6 years agoUses apipes and no alarms for random numbers
Barret Rhoden [Tue, 21 Jan 2014 18:49:29 +0000 (10:49 -0800)]
Uses apipes and no alarms for random numbers

This is better than my old 9ns change to devrandom, in which I didn't
fully understand how the original random code worked.

It's also faster than the our inferno version (due mostly to not taking
13 ms for 2 bits of randomness), and much simpler, due to the apipes.

It also passes the extremely rigorous test for randomness, established
in the old 9ns commit 7f63102c: I can't see a pattern in a bunch of 16
byte random reads:

b42b0a02 1f0740d0 9064d97d ae2a0a02
dd37e3b8 d6f57d77 fd2f8b62 6759d5f5
3d4fd39d dd6d5bd6 e779d775 354dd39d
f39f6759 5f5735cd dff7fd7f f39fe7f9
244934cd 89a22892 59d5759d ce739765
384e9339 b78b2288 8ee37edf e0b8ae3a
f7ef3b0e 82a07ade d7759d09 d39de779
ecfb3f4f 8b2208b0 d9ddf7bd b82e9264
320c03e0 3283a028 751d21c8 9f6759d5
3d23c8f2 8ae2def7 ea3a8e28 ae1a86a1
8a62e6b9 d7759d29 1231cc73 a0282248
0a022008 280a8228 77771d87 4ad27ddf

6 years agoFixes random reads
Barret Rhoden [Tue, 21 Jan 2014 17:40:45 +0000 (09:40 -0800)]
Fixes random reads

This is the old plan9 style, with two 'independent' processes working at
the same time, and not using apipes.

But it's way too slow:

/ $ trandom 16
Read 16 bytes of random in 822003 microseconds
dc6bd80d 9b541b97 a063d7ab 27d7bbea
/ $
/ $ trandom 100
Read 100 bytes of random in 5192485 microseconds
fe50907c 5c5c7473 5d40b3fe 307fbf4c

I think it's slow since genrandom doesn't yield to processes.  When
we're done with our 16 bytes, we pause a bit before returning to

6 years agoKtasks are run with interrupts enabled
Barret Rhoden [Tue, 21 Jan 2014 07:23:13 +0000 (23:23 -0800)]
Ktasks are run with interrupts enabled

In general, I think most ktasks should have IRQs enabled.  If not,
disable them (temporarily) when needed.

6 years agoUse syspipe, not the old kfs, for pipes
Ronald G. Minnich [Tue, 21 Jan 2014 18:34:06 +0000 (10:34 -0800)]
Use syspipe, not the old kfs, for pipes

note that the pipes are bidi.

note also that I broke pipe but I think Barret will fix as always.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoIgnore bogus omode on devpipe
Ronald G. Minnich [Tue, 21 Jan 2014 15:10:46 +0000 (07:10 -0800)]
Ignore bogus omode on devpipe

Somebody is trying to open directories with
omode of 2048; no idea why.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoRemoves the old networking stack (XCC)
Barret Rhoden [Tue, 21 Jan 2014 05:01:17 +0000 (21:01 -0800)]
Removes the old networking stack (XCC)

In addition to the socket family of glibc and syscall numbers, I also
removed the syscalls for read/write over serial/ethernet, and the
ethernet audio device.  If we need any of this in the future, we can
get it from git.

You need to fully rebuild glibc for this, including removing the entire
glibc-2.14.1/ directory (but not the -ros one).

6 years agoFix glibc to build with newer makes (XCC)
Barret Rhoden [Tue, 21 Jan 2014 04:54:29 +0000 (20:54 -0800)]
Fix glibc to build with newer makes (XCC)

My make is 4.0, which isn't one of their hardcoded versions.  I get
complaints about sed and makeinfo's versions too.  The version detection
for sed is wrong, for one thing.  I haven't fixed those - not sure it's

It was necessary to put the change in the main configure file, and not
only in the .in.  In fact, I'm not sure the .in is getting autoconfed
into the main configure all the time.  My autoconf is supposedly good,
but I was sometimes getting the dreaded BP_SYM error, which is when our
base_os change isn't in the main configure.

Since we're having a configure file anyway, I put the base_os business
in there too.  These are the only two diffs from our configure.in and
the default glibc one.

You'll need to fully rebuild glibc for this to take effect.

6 years agoDevtab created with linker tables
Barret Rhoden [Tue, 21 Jan 2014 00:30:44 +0000 (16:30 -0800)]
Devtab created with linker tables

One tricky thing is alignment.  Regardless of sizeof(struct dev), the
struct devs in the .devtab section are aligned to 32 bytes.

6 years agoFix devtab assumption with c->type
Barret Rhoden [Tue, 21 Jan 2014 00:24:23 +0000 (16:24 -0800)]
Fix devtab assumption with c->type

Inferno assumed devroot was the first dev in devtab.  They needed
certain chans (ones not associated with a dev yet) to not execute a
dev's close method.  rootclose() was a noop, so they managed.

6 years agoLinker tables for automatic structures
Barret Rhoden [Mon, 20 Jan 2014 22:35:38 +0000 (14:35 -0800)]
Linker tables for automatic structures

Such as devtab, etc.

6 years agodevpipe from inferno.
Ronald G. Minnich [Tue, 21 Jan 2014 00:00:54 +0000 (16:00 -0800)]
devpipe from inferno.

Not tested at all.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoMoves netif.c to kern/src/net/
Barret Rhoden [Mon, 20 Jan 2014 21:20:17 +0000 (13:20 -0800)]
Moves netif.c to kern/src/net/

6 years agoChanges for netif and devether to compile
Barret Rhoden [Mon, 20 Jan 2014 21:17:53 +0000 (13:17 -0800)]
Changes for netif and devether to compile

Also took care of lock inits and waserror checks.

This ended up being a hacked commit, with the diff of my changes and
Ron's from a806e1fa8d.  Hopefully I didn't screw it up.

6 years agoAdds cistrcmp from inferno
Barret Rhoden [Mon, 20 Jan 2014 20:41:30 +0000 (12:41 -0800)]
Adds cistrcmp from inferno

Put it in strstr.c, which I think has other inferno stuff.

6 years agoHashtable's hash() is now static
Barret Rhoden [Mon, 20 Jan 2014 20:40:27 +0000 (12:40 -0800)]
Hashtable's hash() is now static

Not sure why it was externally visible.

6 years agoFailed attempt to create a devtab section
Ronald G. Minnich [Mon, 20 Jan 2014 21:19:16 +0000 (13:19 -0800)]
Failed attempt to create a devtab section

The symbols did not go in. Because I did not reference them
or because of a problem in the script?

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoImproved device tags and sample usage
Ronald G. Minnich [Mon, 20 Jan 2014 21:14:28 +0000 (13:14 -0800)]
Improved device tags and sample usage

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoDefine macros for special sections
Ronald G. Minnich [Mon, 20 Jan 2014 21:10:13 +0000 (13:10 -0800)]
Define macros for special sections

These names might not be exactly what we want.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd the 8139 driver from Inferno os/manga
Ronald G. Minnich [Mon, 20 Jan 2014 21:03:56 +0000 (13:03 -0800)]
Add the 8139 driver from Inferno os/manga

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoThis now builds!
Ronald G. Minnich [Mon, 20 Jan 2014 21:00:25 +0000 (13:00 -0800)]
This now builds!

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoStart bringing networking back in
Ronald G. Minnich [Mon, 20 Jan 2014 16:53:21 +0000 (08:53 -0800)]
Start bringing networking back in

breaks build. But we gotta have it.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoDev IP initialization
Barret Rhoden [Mon, 20 Jan 2014 01:09:37 +0000 (17:09 -0800)]
Dev IP initialization

NxM was calling reset earlier than init, but inferno doesn't.  We'll
probably need to look at this again.

But now you can:

/ $ cat '#I/ipifc/clone'
0d/ $
/ $ ls '#I'
arp        icmpv6     iproute    ipselftab  ndb        udp
icmp       ipifc      iprouter   log        tcp
/ $ ls '#I/ipifc'
0      clone  stats

6 years agoBusybox errstr on create
Barret Rhoden [Mon, 20 Jan 2014 00:24:04 +0000 (16:24 -0800)]
Busybox errstr on create

They have a different error path in ash for creations, so we had to
patch it.  I like this one a bit more than the bb_error crap, since I
can choose between errno strings and errstr.

To apply, cd into your bb directory and patch -p1.

6 years agoHandle file creation
Barret Rhoden [Mon, 20 Jan 2014 00:20:48 +0000 (16:20 -0800)]
Handle file creation

Unlike in our nxm port, we handle it in syscall.c.  Aside from it being
easier, inferno's create takes the third parameter (file mode in VFS,
perm in inferno).  We weren't doing a good job in nxm of dealing with
file creation modes either.

Anyway, this gets us into a dev's create method.  Now we need devices
that don't just error out on create.

6 years agoreaddir() kdirent hack
Barret Rhoden [Sun, 19 Jan 2014 23:15:32 +0000 (15:15 -0800)]
readdir() kdirent hack

When reading directories, we need to deal with kdirents for userspace.
Once we get this working, we can put all the convM2kdirent business into

6 years agoOpen mode checks, don't use == for OREAD
Barret Rhoden [Sun, 19 Jan 2014 22:10:46 +0000 (14:10 -0800)]
Open mode checks, don't use == for OREAD

There's a disconnect between omode and the access bits part of the VFS
open flags.  Don't simply check for equality of OREAD.

I didn't want to change omode higher in the stack (to do so, we can pass
it through the poorly named 'openmode').  I wanted to keep the vfs_flags
info around as long as possible, in case lower layers want to make use
of that info.

Btw, OREAD's value is 0, which means we can't check for the bit.
Fucking terrible.

6 years agoConverts between 9ns and VFS stat structs
Barret Rhoden [Sun, 19 Jan 2014 18:48:09 +0000 (10:48 -0800)]
Converts between 9ns and VFS stat structs

We still have lots of issues with different meanings for flags and
whatnot.  For instance, we convert st_mode for directories, but don't
convert any of the other 9ns flags.

6 years agoSet up what we think is the right way to read directories
Ronald G. Minnich [Sun, 19 Jan 2014 04:26:02 +0000 (20:26 -0800)]
Set up what we think is the right way to read directories

Long term, I'd be much happier if we read and converted the
real inferno types, but for now we convert to kdirents in sysdirread.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd back functions for converting M to kdirents.
Ronald G. Minnich [Sun, 19 Jan 2014 04:11:21 +0000 (20:11 -0800)]
Add back functions for converting M to kdirents.

This is probably wrong. Probably should convert D to kdirents.
But at least we have them.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAll qlocks are initialized
Barret Rhoden [Wed, 9 Oct 2013 01:08:20 +0000 (18:08 -0700)]
All qlocks are initialized

Or at least those I could find.  We'll probably need to make other
newconv() methods for all the protocols to do other initialization.

I also initted similar sync variables when I saw them.

6 years agoUse inferno read/write instead of pread/pwrite
Barret Rhoden [Sat, 18 Jan 2014 19:55:36 +0000 (11:55 -0800)]
Use inferno read/write instead of pread/pwrite

Passing in a -1 offset was just causing rread to abort.  For now, we'll
want the file offset tracked in the chan, like with normal FDs.

6 years agowaserror() audit
Barret Rhoden [Sat, 18 Jan 2014 05:35:43 +0000 (21:35 -0800)]
waserror() audit

Our waserrors in the error case need a poperror or nexterror.  This
isn't how plan9 works.

This was rather painful.  Enough so that perhaps we should have changed
our ways.  Maybe next time we port a plan9 derivative.

I also dealt with the weird errstr shit in namec the same way I did with
nxm: commenting it out.  I found that (back then) to make namec harder
to debug.  We'll see.

6 years agoChanges %C -> %c in format strings
Barret Rhoden [Sat, 18 Jan 2014 03:24:52 +0000 (19:24 -0800)]
Changes %C -> %c in format strings

We don't have %C.

6 years agoFixes #r's 'name'
Barret Rhoden [Sat, 18 Jan 2014 03:22:03 +0000 (19:22 -0800)]
Fixes #r's 'name'

We can call it anything, so long as we call it the same thing that we
look for later.  Sticking with letters for now, even though #/ is
somewhat legit.

6 years agoPanic if there is no slash or dot in namec
Ronald G. Minnich [Sat, 18 Jan 2014 02:47:09 +0000 (18:47 -0800)]
Panic if there is no slash or dot in namec

Because that's just wrong.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoadd missing cons call
Ronald G. Minnich [Sat, 18 Jan 2014 02:41:56 +0000 (18:41 -0800)]
add missing cons call

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoadd a root device.
Ronald G. Minnich [Sat, 18 Jan 2014 02:22:23 +0000 (18:22 -0800)]
add a root device.

But we still don't get to a shell.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoPreemptively fixes walk malloc errors
Barret Rhoden [Sat, 18 Jan 2014 02:01:59 +0000 (18:01 -0800)]
Preemptively fixes walk malloc errors

This was painful to diagnose back on the old 9ns branch.  Not sure how
this worked in the old plan9 days.

6 years agoUse newfgrp, and don't inherit from the old
Barret Rhoden [Sat, 18 Jan 2014 01:55:10 +0000 (17:55 -0800)]
Use newfgrp, and don't inherit from the old

Not sure why they were doing that, but it's unnecessary for us.

6 years ago9ns side of the VFS/9ns FD sharing
Barret Rhoden [Sat, 18 Jan 2014 01:33:39 +0000 (17:33 -0800)]
9ns side of the VFS/9ns FD sharing

9ns uses FDs from the VFS.  Counterpart to 769b777a47c05.

6 years agoProperly refcnt child processes
Barret Rhoden [Sat, 18 Jan 2014 01:08:12 +0000 (17:08 -0800)]
Properly refcnt child processes

Parents hold a ref on their children.  We didn't incref for this.  For
forked processes, this was working, since we failed to decref.  Spawn,
which decreffed properly, blew up.

I think the ksched still had a copy of the proc, in this case, and it
tried to run it.  The kref check (can't incref when 0) caught this.

6 years agoAkaros side of the VFS/9ns connection
Barret Rhoden [Sat, 18 Jan 2014 00:18:48 +0000 (16:18 -0800)]
Akaros side of the VFS/9ns connection

Manages slash, dot, and what we do for cleaning up 9ns namespaces.

But the inferno code isn't using the updated fd2chan and friends.  Among
other problems...

6 years agopid_nth
Barret Rhoden [Sat, 18 Jan 2014 00:10:23 +0000 (16:10 -0800)]

Needed for devproc, eventually.

6 years agoThis breaks the build but I ran out of time.
Ronald G. Minnich [Fri, 17 Jan 2014 23:55:36 +0000 (15:55 -0800)]
This breaks the build but I ran out of time.

Anyway, we have to have it. Barret will fix it.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAttempts to fix krefs in pgrp/fgrp
Barret Rhoden [Fri, 17 Jan 2014 23:45:13 +0000 (15:45 -0800)]
Attempts to fix krefs in pgrp/fgrp

For IDs, we don't want krefs.  For some of the stuff, we don't even have
init methods yet.  And we don't want to call closefgrp.  But if we do,
it'll be slightly better.

6 years agoAdd a kernel log buffer
Ronald G. Minnich [Mon, 13 Jan 2014 21:56:47 +0000 (13:56 -0800)]
Add a kernel log buffer

This is handy when your laptop keeps overrunning your screen.

cat '#c/kmesg' > '#r/xyz' to put it somewhere.

If you just cat it, it never ends. Sorry. I tried.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoStart providing support for 9 namespaces.
Ronald G. Minnich [Fri, 17 Jan 2014 23:39:49 +0000 (15:39 -0800)]
Start providing support for 9 namespaces.

No longer boots, hurrah!

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoRestoring plan 9 io
Ronald G. Minnich [Fri, 17 Jan 2014 23:30:46 +0000 (15:30 -0800)]
Restoring plan 9 io

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd back the plan 9 system calls
Ronald G. Minnich [Fri, 17 Jan 2014 23:22:54 +0000 (15:22 -0800)]
Add back the plan 9 system calls

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoGet some init going on the devices.
Ronald G. Minnich [Fri, 17 Jan 2014 23:14:46 +0000 (15:14 -0800)]
Get some init going on the devices.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFixes VFS /dev/null
Barret Rhoden [Fri, 17 Jan 2014 02:03:13 +0000 (18:03 -0800)]
Fixes VFS /dev/null

6 years agoBetter debugging support
Barret Rhoden [Wed, 15 Jan 2014 22:49:15 +0000 (14:49 -0800)]
Better debugging support

Now builds 64b with debugging support, and on x86, it retains the original 64b
object.  Once we objcopy, we lose the ability to use some debugging tools, such
as addr2line.

This retains the 64bit original version of the kernel, which will be large if
you use a big KFS.  But no one should be doing that anymore.  If you do, you
can comment out the cp in k/a/x/Makefile (but don't commit it).

With this change, you can do things such as:

$ x86_64-ros-addr2line -e obj/kern/akaros-kernel-64b

$ gdb obj/kern/akaros-kernel-64b
Reading symbols
from akaros-kernel-64b...done.
(gdb) list *0xffffffffc200d030
0xffffffffc200d030 is in abort_all_sysc (kern/src/kthread.c:739).
734/* This will abort any abortabls at the time the call was started.  New
735 * abortables could be registered concurrently.  The main caller I see for this
736 * is proc_destroy(), so DYING will be set, and new abortables will quickly
737 * abort and dereg when they see their proc is DYING. */
738void abort_all_sysc(struct proc *p)
740    struct cv_lookup_elm *cle;
741    int8_t irq_state = 0;
742    struct cv_lookup_tailq abortall_list;
743    struct proc *old_proc = switch_to(p);

Note that you need to call this on the akaros-kernel-64b version (for amd64).

6 years agoAbort vminit for now
Barret Rhoden [Tue, 14 Jan 2014 21:28:26 +0000 (13:28 -0800)]
Abort vminit for now

Minor hack, sorry.

6 years agoVMRs that map page_maps are tracked
Barret Rhoden [Tue, 14 Jan 2014 00:52:33 +0000 (16:52 -0800)]
VMRs that map page_maps are tracked

Needed so we can remove pages or otherwise see which processes are using
which parts of a PM.

6 years agoSplits the mm_lock
Barret Rhoden [Mon, 13 Jan 2014 22:29:53 +0000 (14:29 -0800)]
Splits the mm_lock

Split into VMR (protects VMR tree properties) and PTE (protects page
table structures and properties).

Needed so that we can have the PM lock holders change the PTEs.
Ordering is now: vmr -> pte, vmr -> pm -> pte.

6 years agoPage map interface and munmap changes
Barret Rhoden [Mon, 13 Jan 2014 18:24:12 +0000 (10:24 -0800)]
Page map interface and munmap changes

The PM interface was slimmed a bit.  We still will need to change the
usages of pm_put_page for mmap a little.

munmap is a bit more efficient, and the VMRs are explicitly unmapped.
We'll need to do this instead of just blindly decreffing an entire
address space, since we need to handle PM pages differently.

6 years agoFixes waserror() memory leak in devwalk
Barret Rhoden [Sun, 12 Jan 2014 22:55:02 +0000 (14:55 -0800)]
Fixes waserror() memory leak in devwalk

The alloc was being ignored by the compiler.  As far as it was
concerned, at the waserror point (where error jumps back to), there was
no way for alloc to not be 0.  So we never freed the chan wq->clone.

We'll definitely have issues like this in the future.  We need some way
to tell the compiler to forget anything it might have known before a
certain point; otherwise we'll need to drop lots of volatiles around.
Not sure why we need this but plan9 didn't.

6 years agoFixed memory leak in namec()
Barret Rhoden [Sun, 12 Jan 2014 22:51:49 +0000 (14:51 -0800)]
Fixed memory leak in namec()

Calling nexterror() instead of error() popped off the second waserror,
skipping over a bunch of cleanup.  Careful with nexterror()!

6 years agoFixes memory leak in dev stdout
Barret Rhoden [Sun, 12 Jan 2014 22:50:38 +0000 (14:50 -0800)]
Fixes memory leak in dev stdout

Failed to free the strdup buffer.

6 years agoPage flags are now atomic
Barret Rhoden [Fri, 10 Jan 2014 20:58:14 +0000 (12:58 -0800)]
Page flags are now atomic

I don't want to lock pages just to mark it dirty or something.  This
will also help the PM removal.

6 years agox86: Fixes bug in pml callbacks
Barret Rhoden [Fri, 10 Jan 2014 20:12:00 +0000 (12:12 -0800)]
x86: Fixes bug in pml callbacks

Was leaking internal page tables for every process.

6 years agoMemwalks run CBs on all PTEs, not just PTE_Ps
Barret Rhoden [Fri, 10 Jan 2014 20:02:50 +0000 (12:02 -0800)]
Memwalks run CBs on all PTEs, not just PTE_Ps

The PTE states need a lot of work, and something is likely to be screwed
up here.

I needed to make a distinction between !PTE_P and completely empty,
since the upcoming page map removals will have PTEs !P, but still
'readable'.  And I'll need to memwalk those.

6 years agoThis now enables vmx via vmxon and vmclear works too
Ronald G. Minnich [Tue, 14 Jan 2014 17:57:39 +0000 (09:57 -0800)]
This now enables vmx via vmxon and vmclear works too

Wow, that was a pain. The kvm code did not check error returns
from vmxon; we now do that.

Way too much printing in here but we can fix that later.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd run support.
Ronald G. Minnich [Mon, 13 Jan 2014 01:50:05 +0000 (17:50 -0800)]
Add run support.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoCopying out the image sort of works
Ronald G. Minnich [Fri, 10 Jan 2014 23:57:36 +0000 (15:57 -0800)]
Copying out the image sort of works

I know I can copy out one page, anyway.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoPart-way to writing memory
Ronald G. Minnich [Fri, 10 Jan 2014 22:45:38 +0000 (14:45 -0800)]
Part-way to writing memory

We're getting a NULL pointer in vm_set_memory_region,
but part of it is working.

I have moved some of the infrastructure over to error()/waserror(), and
I'm now remembering why I like getting useful error messages
instead of the conventional UNIX bring-me-another-rock
behavior of EINVAL.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoRemove a file committed by mistake apparently.
Ronald G. Minnich [Fri, 10 Jan 2014 21:43:34 +0000 (13:43 -0800)]
Remove a file committed by mistake apparently.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoWe can now set kvm at boot time
Ronald G. Minnich [Fri, 10 Jan 2014 21:41:21 +0000 (13:41 -0800)]
We can now set kvm at boot time

Attach the device, and create vms.

We can not run them yet.

This is an interim commit, but important.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agox86: move the kernel up to 0x2000000
Barret Rhoden [Thu, 9 Jan 2014 23:14:29 +0000 (15:14 -0800)]
x86: move the kernel up to 0x2000000

Needed this for syslinux.  We 'waste' about 32MB or so, but we actually
can reclaim that after booting if we want.  We would need to track the
end of the boot area (which still starts at 0x10000), and then could
just free the pages up to 0x2000000.

6 years agoFixes multiboot parsing bug
Barret Rhoden [Thu, 9 Jan 2014 22:41:35 +0000 (14:41 -0800)]
Fixes multiboot parsing bug

sizeof was the end point, instead of the length.

6 years agoMake the panic just a wee bit more informative.
Ronald G. Minnich [Thu, 9 Jan 2014 20:09:13 +0000 (12:09 -0800)]
Make the panic just a wee bit more informative.

I know I'm a fool, but you need to tell me why :-)

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoMove vm.c and vm_mmu.c to vmx.c and vmx_mmu.c
Ronald G. Minnich [Thu, 9 Jan 2014 20:08:34 +0000 (12:08 -0800)]
Move vm.c and vm_mmu.c to vmx.c and vmx_mmu.c

They are sub-arch specific.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAlways compile in litevm and make sure it won't crash the kernel
Ronald G. Minnich [Wed, 8 Jan 2014 17:48:17 +0000 (09:48 -0800)]
Always compile in litevm and make sure it won't crash the kernel

litevm is always built in now, it builds and you can boot.

We don't call litevm_init until you attach '#V'. At that point,
if you don't have a working vmxon instruction, you'll get a
panic. This makes #V very useful for crashing all the cores
at once. Unfortunately, once this bug is fixed, you will no longer
have this option for crashing the kernel.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoThings now compile and link.
Ronald G. Minnich [Wed, 8 Jan 2014 01:09:50 +0000 (17:09 -0800)]
Things now compile and link.

Time to start testing. It won't work.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agosnapshot: Things now build, with warnings, but don't link.
Ronald G. Minnich [Tue, 7 Jan 2014 18:28:27 +0000 (10:28 -0800)]
snapshot: Things now build, with warnings, but don't link.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agovm mmu support
Ronald G. Minnich [Mon, 6 Jan 2014 23:52:32 +0000 (15:52 -0800)]
vm mmu support

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoGet the vm support to compile
Ronald G. Minnich [Mon, 6 Jan 2014 21:00:42 +0000 (13:00 -0800)]
Get the vm support to compile

Lots of warnings, and will not link. But it's closer.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd function prototype for NUMA-style allocation
Ronald G. Minnich [Sat, 4 Jan 2014 01:36:12 +0000 (17:36 -0800)]
Add function prototype for NUMA-style allocation

In Linux, there is an allocator for pages which allows one
to specify the node. This is a good idea. We're not ready
to do it, but we should reserve a placeholder for it and,
when we bring code over, make sure that we don't lost track
of code that wants NUMA-specific allocation.

Add get_cont_pages_node, which takes node as the first parameter.
The function is equivalent to get_cont_pages, but that will
change if we ever get real NUMA-style allocation.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd flags that VMs need. But many other things do as well.
Ronald G. Minnich [Sat, 4 Jan 2014 01:34:35 +0000 (17:34 -0800)]
Add flags that VMs need. But many other things do as well.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoSimplify things and put VM info into per-cpu struct
Ronald G. Minnich [Sat, 4 Jan 2014 00:37:18 +0000 (16:37 -0800)]
Simplify things and put VM info into per-cpu struct

Rename litevm.h to vm.h, that's what it is on

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoPlaceholder for vm support
Ronald G. Minnich [Sat, 4 Jan 2014 00:07:16 +0000 (16:07 -0800)]
Placeholder for vm support

vm.c gets lots of errors, but I think they're going to prove
to be pretty simple.

One thing we can do cleanly in akaros, since we know we want
a vm and we know we're only going to go with one, is put the
per-cpu stuff in the actual akaros per-cpu structs. That gets
rid of some fiddling around.

We should figure out if msr-index.h just should go in x86.h.
Personally, I vote yes; I don't like lots of little includes and
cpp is fast enough for it not to matter.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>