5 years agoBXE: slightly better memory management
Barret Rhoden [Wed, 28 Jan 2015 21:28:50 +0000 (16:28 -0500)]
BXE: slightly better memory management

Trying to work with the existing interface, so as to not replace it everywhere.

5 years agoBXE: PCI cap detection and similar settings
Barret Rhoden [Mon, 26 Jan 2015 19:14:07 +0000 (14:14 -0500)]
BXE: PCI cap detection and similar settings

Also needed to fix the bus_dma stuff, since those errors were tripping once we
detected multiple queues.

5 years agoBSD PCI #defines
Barret Rhoden [Mon, 26 Jan 2015 18:40:42 +0000 (13:40 -0500)]
BSD PCI #defines

Adds BSD #defines for various PCI constants.  We have some of them in Akaros,
but not all of them (notably the PCIE ones).

For now, we're keeping the BSD constants in their own world.  Eventually we
might need similar ones in Akaros.  If so, we'll spatch things up then.

5 years agoPCI helper find_cap
Barret Rhoden [Mon, 26 Jan 2015 18:40:42 +0000 (13:40 -0500)]
PCI helper find_cap

Adds a find_cap helper, similar to the BSD one.

5 years agoBXE: cleans up MMIO / BAR setup
Barret Rhoden [Mon, 26 Jan 2015 16:19:12 +0000 (11:19 -0500)]
BXE: cleans up MMIO / BAR setup

Also, this sets up the second BAR, called BAR1 in the code, but it is actually
pcidev->bar[2], which is used for the doorbell.

5 years agoBXE: attach
Barret Rhoden [Fri, 23 Jan 2015 22:02:00 +0000 (17:02 -0500)]
BXE: attach

Attaches in the reset/pnp (at boot time).

There's still a lot of obvious stuff that's not hooked up.  Grep XME.

5 years agoAdds PCI config dump helper
Barret Rhoden [Fri, 23 Jan 2015 20:42:08 +0000 (15:42 -0500)]
Adds PCI config dump helper

You can probably do this from userspace too, via devarch's PIO hooks.

5 years agoAdds PCI iobar helper
Barret Rhoden [Fri, 23 Jan 2015 00:03:55 +0000 (19:03 -0500)]
Adds PCI iobar helper

This stuff is a bit clunky; you need to check after each pci_get_whatever().
Not sure if there's a nicer way, esp given we have a bunch of device code from
2-3 OSs in here.

5 years agoBXE: bring in the bus_space_{read,write}
Barret Rhoden [Thu, 22 Jan 2015 22:31:25 +0000 (17:31 -0500)]
BXE: bring in the bus_space_{read,write}

It's a nice wrapper, and maybe we'll use something similar in the future.
We're only using MMIO for BXE, though the wrappers support PIO as well.

The existing bxe_debug versions assume PIO, which won't work.

To use these, we'll just make the alloc_bar copy out of our pcidev.

5 years agoBXE: basic probe
Barret Rhoden [Wed, 21 Jan 2015 23:13:48 +0000 (18:13 -0500)]
BXE: basic probe

Then it bails out.

One difference between Plan 9 and BSD is when the ctlr gets allocated.  Plan 9
does it in the PCI/PNP stage.  In BSD, the sizeof (or something) is declared
earlier and someone else does it.  I think.  I'm less a fan of the latter part;
maybe I don't understand it.  But the pcidev->some_void_star = sc might be

5 years agoBXE: mutex initialization
Barret Rhoden [Wed, 21 Jan 2015 21:49:50 +0000 (16:49 -0500)]
BXE: mutex initialization

Dropping the extra arguments.  And spatch worked fine this time!  (With the
spatchme.sh script).

5 years agoBXE: alarm runs in RKM context
Barret Rhoden [Wed, 21 Jan 2015 17:20:13 +0000 (12:20 -0500)]
BXE: alarm runs in RKM context

The BXE alarm handler does some things that could block, like qlocks and
kmallocs.  Plus it is safer to run as an RKM (but with higher latency).

5 years agoClarifies alarm usage
Barret Rhoden [Wed, 21 Jan 2015 17:18:58 +0000 (12:18 -0500)]
Clarifies alarm usage

