akaros.git
3 years agoAdd a helper for yielding from 2LSs
Barret Rhoden [Thu, 18 Feb 2016 22:51:24 +0000 (17:51 -0500)]
Add a helper for yielding from 2LSs

vcore_yield() does not always succeed.  Some 2LSs can just use this in a
loop (e.g. pthreads).  Other 2LSs might want to just either yield or start
over with a fresh vcore context.  This helper will do that.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMark parlib 2LS functions as noreturn
Barret Rhoden [Thu, 18 Feb 2016 22:45:59 +0000 (17:45 -0500)]
Mark parlib 2LS functions as noreturn

There are a bunch of functions in the 2LS that do not return.
run_.*uthread(), vcore_entry(), etc.  Marking them as noreturn will allow
us use the compiler to enforce that functions in specific 2LSs are noreturn
as well.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a helper for tracing exec.
Ronald G. Minnich [Fri, 29 Apr 2016 20:44:11 +0000 (13:44 -0700)]
Add a helper for tracing exec.

It's been a major pain not to have this,
and for dropbear it's not possible to debug
until we get it.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[return "Invalid exec path", instead of printk("fail")]
[removed extra user_memdup_free()]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoInitial clean up of gettimeofday and timekeeping
Michael Davidson [Fri, 29 Apr 2016 00:11:30 +0000 (17:11 -0700)]
Initial clean up of gettimeofday and timekeeping

Add the date command to busybox

Use scaled integer arithmetic for TSC cycles to nanoseconds conversions.

Add inline conversion functions from nanoseconds to timespec and timeval
and update existing tsc2timespec() interface to return its result.

Add a get_persistent_clock() interface to get the initial date and time
when the system is initialized. (Not yet implemented)

Add very rudimentary timekeeping data to keep track of both initial
walltime in nsecs and initial TSC value.

Use epoch_nsec() to implement gettimeofday() system call.

Note: these changes should not cause any differences in system behavior.

Signed-off-by: Michael Davidson <md@google.com>
[minor checkpatch touchup]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoDon't look at the block after calling qbypass
Ronald G. Minnich [Thu, 28 Apr 2016 06:10:41 +0000 (23:10 -0700)]
Don't look at the block after calling qbypass

The bypass functions call bpfree. There's no guarantee
about the block pointer after calling the function.

This is probably why, in the original, the bypass functions
returned the data consumed. For now, realistically, it's all
consumed.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMove ifaddrs to glibc (XCC)
Barret Rhoden [Wed, 20 Apr 2016 23:37:26 +0000 (16:37 -0700)]
Move ifaddrs to glibc (XCC)

Note that the file is ifaddrs.c in glibc, as compared to ifaddr.c.  The
sysdep has to match exactly what glibc expects.

We also need the libc_hidden_def for some reason.  Basically whatever
glibc does in other versions of ifaddrs.c needs to be done in our.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd getifaddrs support and a test.
Ronald G. Minnich [Wed, 20 Apr 2016 18:09:26 +0000 (11:09 -0700)]
Add getifaddrs support and a test.

Per the man page, we don't have to fill out addr, mask, and
broadaddr, and this is such a dump API that we don't.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[closed net and addr on error]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake /dev open in the 9 space, not the vfs.
Ronald G. Minnich [Wed, 20 Apr 2016 14:48:58 +0000 (07:48 -0700)]
Make /dev open in the 9 space, not the vfs.

Another stopgap. Let's hope we kill this one in < 2 3/4 years :-)

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoIncrease the size of seq_ctr_t to 32 bits (XCC)
Barret Rhoden [Tue, 19 Apr 2016 20:33:56 +0000 (13:33 -0700)]
Increase the size of seq_ctr_t to 32 bits (XCC)

8 bits was too small - we could have 256 writes that could be
interpreted as "nothing changed."

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the last vestiges of the old syscall tracer
Barret Rhoden [Fri, 15 Apr 2016 20:12:38 +0000 (16:12 -0400)]
Remove the last vestiges of the old syscall tracer

RIP, nearly six years old: 0fabbd46e285 ("Syscall tracing")

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoConsolidate the two syscall tracers
Barret Rhoden [Fri, 15 Apr 2016 19:57:49 +0000 (15:57 -0400)]
Consolidate the two syscall tracers

The old syscall tracer is gone.  Now it all uses the same infrastructure.
You can still "trace syscall start" from the monitor, but that's it - it'll
trace everything.

This also fixes a couple minor things, which prompted the change.  First,
we were reporting a gibberish value for the retval on Entry records.  This
could be confusing in the traces.  Now they are just ---.  This required
separate format strings for entry and exit.

Also, on exit, we were setting the extra data to 0.  Say we came in on a
write; we'd capture the data then.  On exit, we'd lose it.  This might have
been intentional, and if so, I can change it back.  I found it a little
confusing when I was looking at Exit records.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoremove spurious optimization in udelay_pit()
Michael Davidson [Fri, 15 Apr 2016 20:30:44 +0000 (13:30 -0700)]
remove spurious optimization in udelay_pit()

gcc has been optimizing division by a constant into a multiply
and shift for at least 10 years now so there is no need to do
this by hand as a special case - especially in a function that
is going to delay for at least 1 microsecond anyway.

Also remove unnecessary casts - usec is a uint64_t so everything
else in the expression is going to get promoted appropriately.

