akaros.git
5 years agoClean the output log to remove ^M characters
Kevin Klues [Sat, 3 May 2014 01:43:48 +0000 (18:43 -0700)]
Clean the output log to remove ^M characters

5 years agoMajor overhaul to testing infrastructure
Kevin Klues [Sat, 3 May 2014 00:46:10 +0000 (17:46 -0700)]
Major overhaul to testing infrastructure

5 years agoGet diff from last stable build, not just previous build
Kevin Klues [Thu, 1 May 2014 22:42:37 +0000 (15:42 -0700)]
Get diff from last stable build, not just previous build

Also there is no longer a 'make testsclean' target.

5 years agoTurn on userspace tests and set defaults properly
Kevin Klues [Thu, 1 May 2014 20:49:47 +0000 (13:49 -0700)]
Turn on userspace tests and set defaults properly

We need a make olddefconfig after manually turning on the tests,
otherwise we get prompted to answer some qestions, that we don't want to
answer.  We just want to use the defaults.

5 years agoAdded jenkins testing infrastructure.
alfongj [Thu, 24 Apr 2014 02:04:19 +0000 (19:04 -0700)]
Added jenkins testing infrastructure.

Contains:
1. launcher.sh: Bash script in charge of compilation and running
   all the testing components.
2. changes.py and compilation_components.json: Script that checks
   for changes (via a git diff) since last commit and decides
   which components of akaros to compile.
3. qemu_launcher.c and Makelocal_qemu: Wrapper for launching qemu
   for akaros in a way that is killable from jenkins without being
   root.
4. wait_until.py: Script that checks for a given line in akaros
   output in order to know once it finished testing and stuff so
   we can kill it.
5. test_reporter.py and markup.py: Scripts for parsing akaros
   output for test output and then reporting it in XUnit XML
   format.

5 years agoFinished infrastructure that runs all userspace tests.
alfongj [Thu, 1 May 2014 01:45:06 +0000 (18:45 -0700)]
Finished infrastructure that runs all userspace tests.

5 years agoInstall user tests in a subdir of /bin
Kevin Klues [Thu, 1 May 2014 01:23:44 +0000 (18:23 -0700)]
Install user tests in a subdir of /bin

5 years agoMake infrastructure for better organized user testing
Kevin Klues [Wed, 30 Apr 2014 23:20:52 +0000 (16:20 -0700)]
Make infrastructure for better organized user testing

5 years agoSeparated user-space config variable into two.
alfongj [Wed, 30 Apr 2014 21:57:51 +0000 (14:57 -0700)]
Separated user-space config variable into two.

CONFIG_USERSPACE_TESTING: whether tests are activated or not.
CONFIG_USERSPACE_TESTING_SCRIPT: path to test launcher.

5 years agoAdded automatic userspace test launching capability to AKAROS.
alfongj [Wed, 30 Apr 2014 20:43:22 +0000 (13:43 -0700)]
Added automatic userspace test launching capability to AKAROS.

* Created a new config variable (USERSPACE_TESTING) in Kconfig.Testing
  in which to specify a path to a script that should run userspace
  tests.
* Modified manager.c to support this.

5 years agoFix kbuild make detecting change in file
Kevin Klues [Tue, 29 Apr 2014 20:35:06 +0000 (13:35 -0700)]
Fix kbuild make detecting change in file

Unfortunately, Kconfig doesn't seem to recognize that the tests.c file
needs to be rebuilt unless we explicitly use our CONFIG_TEST_* variables
in the c file instead of generated by the underlying macro. Boo.

5 years agoImplemented Kernel Post-boot testing.
alfongj [Thu, 24 Apr 2014 01:32:42 +0000 (18:32 -0700)]
Implemented Kernel Post-boot testing.

1. Added generic C unit testing macros in kern/include/test_infra..
2. Moved current Postboot tests from kern/src/testing.c to
   kern/src/tests_pb_kernel.c and modified many to use the new unit
   testing standard.
3. Added kern/src/tests.c as a file in which to register all kernel
   testing functions (can be extended in the future with new tests)
4. Modified kern/src/manager.c to run kernel postboot tests if they
   are set up.
5. Modified KConfig to add a config variable for configuring
   whether to run these tests post boot or not.