Alarms can run in IRQ context or RKM context.  The choice is made when the
waiter is initialized.

5 years agoBXE: catches potential PF
Barret Rhoden [Wed, 21 Jan 2015 17:08:44 +0000 (12:08 -0500)]
BXE: catches potential PF

I don't know if the mac count is the same as the number of m structs.

5 years agobxe: get rid of useless warning.
Ron Minnich [Sat, 17 Jan 2015 08:57:16 +0000 (00:57 -0800)]
bxe: get rid of useless warning.
It's not like we don't know this, and it's just annoying.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoPlan 9 does this in a different place and different way.
Ron Minnich [Sat, 17 Jan 2015 08:55:34 +0000 (00:55 -0800)]
Plan 9 does this in a different place and different way.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: if there's a way to tell teh stack to pause, I've forgotten it. So don't try.
Ron Minnich [Sat, 17 Jan 2015 08:50:11 +0000 (00:50 -0800)]
bxe: if there's a way to tell teh stack to pause, I've forgotten it. So don't try.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agonet: add LRO feature
Ron Minnich [Sat, 17 Jan 2015 08:42:58 +0000 (00:42 -0800)]
net: add LRO feature

Needed for lots of things, so let's just add it in.

is TSO the same as LRO? I did not think so but ... Andrew?

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: correctly use the maddr in the netif.
Ron Minnich [Sat, 17 Jan 2015 08:28:17 +0000 (00:28 -0800)]
bxe: correctly use the maddr in the netif.

It's a linked list. We need to clean this up to use the Akaros ones.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: fix copyin/copyout
Ron Minnich [Sat, 17 Jan 2015 08:23:42 +0000 (00:23 -0800)]
bxe: fix copyin/copyout

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: we have an unload. It's called 'reboot'
Ron Minnich [Sat, 17 Jan 2015 08:16:41 +0000 (00:16 -0800)]
bxe: we have an unload. It's called 'reboot'

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: no support for changing media type, so don't waste time pretending.
Ron Minnich [Sat, 17 Jan 2015 08:15:24 +0000 (00:15 -0800)]
bxe: no support for changing media type, so don't waste time pretending.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: add back an ioctl.
Ron Minnich [Sat, 17 Jan 2015 08:04:34 +0000 (00:04 -0800)]
bxe: add back an ioctl.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: properly get the maddr from the netif.
Ron Minnich [Sat, 17 Jan 2015 07:59:10 +0000 (23:59 -0800)]
bxe: properly get the maddr from the netif.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: fake out if_setflags/if_getflags
Ron Minnich [Sat, 17 Jan 2015 01:30:37 +0000 (17:30 -0800)]
bxe: fake out if_setflags/if_getflags

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBXE: the IGU stuff appears OK now
Ron Minnich [Sat, 17 Jan 2015 01:19:27 +0000 (17:19 -0800)]
BXE: the IGU stuff appears OK now

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agobxe: remove another warning
Ron Minnich [Sat, 17 Jan 2015 00:27:07 +0000 (16:27 -0800)]
bxe: remove another warning

gz_strm never worked, but they used the buffers.
So remove the thing that never worked, leave all else alone.

These device compression things almost never work, so it's no surprise.

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agobxe: replace callout code with alarm code.
Ron Minnich [Fri, 16 Jan 2015 23:25:29 +0000 (15:25 -0800)]
bxe: replace callout code with alarm code.

We only do alarms to core 0, the noise core.

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agobxe: more cleanup.
Ron Minnich [Fri, 16 Jan 2015 22:52:22 +0000 (14:52 -0800)]
bxe: more cleanup.

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agoBXE: more minor changes
Barret Rhoden [Fri, 16 Jan 2015 00:45:00 +0000 (16:45 -0800)]
BXE: more minor changes

Including an spatch script!

5 years agoBus space barriers (XCC)
Barret Rhoden [Fri, 16 Jan 2015 00:12:39 +0000 (16:12 -0800)]
Bus space barriers (XCC)

On x86, a LOCK will flush the write buffers.  This is what BSD does under the
hood for their bus_space_barriers.

Technically, these are kernel headers we're messing with (the membar), but
don't worry about it.

