Hi all,

I am using O3CPU with an adjacent cache line prefetcher. But when I run the 
program I find the assertion in the following codes segment in function 
getTimingPacket() is violated.

if (tgt_pkt->cmd == MemCmd::HardPFReq) {
            // It might be possible for a writeback to arrive between
            // the time the prefetch is placed in the MSHRs and when
            // it's selected to send... if so, this assert will catch
            // that, and then we'll have to figure out what to do.
            assert(blk == NULL);

            // We need to check the caches above us to verify that
            // they don't have a copy of this block in the dirty state
            // at the moment. Without this check we could get a stale
            // copy from memory that might get used in place of the
            // dirty one.
            Packet snoop_pkt(tgt_pkt, true);
            snoop_pkt.setExpressSnoop();
            snoop_pkt.senderState = mshr;
            cpuSidePort->sendTimingSnoopReq(&snoop_pkt);

I read the comments and I could imagine such a scenario. But I am a little 
puzzled how to deal with that. At first I just comment the assertion since I 
think it is OK to just protect the dirty line not be covered by the 
prefetched data. But If I do so, another assertion will be violated in 
getBusPacket().

Actually I've ever seen someone else asked similar question but no reply...

Any reply or suggestion is appreciated, thanks

_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

Reply via email to