6. Added Documentation/testing.txt (W.I.P.).
7. Modified necessary headers and KBuild files.

5 years agoMuch less confusing. Tested and works.
Ronald G. Minnich [Mon, 5 May 2014 21:45:32 +0000 (14:45 -0700)]
Much less confusing. Tested and works.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoKprof fixes
Barret Rhoden [Thu, 1 May 2014 00:21:44 +0000 (17:21 -0700)]
Kprof fixes

Lots todo still, check the top of the file.

To process the data:
$ sort -rk3 /prof/kpdata | head -n 50

5 years agoAdds head and sort to bb config
Barret Rhoden [Wed, 30 Apr 2014 20:29:23 +0000 (13:29 -0700)]
Adds head and sort to bb config

You'll need to copy out the config to your bb/.config and rebuild.

I added the symlinks too, since I think that's what we're doing these days for
bb apps.

5 years agoPoor-man's ftrace has more context
Barret Rhoden [Wed, 30 Apr 2014 20:14:41 +0000 (13:14 -0700)]
Poor-man's ftrace has more context

Will output whether we're in a process, IRQ, or ktask context.

Careful using this on certain devices in k/d/dev/, like acpi and console.  One
of the devs locks up if you try to print.

I usually turn off the 'print' bool in kdebug.c for booting, then turn it on
via 'kfunc toggle_print_func'.

To spatch the networking code, try something like:

$ for i in kern/src/net kern/drivers/net kern/drivers/dev/ether.c; do
spatch --sp-file scripts/spatch/poor-ftrace.cocci  --in-place $i; done

5 years agoBrings back the cheap dial()
Barret Rhoden [Wed, 30 Apr 2014 20:11:56 +0000 (13:11 -0700)]
Brings back the cheap dial()

In case you want to bypass the full dial + cs + dialstring parsing.

5 years agoMonitor command showmappings updates
Barret Rhoden [Wed, 30 Apr 2014 00:18:00 +0000 (17:18 -0700)]
Monitor command showmappings updates

Now also called 'sm', it takes a PID.  sm will print the mappings for the given
process's address space.  PID = 0 will show the boot_pgdir.

5 years agoBSD sockets library relies on parlib
Barret Rhoden [Tue, 29 Apr 2014 22:38:09 +0000 (15:38 -0700)]
BSD sockets library relies on parlib

Included via "priv.h".  Had to add some #includes there, since they were
assuming priv.h would be included after some other files.

Also removed ntohl.c.  priv.h includes glibc's version.

I originally did this to make a poor-ftrace of the BSD sockets library.  It's
probably easier to just put -include parlib.h into the user/bsd/Makefile in the
future.  Cleaning out ntohl.c was nice.

5 years agoPoor-man's ftracing for userspace
Barret Rhoden [Tue, 29 Apr 2014 22:37:28 +0000 (15:37 -0700)]
Poor-man's ftracing for userspace

Make sure whatever you trace has #included parlib.h.

5 years agoIncrease buffer size for incoming connections
Kevin Klues [Tue, 29 Apr 2014 22:30:56 +0000 (15:30 -0700)]
Increase buffer size for incoming connections

5 years agoInitial commit of some oprofile support
Ronald G. Minnich [Tue, 29 Apr 2014 14:59:24 +0000 (07:59 -0700)]
Initial commit of some oprofile support

This is going to need some work, but we need it.
It's weird how complicated it is to work with synthetics in linux.
I expect this code to shrink a lot.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoUpdated GETTING_STARTED with busybox info
Barret Rhoden [Sat, 26 Apr 2014 02:18:36 +0000 (19:18 -0700)]
Updated GETTING_STARTED with busybox info

5 years agoAdded .pyc (Python comp files) to gitignore
alfongj [Thu, 24 Apr 2014 01:08:44 +0000 (18:08 -0700)]
Added .pyc (Python comp files) to gitignore

5 years agoMoved busybox patches to their own folder.
alfongj [Thu, 24 Apr 2014 01:07:17 +0000 (18:07 -0700)]
Moved busybox patches to their own folder.

5 years agoFixes short 9ns dirent reads
Barret Rhoden [Sat, 26 Apr 2014 01:27:21 +0000 (18:27 -0700)]
Fixes short 9ns dirent reads