5 years agoBXE: randomread()
Barret Rhoden [Fri, 16 Jan 2015 00:07:15 +0000 (16:07 -0800)]
BXE: randomread()

And dummy return values to squelch some warnings.

5 years agoBXE: ilog2->LOG2_UP
Barret Rhoden [Thu, 15 Jan 2015 23:55:07 +0000 (15:55 -0800)]
BXE: ilog2->LOG2_UP

Assuming we want to round up.

5 years agoPCI: helpers for BSD
Barret Rhoden [Thu, 15 Jan 2015 23:49:17 +0000 (15:49 -0800)]
PCI: helpers for BSD

Including CARDBUS versions!

5 years agoMakes bcopy part of string.h
Barret Rhoden [Thu, 15 Jan 2015 23:29:08 +0000 (15:29 -0800)]
Makes bcopy part of string.h

So it is accessible outside of string.c.

5 years agoBXE: bus_dma hacks
Barret Rhoden [Thu, 15 Jan 2015 23:25:09 +0000 (15:25 -0800)]
BXE: bus_dma hacks

In lieu of doing anything smart, we just assume all memory is DMA-able.

5 years agoBXE: malloc fixups
Barret Rhoden [Thu, 15 Jan 2015 22:22:56 +0000 (14:22 -0800)]
BXE: malloc fixups

I briefly considered trying an spatch for this.  Very briefly.

5 years agoBXE: min->MIN, plus an spatch
Barret Rhoden [Thu, 15 Jan 2015 18:44:11 +0000 (10:44 -0800)]
BXE: min->MIN, plus an spatch

Took way longer than actually renaming.  And I still had to go back and rename
the ones that were commented out.  But at least it works!

5 years agoBXE: changes sp_state back to a long
Barret Rhoden [Thu, 15 Jan 2015 18:29:02 +0000 (10:29 -0800)]
BXE: changes sp_state back to a long

The only atomic_t ops were the reads, which can be done with an ACCESS_ONCE().
Note that we drop the & from sp_state, since ACCESS_ONCE() provides that.

Also, all of the bitops dislike getting an atomic_t (a pointer, for now).

5 years agoBXE: Enabled taskqueue code
Barret Rhoden [Wed, 14 Jan 2015 23:30:22 +0000 (15:30 -0800)]
BXE: Enabled taskqueue code

Couldn't enable ioctl stuff yet.  Otherwise most taskqueue users compile.

5 years agoBSD taskqueues via KMSGs
Barret Rhoden [Wed, 14 Jan 2015 23:24:32 +0000 (15:24 -0800)]
BSD taskqueues via KMSGs

BSD taskqueues are kernel threads that execute work asynchronously.  Check out
http://www.freebsd.org/cgi/man.cgi?query=taskqueue for more info.

We could implement them with ktasks that sleep on queues, and pump the tasks
into the queues.  But the tasks are basically slimmed down kernel messages, so
we can just send a message.

In the future, we may want better support or more taskqueue behaviors, both in
BSD code and more generally throughout Akaros.  We can always reimplement
taskqueues in a more appropriate manner at that time.

5 years agoBXE: locking and mutexes
Barret Rhoden [Wed, 14 Jan 2015 22:33:49 +0000 (14:33 -0800)]
BXE: locking and mutexes

5 years agoUseful script for spatching
Barret Rhoden [Wed, 14 Jan 2015 22:33:07 +0000 (14:33 -0800)]
Useful script for spatching

Spatch gets cranky if you give it multiple files at a time.

5 years agoDon't try to attach hardware we know doesn't work.
Ron Minnich [Tue, 13 Jan 2015 20:02:44 +0000 (12:02 -0800)]
Don't try to attach hardware we know doesn't work.

We can now boot on hardware.

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agoMove to using the adapter struct for the ctlr.
Ron Minnich [Tue, 13 Jan 2015 01:24:15 +0000 (17:24 -0800)]
Move to using the adapter struct for the ctlr.

