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.

5 years agoAdds Linux's list.h
Barret Rhoden [Wed, 4 Feb 2015 16:25:25 +0000 (11:25 -0500)]
Adds Linux's list.h

struct list_head and hlist, from commit bc208e0ee0f4.

Linux's lists also use LIST_HEAD, like the BSD lists.  Well, since the
two kids can't get along, then no one gets LIST_HEAD.

Linux list users that normally use LIST_HEAD will now use
LINUX_LIST_HEAD.  Otherwise, list.h is the same as usual.

5 years agoRenames BSD's LIST_* to BSD_LIST_*
Barret Rhoden [Wed, 4 Feb 2015 16:18:52 +0000 (11:18 -0500)]
Renames BSD's LIST_* to BSD_LIST_*

Linux's list.h also has a LIST_HEAD, and Akaros only has one user of the BSD

Incidentally, newer man pages for sys/queue.h (try man queue) don't have SLISTS
or the STAILQs anymore.  It's still in the header, but not part of the manual.
Perhaps they are cutting things out?

5 years agoLite VM fakes struct list_head
Barret Rhoden [Wed, 4 Feb 2015 16:18:10 +0000 (11:18 -0500)]
Lite VM fakes struct list_head

Merging in Linux's lists shortly.

5 years agoRemoves listable
Barret Rhoden [Wed, 4 Feb 2015 16:08:29 +0000 (11:08 -0500)]
Removes listable

Unused code.

5 years agoEndian typedefs and #defines
Barret Rhoden [Tue, 3 Feb 2015 23:27:15 +0000 (18:27 -0500)]
Endian typedefs and #defines

The typedefs are similar to Linux's, minus the static analysis good-stuff.

The __.*ENDIAN are used in BNX2X and other things.  I noticed the old BXE
driver also dealt with the LITTLE_ENDIAN -> __LITTLE_ENDIAN conversions.

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.  I don't know when the LOCKs should be used
compared to lfence/sfence/mfence.

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

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 agokthread_usleep()
Barret Rhoden [Wed, 28 Jan 2015 22:04:05 +0000 (17:04 -0500)]

It's the guts of what sys_block did: blocks a kthread for X usec.  The classic
issue is where we run the alarm handler and where to restart the kthread.

5 years agoPCI/MSI: pci_msix_init()
Barret Rhoden [Thu, 26 Feb 2015 16:25:58 +0000 (11:25 -0500)]
PCI/MSI: pci_msix_init()

Drivers that want to use MSIX should call pci_msix_init() during reset (which
is at boot time).  If they do this, they can register_irq() at attach time,
which is after booting.  Otherwise, they must register_irq() during reset.

5 years agoPCI/MSI: debug helper
Barret Rhoden [Mon, 23 Feb 2015 14:46:19 +0000 (09:46 -0500)]
PCI/MSI: debug helper

Dumps the device's MSIX table.

5 years agoPCI: use Linux's PCI register #defines
Barret Rhoden [Thu, 19 Feb 2015 18:44:29 +0000 (13:44 -0500)]
PCI: use Linux's PCI register #defines

We were using some of them.  Now we use a lot more.

5 years agoPCI: fixups and helpers
Barret Rhoden [Tue, 17 Feb 2015 21:03:46 +0000 (16:03 -0500)]
PCI: fixups and helpers

The previous membar helper might have returned nonzero for a BAR that
was the second half of a 64 bit BAR.

There's a helper for mmapping a BAR, which can clean up driver code.

5 years agoPCI: helper to make a TBDF from a pcidev
Barret Rhoden [Mon, 9 Feb 2015 22:21:45 +0000 (17:21 -0500)]
PCI: helper to make a TBDF from a pcidev

All of the PCI devices need to do this, and it'll be easier on an

5 years agoPCI: adds device-specific data pointer
Barret Rhoden [Mon, 9 Feb 2015 21:39:57 +0000 (16:39 -0500)]
PCI: adds device-specific data pointer

This is useful, even if we don't use it in the short term.  Both BSD and
Linux have something similar (possibly with an intermediate device).

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 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 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 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 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 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 agoReturn bool from reset_alarm_* apis.
Godfrey van der Linden [Tue, 17 Feb 2015 22:02:35 +0000 (14:02 -0800)]
Return bool from reset_alarm_* apis.

In the presence of kernel pre-emption or multi-core scheduling leak free
clean up is a challenge. This idiom is the best I've found but it must
have support from the underlying apis.

Say a hot plugging device driver is dynamically unloadable and it has a
kreffed context and after a command completes we now have scheduled the
next I/O and have to reset the timeout alarm.

