Reorganize the scheduler __core_request() loop
authorValmon Leymarie <valmon.leymarie@gmail.com>
Wed, 23 Sep 2015 00:09:46 +0000 (17:09 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 25 Sep 2015 15:58:03 +0000 (11:58 -0400)
commitc38da4ef6cec2bdbabf3eccb3185fa09e79d6ec7
treeba41c383cbf22d54970d897cf246e5e3b948e9f5
parent405a25ccbaa660ba2884b3a1f0a44155fa4a497e
Reorganize the scheduler __core_request() loop

Previously there was duplicated code to first loop through a proc's
prov_not_alloc list, and then loop through the idlecore list to find an
available core and allocate it to a proc. This commit consolidates these
loops into a single loop. It works by having a function called
find_best_core(), which always pulls from the prov_not_alloc list
first, only falling back to the idlecore list if the prov_not_alloc list
becomes empty.

The logic to preempt a core stays the same because we know that the
spc_i->alloc_proc field will *only* be set if the core we are
considering is provisioned to the proc, but allocated to someone else
(due to the invariant maintained by the proc's prov_not_alloc list). In
all other cases, we want to simply take the core selected by
find_best_core() and allocate it to the proc using the same logic
regardless of whether it was pulled from its prov_not_alloc list or the
idlecore list.
kern/src/schedule.c