X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Faddr_mapper.cc;h=4aff9dcd883038005dda299db4c76ba79270a7ad;hb=d2fd3b2ec2c265eb9ed3bdcc1db3e4c3feee3846;hp=b754cb7e6e5003829e5836a2b8be6182c2b33a58;hpb=2a740aa09682c32eb8f1f8880f279c943d8c6ee1;p=gem5.git diff --git a/src/mem/addr_mapper.cc b/src/mem/addr_mapper.cc index b754cb7e6..4aff9dcd8 100644 --- a/src/mem/addr_mapper.cc +++ b/src/mem/addr_mapper.cc @@ -123,10 +123,9 @@ AddrMapper::recvTimingReq(PacketPtr pkt) Addr orig_addr = pkt->getAddr(); bool needsResponse = pkt->needsResponse(); bool memInhibitAsserted = pkt->memInhibitAsserted(); - Packet::SenderState* senderState = pkt->senderState; if (needsResponse && !memInhibitAsserted) { - pkt->senderState = new AddrMapperSenderState(senderState, orig_addr); + pkt->pushSenderState(new AddrMapperSenderState(orig_addr)); } pkt->setAddr(remapAddr(orig_addr)); @@ -137,8 +136,7 @@ AddrMapper::recvTimingReq(PacketPtr pkt) // If not successful, restore the sender state if (!successful && needsResponse) { - delete pkt->senderState; - pkt->senderState = senderState; + delete pkt->popSenderState(); } return successful; @@ -158,7 +156,7 @@ AddrMapper::recvTimingResp(PacketPtr pkt) Addr remapped_addr = pkt->getAddr(); // Restore the state and address - pkt->senderState = receivedState->origSenderState; + pkt->senderState = receivedState->predecessor; pkt->setAddr(receivedState->origAddr); // Attempt to send the packet @@ -253,9 +251,9 @@ Addr RangeAddrMapper::remapAddr(Addr addr) const { for (int i = 0; i < originalRanges.size(); ++i) { - if (originalRanges[i] == addr) { - Addr offset = addr - originalRanges[i].start; - return offset + remappedRanges[i].start; + if (originalRanges[i].contains(addr)) { + Addr offset = addr - originalRanges[i].start(); + return offset + remappedRanges[i].start(); } } @@ -265,26 +263,8 @@ RangeAddrMapper::remapAddr(Addr addr) const AddrRangeList RangeAddrMapper::getAddrRanges() const { - AddrRangeList ranges; - AddrRangeList actualRanges = masterPort.getAddrRanges(); - - for (AddrRangeIter r = actualRanges.begin(); r != actualRanges.end(); ++r) { - AddrRange range = *r; - - for (int j = 0; j < originalRanges.size(); ++j) { - if (range.intersects(originalRanges[j])) - fatal("Cannot remap range that intersects the original" - " ranges but are not a subset.\n"); - if (range.isSubset(originalRanges[j])) { - // range is a subset - Addr offset = range.start - originalRanges[j].start; - range.start -= offset; - range.end -= offset; - } - ranges.push_back(range); - } - } - + // Simply return the original ranges as given by the parameters + AddrRangeList ranges(originalRanges.begin(), originalRanges.end()); return ranges; }