5 years agox86: pgdir_t handles both KPT and EPT
Barret Rhoden [Tue, 17 Mar 2015 14:09:08 +0000 (10:09 -0400)]
x86: pgdir_t handles both KPT and EPT

We still don't make EPTs, but all of the infrastructure is in place.

5 years agox86: changes pte_t to be a KPTE and an EPTE
Barret Rhoden [Tue, 17 Mar 2015 13:38:57 +0000 (09:38 -0400)]
x86: changes pte_t to be a KPTE and an EPTE

Ideally, a PTE would always have a KPTE, and optionally have an EPTE.
Now, for all ops other than walk_okay, we have at least one of KPTE or
EPTE (and possibly both).  pgdir_walk() will return both.  memwalks will
have only one or the other.

The alternative is to come up with a way to walk both tables in
lockstep, jumping back and forth and building a full PTE for the
memcallback at each point.  We might do that later, if necessary.

5 years agoSplits pmap ops up for each arch
Barret Rhoden [Mon, 16 Mar 2015 20:00:39 +0000 (16:00 -0400)]
Splits pmap ops up for each arch

The helpers are the same for now, but this lets x86's ops change to
support EPTs.

5 years agoRemove PDX and NPDENTRIES
Barret Rhoden [Mon, 16 Mar 2015 19:48:26 +0000 (15:48 -0400)]

Old macros, not needed any more.

5 years agoChanges pde_t* -> pgdir_t
Barret Rhoden [Mon, 16 Mar 2015 19:35:23 +0000 (15:35 -0400)]
Changes pde_t* -> pgdir_t

Just like pte_t, the nature of the pgdir is arch-dependent.  For now,
it's all the same under the hood, thanks to various casts.

5 years agoMakes pte_t an opaque type
Barret Rhoden [Mon, 16 Mar 2015 18:16:48 +0000 (14:16 -0400)]
Makes pte_t an opaque type

The nature of pte_t will be arch-dependent.  It could be a struct or the
old pte_t (kpte_t) and have its own tricks for modification.  This patch
changes all of the accesses that implicitly treated pte_t as something
that could be read or written in a certain manner.

It also catches a bug in the unused (and warned) unmap_vmap_segment().

5 years agox86: adds a kpte_t for the pte_t
Barret Rhoden [Mon, 16 Mar 2015 18:14:39 +0000 (14:14 -0400)]
x86: adds a kpte_t for the pte_t

pte_t as a directly-manipulatable object is going away for x86.
Internally, we want something to do the old pte_t's job for the kernel
page table: the kpte_t.

5 years agoDemo code to set up a VMMCP, including #c access
Ron Minnich [Thu, 12 Mar 2015 20:55:12 +0000 (13:55 -0700)]
Demo code to set up a VMMCP, including #c access

This correctly starts a VMMCP as an 'unrestricted guest'.

Next step is to handle the resulting EPT page fault, which exits the vm with
error 0x21.