Things like 'ps' were failing.  There might have been others.  The read
method would work, but it was possible to squeeze in multiple Ms in the
buffer for a single kdirent read.  End result, we'd miss entries every
so often.  For devproc, we'd miss the second of three processes.

This didn't take as long to figure this out as when it happened to
devmnt, but still took took long.

I put in a check in devdirread which should trip if our minimum is wrong
again.

5 years agoCorrect the date in the copyright line of ether82563.c
Ronald G. Minnich [Sat, 26 Apr 2014 01:25:40 +0000 (18:25 -0700)]
Correct the date in the copyright line of ether82563.c

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoMake changes to the bsd library to get it to built with netperf.
Ronald G. Minnich [Sat, 26 Apr 2014 01:23:27 +0000 (18:23 -0700)]
Make changes to the bsd library to get it to built with netperf.

More needs doing. I'm going to remove any use of select from netperf.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoAdd early docs on building netperf.
Ronald G. Minnich [Sat, 26 Apr 2014 01:22:53 +0000 (18:22 -0700)]
Add early docs on building netperf.

It's a pretty ugly process.

5 years agoAdd Intel 82563 NIC support.
Ronald G. Minnich [Sat, 26 Apr 2014 01:21:03 +0000 (18:21 -0700)]
Add Intel 82563 NIC support.

This code courtesy of Erik Quanstrom.

5 years agoAdd a short explanation of the kprof device.
Ronald G. Minnich [Sat, 26 Apr 2014 01:01:42 +0000 (18:01 -0700)]
Add a short explanation of the kprof device.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoFix trivial bug in kprof -- pc not getting set correctly
Ronald G. Minnich [Sat, 26 Apr 2014 00:45:50 +0000 (17:45 -0700)]
Fix trivial bug in kprof -- pc not getting set correctly

I was testing with dd bs=64 etc. etc.
Andrew Gallatin tested with cat.

For me, the pc was always right, since each read was a single
record and the pc was recomputed each time. For larger reads, it would be mostly wrong.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoMonitor command bt, alias for backtrace
Barret Rhoden [Sat, 26 Apr 2014 00:15:47 +0000 (17:15 -0700)]
Monitor command bt, alias for backtrace

5 years agoRemoves ping warnings, tries to use cs
Barret Rhoden [Sat, 26 Apr 2014 00:12:10 +0000 (17:12 -0700)]
Removes ping warnings, tries to use cs

CS doesn't actually work completely.  It'll hang if you:

ash ifconfig
echo debug > cs
ping www.google.com

It's fine that we don't have DNS yet, but CS shouldn't hang forever.

5 years agoFixes ifconfig issues
Barret Rhoden [Sat, 26 Apr 2014 00:05:39 +0000 (17:05 -0700)]
Fixes ifconfig issues

On my machine, cs doesn't produce #s/cs before ifconfig tries to mount
it.

Also, cs debugging is pretty loud.  We can turn it on easily if we need
to debug.

5 years agoMonitor access to semaphore debugging info
Barret Rhoden [Fri, 25 Apr 2014 23:49:36 +0000 (16:49 -0700)]
Monitor access to semaphore debugging info

db sem for print_all_sem_info().  Easier than kfuncing.  Feel free to
add other useful things to db.

Also, this adds that much needed newline to print_all_sem_info().  How
many people have looked at that output and not cursed its unreadability?

5 years agoAdds kill to the monitor
Barret Rhoden [Fri, 25 Apr 2014 23:43:25 +0000 (16:43 -0700)]
Adds kill to the monitor

Got tired of procinfo kill PID.  Too much typing.  =)

5 years agoRemoved IRQ routing test
Barret Rhoden [Fri, 25 Apr 2014 23:38:05 +0000 (16:38 -0700)]
Removed IRQ routing test

Was getting sick of those #warnings during compile.

5 years agopthread_switch: fast user-level context switch
Barret Rhoden [Fri, 25 Apr 2014 23:29:04 +0000 (16:29 -0700)]
pthread_switch: fast user-level context switch

This is just an example of what you can do.  Be a little careful if you
use this in another 2LS, since it short-circuits the rest of
uthread_yield.  I think it is okay as is, but future uthread changes
could cause trouble.  If we really need this behavior, I could build it
in to uthread.c.

