Fix stale pcpui in sys_exec()
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Aug 2018 17:55:49 +0000 (13:55 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 14 Aug 2018 17:59:30 +0000 (13:59 -0400)
commit713e1182eef94a2d71a6d7575ce3758fcedd3259
tree32ffedf6b153b256a2d6ba422cb3c87d54257d38
parent9969434fee6b7b8d7ef6584cdfc4657cabd88eca
Fix stale pcpui in sys_exec()

sys_exec() can block.  It might resume on another core, perhaps due to a
file system operation or qio that unblocked due to an MCP's syscall.
Before this patch, it would use the pcpui of its original core - core 0.
That would cause it to finish whatever syscall was running on that core,
which could be a nightmare.

We caught this when free_sysc_str() tried to free a ktask's name, which is
the kthread->name.  free_sysc_str() expects to be called targeting a
kthread executing a syscall, but instead it hit whatever was on core 0 -
etherread4 in this case.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/syscall.c