Also remove more brokenness that no longer applies.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBring more stuff back. Still builds.
Ron Minnich [Tue, 13 Jan 2015 00:48:43 +0000 (16:48 -0800)]
Bring more stuff back. Still builds.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoNow builds with this set of changes.
Ron Minnich [Tue, 13 Jan 2015 00:04:18 +0000 (16:04 -0800)]
Now builds with this set of changes.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBXE: Atomics
Barret Rhoden [Mon, 12 Jan 2015 23:42:02 +0000 (18:42 -0500)]
BXE: Atomics

Let's change all atomics to use atomic_t too.  Might not be the best, but it's

5 years agoBit ops
Barret Rhoden [Mon, 12 Jan 2015 23:33:48 +0000 (18:33 -0500)]
Bit ops

5 years agoRandom fixes
Ron Minnich [Mon, 12 Jan 2015 23:32:50 +0000 (15:32 -0800)]
Random fixes

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBXE: minor changes
Barret Rhoden [Mon, 12 Jan 2015 23:10:05 +0000 (18:10 -0500)]
BXE: minor changes

DELAY = udelay.

Regarding the __predicts, I've heard they are a mixed bag for performance (via
waterman@).  I'd want to test it out before adding it blindly.

5 years agoBXE: pcidev fixups
Barret Rhoden [Mon, 12 Jan 2015 22:28:19 +0000 (17:28 -0500)]
BXE: pcidev fixups

Spatch for the pci_write_config business.  The pci_read_config failed.  After
spending enough time on it to have done it by hand once or twice, I just did it
by hand.

I didn't have an spatch for changing all usages of bxe_adapter->dev and ->pdev
to ->pcidevice.  Just did it manually (vi: %s/sc->dev\(\W\)/sc->pcidev\1/gc)

5 years agoAdds driver shell for BXE
Barret Rhoden [Mon, 12 Jan 2015 21:21:09 +0000 (16:21 -0500)]
Adds driver shell for BXE

Feel free to strip out more.  I used igbe as a baseline, and left stuff that
seemed like it'd be useful.

5 years agoBuilds, and there is now a menuconfig option for BXE.
Ron Minnich [Fri, 9 Jan 2015 22:17:58 +0000 (14:17 -0800)]
Builds, and there is now a menuconfig option for BXE.

It builds without it and won't link with it.

Time for Ron and Barret to get it done.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoCompiles, won't link.
Ron Minnich [Fri, 9 Jan 2015 21:45:57 +0000 (13:45 -0800)]
Compiles, won't link.

Lots more to do.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoanother checkpoint ...
Ron Minnich [Fri, 9 Jan 2015 20:01:56 +0000 (12:01 -0800)]
another checkpoint ...

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoNow it gets fun. Hundreds of errors. Oh joy.
Ron Minnich [Fri, 9 Jan 2015 17:08:47 +0000 (09:08 -0800)]
Now it gets fun. Hundreds of errors. Oh joy.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoAnother incremental.
Ron Minnich [Fri, 9 Jan 2015 01:33:42 +0000 (17:33 -0800)]
Another incremental.

now the real fun begins: bxe_elink.c

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoanother checkpoint commit. No longer builds.
Ron Minnich [Thu, 8 Jan 2015 21:07:35 +0000 (13:07 -0800)]
another checkpoint commit. No longer builds.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoNo longer builds, but this is a good intermediate save point.
Ron Minnich [Thu, 8 Jan 2015 19:27:23 +0000 (11:27 -0800)]
No longer builds, but this is a good intermediate save point.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoDid not need to comment out the bxe_dma stuff.
Ron Minnich [Thu, 8 Jan 2015 00:31:14 +0000 (16:31 -0800)]
Did not need to comment out the bxe_dma stuff.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBring back debug print functions, other changes directed to compilation.
Ron Minnich [Thu, 8 Jan 2015 00:18:39 +0000 (16:18 -0800)]
Bring back debug print functions, other changes directed to compilation.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBuilds with many warnings.
Ron Minnich [Thu, 8 Jan 2015 00:02:40 +0000 (16:02 -0800)]
Builds with many warnings.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoFurther changes to get it to build.
Ron Minnich [Wed, 7 Jan 2015 20:55:18 +0000 (12:55 -0800)]
Further changes to get it to build.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoPut things in the right place and start building. Not passing yet!
Ron Minnich [Wed, 7 Jan 2015 18:36:38 +0000 (10:36 -0800)]
Put things in the right place and start building. Not passing yet!

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoinitial import of bxe from FreeBSD 10.0
Ron Minnich [Tue, 6 Jan 2015 23:01:51 +0000 (15:01 -0800)]
initial import of bxe from FreeBSD 10.0

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agoFixes pcpu lock tracer
Barret Rhoden [Fri, 30 Jan 2015 02:25:42 +0000 (21:25 -0500)]
Fixes pcpu lock tracer

