X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmem%2Faddr_mapper.cc;h=4aff9dcd883038005dda299db4c76ba79270a7ad;hb=d2fd3b2ec2c265eb9ed3bdcc1db3e4c3feee3846;hp=660848c82aed5f88932018d713e5604c11699e11;hpb=71da1d21578b6f9cf5b43bd4648f313326849533;p=gem5.git diff --git a/src/mem/addr_mapper.cc b/src/mem/addr_mapper.cc index 660848c82..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 @@ -265,27 +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(); - Addr start = range.start() - offset; - ranges.push_back(AddrRange(start, start + range.size() - 1)); - } else { - ranges.push_back(range); - } - } - } - + // Simply return the original ranges as given by the parameters + AddrRangeList ranges(originalRanges.begin(), originalRanges.end()); return ranges; }