Also, this adds an interface to pthreads, such that you can create a
thread, but not start running it yet.  Careful with that, too.

5 years agopthread_test can easily be built for linux
Barret Rhoden [Fri, 25 Apr 2014 18:34:43 +0000 (11:34 -0700)]
pthread_test can easily be built for linux

Note the use of misc-compat.h.  Feel free to add things there for other
tests.

5 years agoAdd more info to the kprof and fix a big
Ronald G. Minnich [Fri, 25 Apr 2014 21:38:31 +0000 (14:38 -0700)]
Add more info to the kprof and fix a big

In real use, turns out we want that PC. We don't want to
merge the common functions from the kernel either.
We may even decide to stop the >> 3 on the PC, depending.
Memory is cheap.

Fix a bug that came up because of dealing with snprintf behavior,
long story.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoRe-add the bsd library
Ronald G. Minnich [Fri, 25 Apr 2014 21:09:41 +0000 (14:09 -0700)]
Re-add the bsd library

We need it for netperf. I'm not in the mood to try to change
an autoconfig-based chamber of horrors at this point in my life.
Far easier to make a compatibility shim, and that alone should tell
you all you need to know about what's wrong with open source software
nowadays.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoAdd the Plan 9 kprof device.
Ronald G. Minnich [Fri, 25 Apr 2014 18:42:11 +0000 (11:42 -0700)]
Add the Plan 9 kprof device.

The Plan 9 kprof device takes samples at 1ms intervals.
It maintains an array that is the size of kernel text / 8.
At each timer interrupt, it adds 1 to the array[pc/8].
In this way, we get a profile, accurate to 1 ms, of where
the kernel spends its time.

Unlike Plan 9, the output format of this is text.
Each text record is 48 bytes; 30 bytes of name,
1 byte of space, 16 bytes of PC, and a newline.

To try this, you can, e.g.,
bind -a '#K' /net # we can't use /dev yet.
echo start > /net/kpctl
do something
echo stop > /net/kpctl
cat /net/kpdata > /somefile

Bugs:
- we need to atomic_inc the buf entries, not just add 1
- we only do this on one core; we need to start timers on all

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoAdd a profile device.
Ronald G. Minnich [Fri, 25 Apr 2014 02:22:50 +0000 (19:22 -0700)]
Add a profile device.

This is the Plan 9 profile device, it's quite basic
but it's better than nothing. We can continue to use
this interface but we should try to get something
better underneath.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoFixes MAC and arp printing
Barret Rhoden [Wed, 23 Apr 2014 18:52:40 +0000 (11:52 -0700)]
Fixes MAC and arp printing

Can now cat /net/arp.  The spacing is still off for the %I, but at least
we can see the info.

5 years agoFixes getfields()
Barret Rhoden [Wed, 23 Apr 2014 18:36:01 +0000 (11:36 -0700)]
Fixes getfields()

The main for loop steps through rune (characters).  I don't know what
the intent of 'next' was, but since the loop already managed the
character/rune length, 'next' could only offset us farther into the
rune.

5 years agoFixes stat() #include
Barret Rhoden [Mon, 21 Apr 2014 21:00:17 +0000 (14:00 -0700)]
Fixes stat() #include

5 years agoMake ndblib not reopen and reread files all the time.
Ronald G. Minnich [Thu, 17 Apr 2014 19:00:45 +0000 (12:00 -0700)]
Make ndblib not reopen and reread files all the time.

Sadly, stat(2) returns 0 for mtime still. So we've got some
nasty hacks in here to make sure we only read files once. We'll
need to come back to this or better yet rewrite this mess in Go.
It's the 21st century and it's silly not to cache everything, and
it's super silly to write code like this in C.

Result:
cs&
mount -a '#s/cs' /net
csquery /net/cs tcp!localhost!22

The first time, it is slow, as it is now. Subsequent
csquery commands, if it hits the cache, are quite fast,
basically intantaneous, even in qemu.
This should make go test much more palatable.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoMoves some timing func from benchutil to parlib
Barret Rhoden [Thu, 17 Apr 2014 00:49:56 +0000 (17:49 -0700)]
Moves some timing func from benchutil to parlib

They don't need to be in benchutil, unlike the other benchutil functions
that use libm.  Also, programs that want to use the simply timing
functions won't need to -lbenchutil (and -lm).

