mem-ruby: patch fixes a protocol error in MOESI_CMP_Directory (#316)

When there is race between FwdGetX
and PUTX on owner. Owner in this case hands off
ownership to GetX requestor and PUTX still goes
through. But since owner has changed, state should go back to M and PUTX
is essentially trashed.
An Unblock to the Directory in this case will give an undefined
transition. I have added transitions which indicate that when an Unblock
is served to the Directory, it means that some kind of ownership
transfer has happened while a PUTX/PUTO was in progress.
This commit is contained in:
Bobby R. Bruce
2023-09-15 13:25:51 -07:00
committed by GitHub

View File

@@ -1014,6 +1014,31 @@ machine(MachineType:Directory, "Directory protocol")
i_popIncomingRequestQueue;
}
//this happens when there is race between FwdGetX
//and PUTX on owner. Owner in this case hands off
//ownership to GetX requestor and PUTX still goes
//through. But since owner has changed, state should
//go back to M and PUTX is essentially trashed.
transition(MI, Unblock, M) {
w_deallocateTBE;
j_popIncomingUnblockQueue;
}
transition(MIS, Unblock, M) {
w_deallocateTBE;
j_popIncomingUnblockQueue;
}
transition(OS, Unblock, O) {
//In OS state there is no TBE for some reason
// w_deallocateTBE;
j_popIncomingUnblockQueue;
}
transition(OSS, Unblock, O) {
j_popIncomingUnblockQueue;
}
transition(WBI, Memory_Ack, I) {
clearWBAck;
w_deallocateTBE;