(git-fu'd by brho)

5 years agoVMM: Hook the VMM to the process (XCC)
Barret Rhoden [Thu, 12 Mar 2015 17:06:31 +0000 (13:06 -0400)]
VMM: Hook the VMM to the process (XCC)

Syscall for turning any proc, including SCPs, into VMMs.  We'll see if
we need to limit to MCPs later. (reflected faults and stuff).

This changes the kernel header, so you'll need to reinstall your headers
if you want to access the new syscall by name.  Either copy
bits/syscall.h manually or rebuild your toolchain.

5 years agoVarious minor debugging changes
Ron Minnich [Wed, 11 Mar 2015 13:37:34 +0000 (06:37 -0700)]
Various minor debugging changes

At least give a HINT when things go wrong. Just a teensy weensy one.

(git-fu'd by brho, and changed the arg order in kmalloc's print)

5 years agoVMMCP: initialization
Barret Rhoden [Wed, 11 Mar 2015 16:28:39 +0000 (12:28 -0400)]
VMMCP: initialization

vmm_init() happens before smp boot, and the per-cpu bits are done in
pcpu init.


5 years agoTry out Dune vmm stuff.
Ron Minnich [Sat, 7 Mar 2015 03:03:49 +0000 (19:03 -0800)]
Try out Dune vmm stuff.

This has been frustrating, finding a reasonably compact yet not awful bit of code
to use for akaros. They're either gigantic, featureful with stuff we don't want,
buggy as can be, or all three.

The Dune stuff seems a reasonably pared down subset of kvm and it's actually
pretty clean. Also, unlike every other bit of vmx code we've tried lately,
it actually seems to work, which is a bonus. And it will never run as a 1978 8086.

We actually start a VM at this point. And, it fails, and exits, *but akaros is not hurt*.
We just keep going.

This was imported, heavily edited, and retroactively committed.
(git-fu'd by brho)

5 years agoMore pruning of files we don't need.
Ron Minnich [Mon, 16 Mar 2015 17:43:48 +0000 (10:43 -0700)]
More pruning of files we don't need.

(git-fu'd by brho)

5 years agox86: helpers for accessing symbols from asm
Barret Rhoden [Tue, 10 Mar 2015 20:49:17 +0000 (16:49 -0400)]
x86: helpers for accessing symbols from asm

5 years agoRun a NIX guest.
Ron Minnich [Thu, 5 Mar 2015 22:29:03 +0000 (14:29 -0800)]
Run a NIX guest.

This works. Basically, when a NIX is cloned, we put a simple program in it to test.

When that NIX is started, it puts a
on 3f8, and return.

We've seen this work.

In this case, I did this:
cat '#t/clone'
echo reserve 5 > '#t/nix0/ctl'
echo run 5 0xffff800040000000 > '#t/nix0/ctl'

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBB: manually writes echo's buffer
Barret Rhoden [Fri, 6 Mar 2015 17:43:51 +0000 (12:43 -0500)]
BB: manually writes echo's buffer

So setvbuf() may or may not have worked, since we don't get *any* error
feedback from echo!  When we set to linebuffering, fflush() does not
return any errors.  The kernel sets errno and returns -1.  fflush clears
errno at some point and returns 0, instead of EOF.

I spent too much time wading through glibc's 10 levels of indirection
and don't know why this happens.  If we use block buffering instead of
line, fflush works fine.

This limits echo's to 4096 chars.  Whatever.  We're more likely to find
another issue than to have an echo that long.

Make clean and make busybox.

5 years agoFixes unchecked results from parsecmd
Barret Rhoden [Fri, 6 Mar 2015 15:00:20 +0000 (10:00 -0500)]
Fixes unchecked results from parsecmd

Before accessing the strings of a parsecmd, we must check the nf (num
fields).  Many devices were not checking, so something like
echo "" > /net/ether0/stats
Would trigger a PF.

Using lookupcmd() is safe, since it check the nf internally.  But any
naked access to the fields (like with strcmp) requires a check.

5 years agoFixes devnix's V lookup
Barret Rhoden [Thu, 5 Mar 2015 19:48:58 +0000 (14:48 -0500)]
Fixes devnix's V lookup

The issue was that the QID for chans that were genned from a Qnixdir had
a bad nixid.  We were passing either 0 (for ctl) or 1 (for image) (which
is what you get when you take (s - Qctl).  This happened to work okay
for ctl, since we usually have a nix0.  But image thought its struct v
was for nix1.

I think we only need to do this for "state machine genned" entries,
meaning the entries under Qnixdir.  The "directly genned" entries should
come in to gen with a properly filled out QID (which came from a
previous gen).

5 years agoRemoves old linux networking bits
Barret Rhoden [Thu, 5 Mar 2015 15:50:43 +0000 (10:50 -0500)]
Removes old linux networking bits

We weren't using or working on the e1000 or rtl8169 drivers, nor do we
need them ever.

The mii stuff was also uncompiled and unused.  If we ever need it, we
can pull it from more recent versions of Linux, or adapt Jim's ethermii

5 years agoBNX2X: usability fixups
Barret Rhoden [Wed, 4 Mar 2015 19:12:26 +0000 (14:12 -0500)]
BNX2X: usability fixups

For whatever reason, we can run with the max number of queues on ether0,
but not on ether1.  From poking around, this happened once we started
attaching after resetting both NIC functions (ether0 and ether1).  I had
tried this at one point, but it didn't work.  For whateve reason, it
does now.

But ether1 will still die with the same old MC assert - unless both NICs
are limited to 1 queue.  Then they both work fine.  Note that if the
NICs have different values for NQ (say, 15 for ether0 and 1 for ether1),
*ether0* will get the MC assert.

Other changes include making sure init only happens when we actually
have a bnx2x NIC (by contrast, pnp always happens), and cleaning up the
print debugging.

Unfortunately, we don't have a way to send parameters to attach yet, so
you'll have to manually toggle the debug level if you want to debug
while attaching.

5 years agoChanges devether's Max Trans Unit to 1500
Barret Rhoden [Tue, 3 Mar 2015 20:59:04 +0000 (15:59 -0500)]
Changes devether's Max Trans Unit to 1500

From 1514.  Linux drivers track it as 1500, and add on the header as
needed.  Plan 9 uses 1514, and includes the header.

I don't particularly care one way or another.  This way is a little
easier for porting, but have no problem with changing it back (given a
port to bnx2x's MTU code).

5 years agoBNX2X: disables TPA
Barret Rhoden [Mon, 2 Mar 2015 21:25:09 +0000 (16:25 -0500)]
BNX2X: disables TPA

TPA is the large-receive offload, which needs to hook in to the block
extra data business.  Disabling it for now, to make sure we can even
send packets.

Careful if you decide to turn on extra data, especially about how the
memory is allocated.  The current extra data code just kfrees
everything, but the bnx2x frag alloc gets a kpage.

To work on the extra data, grep for "AKAROS_PORT.*extra".

5 years agoBNX2X: Transmit synchronization
Barret Rhoden [Fri, 27 Feb 2015 23:05:11 +0000 (18:05 -0500)]
BNX2X: Transmit synchronization

The transmit function is called serially, per txdata, meaning there is only
ever one caller of it.  Instead of a netif lock, we use the poker, which
guarantees mutual exclusion (per poke_tracker).

The transmitter stops when the device is full.  Concurrently, the tx_int
could have freed up space in the tx ring.  When tx_int calls poke, poke
will make sure the transmit function runs at least once after poke is
called.  This ensures we don't stall on transmits.

If you're concerned about the network stack calling transmit over and
over while the TX ring is full, we can optimize slightly.  See the notes
above __bnx2x_tx_queue() for details.  In short, poke() is powerful, but
it won't solve all of your problems.

5 years agoBNX2X: Transmit
Barret Rhoden [Fri, 27 Feb 2015 20:05:17 +0000 (15:05 -0500)]
BNX2X: Transmit

Currently, there is no sync protection for multiple transmitters, it uses FP 0
(hard coded), and there is no feedback between tx_int and transmit.  If the tx
buffers are full, transmit will still drain the entire queue and keep failing.
tx_int does nothing when the tx ring has room.

5 years agoBNX2X: hacked up receive
Barret Rhoden [Thu, 26 Feb 2015 21:49:36 +0000 (16:49 -0500)]
BNX2X: hacked up receive

Can receive ARPs and forwards them to devether.  Will panic on tx_int.

5 years agoDebug helpers for BNX2X
Barret Rhoden [Thu, 26 Feb 2015 17:22:33 +0000 (12:22 -0500)]
Debug helpers for BNX2X

Poor-ftrace is too noisy without some blacklisted functions, at least for

The FP / PC print is useful if you're concerned about running off the stack.

5 years agoBNX2X: loads the NIC at attach time
Barret Rhoden [Thu, 26 Feb 2015 17:21:01 +0000 (12:21 -0500)]
BNX2X: loads the NIC at attach time

Other than being the "right way", it'll be necessary to have the edev attached
when we start receiving IRQs.

5 years agoBNX2X: Init of one NIC complete
Barret Rhoden [Tue, 24 Feb 2015 15:52:26 +0000 (10:52 -0500)]
BNX2X: Init of one NIC complete

The second one freezes the machine at:

bnx2x:[bnx2x_fw_command:3013()]wrote command (20010001) to FW MB param 0x00000000
bnx2x:[bnx2x_stats_handle:1434(ether0)]state 0 -> event 2 -> state 0

5 years agoBNX2X: Fixes atomic_cmpxchg spatch
Barret Rhoden [Tue, 24 Feb 2015 17:24:03 +0000 (12:24 -0500)]
BNX2X: Fixes atomic_cmpxchg spatch

The spatch was wrong.  Linux returns the old value on success and appears to
return the current value on failure.  No sense spatching that.

5 years agoBNX2X: limit queues to 2
Barret Rhoden [Mon, 23 Feb 2015 21:24:49 +0000 (16:24 -0500)]
BNX2X: limit queues to 2

Linux does not need to do this.  Something we're doing is wrong still.  If we
run with 8 queues, we get the dreaded MC assert.  With 4 total, we're okay (for

For now, we're limiting to four queues.  I tried looking for other diffs
between Linux and Akaros with 8 queues, but haven't found the problem yet.

But that total includes both functions, so we have only two per controller.

5 years agoBNX2X: poll and enough rx_int to do an sp_event
Barret Rhoden [Mon, 23 Feb 2015 21:11:13 +0000 (16:11 -0500)]
BNX2X: poll and enough rx_int to do an sp_event

Will do the rest of rx_int and tx_int as needed.

For now, we can handle the next events in the init process, but only if
num_queues is 4.  Even though the Linux driver can handle 8.

5 years agoBNX2X: Debug helper for queue setup command
Barret Rhoden [Mon, 23 Feb 2015 15:30:16 +0000 (10:30 -0500)]
BNX2X: Debug helper for queue setup command

Can run this same bit on Linux and see what all we're sending to the

5 years agoBNX2X: MTU conversion
Barret Rhoden [Mon, 23 Feb 2015 15:19:02 +0000 (10:19 -0500)]
BNX2X: MTU conversion

Plan 9's MTU includes the header (e.g. 1514, instead of 1500).  Linux
drivers expect just the payload and not the header, and will add in the
14 whenever it is needed.

There might be issues when plan 9 code accesses maxmtu, now that it's
1500 instead of 1514.  Keep a lookout for Etoobig in etherwrite.  What a

5 years agoBNX2X: IRQs implemented
Barret Rhoden [Thu, 19 Feb 2015 22:10:37 +0000 (17:10 -0500)]
BNX2X: IRQs implemented

IRQs are registered okay, but we were hanging here:

[bnx2x]:[bnx2x_state_wait:285()]waiting for state to become 1
[bnx2x]:[bnx2x_sp_task:5648()]sp task invoked
[bnx2x]:[bnx2x_sp_task:5657()]status 0
[bnx2x]:[bnx2x_sp_task:5658()]setting interrupt_occurred to 0
[bnx2x]:[bnx2x_state_wait:303()]timeout waiting for state 1

The issue is that we should be receiving an FP IRQ at this point, and we
needed to be consistent with whether or not we have CNIC_SUPPORT.  If we
do, then the code needs to reserve an extra MSIX vector in the
pci_devices table for the CNIC.  The actual card will know about it
(since we tell it elsewhere), and then the FP's won't begin until MSIX
vector 2 (the third one).

Also, since we do various hackery, we need to make sure the driver knows
we're using MSIX.  We'll tell it later, based on the flag.

Btw, the current pr_fmt seems a bit obnoxious.  Damned if you do, damned if you

5 years agoBNX2X: spatch atomics
Barret Rhoden [Thu, 19 Feb 2015 21:15:56 +0000 (16:15 -0500)]
BNX2X: spatch atomics

Gotta love the little things, like how the atomic_add()s differ in the order of
the arguments.

Manually uncommented the two functions, of course.

5 years agoBNX2X: nic_load progress
Barret Rhoden [Wed, 18 Feb 2015 23:13:12 +0000 (18:13 -0500)]
BNX2X: nic_load progress

Including vmalloc, gunzip, and others.  Grep XME for issues.

Up to setting up IRQs.

5 years agoBNX2X: loads and checks firmware
Barret Rhoden [Thu, 19 Feb 2015 16:44:01 +0000 (11:44 -0500)]
BNX2X: loads and checks firmware

From KFS.

5 years agoBNX2X: spatch changes for BUG and WARN
Barret Rhoden [Wed, 18 Feb 2015 19:52:28 +0000 (14:52 -0500)]
BNX2X: spatch changes for BUG and WARN

Spatching, vs #defining.  It'll be easier for other Linux code.

One slight pain is that BUG_ON's logic is the reverse of assert.  Not a huge

5 years agoBNX2X: open
Barret Rhoden [Wed, 18 Feb 2015 03:55:58 +0000 (22:55 -0500)]
BNX2X: open

nic_load still panics.

5 years agoBNX2X: initialization
Barret Rhoden [Mon, 16 Feb 2015 21:51:11 +0000 (16:51 -0500)]
BNX2X: initialization

bnx2x_init_one() seems to be called by the PCI code.  Most of the stuff
should work; grep for XME for what's known-busted:
- the MII/MDIO is commented out.  We'll probably need to do that.
- the queues aren't set up yet.  Linux did that when setting up the
  net_device.  We'll see what all we need to do later.

5 years agoBNX2X: timer->alarm
Barret Rhoden [Tue, 17 Feb 2015 23:05:01 +0000 (18:05 -0500)]
BNX2X: timer->alarm

RKM alarm, for now.

5 years agoBNX2X: Spatch dev_addr->ea
Barret Rhoden [Tue, 17 Feb 2015 21:01:37 +0000 (16:01 -0500)]
BNX2X: Spatch dev_addr->ea

Applied manually, due to so much being commented out.

5 years agoBNX2X: 9ns device infrastructure
Barret Rhoden [Thu, 12 Feb 2015 22:05:43 +0000 (17:05 -0500)]
BNX2X: 9ns device infrastructure

Starts to call the Linux init routines.  There's a PCI table parser, which
might end up in akaros_compat.c or something.

Everything is quite hacky.  PNP is called first, which triggers PCI.  PCI does
the discovery (and knows pci_id) and the ctlr/sb alloc.  Then it saves some
things for later (like pci_id).  Later, in reset, the edev is created and
stitched up with the ctlr/sb.  Good times.

5 years agoBNX2X: the nightmare compiles
Barret Rhoden [Thu, 12 Feb 2015 16:16:58 +0000 (11:16 -0500)]
BNX2X: the nightmare compiles

Anything that threw an error or warning of any sort was commented out.  And
then some extra things were probably commented out too.

You'll note that most everything is commented out, though its not all that bad.
Some things might convert easily.

5 years agoBNX2X: fake RCU and socket structs
Barret Rhoden [Wed, 11 Feb 2015 16:18:17 +0000 (11:18 -0500)]
BNX2X: fake RCU and socket structs

Also includes something spatch missed in cmn.c.

5 years agoBNX2X: spatch roundup/rounddown
Barret Rhoden [Wed, 11 Feb 2015 16:06:26 +0000 (11:06 -0500)]
BNX2X: spatch roundup/rounddown

5 years agoBNX2X: brings in cnic_if.h
Barret Rhoden [Wed, 11 Feb 2015 15:34:55 +0000 (10:34 -0500)]
BNX2X: brings in cnic_if.h

We probably don't need the CNIC.  The BSD driver didn't use it, and I've used
the bnx2x driver on linux with CONFIG_CNIC off.  But having the header around
might make things easier.

Copied from linux bc208e0ee0f and spatched.

5 years agoBNX2X: manually removes the PTP code
Barret Rhoden [Tue, 10 Feb 2015 23:01:34 +0000 (18:01 -0500)]
BNX2X: manually removes the PTP code

Peer Time Protocol.  Not particularly interested in supporting it right
now, and there's no kernel support.

5 years agoBNX2X: spatch IRQ handlers
Barret Rhoden [Wed, 11 Feb 2015 02:23:48 +0000 (21:23 -0500)]
BNX2X: spatch IRQ handlers

This doesn't deal with all types of IRQ handlers.  Some return values
indicating that a thread should finish the IRQ.  For these, I don't
transform the output.  I want there to be a compiler error so that
someone manually makes sure the handler is completed.

5 years agoBNX2X: various akaros-compat changes, esp ETH_
Barret Rhoden [Tue, 10 Feb 2015 18:02:18 +0000 (13:02 -0500)]
BNX2X: various akaros-compat changes, esp ETH_

Includes some ethtool headers, PCI stuff, and a few other minor tidbits.

Also, notice that we don't synchronize irqs.

5 years agoBNX2X: spatch ether->mtu -> ether->maxmtu
Barret Rhoden [Tue, 10 Feb 2015 17:04:35 +0000 (12:04 -0500)]
BNX2X: spatch ether->mtu -> ether->maxmtu

Yes, that's max max trans unit.  Compared to min-max-trans-unit (minmtu).

5 years agoBNX2X: spatch netdevice feature conversion
Barret Rhoden [Tue, 10 Feb 2015 16:11:01 +0000 (11:11 -0500)]
BNX2X: spatch netdevice feature conversion

Spatch missed kern/drivers/net/bnx2x/bnx2x_cmn.c.

Note that this removes the hw_enc and vlan features, and #define's the
hw_features to the normal features.

I left the Linux NETIF_F_ flags in place, and just #defined the ones we support
for now.  There might be issues with #defining them to 0, in case there's some
code that assumes a flag #define value is non-zero (consider the issues with
openmode and O_RDONLY being 0).

5 years agoBNX2X: spatch pci/irq tidbits
Barret Rhoden [Mon, 9 Feb 2015 23:03:07 +0000 (18:03 -0500)]
BNX2X: spatch pci/irq tidbits

I manually edited the result of register_irq()'s transformation.  Note
the comment in the cocci.

Also, this version of spatch (different machine than some other
spatches) caught a net_device in bnx2x that was missed earlier.

5 years agoBNX2X: spatch netif_addr_lock
Barret Rhoden [Mon, 9 Feb 2015 20:22:12 +0000 (15:22 -0500)]
BNX2X: spatch netif_addr_lock

It's not clear that the plan 9 qlock is the right thing to grab here.
It is the equivalent pattern, I think, but it's a qlock instead of a
spinlock.  There might be problems with grabbing a qlock in the wrong
context (IRQ, etc).

An alternative is to put a spinlock in plan 9 and use that.  Maybe they
don't need a qlock.

5 years agoBNX2X: spatch core_id() calls
Barret Rhoden [Mon, 9 Feb 2015 19:57:07 +0000 (14:57 -0500)]
BNX2X: spatch core_id() calls

5 years agoBNX2X: spatch endian converters
Barret Rhoden [Mon, 9 Feb 2015 19:52:00 +0000 (14:52 -0500)]
BNX2X: spatch endian converters

5 years agoBNX2X: spatch ktime_ functions
Barret Rhoden [Mon, 9 Feb 2015 19:41:00 +0000 (14:41 -0500)]
BNX2X: spatch ktime_ functions

Even though I'll probably remove the function these are called by.

5 years agoBNX2X: spatch user memcpy
Barret Rhoden [Mon, 9 Feb 2015 18:56:06 +0000 (13:56 -0500)]
BNX2X: spatch user memcpy

5 years agoBNX2X: Various #defines in akaros_compat
Barret Rhoden [Fri, 6 Feb 2015 23:52:17 +0000 (18:52 -0500)]
BNX2X: Various #defines in akaros_compat

MODULE, warn/assert, etc.  I tried to accumulate them all into one commit, so
it's more clear what's done by spatch and what's done by hand.

5 years agoBNX2X: Spatch ilog2 -> LOG2_UP
Barret Rhoden [Fri, 6 Feb 2015 23:25:39 +0000 (18:25 -0500)]
BNX2X: Spatch ilog2 -> LOG2_UP

5 years agoBNX2X: dma_ interfaces
Barret Rhoden [Fri, 6 Feb 2015 22:42:10 +0000 (17:42 -0500)]
BNX2X: dma_ interfaces

In lieu of spatching, I opted for macros to avoid struct dev.  Might want that
at some point.

5 years agoBNX2X: Spatch memory allocations
Barret Rhoden [Fri, 6 Feb 2015 17:06:17 +0000 (12:06 -0500)]
BNX2X: Spatch memory allocations

GFP_ATOMIC is the default flag in Akaros (0).  GFP_KERNEL needed to be done
manually in the macro in main.c.

Also, this splits out the memory.cocci.  funcs.cocci is getting too large.

5 years agoBNX2X: spatch spinlock conversions
Barret Rhoden [Fri, 6 Feb 2015 16:57:17 +0000 (11:57 -0500)]
BNX2X: spatch spinlock conversions

BH's disable softirqs.  RKMs can't interfere with kthreads like a softirq
could, so we don't need to deal with it.

5 years agoBNX2X: Spatch min, min_t, etc
Barret Rhoden [Fri, 6 Feb 2015 16:24:34 +0000 (11:24 -0500)]
BNX2X: Spatch min, min_t, etc

Keeping the _t versions around, since they might be needed later on.  Though
they are just the regular MIN/MAX for now.

Also, the spatch didn't like bnx2x.h (again), and also something in sriov.c.

5 years agoBNX2X: spatch signed typedefs
Barret Rhoden [Thu, 5 Feb 2015 21:40:14 +0000 (16:40 -0500)]
BNX2X: spatch signed typedefs

Had to do the macros in bnx2x.h manually.

5 years agoBNX2X: spatch memory barriers
Barret Rhoden [Thu, 5 Feb 2015 21:32:23 +0000 (16:32 -0500)]
BNX2X: spatch memory barriers

5 years agoBNX2X: spatch sleep functions
Barret Rhoden [Thu, 5 Feb 2015 21:16:27 +0000 (16:16 -0500)]
BNX2X: spatch sleep functions

For the usleep_range, we can't do anything with the max time.

5 years agoBNX2X: spatch net_device -> ether
Barret Rhoden [Thu, 5 Feb 2015 20:20:39 +0000 (15:20 -0500)]
BNX2X: spatch net_device -> ether

The fields aren't right, but it's the closest thing.  And at least the name
field is right!  (Thanks to the anonymous netif in ether).

Incidentally, spatch couldn't handle two of the changes.  Again, one in bnx2x.h
and another in bnx2x_main.c.  In the latter, if you remove the "return -EAGAIN"
at 12208, it works...

5 years agoBNX2X: printk helpers
Barret Rhoden [Thu, 5 Feb 2015 17:18:53 +0000 (12:18 -0500)]
BNX2X: printk helpers

I left the helpers in place, instead of spatching them all to printk, in case
we want to differentiate on the types.

5 years agoBNX2X: DMA helpers
Barret Rhoden [Thu, 5 Feb 2015 17:18:20 +0000 (12:18 -0500)]
BNX2X: DMA helpers

We should be okay leaving these empty.

5 years agoBNX2X: mmiowb() -> bus_wmb()
Barret Rhoden [Thu, 5 Feb 2015 16:13:05 +0000 (11:13 -0500)]
BNX2X: mmiowb() -> bus_wmb()


5 years agoBNX2X: Fixes typedefs missed by spatch manually
Barret Rhoden [Wed, 4 Feb 2015 20:39:49 +0000 (15:39 -0500)]
BNX2X: Fixes typedefs missed by spatch manually

Spatch doesn't seem to like the multi-page monstrosity that is struct bnx2x or
some macros.

5 years agoBNX2X: IO funcs spatched
Barret Rhoden [Wed, 4 Feb 2015 20:15:34 +0000 (15:15 -0500)]
BNX2X: IO funcs spatched

e.g. readl -> read32.

Yes, we could have kept the Linux io helpers the way Linux expects, but if
we're putting something useful in the main kernel, I'd like it to be the way we

Though the spatch did require --disable-multi-pass for it to work on the macros
in bnx2x.h, and the writel macros needed to be manually joined onto one line.
I think those were broken by a previous spatch.

5 years agoBNX2X: PCI conversions
Barret Rhoden [Wed, 4 Feb 2015 18:41:32 +0000 (13:41 -0500)]
BNX2X: PCI conversions

Not sure what to do with the power type - that'll probably just be ignored
later.  Likewise, there are still some issues with msi related functions.

5 years agoBNX2X: Semaphore compatibility
Barret Rhoden [Wed, 4 Feb 2015 18:40:36 +0000 (13:40 -0500)]
BNX2X: Semaphore compatibility

Going with #defines, to keep down_interruptible and down_timeout.  Might need
those in the future.

5 years agoBNX2X: mutexes -> qlocks
Barret Rhoden [Wed, 4 Feb 2015 16:45:57 +0000 (11:45 -0500)]
BNX2X: mutexes -> qlocks

5 years agoBNX2X: spatch ETH_*LEN
Barret Rhoden [Tue, 3 Feb 2015 23:56:27 +0000 (18:56 -0500)]
BNX2X: spatch ETH_*LEN

ETH_ALEN -> Eaddrlen.


I'm actually fine with the Linux names, but we should keep them consistent with
the Plan 9 stuff.  We can always spatch the plan 9 ones to something more

5 years agoBNX2X: uint*_t spatch
Barret Rhoden [Tue, 3 Feb 2015 23:06:44 +0000 (18:06 -0500)]
BNX2X: uint*_t spatch

Barret Rhoden [Mon, 23 Feb 2015 16:10:54 +0000 (11:10 -0500)]

Since no one can use LIST_HEAD, to prevent future bugs.

5 years agoBNX2X: removes all linux headers
Barret Rhoden [Tue, 3 Feb 2015 22:55:46 +0000 (17:55 -0500)]
BNX2X: removes all linux headers

Most files will need a set of headers, added to akaros_compat.h.  I'm not too
interested in playing whack-a-mole with includes at this point.

5 years agoBNX2X: Kconfig/Kbuild support
Barret Rhoden [Tue, 3 Feb 2015 22:13:41 +0000 (17:13 -0500)]
BNX2X: Kconfig/Kbuild support

Let's try to build right away and fix the errors, one at a time.

5 years agoBNX2X: Initial import
Barret Rhoden [Tue, 3 Feb 2015 22:07:27 +0000 (17:07 -0500)]
BNX2X: Initial import

From Linux, bc208e0ee0f46744aac95c29366144271a6962bb.

5 years agoBusybox echo buffers lines to stdout
Barret Rhoden [Mon, 2 Mar 2015 16:45:23 +0000 (11:45 -0500)]
Busybox echo buffers lines to stdout

In some cases, echo would split a line up into several write calls,
which would lead to incomplete commands sent to the kernel.

Since it's surprisingly non-deterministic (though consistent per boot),
I haven't confirmed this is the fix.  If you have weird failures with
echo, try and get a syscall trace and let me know.

You'll need to rebuild busybox:
$ cd tools/apps/busybox/
$ make

And remake the kernel.

5 years agoFixes re-arming alarms from IRQ handlers
Barret Rhoden [Mon, 2 Mar 2015 15:56:19 +0000 (10:56 -0500)]
Fixes re-arming alarms from IRQ handlers

Previously, you had to call __set_alarm(), since the tchain lock was
held.  This made it more difficult to work with, and easy to
accidentally use the wrong type of set_alarm().  For IRQ handlers, you'd
quickly deadlock.  But RKM handlers using __set_alarm() could silently
corrupt the tchain.

This commit pushes the logic about whether or not the tchain lock is
held into the alarm code, so users can call set_alarm (or reset) without
worrying about the context.

Also, this clarifies the differences between the cancellation guarantees
between IRQ and RKM handlers.  In short, if you fail to cancel an RKM
alarm, it is possible that the alarm handler has not executed yet, but
it will eventually.  In these cases, do not free the waiter til after it
executes.  A bad practice would be:
// think it has already fired and no refs to waiter exist
You *can* do that with IRQ alarms.  That's the price you pay for using
the RKM alarm.

We can build something more intense so that you can sleep on an RKM
alarm's completion, but I won't do it until someone expresses a need
(and feedback so far is no one wants it).

5 years agoAdds sscanf()
Barret Rhoden [Tue, 24 Feb 2015 21:23:53 +0000 (16:23 -0500)]
Adds sscanf()

From Linux, including ctype.{c,h}.

5 years agoInitializers for struct poke_tracker
Barret Rhoden [Fri, 27 Feb 2015 22:14:30 +0000 (17:14 -0500)]
Initializers for struct poke_tracker

5 years agoAdds zlib library
Barret Rhoden [Thu, 19 Feb 2015 19:54:00 +0000 (14:54 -0500)]
Adds zlib library

From linux.

Also removed a #define from ivy...

5 years agoToolchain saves intermediate patches
Barret Rhoden [Thu, 19 Feb 2015 21:52:27 +0000 (16:52 -0500)]
Toolchain saves intermediate patches

When we extract the gcc and glibc directories, we create and apply the diff
from the -akaros directories.  Previously, we discarded this info.  Now we save
it as a hidden file.

Make clean if you want to generate the files.

5 years agoAdds prefetch hints
Barret Rhoden [Tue, 10 Feb 2015 17:58:43 +0000 (12:58 -0500)]
Adds prefetch hints

prefetch() for read / generic and prefetchw() for impending writes.

For some discussion on the differences of prefetchnta vs the other hints, check

5 years agoAdds ALIGN and PAGE_ALIGN (XCC)
Barret Rhoden [Tue, 10 Feb 2015 17:24:04 +0000 (12:24 -0500)]

Slightly modified versions of Linux's macros, to minimize pointer issues.

ALIGN can't be exposed to userspace.  There is another one of those floating
around.  The reason we had things in common.h was that we wanted to use them in
user/ without writing them down twice.  As we add items, we're more likely to
run into a conflict with glibc.  Maybe the whole thing needs reworked.

Technically, this changed a kernel header, though it should only affect the

5 years agoRemoves stray cocci file
Barret Rhoden [Thu, 19 Feb 2015 19:28:38 +0000 (14:28 -0500)]
Removes stray cocci file

5 years agoVFS helpers for reading files in kernel mode
Barret Rhoden [Thu, 19 Feb 2015 16:41:00 +0000 (11:41 -0500)]
VFS helpers for reading files in kernel mode

It's a minor pain, esp due to the memcpy_to_user() business deep in

5 years agoAdds epoch_*sec() helpers
Barret Rhoden [Mon, 9 Feb 2015 19:10:31 +0000 (14:10 -0500)]
Adds epoch_*sec() helpers

The number of sec/msec/usec/nsec since 1 Jan 1970.

5 years agoAdds warn_on() and warn_on_once()
Barret Rhoden [Fri, 6 Feb 2015 16:44:06 +0000 (11:44 -0500)]
Adds warn_on() and warn_on_once()

warn_on() is check(), but named more clearly.

5 years agoStruct ether accesses netif anonymously
Barret Rhoden [Thu, 5 Feb 2015 20:06:20 +0000 (15:06 -0500)]
Struct ether accesses netif anonymously

To fix any out-of-tree drivers, apply the spatch remove_netif.cocci.

After spatching, I modified ip.h manually.

5 years agoLinux workqueue wrappers
Barret Rhoden [Thu, 5 Feb 2015 15:35:38 +0000 (10:35 -0500)]
Linux workqueue wrappers

Dropped them in with the BSD taskqueues.

5 years agoUpdates spatch-me.sh
Barret Rhoden [Wed, 4 Feb 2015 20:14:44 +0000 (15:14 -0500)]
Updates spatch-me.sh

Sometimes you need to pass extra arguments to spatch.

5 years agoLinux's MMIO helpers
Barret Rhoden [Wed, 4 Feb 2015 20:01:32 +0000 (15:01 -0500)]
Linux's MMIO helpers

Similar to read_mmreg32, but they cover all the bytes.  Need to see if void* or
uintptr_t is better.

5 years agoStatic initializers for semaphores
Barret Rhoden [Wed, 4 Feb 2015 17:10:00 +0000 (12:10 -0500)]
Static initializers for semaphores

Similar to the SPINLOCK_INITIALIZERS.  I thought it'd be more of a pain, but
since Linux did it, then so can we.

5 years agoLite VM uses Linux's lists
Barret Rhoden [Wed, 4 Feb 2015 16:30:24 +0000 (11:30 -0500)]
Lite VM uses Linux's lists

And a large chunk of Akaros now includes it, thanks to dependencies.