Previous | Next --- Slide 26 of 64
Back to Lecture Thumbnails
BBB

Why can't we allow other bus transactions in the middle of a BusRd(X)? Say we have a separate BusRdResp transaction to complete the read. Couldn't the requestor wait until either a matching BusRdResp appears on the bus? If a matching BusWr appears first, the request can snoop the data from the write.

If the original request was a BusRdX, and another BusRd(X) appears, then the original requestor can restart. I suppose there is potential for livelock here though.

If the original request was a BusRd, then it only needs to restart if a BusRdX appears. Still possible livelock.

I guess that explains why BusRd(X) has to be atomic.