5 years agoProcess create/destroy fixups
Barret Rhoden [Wed, 16 Apr 2014 01:54:41 +0000 (18:54 -0700)]
Process create/destroy fixups

If sys_proc_create() failed early, a variety of fragile refcntings and
other bits would be messed up.  Mostly since we want to destroy and we
haven't __proc_readied, but destroy cleans up after both alloc and
ready.

5 years agoQIO and catching rendez_sleep()
Barret Rhoden [Wed, 16 Apr 2014 01:31:44 +0000 (18:31 -0700)]
QIO and catching rendez_sleep()

rendez_sleep() throws an error.  In qbwrite(), this is after the point
where we published the block b to the queue.  If the rendez_sleep() is
aborted, we'd error out and freeb(b), which is still on the queue.

Our use of error() in rendez_sleep() might be different than Plan 9.  We
already have slightly different rendez semantics.  Though many rendez
calls are clearly wrapped in waserrors() in other places.

I looked at some of the other rendez spots, like devmnt, and at least
put some warnings in place for the next time we have potential rendez
issues.

5 years agox86: Kernel tries to handle user page faults
Barret Rhoden [Wed, 9 Apr 2014 00:02:37 +0000 (17:02 -0700)]
x86: Kernel tries to handle user page faults

We could deadlock doing this - need to review and be careful any time we access
a user pointer.

Segvs will still cause a panic, but anon memory should work.

5 years agoEthernet devices register there their own IRQs
Barret Rhoden [Tue, 8 Apr 2014 21:00:50 +0000 (14:00 -0700)]
Ethernet devices register there their own IRQs

The Plan 9 way was to have one IRQ per ethernet device, which devether
registers for each NIC.  Many NICs will want separate IRQ handlers, possibly
for different queues.

Now, all NICs register and manage their own IRQs.  The old plan 9 way was to do
it in the reset/pnp method.  These resets happen during the booting process,
and for now that is the only place you can do vmap_pmem calls (which you'll
need when you register_irq for MSI-X).

5 years agoFixes uninitialized irq_h name
Barret Rhoden [Tue, 8 Apr 2014 20:18:31 +0000 (13:18 -0700)]
Fixes uninitialized irq_h name

Might just remove it.

5 years agoRemoves user_mem_check, fixes syscall bug
Barret Rhoden [Tue, 8 Apr 2014 05:31:26 +0000 (22:31 -0700)]
Removes user_mem_check, fixes syscall bug

This was a good one.  When not MAP_POPULATE-ing anonymous memory,
syscalls where part of the struct was on a page that hadn't been faulted
in yet would fail a user_mem_check.  Silently.  But good thing we set
that global racy variable!  Since run_local_syscall() would just return,
we'd pop back to userspace and the syscall would never complete, because
it never started.  6.5 giraffe-hours btw (* 2).

5 years agoAdds KFS symlinks for bash and sh
Barret Rhoden [Tue, 8 Apr 2014 02:54:28 +0000 (19:54 -0700)]
Adds KFS symlinks for bash and sh

Symlinks to busybox; needed for running scripts as programs from
busybox (./script, ./etc).

If someone wants to put together some busybox patching, configuring,
building, and installing scripts, then go for it.

5 years agoFixes tcpackproc name's memory
Barret Rhoden [Tue, 8 Apr 2014 02:52:29 +0000 (19:52 -0700)]
Fixes tcpackproc name's memory

Our ktasks (possibly foolishly) don't make a copy of the name for the
caller.  So the caller (or rather the ktask itself) needs to free the
memory for the kname when it is done.

Probably should change this.

5 years agoAdd check for is_valid_elf() before loading in exec
Kevin Klues [Mon, 7 Apr 2014 19:22:46 +0000 (12:22 -0700)]
Add check for is_valid_elf() before loading in exec

If the program is not a valid elf file, then set errno to ENOEXEC.
Busybox and other shells recognize this and try to re-exec the program
through the shell itself (i.e. bash ifconfig instead of just
./ifconfig).

To support this, sh and bash symlinks have been set up to point to ash
in busybox

5 years agoMSI-X fixes
Barret Rhoden [Mon, 7 Apr 2014 20:22:36 +0000 (13:22 -0700)]
MSI-X fixes