Core 0 was saying it was ready to trace locks before it allocated the
buffer.  That's probably been broken for a while!

Thanks to Godfrey for his commit, which made me test the lock tracer.

5 years agoFix void* arithmetic bug. Add dassert facility.
Godfrey van der Linden [Thu, 29 Jan 2015 17:17:32 +0000 (09:17 -0800)]
Fix void* arithmetic bug. Add dassert facility.

In C the behaviour of arthmatic on void * pointers is undefined. GCC has
a language extension that equates it with a uint8_t, but other compilers
don't. Change the tr_buf to a unsigned char to define byte arithmatic.

Split the __get_tr_slot into two adding __get_tr_slot_overwrite for the
version that masks the slot down to a limited range.

Add dassert() for assertions that are only optionally compiled in. Used
at the moment to check index is in range in __get_tr_slot.

5 years agoAdds a test for the u16 pool
Barret Rhoden [Thu, 29 Jan 2015 02:38:47 +0000 (21:38 -0500)]
Adds a test for the u16 pool

Misc complaints about the testing framework:

- ASSERT_M only lets you have a string, not a format string.
- put doesn't return, so we have a "loud" test for that.  alternatively,
  we could have put panic, but then we couldn't test it at all.  and i
  don't particularly want it to have a return value.
- ASSERT_M just blindly returns.  we're leaking memory.

5 years agoCleans up smallpool, adds locking
Barret Rhoden [Wed, 28 Jan 2015 18:22:09 +0000 (13:22 -0500)]
Cleans up smallpool, adds locking

I tried various CAS schemes, but they don't work very well.  Using a
history counter, I was able to make get/pop lock-free, but not put/push.
The issue was that the pusher needs to have 'v' written by the time it
decrements, but it can't be sure of its slot when until decrement
succeeds.  It would work with only one pusher, or with an additional
'ready' flag per slot, similar to BCQs.

5 years agoLindent + comments
Barret Rhoden [Tue, 27 Jan 2015 18:03:24 +0000 (13:03 -0500)]
Lindent + comments

We should be able to do something atomically, but it'll require some
rewriting and using a history counter.  Maybe.

5 years agoAdds some programs to busybox's default
Barret Rhoden [Wed, 28 Jan 2015 23:59:39 +0000 (18:59 -0500)]
Adds some programs to busybox's default

Hexdump etc.  All courtesy of Drew.

Rebuild BB for it to take effect.

5 years agoBusybox will rebuild when defconfig changes
Barret Rhoden [Wed, 28 Jan 2015 23:58:34 +0000 (18:58 -0500)]
Busybox will rebuild when defconfig changes

Previously, you'd have to make clean, then make.

5 years agoRemoves debugging code
Barret Rhoden [Tue, 27 Jan 2015 16:27:22 +0000 (11:27 -0500)]
Removes debugging code

Accidentally added in aaa7e62.

5 years agoFor your inspection: small id pool
Ron Minnich [Mon, 26 Jan 2015 23:40:55 +0000 (15:40 -0800)]
For your inspection: small id pool

This is a stack and it's about 30 times faster than the current
tag allocator used in devmnt (yes, 30).

It could be used for any id pool that's less than 64K, including
VPID and the 16-bit tags used in VMID.

I doubt I need to use the first element of the array as a top of
stack, that's a little too cute maybe, but not returning element
0 is a good idea, that is reserved in many situation SUCH AS
vpid and so on.

Can we do some sort of ACAS on the TOS in such a way that it never
increments beyond 0xfffe?

Comments appreciated.

Signed-off-by: Ron Minnich <rminnich@google.com>
5 years agoBusybox build infrastructure (BB)
Barret Rhoden [Fri, 23 Jan 2015 14:37:48 +0000 (09:37 -0500)]
Busybox build infrastructure (BB)

