Right now a single thread cpu 1 could get assigned context Id != 1, depending
on the order in which it's registered with the system. To make them match, here is a little change.
This commit is contained in:
@@ -285,7 +285,17 @@ BaseCPU::registerThreadContexts()
|
||||
for (int i = 0; i < threadContexts.size(); ++i) {
|
||||
ThreadContext *tc = threadContexts[i];
|
||||
|
||||
tc->setContextId(system->registerThreadContext(tc));
|
||||
/** This is so that contextId and cpuId match where there is a
|
||||
* 1cpu:1context relationship. Otherwise, the order of registration
|
||||
* could affect the assignment and cpu 1 could have context id 3, for
|
||||
* example. We may even want to do something like this for SMT so that
|
||||
* cpu 0 has the lowest thread contexts and cpu N has the highest, but
|
||||
* I'll just do this for now
|
||||
*/
|
||||
if (number_of_threads == 1)
|
||||
tc->setContextId(system->registerThreadContext(tc, _cpuId));
|
||||
else
|
||||
tc->setContextId(system->registerThreadContext(tc));
|
||||
#if !FULL_SYSTEM
|
||||
tc->getProcessPtr()->assignThreadContext(tc->contextId());
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user