Allows unaligned table/pba addresses and zeros out the data entries in
the table.  Some hardware (i350 on c89) already has them zeroed, while
other (rtl8169) doesn't.

5 years agoCan vmap unaligned paddrs
Barret Rhoden [Mon, 7 Apr 2014 20:18:29 +0000 (13:18 -0700)]
Can vmap unaligned paddrs

The main idea is to implicitly map the phys memory below paddr, down to
its nearest page boundary.

5 years agoMSI: Fix for MSI to work when MSI-X fails
Barret Rhoden [Mon, 7 Apr 2014 19:24:59 +0000 (12:24 -0700)]
MSI: Fix for MSI to work when MSI-X fails

Need to turn off the MSI-X enable bit.  You can only have either MSI or
MSI-X turned on at a time.

5 years agoAdd ability to set alarms at an absolute unix time
Kevin Klues [Sat, 5 Apr 2014 04:12:51 +0000 (21:12 -0700)]
Add ability to set alarms at an absolute unix time

5 years agoPCI device locking and synchronization
Barret Rhoden [Fri, 4 Apr 2014 23:14:24 +0000 (16:14 -0700)]
PCI device locking and synchronization

Adds some limited concurrency support to PCI operations.  The main list
of PCI devices is built at boot and is read-only, so we don't
(currently) need to worry much.

5 years agoPCI: handles BARs for PCI2PCI devices
Barret Rhoden [Fri, 4 Apr 2014 20:32:04 +0000 (13:32 -0700)]
PCI: handles BARs for PCI2PCI devices

Though it turns out my hardware doesn't have any of these, so it hasn't
turned up as an issue.

5 years agoIRQ routing
Barret Rhoden [Fri, 4 Apr 2014 20:20:39 +0000 (13:20 -0700)]
IRQ routing

Call route_irqs() to reroute a all IRQs for a particular vector to an os
coreid.  We don't support routing to multiple cores yet.

5 years agoRefactors MSI code slightly
Barret Rhoden [Fri, 4 Apr 2014 19:40:41 +0000 (12:40 -0700)]
Refactors MSI code slightly

PCI/MSI code doesn't need to know about irq_h, which makes all of the
interfaces a little cleaner.

Also puts in some checks to prevent us from trying to turn on MSI and
MSI-X at the same time.

5 years agoUses channame() in sys_fd2path()
Barret Rhoden [Thu, 3 Apr 2014 23:11:30 +0000 (16:11 -0700)]
Uses channame() in sys_fd2path()

channame() should do the trick, instead of the old chanpath() which was
removed in commit 011ab2.  If not, we should fix channame().  chanpath()
was a nxm thing; Inferno has different structs to track the name.
"chanpath(ch)" might have been put in quotes during the 9ns->inferno
change.

Using snprintf() and channame() helps with a couple things.  Previously,
fd2path() didn't check ch != 0 and could copy more than the user requested
(i.e. the full channame len instead of MIN(len, ch->name->len)).

5 years agoMSI-X support
Barret Rhoden [Thu, 3 Apr 2014 22:53:13 +0000 (15:53 -0700)]
MSI-X support

Adds support for MSI-X interrupts, including routing of individual
vectors to cores, via the irq_handler.

Cleaned up MSI a bit too, extracting common code (they use the same
MSI addr and data format).

Still needs a little cleanup and synchronization support.

5 years agovmap_pmem_nocache()
Barret Rhoden [Thu, 3 Apr 2014 21:37:04 +0000 (14:37 -0700)]
vmap_pmem_nocache()

Maps in physical memory to the kernel's VA space, but with caching
disabled (if available).  We'll need to use this for device MMIO.

5 years agoActually do an fd2path instead of hardcoded path
Kevin Klues [Thu, 3 Apr 2014 01:01:10 +0000 (18:01 -0700)]
Actually do an fd2path instead of hardcoded path

5 years agoMSI cleanup and IRQ routing
Barret Rhoden [Wed, 2 Apr 2014 23:50:02 +0000 (16:50 -0700)]
MSI cleanup and IRQ routing

Not sure what the deal is with the Msiaedest.  Perhaps those bits are
used for extended APIC id bits (like with an x2APIC?).  Though I heard
the x2APICs use IO redirection/virtualization hardware, or something
similarly ridiculous/painful.

