next up previous contents
Next: Deadlock avoidance Up: Processing other incoming COHE_REPLYs Previous: Handling positive acknowledgments

Handling negative acknowledgments

If s.reply is set to NACK, the COHE_REPLY indicates that the line missed in the remote cache. This response type is acceptable and handled like a positive acknowledgment unless the COHE message from the directory was sent with NACK_NOK. NACK_NOK indicates that the coherence message specifically expected that data would be transfered. In this case, the cache must have issued a write-back or replacement message just prior to receiving the coherence message in question. If this write-back or replacement has not yet been received, the original REQUEST that started the coherence transaction sequence is sent back to its cache with an RAR to be retried. (If the RAR cannot be sent immediately, the directory puts it in OutboundReqs to be tried later). If the write-back has been received at the directory, though, the original REQUEST can be reprocessed through the standard directory request-handling case.

On NACK_PEND coherence replies, the directory is expected to reevaluate its status and resend the COHE request if needed. A response of NACK_PEND is sent from the cache in certain cases of a COHE received for a line with an outstanding MSHR. Such a race can occur either if the cache sent a write-back or replacement message before the directory sent out the COHE or if the COHE was received by the cache before the REPLY, which had been sent to the cache earlier. If the directory has received a write-back for the line in question from the node that responded with a NACK_PEND, the original REQUEST is reprocessed by the normal request handler. Otherwise, the coherence message is retried again, as it may have been NACK_PENDed only because it bypassed an earlier REPLY.



Vijay Sadananda Pai
Thu Aug 7 14:18:56 CDT 1997