Signed-off-by: Michael Davidson <md@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoPort tests/timerfd.c
Barret Rhoden [Fri, 8 Apr 2016 15:59:34 +0000 (11:59 -0400)]
Port tests/timerfd.c

Removes the LTP integration, uses select instead of poll, adds more
thorough tests, and fixes some checkpatch complaints.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImport timerfd test from Linux
Barret Rhoden [Fri, 8 Apr 2016 15:51:51 +0000 (11:51 -0400)]
Import timerfd test from Linux

From the Linux Test Project https://github.com/linux-test-project/ltp
commit b9b230e.

I named it .orig so we don't try to build it for Akaros with make tests.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement timerfd on top of #alarm (XCC)
Barret Rhoden [Fri, 8 Apr 2016 16:38:47 +0000 (12:38 -0400)]
Implement timerfd on top of #alarm (XCC)

It mostly matches.  It is a little unfortunate that read() expects
host-endian format for the u64.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd period and count to #alarm
Barret Rhoden [Wed, 13 Apr 2016 20:23:16 +0000 (16:23 -0400)]
Add period and count to #alarm

This adds two features:
- period: the alarm will repeat with interval 'period'
- count: track the amount of times the alarm fired.  You can read with
  EAGAIN and select/epoll this.

I also added some protection to various races on the proc_alarm's state.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd the helper strtoul_from_ubuf()
Barret Rhoden [Wed, 13 Apr 2016 15:46:49 +0000 (11:46 -0400)]
Add the helper strtoul_from_ubuf()

This comes up a lot: we want to read a number from a user buffer.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoChange #alarm cancel method
Barret Rhoden [Tue, 12 Apr 2016 22:13:42 +0000 (18:13 -0400)]
Change #alarm cancel method

Writing into a ctl is convenient, but its hard to get the status back out.
When you read ctl, you get the directory ID, not actual status.  We could
have a status variable that you parse, but that's a pain.

It's simpler to just have 0 > Qtimer mean "turn off the alarm".  That's
what this commit does, as well as removing the "cancel" command from Qctl.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd helpers for common 9ns functions (XCC)
Barret Rhoden [Tue, 12 Apr 2016 22:10:23 +0000 (18:10 -0400)]
Add helpers for common 9ns functions (XCC)

Careful with get_sibling_fd(); don't call it on a cloned FD yet.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoExport sys/plan9_helpers.h from glibc (XCC)
Barret Rhoden [Tue, 12 Apr 2016 22:00:16 +0000 (18:00 -0400)]
Export sys/plan9_helpers.h from glibc (XCC)

This way, we don't need to magically extern in symbols: there's a proper
header for it.

I also renamed it from 'sockets' to 'helpers', which is a little more
general, and put it in sys/.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement pipes in userspace (XCC)
Barret Rhoden [Mon, 11 Apr 2016 20:56:14 +0000 (16:56 -0400)]
Implement pipes in userspace (XCC)

With openat(), we don't need SYS_pipe.  Userspace can do this on their own.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd user helpers save_err and restore_err (XCC)
Barret Rhoden [Mon, 11 Apr 2016 20:53:37 +0000 (16:53 -0400)]
Add user helpers save_err and restore_err (XCC)

These save and restore errno and errstr.  Programs will want to use these
when they need to perform syscalls and want to preserve the original error.
Normally this is easy with errno, but you should save/restore errstr too.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse FD taps for event delivery for #alarm
Barret Rhoden [Mon, 11 Apr 2016 17:57:54 +0000 (13:57 -0400)]
Use FD taps for event delivery for #alarm

It turns out that FD taps work for #alarm, and they do a better job than
the old ev_q.  Now the user can tell us what it wants to hear for a
particular tap (e.g. the alarmid) instead of the kernel having to imply
that.  Plus, now we use just the one mechanism for asking the kernel to
send to an event when something happens (FD tap).

This required a few changes to userspace.  The subtlest is that
devalarm_set_evq takes timerfd instead of ctlfd.  That's actually a sign
that the API might be too coupled to the implementation.  The nicer
cleanups in userspace are:

- tests/alarm.c and PVC alarms use the devalarm interfaces (those functions
  predated that interface)
- devalarm provides a way to extract the ID, instead of functions checking
  ev_msg->ev_arg2

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd two time conversion helpers to glibc (XCC)
Barret Rhoden [Wed, 13 Apr 2016 20:26:54 +0000 (16:26 -0400)]
Add two time conversion helpers to glibc (XCC)

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement clock_gettime() (XCC)
Barret Rhoden [Mon, 11 Apr 2016 18:36:10 +0000 (14:36 -0400)]
Implement clock_gettime() (XCC)

It's half baked; we don't have multiple clocks - it is just "time since
boot" + Nanwan's 0th birthday.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoModify glibc's printf for use from VC ctx (XCC)
Barret Rhoden [Mon, 11 Apr 2016 16:27:05 +0000 (12:27 -0400)]
Modify glibc's printf for use from VC ctx (XCC)

The existing hack for calling to vcore context doesn't work for snprintf.
Glibc uses the same backend for printing to files as well as buffers, which
makes sense since you only want to do format string handling once.  Our
hack only worked for files; if you did an snprintf from vcore context,
you'd fail (write to fd -1, incidentally).

Instead of hacking glibc to use our printf, we'll just hack out the major
stack gobblers from glibc's vprintf.  We'll see if this works or not.