5 years agosys_fd2path needs to return an intreg_t
Kevin Klues [Wed, 2 Apr 2014 21:56:51 +0000 (14:56 -0700)]
sys_fd2path needs to return an intreg_t

Otherwise a comparison with -1 on the user side will not be valid if it
treats the return value as a 64 bit integer.

5 years agoPCI: Fixes capability detection
Barret Rhoden [Wed, 2 Apr 2014 19:42:33 +0000 (12:42 -0700)]
PCI: Fixes capability detection

Caps are a linked list; the old code seemed to just incrementally scan,
which was checking arbitrary spots in the PCI/cap space.

If someone wants to make fancy cap_id-to-strings for the output, be my
guest.

5 years agoPull all ndb files from the plan9 source tree
Kevin Klues [Wed, 2 Apr 2014 19:38:41 +0000 (12:38 -0700)]
Pull all ndb files from the plan9 source tree

5 years agoFix offset bug in qreply in cs
Kevin Klues [Wed, 2 Apr 2014 19:37:29 +0000 (12:37 -0700)]
Fix offset bug in qreply in cs

5 years agoMSI-X: Minor changes
Barret Rhoden [Wed, 2 Apr 2014 00:25:22 +0000 (17:25 -0700)]
MSI-X: Minor changes

Minor changes; one bar, some printing, etc.

You'll need to call this from ioapic.c instead of the regular MSI enable.

5 years agox86: Handles some bad keyboard data
Barret Rhoden [Wed, 2 Apr 2014 00:16:20 +0000 (17:16 -0700)]
x86: Handles some bad keyboard data

Some of our boards return 0xff when polling the KB, which isn't a proper scan
code (AFAIK).  Ideally, we'd check that the keyboard being released is a valid
scan code.

5 years agoRoundup the length on munmap().
Kevin Klues [Tue, 1 Apr 2014 23:31:00 +0000 (16:31 -0700)]
Roundup the length on munmap().

do_mmap() rounds the length up before mmapping, but we have no way of
notifying the user that this has happened.  When they do an unmap, the
length passed in needs to be rounded again, or bad things will happen.

5 years agoAdd ability for vfs fd_set/fd_array to grow on demand
Kevin Klues [Tue, 1 Apr 2014 22:08:31 +0000 (15:08 -0700)]
Add ability for vfs fd_set/fd_array to grow on demand

5 years agoGrow the 9ns fd array when necessary
Kevin Klues [Tue, 1 Apr 2014 19:41:51 +0000 (12:41 -0700)]
Grow the 9ns fd array when necessary

5 years agoFix ACPI FADT processing on qemu
Barret Rhoden [Tue, 1 Apr 2014 18:43:59 +0000 (11:43 -0700)]
Fix ACPI FADT processing on qemu

With 4GB of RAM, processing the FADT would cause a reboot...

5 years agox86: console polling ktasks
Barret Rhoden [Tue, 1 Apr 2014 17:57:05 +0000 (10:57 -0700)]
x86: console polling ktasks

For the AMD boards from which we can't get IRQs.  Turn on via Kconfig.

5 years agoInitializes rendez in devmnt
Barret Rhoden [Tue, 1 Apr 2014 01:16:38 +0000 (18:16 -0700)]
Initializes rendez in devmnt

Can't just memset rendezes to 0.  If so, you'll PF at 0x14, since the
cv->lock is 0.

5 years agomsi-x: allocate the proper number of pages.
Ronald G. Minnich [Tue, 1 Apr 2014 01:00:57 +0000 (18:00 -0700)]
msi-x: allocate the proper number of pages.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agomsi-x: read is a per-function property
Ronald G. Minnich [Tue, 1 Apr 2014 00:54:21 +0000 (17:54 -0700)]
msi-x: read is a per-function property

Add a pci_device struct member so we know if msix is working.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoFixes listen/TCP bug
Barret Rhoden [Tue, 1 Apr 2014 00:15:33 +0000 (17:15 -0700)]
Fixes listen/TCP bug

Listeners wouldn't wake, at least for TCP, when the connection hung up.

5 years agoFixes TCP hangup bug
Barret Rhoden [Mon, 31 Mar 2014 23:29:19 +0000 (16:29 -0700)]
Fixes TCP hangup bug

