Mem: Fix issue with dirty block being losted when entire block transfered to non-cache.
Review Request #509 - Created Feb. 25, 2011 and submitted
| Information | |
|---|---|
| Ali Saidi | |
| gem5 | |
| Reviewers | |
| Default | |
| ali, gblack, nate, stever | |
Mem: Fix issue with dirty block being losted when entire block transfered to non-cache. This change fixes the problem for all the cases we actively use. If you want to try more creative I/O device attachments (E.g. sharing an L2), this won't work. You would need another level of caching between the I/O device and the cache (which you actually need anyway with our current code to make sure writes propigate). This is required so that you can mark the cache inbetween as top level and it won't try to send ownership of a block to the I/O device. Asserts have been added that should catch any issues.
Looks good to me, other than the minor non-substantive change to the assertions, and maybe some editing of the commit message ("losted"? also "propagate" is spelled wrong)
-
src/cpu/o3/fetch_impl.hh (Diff revision 1) -
This is minor, but I'd prefer to see these two asserts written as: !(pkt->memInhibitAsserted() && !pkt->sharedAsserted()) because this explicitly asserts that we're not seeing the combination of signals that indicates ownership, as opposed to having to apply De Morgan in your head to figure that out :-)