As a side effect, we don't need our parlib version of printfmt.  I'm glad
to see it go, since it wasn't compatible with glibc's - including printf
format specifiers we registered with glibc.  You could have a format string
that was processed differently in vcore ctx than in uthread ctx, which
would be confusing.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoClear x86_default_fpu STX/MMX register state at boot
Michael Taufen [Tue, 12 Apr 2016 16:22:17 +0000 (09:22 -0700)]
Clear x86_default_fpu STX/MMX register state at boot

Also improved some comments

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoGCC patch r233572 added to makefile. (XCC)
Bob [Thu, 7 Apr 2016 20:55:53 +0000 (13:55 -0700)]
GCC patch r233572 added to makefile. (XCC)

Signed-off-by: Bobby Housley <broketech@users.noreply.github.com>
Rebuild the toolchain from scratch.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdded gcc r233572 patch
Bob [Thu, 7 Apr 2016 20:52:17 +0000 (13:52 -0700)]
Added gcc r233572 patch

To help enable building gcc 4.9.2 via gcc 6.

Signed-off-by: Bobby Housley <broketech@users.noreply.github.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSet qemu's port-forwarding to port 22
Barret Rhoden [Wed, 6 Apr 2016 20:30:38 +0000 (16:30 -0400)]
Set qemu's port-forwarding to port 22

If you'd like to use ssh with qemu and user-mode networking, forward some
port (e.g. 5555) to 22.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a default sshd host key
Barret Rhoden [Wed, 6 Apr 2016 19:32:42 +0000 (15:32 -0400)]
Add a default sshd host key

Override this on your servers if you want to avoid MITM attacks.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix userspace's FP restore
Barret Rhoden [Thu, 7 Apr 2016 17:34:46 +0000 (13:34 -0400)]
Fix userspace's FP restore

We weren't passing the right xcr0.  Who knows what we were passing.  This
caused FP state to be partially restored.

Whenever we migrated pcores, we wouldn't get all of the new FP state, such
as having bad xmms.  We often would see parts of the correct FP state from
previous residents of the core, and the xmms were probably clobbered by
another thread calling into glibc for e.g. memset().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoACPI Table Fixes for vmrunkernel
Michael Taufen [Tue, 29 Mar 2016 20:25:54 +0000 (13:25 -0700)]
ACPI Table Fixes for vmrunkernel

Please note: Our ACPI tables are still quite hacky, and should probably
revised at some point in the future.

Upgraded table revision numbers as per the ACPI 5.0a spec

Used macros from actbl.h for ACPI table signatures
  One issue was that we had used "FADT" as the signature
  for the FADT table, when the ACPI spec says to use
  "FACP." Using the macros from the header should help
  avoid this in the future.

Provided a pre-compiled (from asl to c) DSDT in a new header file.
ACPI requires the DSDT table be present, and Linux makes the
reasonable assumption that you will provide it.

Puts the FADT address in the first entry of the XSDT, as Linux expects.

Background:

Linux used to place tables at fixed indices in an internal array
when reading in ACPI. It would look for the DSDT in a specific place
in that array later on, even when it hadn't managed to install it,
and would bail out and continue booting when it found bogus data.

We noticed the issue when we upgraded our Linux fork to v4.5, in which
they use a default value of 0xffffffff for the FADT and DSDT indices,
and set these indices as the tables are installed rather than using
fixed positions.

It would look for the address of the DSDT at this index, and the use of the
retrieved, bogus address would cause a page fault in the kernel during boot.

