Fixes SCP wakeup latency
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Sep 2014 03:38:17 +0000 (20:38 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 10 Sep 2014 03:38:17 +0000 (20:38 -0700)
commitbbf08ef41daa1e321e25c0b172a2839ec99146bf
treea745f91ebb2d694e38ca47222d74499ec634132f
parentc275a195afb6b822c41e4781987b6854c0be1e37
Fixes SCP wakeup latency

When an SCP syscall completes on a CG core, which ultimately wakes up
the process, the SCP was not running until the next ksched timer tick.

This scenario could happen if an SCP blocks on a read on a pipe that
gets written to by an MCP.  The pipe write wakes the reader, and since
the kthread code is primitive, it just finishes the bottom half of the
syscall on the MCPs core (a CG core).  Core 0 could have been halted the
entire time, and had no reason to wake up.  It may have called
cpu_bored() a long time ago and has not woken up yet.

Btw, note that syscalls in the trace are written in the order of
*completion*, not submission.  This is more clear from the TSC
timestamp, but the pretty output only has msec granularity.
kern/arch/riscv/trap.h
kern/src/schedule.c