This refers to the bug Commit now looks at the correct list of remaining contexts
The current implementation of SMT for each pipeline stage uses a vector (contexts_left) to keep track of which contexts are still eligible for use - this is also used for round robin selection of which context gets priority for the pipeline stage.
The original code:
int context_id = cores[core_num].context_ids[current_context];
This is a typo. The wrong list is accessed for the current context id number instead of the contexts_left vector. The core's context_ids vector should only be changed when evicting a context or adding a context to the core.
The corrected code:
int context_id = contexts_left[current_context];