Linux commit 8ec3f459073e67e5c6d78507dec693064b3040a2 contains the relevant
change to ACPI code.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[fixed checkpatch complaints, rm extraneous //comment]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMove the "home" directory to /
Barret Rhoden [Wed, 6 Apr 2016 16:06:13 +0000 (12:06 -0400)]
Move the "home" directory to /

Everyone works out of here, and we don't really have users.  Be sure to
change any scripts that were putting things in /root, e.g. ssh keys.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCheck block extra_len in checkb()
Barret Rhoden [Tue, 5 Apr 2016 19:36:13 +0000 (15:36 -0400)]
Check block extra_len in checkb()

This helped catch a bug.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoReturn 0 for a timed-out select()
Barret Rhoden [Mon, 4 Apr 2016 21:02:53 +0000 (17:02 -0400)]
Return 0 for a timed-out select()

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow select() calls on FDs that are already ready
Barret Rhoden [Fri, 1 Apr 2016 19:46:31 +0000 (15:46 -0400)]
Allow select() calls on FDs that are already ready

The super-spurious select() required programs to drain an FD completely
(i.e. read until you get an EAGAIN), though it is legal to just keep
asking.  Unfortunately, we have an app that does that (dropbear), so we
need to check if an FD is readable manually.

The bug was:

- packet arrives
- tap fires
- user wakes up
- user reads some of it, but not all of it
- user selects

Then we never way up, since a tap will not fire again.

If the user checks the FD (as we do here) and it has no data, then we can
sleep safely, knowing that an edge-triggered event will occur (since we
know the underlying queue was empty at some point).

Hopefully we don't need to do this for write().

Note that this doesn't work for "normal" disk files.  We don't have a way
to tell if a file is readable.  That's basically kernel support for select.

Also note that this 'fix' could mask errors related to changing the FD set
between successive calls to select().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAllow a thread to have multiple select() sets
Barret Rhoden [Fri, 1 Apr 2016 19:42:57 +0000 (15:42 -0400)]
Allow a thread to have multiple select() sets

The bug was that a single thread selected in multiple locations in the
code.  One select() call would consume the events from another call.  Then
the latter call would sleep, since it's event was gone.

We might still have issues where the same {thread, callsite} combo consumes
events for other invocations from that same location.  This could happen if
a program changes its fdsets.  Once something is selected, the event can be
consumed anywhere.  Here's the scenario:

- select on FD 1
- select on FD 2 (can return for FD 1 or 2)
- assume it was FD 2, and don't check FD 1.  your fd_set from the select
  call will only show FD 2, since we just return whatever you passed us.
- select on FD 1 (the event was consumed, so we're going to wait forever).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a get_stack_pointer() helper to parlib
Barret Rhoden [Fri, 1 Apr 2016 19:42:03 +0000 (15:42 -0400)]
Add a get_stack_pointer() helper to parlib

I went with the same naming convention as set_stack_pointer.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Add the RQ and WQ len to ipchaninfo
Barret Rhoden [Fri, 1 Apr 2016 19:30:10 +0000 (15:30 -0400)]
net: Add the RQ and WQ len to ipchaninfo

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the special casing of #pipe in lseek
Barret Rhoden [Fri, 1 Apr 2016 19:26:18 +0000 (15:26 -0400)]
Remove the special casing of #pipe in lseek

If we want to disallow seeks on a per-device basis, then we need a device
op (probably use chan_ctl).  None of this crappy special casing.
Incidentally, we'd probably want to do it for #ip too, and who knows what
is running on the other end of a server (or across a mount point!).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Remove the old qnonblock()
Barret Rhoden [Thu, 31 Mar 2016 18:53:16 +0000 (14:53 -0400)]
qio: Remove the old qnonblock()

This was the old interface used to set both ends of a queue to
non-blocking.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd O_NONBLOCK support to pipes
Barret Rhoden [Thu, 31 Mar 2016 18:35:21 +0000 (14:35 -0400)]
Add O_NONBLOCK support to pipes

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Fixup socket shims use of O_NONBLOCK (XCC)
Barret Rhoden [Thu, 31 Mar 2016 17:09:19 +0000 (13:09 -0400)]
net: Fixup socket shims use of O_NONBLOCK (XCC)

Chans are now nonblocking, not conversations.  We find out about the desire
for SOCK_NONBLOCK from socket()'s type argument.  We save that in the
Rock's sopts, and we check it whenever we open a chan *for that socket*
(but not for new accepts).

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Fixup iplib based on the O_NONBLOCK rules
Barret Rhoden [Wed, 30 Mar 2016 22:42:19 +0000 (18:42 -0400)]
net: Fixup iplib based on the O_NONBLOCK rules

Previously, we could open the CTL with O_NONBLOCK, and that would set the
entire conversation non-blocking.  O_NONBLOCK is now a per-chan thing.  Now
there's no reason to open the CTLs non-blocking when making a conversation,
but we do need to open the DATAs O_NONBLOCK.  We still need to open the
LISTENs O_NONBLOCK (which returns a CTL fd...).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Use chan flag O_NONBLOCK for nonblocking
Barret Rhoden [Wed, 30 Mar 2016 22:37:42 +0000 (18:37 -0400)]
net: Use chan flag O_NONBLOCK for nonblocking

Instead of setting the entire conversation (and thus the queues underneath)
to nonblocking, we now use the chan flag.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agonet: Add a helper chan2conv()
Barret Rhoden [Wed, 30 Mar 2016 21:03:47 +0000 (17:03 -0400)]
net: Add a helper chan2conv()

Cleans up a few places.  There still are some places that walk the
inscrutable pointer chain from FS to CV, but whatever.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Provide helpers for O_NONBLOCK operations
Barret Rhoden [Wed, 30 Mar 2016 20:49:29 +0000 (16:49 -0400)]
qio: Provide helpers for O_NONBLOCK operations

We can now q{b,}{read,write}() in a non-blocking manner, such that each
operation is non-blocking, independently of the rest of the queue.

The old qnonblock style was setting the entire queue to be non-blocking.
This would be a big surprise to the distant end of the queue.  We didn't
notice it with #ip, since the other end of the queue was usually doing a
non-blocking op anyways (or was just buggy!).  We definitely noticed with
pipe, especially when busybox suddenly had its read of stdin throw EAGAIN.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Consolidate readers into __qbread()
Barret Rhoden [Wed, 30 Mar 2016 18:08:45 +0000 (14:08 -0400)]
qio: Consolidate readers into __qbread()

There are a bunch of different functions that read from a queue:
- qread()
- qbread()
- qget()
- qdiscard()

And I'll be adding more soon.

They all had slightly different semantics, but mostly did the same thing.
I consolidated them into one __qbread(), which returns a blocklist.  The
functions do whatever they want with the list.

To some extent, this will be a little slower than before.  Other than just
stuff like branching, qdiscard was able to just free as it went, instead of
transferring them to a new list (meaning it never needed the 'spare' block
for allocations).  Same goes for qread().

OTOH, qread was holding a spinlock and writing to user memory.  Not
anymore!  So that will save us from a source of complexity later.

We do have slightly different semantics now.  __qbread() will *attempt* to
get up to len, but might return early (with amt > 0) while there is more
data in the queue.  Some of the functions, like qdiscard(), can't handle
this.  I used a somewhat racy loop around __qbread() in that case.

There's now only one source of producer wakeup, where I preserved
Presotto's comment and change to the heuristic.  Who knows if that was
supposed to apply in other places, or if it was just added to the place
that popped up during profiling.  Now there's just one site.

A lot of QIO is an unclear mess.  Why does qbread return only one block?
(Note in #mnt that a dev.bread expects to get a blocklist back).  Why is a
blocklist different than a block in many places?   Good thing we have
blocklen() (length of a block list) and BLEN() (length of a block).   Why
are so many functions mucking with queues without locks?  (e.g. qaddlist())
Good times.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake freeb() and freeblist() return the old size
Barret Rhoden [Wed, 30 Mar 2016 03:08:58 +0000 (23:08 -0400)]
Make freeb() and freeblist() return the old size

A few functions like to know this.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMove SIZE_MAX into common.h
Barret Rhoden [Wed, 30 Mar 2016 02:56:31 +0000 (22:56 -0400)]
Move SIZE_MAX into common.h

Note that this is the *kernel's* common.h, not the kernel header
ros/common.h.

Also note that all C files in the kernel are built with common.h
included automatically.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoPass the buf to block_append_extra()
Barret Rhoden [Mon, 28 Mar 2016 19:34:08 +0000 (15:34 -0400)]
Pass the buf to block_append_extra()

Instead of assuming that they want us to allocate the block, we just take
any old buffer of kmalloc'd memory.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Remove qconsume()
Barret Rhoden [Mon, 28 Mar 2016 18:00:56 +0000 (14:00 -0400)]
qio: Remove qconsume()

It's nasty and no one uses it (in Akaros).  It looks like the uart code
from Plan 9 used it.  This is the same deal as qproduce(), I think.

Specifically, qconsume() consumes up to len from the queue, but only from
the first non-empty block.

If we ever need this, we can bring it back or reimplement it with qget() or
something.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove qnonblock from the profiler
Barret Rhoden [Thu, 31 Mar 2016 18:51:21 +0000 (14:51 -0400)]
Remove qnonblock from the profiler

This was never supposed to be in the code in the first place, since it does
nothing to have both it and qdropoverflow().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop calling qremove() outside qio.c
Barret Rhoden [Mon, 28 Mar 2016 16:45:38 +0000 (12:45 -0400)]
Stop calling qremove() outside qio.c

That function was meant to be called with the queue locked.  #mnt doesn't
lock it - nor does it or any other file have a mechanism to do so.  So it's
always a bad idea to call qremove.  It looks like #mnt wants qget().

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Consolidate producer functions
Barret Rhoden [Fri, 25 Mar 2016 22:11:36 +0000 (18:11 -0400)]
qio: Consolidate producer functions

There are a bunch of qio functions for adding to a queue:
- qbwrite (append a single block)
- qibwrite (append a single block from IRQ ctx)
- qwrite (wrapper and calls qbwrite)
- qiwrite (mostly the same wrapper, calls qibwrite)
- qpass (append a string of blocks)
- qpassnolim (same, but with no limit)

Anyway, all of these functions do very similar things, but with a few
options.  Now all of those functions call the same underlying function
(with the same front-wrapper for qwrite/qiwrite), subject to a few flags.

There are some subtle changes.  qpass didn't call kick or bypass before.
Although I could control that with a QIO flag, it seems like if someone
wanted a bypass, then they should always get it.

Of course, kick and bypass seem rather special purpose, and might just need
overhauled at some point.

Part of the motivation for this, other than understandability and ease of
maintenance, was that I'll be adding more QIO functions to control whether
or not we block on an individual call (think chan->flag & O_NONBLOCK).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoStop setting a kick for TCP's RQ
Barret Rhoden [Fri, 25 Mar 2016 21:42:22 +0000 (17:42 -0400)]
Stop setting a kick for TCP's RQ

We never call it, since the RQ is written to by qpassnolim(), which doesn't
call kick internally.  I verified (out-of-tree) with a fake kick method and
netperf that the kick wasn't called, at least in normal operation.

It caused a problem when I tried to clean up qio.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: remove qproduce()
Barret Rhoden [Fri, 25 Mar 2016 20:18:54 +0000 (16:18 -0400)]
qio: remove qproduce()

If we ever need it, we can resurrect it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Clean up locking
Barret Rhoden [Fri, 25 Mar 2016 15:26:25 +0000 (11:26 -0400)]
qio: Clean up locking

Locking was a bit of a mess, including qlocks and spinlocks.

For the most part, the ordering was qlock->spinlock, but most everything
was protected by the spinlock and the qlock didn't do much.

There are a few issues:

The rlock/wlock qlocks seem mostly to serialize rendez sleepers.  Plan 9
needed this; we do not.  There might be a 'thundering herd' wakeup effect
if you have a large number of sleepers (wake up just to see the condition,
vs sleeping on the qlock that doesn't get released until at least one
thread woke up).  If that's an issue, we can fix it later; maybe in rendez
or at least closer to the rendez.  The qlocks might also be 'protecting'
the spinlock, but it don't see much value in that.

The mess with 'should_free' can be ripped out too - we just free the block
in a couple cases, and now we're explicit about it.  That was nasty.

qwait() was doing weird things with locks too.  It internally unlocks for
you.  Surprise!  Instead I'll just have it lock for you when it returns -
no mystery.

The rlock might have been protecting things related to bl2mem, where we
briefly let go of the spinlock.  The qlock might have been preserving some
invariant (who knows?!).  I decided to just hold the spinlock across
bl2mem.  I avoided doing that in the past since that function could PF.
But we're busted regardless of whether we had a qlock or a spinlock; either
would deadlock if the PF handler tries to use the device to resolve the
fault.

Plus we have a host of memcpys and memmoves that touch user memory in qio.
We need to fix PFs overall - this patch should have made things no worse in
that regard (and hopefully much clearer).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake all block allocations use the same func [2/2]
Barret Rhoden [Fri, 25 Mar 2016 16:45:25 +0000 (12:45 -0400)]
Make all block allocations use the same func [2/2]

Other than ns.h and allocb.c, this was done with
scripts/spatch/malloc.cocci.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake iallocb just an _allocb(x, 0) [1/2]
Barret Rhoden [Fri, 25 Mar 2016 16:01:15 +0000 (12:01 -0400)]
Make iallocb just an _allocb(x, 0) [1/2]

Part 1 of making block allocation controlled by a flag, like all other
memory allocation.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRename KMALLOC_* -> MEM_* [2/2]
Barret Rhoden [Fri, 25 Mar 2016 16:28:55 +0000 (12:28 -0400)]
Rename KMALLOC_* -> MEM_* [2/2]

The rename were done with this:

@@
@@
-KMALLOC_WAIT
+MEM_WAIT

@@
@@
-KMALLOC_ERROR
+MEM_ERROR

except for uses of the names in comments.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRework memory allocation flags [1/2]
Barret Rhoden [Fri, 25 Mar 2016 16:13:31 +0000 (12:13 -0400)]
Rework memory allocation flags [1/2]

We might need something for an atomic allocation.  We've just been writing
'0' all over the place, which is a little hard to keep track of.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the O_NONBLOCK fcntl() intercept (XCC)
Barret Rhoden [Fri, 25 Mar 2016 14:36:58 +0000 (10:36 -0400)]
Remove the O_NONBLOCK fcntl() intercept (XCC)

We need to change how nonblocking works, and make it a flag on the chan.
It's too much of a pain to have special casing for every device type -
let's just support fcntl and have O_NONBLOCK be one of its uses.

This will temporarily break non-blocking #ip conversations from glibc.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a chan_ctl devop; support fcntl on chans
Barret Rhoden [Thu, 31 Mar 2016 19:10:23 +0000 (15:10 -0400)]
Add a chan_ctl devop; support fcntl on chans

fcntl() works on chans.  A device can intercept the operation, do whatever
it needs to do, and optionally error out.  I imagine #devmnt will need to
send a new 9p message for this.

If there are no errors, the chan flags get updated (the CEXTERNAL_FLAGS).

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix chan ref leak in fd_setfl()
Barret Rhoden [Thu, 31 Mar 2016 19:03:20 +0000 (15:03 -0400)]
Fix chan ref leak in fd_setfl()

We could have thrown an error and leaked a ref to the chan.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoIntercept vfprintf() instead of printf() (XCC)
Barret Rhoden [Thu, 24 Mar 2016 16:46:59 +0000 (12:46 -0400)]
Intercept vfprintf() instead of printf() (XCC)

This will protect vcore context from much more of the family of the printf
functions.  We still need akaros_printf(), due to the 'multiple libcs'
problem.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMake akaros_vfprintf() take a stream (XCC)
Barret Rhoden [Thu, 24 Mar 2016 16:45:16 +0000 (12:45 -0400)]
Make akaros_vfprintf() take a stream (XCC)

We were implying stdout, but the caller could use something else.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoProperly align vcore stacks on x86
Barret Rhoden [Thu, 24 Mar 2016 16:39:05 +0000 (12:39 -0400)]
Properly align vcore stacks on x86

Glibc _start expects a 16-byte aligned stack, since it is working in asm.
However, the vcore stacks were also getting a 16-byte aligned stack, but
they were C functions and needed to be odd-8-byte aligned.

This commit creates arch-dependent vcore entry functions.  x86's is in
assembly, where it can restore the odd-8-byte invariant.

Note that we can't have both vcore.S and vcore.c - both will be built as
vcore.o.  I renamed the asm ones with _asm.

Incidentally, this happened on a printf with floats/xmms in vcore context,
and was triggered by the "movaps xmm,rbp" due to the variadic function ABI.
It also shows that we weren't touching xmm's in vcore context, since we
would have GP faulted.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoSend SIGCHLD to the parent when a process exits
Barret Rhoden [Thu, 24 Mar 2016 13:14:35 +0000 (09:14 -0400)]
Send SIGCHLD to the parent when a process exits

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove SYS_cgetc (XCC)
Barret Rhoden [Wed, 23 Mar 2016 22:10:27 +0000 (18:10 -0400)]
Remove SYS_cgetc (XCC)

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove SYS_cputs (XCC)
Barret Rhoden [Wed, 23 Mar 2016 22:06:53 +0000 (18:06 -0400)]
Remove SYS_cputs (XCC)

As Ron said, "Alas, SYS_cputs, we knew you well."  It was probably our
first syscall, but we no longer need it.

Reinstall your kernel headers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse write() in parlib/debug.c
Barret Rhoden [Wed, 23 Mar 2016 22:05:51 +0000 (18:05 -0400)]
Use write() in parlib/debug.c

This is the printf that gets called from vcore context.  We want those
prints to go to wherever stdout is, instead of always to the kernel
directly.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse the POSIX isatty() (XCC)
Barret Rhoden [Wed, 23 Mar 2016 20:16:41 +0000 (16:16 -0400)]
Use the POSIX isatty() (XCC)

This is somewhat bullshit, since our tcgetattr() always returns whatever my
Linux terminal said back in 2009.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMap PTEs for MAP_SHARED | MAP_LOCKED files on fork
Barret Rhoden [Wed, 23 Mar 2016 19:23:05 +0000 (15:23 -0400)]
Map PTEs for MAP_SHARED | MAP_LOCKED files on fork

If you had a process that forked but did not exec, then the read-only parts
of the binary would not be in its address space.  Those parts would be in
the page cache, so long as the parent was still around (which had the VMR
MAP_LOCKED) (or if it left and we flushed the cache).

Then later, the child asks the kernel to perform a syscall on one of its
addresses in the read-only section, e.g. .rodata.  The kernel would then
page fault.

Right now, the kernel won't attempt to handle a PF *of its own* by talking
to the page cache.  Eventually we'll need to do this.  But it's also just
wrong for us to not have MAP_LOCKED VMRs present in a process's page table.

I <3 fork.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix minor leaks in mm.c
Barret Rhoden [Wed, 23 Mar 2016 19:21:08 +0000 (15:21 -0400)]
Fix minor leaks in mm.c

If we ever had an error, we'd bail out but forget to decref and free
memory.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove the double-close() warning
Barret Rhoden [Tue, 22 Mar 2016 21:45:49 +0000 (17:45 -0400)]
Remove the double-close() warning

It's legal to attempt to close a bad FD.  We had a nasty bug that this
caught a long time ago, but now we have programs that do this all the time
(ssh).

Since I fixed the shutdown() problem, we no longer have any known-buggy
programs that are double-closing.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoBump the size of the ancillary state (XCC)
Michael Taufen [Thu, 31 Mar 2016 16:19:14 +0000 (09:19 -0700)]
Bump the size of the ancillary state (XCC)

Increases the size of extended_region by 8 bytes to accommodate
the PKRU

Reinstall your kernel headers and maybe rebuild apps.

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[rebuild warning]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMoved timing parameters into proc_global_info (XCC)
GanShun [Tue, 29 Mar 2016 18:26:31 +0000 (11:26 -0700)]
Moved timing parameters into proc_global_info (XCC)

Moved tsc_freq, timing_overhead and bus freq into __proc_global_info.
PIT stuff is now in k/a/x/time.c as a static. timing_overhead has been
renamed to tsc_overhead.

Reinstall your kernel headers.

Signed-off-by: GanShun <ganshun@gmail.com>
[kernel headers warning, removed extraneous comment]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoRemove unused variable from prep_syscalls().
Dan Cross [Wed, 30 Mar 2016 20:44:28 +0000 (16:44 -0400)]
Remove unused variable from prep_syscalls().

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd a control file in #cons to support killing children.
Ronald G. Minnich [Fri, 25 Mar 2016 15:59:42 +0000 (08:59 -0700)]
Add a control file in #cons to support killing children.

This is needed for ssh support for ^C.
The ssh server, when it sees a ^C, opens and writes a command
to #cons/killkids.

Right now the command is ignored, but that might change.

We might at some point decide to implement /proc/self, and this can
move there. It's arguably a bit gross to have it in #cons.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
[ slight touchups ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agopasswd: put in a one line passwd file for Unix programs
Ronald G. Minnich [Thu, 24 Mar 2016 21:19:25 +0000 (14:19 -0700)]
passwd: put in a one line passwd file for Unix programs

This is unfortunate but we'll never see the end of it otherwise.

Signed-off-by: Ronald G. Minnich <rminnich@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoApic msr exit handling added with timer thread support
GanShun [Thu, 24 Mar 2016 17:54:05 +0000 (10:54 -0700)]
Apic msr exit handling added with timer thread support

Added emsr_apic in user/vmm/vmxmsr to write all apic msr writes to the
vapic page. Started the timer thread using the vector linux writes to the
timer msr. We ignore the initial count as long as its not 0 and we just
inject a timer interrupt at 100hz.

Signed-off-by: GanShun <ganshun@gmail.com>
[touched up function declaration formatting]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMoved Trap Injection macros to the correct location (XCC)
GanShun [Wed, 23 Mar 2016 16:59:36 +0000 (09:59 -0700)]
Moved Trap Injection macros to the correct location (XCC)

Reinstall your kernel headers.

Signed-off-by: GanShun <ganshun@gmail.com>
[kernel header warning]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCosmetic: Change tabs to spaces in glibc Versions file.
Dan Cross [Tue, 22 Mar 2016 21:20:42 +0000 (17:20 -0400)]
Cosmetic: Change tabs to spaces in glibc Versions file.

This is purely a cosmetic change: change tabs to spaces
in glibc-2.19-akaros/sysdeps/akaros/Versions for consistency.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoCorrect multicast setup to make ipv6 work reliably.
Geoff Collyer [Thu, 17 Mar 2016 23:32:43 +0000 (16:32 -0700)]
Correct multicast setup to make ipv6 work reliably.

Signed-off-by: Geoff Collyer <geoff.collyer@gmail.com>
[checkpatch touchups]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUpgrade parlib fp state handling, use proc_global_info (XCC)
Michael Taufen [Fri, 11 Mar 2016 00:04:50 +0000 (16:04 -0800)]
Upgrade parlib fp state handling, use proc_global_info (XCC)

Rebuild kernel headers and all user apps!

This upgrades parlib so it also has the fp state upgrades
recently made to the Akaros kernel (xsave, xsaveopt, xrstor),
and also makes Akaros use proc_global_info for x86_default_xcr0

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
[ touched up a checkpatch warning ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUser library changes to take a guest_thread instead of a vmctl.
GanShun [Tue, 22 Mar 2016 00:15:21 +0000 (17:15 -0700)]
User library changes to take a guest_thread instead of a vmctl.

Removed vmctls from user/. user libraries just use a guest_thread now.

Signed-off-by: GanShun <ganshun@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoModify cpu feat barrier for enabling CR4_OSXSAVE
Michael Taufen [Tue, 22 Mar 2016 16:17:46 +0000 (09:17 -0700)]
Modify cpu feat barrier for enabling CR4_OSXSAVE

Signed-off-by: Michael Taufen <mtaufen@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement sched_getcpu() (XCC)
Dan Cross [Tue, 22 Mar 2016 19:45:56 +0000 (15:45 -0400)]
Implement sched_getcpu() (XCC)

Added a 'sched_getcpu()' routine that returns the
current pcore ID, as an analog to the routine of
the same name in Linux. Rebuild your toolchain.

Signed-off-by: Dan Cross <crossd@gmail.com>
[changed the commit subject from Linux compat changes]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoMinor changes to build C++ threads in gcc (XCC)
Dan Cross [Tue, 22 Mar 2016 16:32:47 +0000 (12:32 -0400)]
Minor changes to build C++ threads in gcc (XCC)

Added a constant and modified our Makefile to enable
C++ thread support when building GCC. Rebuild your
toolchain.

Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd debugging info to ipchaninfo()
Barret Rhoden [Tue, 22 Mar 2016 19:43:08 +0000 (15:43 -0400)]
Add debugging info to ipchaninfo()

Reports nonblock status and whether or not the conv is tapped.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement shutdown() (XCC)
Barret Rhoden [Tue, 22 Mar 2016 19:39:22 +0000 (15:39 -0400)]
Implement shutdown() (XCC)

We had been just closing the FD, which is clearly wrong (you may have been
getting warnings from the kernel about this).  Best case, you just get a
warning.  Worst case, you accidentally close another FD in a concurrent
program.

I don't know if the TCP code is right.  It sends a FIN.  Maybe it doesn't
send it the right way, or maybe we should do things for the other states
too.

It's better than it was before.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoFix a bunch of Rock warnings (XCC)
Barret Rhoden [Tue, 22 Mar 2016 15:53:38 +0000 (11:53 -0400)]
Fix a bunch of Rock warnings (XCC)

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoUse a fork callback in select()
Barret Rhoden [Tue, 22 Mar 2016 15:20:03 +0000 (11:20 -0400)]
Use a fork callback in select()

We need to flush our state in the child on a fork.  Otherwise we'll think
we are still tracking the FDs, even though the underlying taps weren't
inherited.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd callbacks for fork() (XCC)
Barret Rhoden [Tue, 22 Mar 2016 15:16:09 +0000 (11:16 -0400)]
Add callbacks for fork() (XCC)

If a process forks but does not exec, some user-level subsystems (e.g.
select) will need to run a callback in the child.

Rebuild glibc.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Fire read taps on actual edges
Barret Rhoden [Tue, 22 Mar 2016 14:02:05 +0000 (10:02 -0400)]
qio: Fire read taps on actual edges

We were only firing when the queue was Qstarved, which means that someone
had to attempt to drain the queue at some point.  Thus if the queue was
drained exactly, but no one waited, then the tap wouldn't fire.

Now we fire whenever the queue was empty, not when it thought it had a
someone who starved it.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoqio: Fire writeable taps immediately
Barret Rhoden [Tue, 22 Mar 2016 14:01:08 +0000 (10:01 -0400)]
qio: Fire writeable taps immediately

We were only firing when the queue was drained below the flow control
limit.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoAdd git helper scripts and update Doc/Contributing
Barret Rhoden [Wed, 16 Mar 2016 17:40:10 +0000 (13:40 -0400)]
Add git helper scripts and update Doc/Contributing

This updates the Contributing guidelines, providing instructions and
examples for how to submit code to the mailing list, e.g. send-email and
request-pull.

Of the scripts/git files, contributors will be most interested in
git-checkpatch and git-akaros-request-pull.  All of the git scripts will
work as git subcommands if you put them in your PATH.  e.g.

$ git checkpatch master..my_branch

or

$ git akaros-request-pull master my_repo my_branch

akaros-request-pull is just like the request-pull, but with an added
github URL for those who want to look at the patches on the world wide
web.

The other scripts, such as track-review, are mostly useful for code
reviewers.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
3 years agoImplement write combining on x86
Kanoj Sarcar [Thu, 10 Mar 2016 19:28:26 +0000 (11:28 -0800)]
Implement write combining on x86

MLX uses WC to write data payload into HCA buffers. The performance boost
over UC/UC- is significant.

Signed-off-by: Kanoj Sarcar <kanoj@google.com>
[ removed pat_init() and used the new PTE_ flags ]
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>