You can now build and install busybox from within the kernel repo.

$ cd tools/apps/busybox
$ make [x86_64 | riscv]  // default x86_64
$ profit

As new patches are added, you'll just need to make.  Busybox is small
enough that I just trash the old one and rebuild whenever there is a
change.  If there is a new CC, you may need to make clean.

5 years agoRemoves KFS symlinks
Barret Rhoden [Fri, 23 Jan 2015 02:08:03 +0000 (21:08 -0500)]
Removes KFS symlinks

They will be installed by a busybox install target shortly.

5 years agoSlightly more useful error() in validname()
Barret Rhoden [Thu, 22 Jan 2015 23:58:01 +0000 (18:58 -0500)]
Slightly more useful error() in validname()

This is popping up with some memory corruptions, and %q doesn't do anything.

5 years agoClean up the debug printing
Ron Minnich [Thu, 22 Jan 2015 01:41:51 +0000 (17:41 -0800)]
Clean up the debug printing

change %ud to %u, add a trailing space so it's easier to read.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoRemove a moron error in test/cs.c
Ron Minnich [Thu, 22 Jan 2015 01:20:35 +0000 (17:20 -0800)]
Remove a moron error in test/cs.c

in my anxiety to get better error messages I made an unholy mess
of rwalk and managed to introduce a free bug.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoEnable __builtin_clz for all architectures.
Godfrey van der Linden [Tue, 20 Jan 2015 22:16:19 +0000 (14:16 -0800)]
Enable __builtin_clz for all architectures.

According to Andrew Waterman, gcc provides a default implementation that
is efficient for any RTL that does not support support the command
directly.  I suspect that LLVM/clang is similar, though we can worry
about that in the future.

5 years agoRemoves the option ENABLE_MP_TABLES
Barret Rhoden [Tue, 20 Jan 2015 20:50:53 +0000 (15:50 -0500)]
Removes the option ENABLE_MP_TABLES

Everyone should be saying 'Y' at this point, so much so that I don't want to
support the old style.  ENABLE_MP_TABLES was also a catch-all for anything
related to mptables, acpi, msi-x, etc.

5 years agoUse builtin_clz log2 for x86 architectures.
Godfrey van der Linden [Thu, 15 Jan 2015 18:42:34 +0000 (10:42 -0800)]
Use builtin_clz log2 for x86 architectures.

Also fix LOG2_UP which would fail if n > 2^32.  (1 << (uintptr_t) 33) ==
0 unfortunately, the << operator does not promote the one to uint64_t.

Then I booted the kernel using both old and new versions and paniced if
they didn't agree. This code has also been tested using a clang compiler
on x86_64 using the following loop in a standalone app.

