A certain coherence protocol race was not properly handled in the
L2 cache code. In particular, inclusion could be violated if the L2 cache
received the following sequence:
Incoming external coherence message to line X
Unsolicited L1 write-back of line X
L1 request of line X
L1 reply to external coherence message
Problem Fix
This required only a one-line fix in the COHE\_REPLY case of the
function L2ProcessTagReq. One if-conditional in this case
used to read:
/* NOTE: unmark cohe_pend for COHE_REPLY */
if (hittype == 0 && captr->data[i1][i2].state.cohe_pend)
This should be replaced with:
/* NOTE: unmark cohe_pend for COHE_REPLY */
if (hittype == 0 && captr->data[i1][i2].state.cohe_pend && req->req_type != WRB)