why is final state of Readunique not fixed to UD?

as far as I understand, ReadUnique results from store instruction execution, which gets cacheline missed in local cache from peer core's cache or memory. After ReadUnique finishes, the write data is stored into new cacheline and its state transitions to UD. But as per CHI SPEC shown as below,  the final state is UC if not PASS DIRTY or UD if PASS DIRTY. it seems like the data store is not taken into account.

why?  

Parents
  • A ReadUnique should be used by Requester when it intends to perform a store to cache line.

    However, there is no requirement that the store is performed immediately or atomically, and so the cache line can finish in a UniqueClean state if it was received in a UC state.  No data will be lost if the Requester does not perform the store as the ReadUnique returns the original data to the manager.

    By contrast, something like a MakeUnique does require that the store is performed atomically with the completing of the request as a MakeUnique will cause the cache line to invalidated in the rest of the system and no data is returned to the Requester.  Hence, MakeUnique must always finish in a UniqueDirty state.

Reply
  • A ReadUnique should be used by Requester when it intends to perform a store to cache line.

    However, there is no requirement that the store is performed immediately or atomically, and so the cache line can finish in a UniqueClean state if it was received in a UC state.  No data will be lost if the Requester does not perform the store as the ReadUnique returns the original data to the manager.

    By contrast, something like a MakeUnique does require that the store is performed atomically with the completing of the request as a MakeUnique will cause the cache line to invalidated in the rest of the system and no data is returned to the Requester.  Hence, MakeUnique must always finish in a UniqueDirty state.

Children