Review Board 2.0.15


O3: Don't delete insts if they're still being translated.

Review Request #769 - Created July 3, 2011 and discarded - Latest diff uploaded

Information
Gabe Black
gem5
Reviewers
Default
ali, gblack, nate, stever
O3: Don't delete insts if they're still being translated.

If O3 is done processing an instruction, it puts it into a "removeList". It
later goes through the list and deletes the instructions on it. The CPU might
be done with an instruction, but it could have triggered delayed translation
which might not have finished yet. When it does finish, the translation will
use the pointer it has to record things like faults. It's hard to say exactly
what will happen then, but in one instance the memory under the DynInst had
been allocated for a new instruction which was currently being executed. The
translation raised a fault (which is not surprising for a misspeculated
instruction) and that fault was effectively injected into the new, unrelated
instruction.

This change forces O3 to stop going through the removeList if an instruction
on it is still being translated. When the translation finishes, then the
instruction can be removed.

Another alternative would be to make commit wait on any instruction which was
still being translated, even if it was squashed or otherwise invalid. I
decided not to do that since it might unrealistically hurt performance if
other, valid instructions were held up for a result which was going to be
thrown away anyway.