struct context {
bool is_active;  // Set to false on unloading

void start_next_io()

// Reschedule an alarm

// Always take a reference for the alarm function’s context
kref_get(context, 1);
if (reset_alarm_abs(...)) {
// We caught the alarm in time, i.e. the reference from the original
// set_awaiter_*  is still good, clear our reference.


void alarm_func(context)
 if (context->is_active) {  // Various atomic ops can go here
  // Do work referring to context
 kref_put(context);  // Potentially releasing the context now

5 years agoEmergency commit to fix a gitastrophe
Ron Minnich [Fri, 27 Feb 2015 16:06:37 +0000 (08:06 -0800)]
Emergency commit to fix a gitastrophe

Somehow 10 days ago I was on the wrong branch, sorry.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoBarret pointed out that the inclusion of regions was a mistake.
Ron Minnich [Wed, 18 Feb 2015 16:26:08 +0000 (08:26 -0800)]
Barret pointed out that the inclusion of regions was a mistake.

Also, initial non-working code to enable vmx. It's wrong.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoRestart with just vmm rebased on master.
Ron Minnich [Tue, 17 Feb 2015 18:13:20 +0000 (10:13 -0800)]
Restart with just vmm rebased on master.

Much cleaner, the bhyve stuff was interfering.

Next step: fix vm to handle the vmm bits.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoFinishes removal of x86_32 (XCC)
Barret Rhoden [Mon, 16 Feb 2015 16:05:18 +0000 (11:05 -0500)]
Finishes removal of x86_32 (XCC)

You won't be able to select the a non-64 bit kernel from Kconfig.  The
symbol CONFIG_X86_64 is still around, since some code we port from other
OSs might expect it.

I didn't mess around much with gcc/glibc.  We're lucky that all works.
But you won't be able to ask our build system to make a 32 bit

I tested a cross-compiler rebuild and get_html.  I didn't test the
jenkins change.

5 years agoFix error & poperror macros, update set_errstr.
Godfrey van der Linden [Sun, 15 Feb 2015 03:28:06 +0000 (19:28 -0800)]
Fix error & poperror macros, update set_errstr.

Canonicalise the two brace bracketed error handling macros. All sorts of
odd things can happen when a macro has just bare braces. The do {}
while(false) idiom makes them into canonical C statements.

Add const to set_errstr fmt argument. Then we can used const char* error
strings, and compile without error.

5 years agoFix kprof attach leaks.
Godfrey van der Linden [Sun, 15 Feb 2015 03:35:34 +0000 (19:35 -0800)]
Fix kprof attach leaks.

When you perform 'ls -lR \#K' on a system that hasn't bound the kprof
device it repeatedly attaches/closes the #K device. This leaks
cpu_buffers (not a big issue, alloc_cpu_buffers defends itself),
oprof_alarms and kprof.systrace queue.

This fix is not ideal, but it only allocates the resources once, I
didn't want to implement an atomic execute once when I don't understand
the code in detail.

5 years agoAdd placeholder handling to devgen.
Godfrey van der Linden [Sat, 14 Feb 2015 02:31:32 +0000 (18:31 -0800)]
Add placeholder handling to devgen.

The current devgen assumes that the dirtab is static, which until now it
has been. However, the gen functions are allowed to return 0 if the
entry exists for that 's' but shouldn't be active.

Overload dirtab->qid.vers to indicate if the dirtab entry is inactive
and return 0 if vers == -1.

5 years agoUpdate phony targets for tests Makefile.
Godfrey van der Linden [Sat, 14 Feb 2015 02:28:22 +0000 (18:28 -0800)]
Update phony targets for tests Makefile.

The toplevel make file now calls install and uninstall rather than the
kfs based phony targets.

5 years agoMinor formatting changes
Godfrey van der Linden [Sat, 14 Feb 2015 02:23:14 +0000 (18:23 -0800)]
Minor formatting changes

Remove trailing whitespace in cpu_buffer.c


80char comment rewrap in dev/vm.c

5 years agoFix potential compile warning.
Godfrey van der Linden [Sat, 14 Feb 2015 02:20:15 +0000 (18:20 -0800)]
Fix potential compile warning.

5 years agoDe-copy-and-paste the devip gen functions.
Godfrey van der Linden [Sat, 14 Feb 2015 02:09:24 +0000 (18:09 -0800)]
De-copy-and-paste the devip gen functions.

Simplified and removed some of the common copy and pasted code from the
gen functions of the devip '#I' device.

5 years agoremove 32 bit and uses of it.
Ron Minnich [Fri, 13 Feb 2015 23:31:52 +0000 (15:31 -0800)]
remove 32 bit and uses of it.

This is a first stab at getting out of the 32-bit architecture business.

There's lots more to do but you have to start somewhere, and I'm tired of
tags finding the wrong symbols because of these leftover bits of code
we don't compile any more.

Signed-off-by: Ron Minnich <rminnich@gmail.com>
5 years agoAdd implementation of sem_timedwait.
Kevin Klues [Wed, 4 Feb 2015 17:30:11 +0000 (09:30 -0800)]
Add implementation of sem_timedwait.

5 years agoUse the small id pool for tags.
Ron Minnich [Tue, 3 Feb 2015 22:56:57 +0000 (14:56 -0800)]
Use the small id pool for tags.

I benched the old way against the small id pool and the small id pool is
at least 16x (!) faster. I tested this by running go test std, which
pounds on devmnt pretty well.

Signed-off-by: Ron Minnich <rminnich@gmail.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