The old check is always true, since raddr is an array.  This would break
when you try to hangup an announced, but unconnected conversation.

5 years agoMSI-X: first cut
Ronald G. Minnich [Mon, 31 Mar 2014 21:19:38 +0000 (14:19 -0700)]
MSI-X: first cut

The pieces here may be right, but I doubt they are completely right.
Please look hard at the addrhi, vector, and data variables.
Also, not sure I'm allocating enough contig pages.
There can be up to 2^10 entries, each entry is 16 bytes. That's
2^14 bytes I think?

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoAtomic PCI-space accesses
Barret Rhoden [Mon, 31 Mar 2014 18:02:22 +0000 (11:02 -0700)]
Atomic PCI-space accesses

These bugs would be very difficult to debug.  If the lock turns out to
be too expensive for bulk PCI ops, we can expose the lock and make some
__pci* versions.

5 years agoInitial code for msi-x
Ronald G. Minnich [Sat, 29 Mar 2014 21:36:40 +0000 (14:36 -0700)]
Initial code for msi-x

msi-x is pronounced "M SIX" btw, or M6. Not EMM ESS EYE EXX. Just
M6

This is a template which I will be filling it.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
5 years agoFixes ping include
Barret Rhoden [Sat, 29 Mar 2014 04:53:37 +0000 (21:53 -0700)]
Fixes ping include

It worked on other machines that still had nixip.h in the toolchain
headers...

Also removed the old dead glibc link.

5 years agoSkip the shitty e1000s on c89
Barret Rhoden [Sat, 29 Mar 2014 01:54:41 +0000 (18:54 -0700)]
Skip the shitty e1000s on c89

The e1000s don't work with MSI.  One doesn't support it, and the other
flips out when MSI is used.  Those happen to be NICs l0 and l1.  Could
be more robust and fallback to l0 or something, etc.

5 years agoping.c
Barret Rhoden [Sat, 29 Mar 2014 01:52:40 +0000 (18:52 -0700)]
ping.c

From NxM, ported to Akaros.

5 years agoFix genbuf/attach issue with specs
Barret Rhoden [Sat, 29 Mar 2014 01:52:06 +0000 (18:52 -0700)]
Fix genbuf/attach issue with specs

We were dropping off the spec for things like #l0.

5 years agoSets pthread to depend on benchutil
Barret Rhoden [Sat, 29 Mar 2014 01:20:32 +0000 (18:20 -0700)]
Sets pthread to depend on benchutil

Needed since futexes use the alarms.

5 years agoIncrease max nr NICs
Barret Rhoden [Sat, 29 Mar 2014 00:55:22 +0000 (17:55 -0700)]
Increase max nr NICs

c89 has more than 4.  But who could ever need more than 32?!?

5 years agoigbe: abort MSI for a shitty NIC
Barret Rhoden [Sat, 29 Mar 2014 00:53:42 +0000 (17:53 -0700)]
igbe: abort MSI for a shitty NIC

Not sure if it is HW or us, but MSI works on two other NICs.  On the
82545EM, once we use MSI, the NIC clobbers the RD buffer area with
gibberish.

5 years agoPCI: properly read the BARs
Barret Rhoden [Sat, 29 Mar 2014 00:52:07 +0000 (17:52 -0700)]
PCI: properly read the BARs

Was not stripping the MF bit, so multi-func BARs were coming back 0.

5 years agox86: Fixes PCI 8 and 16 byte accesses
Barret Rhoden [Sat, 29 Mar 2014 00:05:41 +0000 (17:05 -0700)]
x86: Fixes PCI 8 and 16 byte accesses

Instead of reading and writing on 32 byte boundaries, you are supposed
to access on the 32 byte boundary, but then do the data read/write from
an offsetted *IO port*.  There are a few of them, which sort of read
from the space directly.  Ugh.

Also, the offset into the config space will need to be up to 4KB, not
256, for PCI-E.  Ugh.

5 years agoigbe: use safer MMIO register access
Barret Rhoden [Fri, 28 Mar 2014 21:39:24 +0000 (14:39 -0700)]
igbe: use safer MMIO register access

Gcc might optimize the register accesses, so we need to use the
volatile* helpers.