for (i = 0; i < 64; i++) {
uintptr_t v = (uintptr_t) 1 << i;
assert(new_log2_up(v) == old_log2_up(v));
assert(new_log2_up(v-1) == old_log2_up(v-1));
assert(new_log2_up(v+1) == old_log2_up(v+1));
assert(new_log2_down(v) == old_log2_down(v));
assert(new_log2_down(v-1) == old_log2_down(v-1));
assert(new_log2_down(v+1) == old_log2_down(v+1));

5 years agoFixes busybox perror patch (BB)
Barret Rhoden [Tue, 20 Jan 2015 02:26:47 +0000 (21:26 -0500)]
Fixes busybox perror patch (BB)

The old patch to BB was buggy.  fputs() now sets errno internally in
some cases, which is legal.  I shouldn't have checked errno blindly
without checking the ret of fputs().

You'll need to repatch and build busybox.  The 'easiest' way is to
download the tarball, extract the old echo.c, and reapply the patch.

From the directory containing busybox-1.17.3:

$ wget http://www.busybox.net/downloads/busybox-1.17.3.tar.bz2
$ tar -xjf busybox-1.17.3.tar.bz2 busybox-1.17.3/coreutils/echo.c
$ patch -p1 < $AKAROS_REPO/tools/patches/busybox/bb-echo-perror.patch
$ cd busybox-1.17.3 ; make
$ cp busybox_unstripped $AKAROS_REPO/kern/kfs/bin/busybox

5 years agoFixes O_CLOEXEC
Barret Rhoden [Mon, 19 Jan 2015 23:38:01 +0000 (18:38 -0500)]

O_CLOEXEC, the open flag from glibc (sometimes called the mode in 9ns)
was being saved as a struct file f_flag, instead of on the file
descriptor.  Likewise, fcntl() was doing the same.

To deal with the races that O_CLOEXEC was made for (and which make the
fcntl SETFD option arguably useless) we need to set FD_CLOEXEC
atomically when the FD is inserted into the FD table.  This required
work with both VFS and 9ns.

I'm not sure how inferno/9ns actually handled CLOEXEC, since newfd()
doesn't take any flags.

5 years agoFixes kernel argument checking in "m"
Barret Rhoden [Mon, 19 Jan 2015 23:36:07 +0000 (18:36 -0500)]
Fixes kernel argument checking in "m"

Need at least one argument before dereferencing.

Also, debugcmd is pretty handy.

5 years agoFixes "m"
Barret Rhoden [Mon, 19 Jan 2015 22:09:34 +0000 (17:09 -0500)]
Fixes "m"

Need to pass all of the args as one argument to echo, otherwise they
could be sent one at a time to the kernel.  I've had this happen when
calling m from a script.

5 years ago__nlink_t is 64 bits in stat struct, not 32
Kevin Klues [Sat, 17 Jan 2015 18:28:56 +0000 (10:28 -0800)]
__nlink_t is 64 bits in stat struct, not 32

Looking at the changelog, it's been this way since 2000.

From glibc-2.19/Changelog.11
2000-06-16  Jes Sorensen  <jes@linuxcare.com>
    * sysdeps/unix/sysv/linux/ia64/bits/types.h: Make __ino_t,
    __nlink_t and __blkcnt_t 64 bit to accomodate new kernel stat data

My hunch is that things got reorganized such that previously the
default typedef for __nlink_t was 32 bits, while a linux specific one
was 64 bit.  It appears they have now made the default one 64 bit as

5 years agoUpdate ifconfig for c99 at berkeley
Kevin Klues [Fri, 16 Jan 2015 23:22:35 +0000 (15:22 -0800)]
Update ifconfig for c99 at berkeley

c99 is a 32 core ivybridge machine accessible the same way as c89

5 years agoFixes glibc stage 2 pthread errors (XCC)
Barret Rhoden [Thu, 15 Jan 2015 18:03:13 +0000 (10:03 -0800)]
Fixes glibc stage 2 pthread errors (XCC)

On many, but not all, Akaros installations, the toolchain build would fail in
stage 2 of glibc, during the nss build.

The failure was due to the make system clobbering Parlib's pthread.h with the
one from glibc-2.19/include/pthread.h.  Not all systems would do the install,
which is rather mystifying.  It looks like the build system would see pthread.h
was needed, and then generate dependencies on both ../include/pthread.h and on
$TOOLCHAIN_SYSROOT/usr/include/pthread.h (the latter is Akaros's).  Some
systems would install include/pthread.h into the toolchain sysroot.  Others
would not.

By removing include/pthread.h, the dependency on that file was never created,
and thus never attempted to be installed.

Old dependency info:
$ grep -r pthread.h x86_64-ucb-akaros-glibc-stage2-builddir/
x86_64-ucb-akaros-glibc-stage2-builddir/nss/db-init.os.d: ../nscd/nscd.h ../include/pthread.h \
x86_64-ucb-akaros-glibc-stage2-builddir/nss/db-init.os.d: $TOOLCHAIN_INSTALL/x86_64-ucb-akaros/sysroot/usr/include/pthread.h

Old dependency info:
$ grep -r pthread.h x86_64-ucb-akaros-glibc-stage2-builddir/
x86_64-ucb-akaros-glibc-stage2-builddir/nss/db-init.os.d: $TOOLCHAIN_INSTALL/x86_64-ucb-akaros/sysroot/usr/include/pthread.h

You'll need to make clean your toolchain and rebuild.

5 years agoIgnore all cscope files.
Godfrey van der Linden [Wed, 14 Jan 2015 21:36:15 +0000 (13:36 -0800)]
Ignore all cscope files.

5 years agoFixes x86 spinlocks with new gcc
Barret Rhoden [Wed, 14 Jan 2015 21:21:26 +0000 (13:21 -0800)]
Fixes x86 spinlocks with new gcc

Newer versions of GCC screw up our ancient spinlocks.

The issue was that "m" can include (%rax) implicitly, and GCC does not give us
a way to tell it to not use that register.  Previously, putting "eax" in the
clobber list was enough (maybe!) to tell GCC to not mess with it.  But it
really only tells GCC not to use it afterwards.  There is no way to tell it to
not use it during.  And we don't know which register they picked.  The fix is
to use a dummy variable, to force GCC to give us a register to play with.

To make things fun to track down, the location of the KMSG immediate lock in
pcpui mattered for this, since the clobber of rax's lower byte made a
diffference with how this would show up.

If we have any other inline asm with "m" in the input:output, we'll need to
take a look.

For a similar horror story, check out:

Note the answer was basically "don't use inline asm."

5 years agoFixes smp_call_function (again)
Barret Rhoden [Mon, 12 Jan 2015 17:13:45 +0000 (12:13 -0500)]
Fixes smp_call_function (again)

2e856c58 was wrong; past-barret was right.  It's a checklist, so you tick off
items as they are done.  The confusing part when debugging was that the IRQ
handlers were firing, but were not downing the checklist.

The root of the problem was that the SMP_CALL IRQ numbers didn't line up with
the "clever" initialization routine used for the handler wrappers.  A while
back I reorganized the x86 IRQ vectors and moved SMP_CALL0 to 224 from 240.
The initialization didn't change, so the smp_call vectors were still 240.  240
happened to be the timer IRQ, which means an smp_call_function would run on the
timer tick too.  The main thing was that the check for downing the checklist
didn't happen, since it expected 224-228, so the checklist would never clear.
That appeared like the waiting code was wrong, which it was not.

5 years agoFixes waiton_checklist()
Barret Rhoden [Wed, 7 Jan 2015 22:43:33 +0000 (17:43 -0500)]
Fixes waiton_checklist()

Geez, this bug was around since nearly the dawn of time (2009-04-17).

If someone actually did an smp_call with a wait wrapper, they might get lucky
and have core 0 blow through the check before anyone set a bit.

I'd love to get rid of the smp_call_function business, and replace it with
broadcast kernel messages (at least do so internally) or something.  It is a
somewhat cheap version of a broadcast message, albeit with a limited number of

5 years agonix: slightly better memory allocation
Barret Rhoden [Wed, 7 Jan 2015 19:33:09 +0000 (14:33 -0500)]
nix: slightly better memory allocation

The paddr and size of the nix image is controlled by CONFIG_s.  There's still
only one image for the entire system.

5 years agoget_cont_phys_pages_at()
Barret Rhoden [Wed, 7 Jan 2015 19:25:59 +0000 (14:25 -0500)]

Allocates a chunk of physical memory at a particular paddr.  We might have
rules in the future regarding the alloc size and the alignment

5 years agoHelper: nr_pages()
Barret Rhoden [Wed, 7 Jan 2015 19:22:30 +0000 (14:22 -0500)]
Helper: nr_pages()

It felt familiar writing this again in pmap.h.  I named it the same as the mm
helper and the compiler helped me out.  At least I didn't write it with new
bugs this time around.

5 years agonix: allow only one nix and comment cleanup
Barret Rhoden [Wed, 7 Jan 2015 16:19:06 +0000 (11:19 -0500)]
nix: allow only one nix and comment cleanup

We can only handle one nix - enforced on clone attempts.

I've left various comments around for whenever we want to have more than one
nix or stop a nix (short of rebooting).

5 years agoread_exactly_n()
Barret Rhoden [Wed, 7 Jan 2015 16:00:23 +0000 (11:00 -0500)]

Yanked from nix.c.  We aren't using it yet, but looks useful in the future.
Note my comment about clobbering underlying errors with our Eshort.

5 years agonix: Fixes QID2NIX
Barret Rhoden [Wed, 7 Jan 2015 15:53:36 +0000 (10:53 -0500)]
nix: Fixes QID2NIX

Using q.vers was just lucky, since our index was already 0.