diff -r ad267effc5f3 -r e90226748736 src/arch/arm/table_walker.cc --- a/src/arch/arm/table_walker.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/arch/arm/table_walker.cc Wed Apr 04 18:21:06 2012 +0100 @@ -235,7 +235,7 @@ f = currState->fault; } else { RequestPtr req = new Request(l1desc_addr, sizeof(uint32_t), flag, masterId); - PacketPtr pkt = new Packet(req, MemCmd::ReadReq, Packet::Broadcast); + PacketPtr pkt = new Packet(req, MemCmd::ReadReq); pkt->dataStatic((uint8_t*)&currState->l1Desc.data); port.sendFunctional(pkt); doL1Descriptor(); @@ -578,8 +578,9 @@ currState->tc->getCpuPtr()->ticks(1)); doL2Descriptor(); } else { - RequestPtr req = new Request(l2desc_addr, sizeof(uint32_t), 0, masterId); - PacketPtr pkt = new Packet(req, MemCmd::ReadReq, Packet::Broadcast); + RequestPtr req = new Request(l2desc_addr, sizeof(uint32_t), 0, + masterId); + PacketPtr pkt = new Packet(req, MemCmd::ReadReq); pkt->dataStatic((uint8_t*)&currState->l2Desc.data); port.sendFunctional(pkt); doL2Descriptor(); diff -r ad267effc5f3 -r e90226748736 src/arch/x86/intmessage.hh --- a/src/arch/x86/intmessage.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/arch/x86/intmessage.hh Wed Apr 04 18:21:06 2012 +0100 @@ -82,7 +82,7 @@ RequestPtr req = new Request(x86InterruptAddress(id, offset), size, Request::UNCACHEABLE, Request::intMasterId); - PacketPtr pkt = new Packet(req, MemCmd::MessageReq, Packet::Broadcast); + PacketPtr pkt = new Packet(req, MemCmd::MessageReq); pkt->allocate(); return pkt; } diff -r ad267effc5f3 -r e90226748736 src/arch/x86/pagetable_walker.cc --- a/src/arch/x86/pagetable_walker.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/arch/x86/pagetable_walker.cc Wed Apr 04 18:21:06 2012 +0100 @@ -492,7 +492,7 @@ flags.set(Request::UNCACHEABLE, uncacheable); RequestPtr request = new Request(nextRead, oldRead->getSize(), flags, walker->masterId); - read = new Packet(request, MemCmd::ReadReq, Packet::Broadcast); + read = new Packet(request, MemCmd::ReadReq); read->allocate(); // If we need to write, adjust the read packet to write the modified // value back to memory. @@ -500,7 +500,7 @@ write = oldRead; write->set(pte); write->cmd = MemCmd::WriteReq; - write->setDest(Packet::Broadcast); + write->clearDest(); } else { write = NULL; delete oldRead->req; @@ -561,8 +561,9 @@ Request::Flags flags = Request::PHYSICAL; if (cr3.pcd) flags.set(Request::UNCACHEABLE); - RequestPtr request = new Request(topAddr, dataSize, flags, walker->masterId); - read = new Packet(request, MemCmd::ReadReq, Packet::Broadcast); + RequestPtr request = new Request(topAddr, dataSize, flags, + walker->masterId); + read = new Packet(request, MemCmd::ReadReq); read->allocate(); } diff -r ad267effc5f3 -r e90226748736 src/cpu/checker/cpu.cc --- a/src/cpu/checker/cpu.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/checker/cpu.cc Wed Apr 04 18:21:06 2012 +0100 @@ -170,9 +170,9 @@ if (fault == NoFault && !memReq->getFlags().isSet(Request::NO_ACCESS)) { PacketPtr pkt = new Packet(memReq, - memReq->isLLSC() ? - MemCmd::LoadLockedReq : MemCmd::ReadReq, - Packet::Broadcast); + memReq->isLLSC() ? + MemCmd::LoadLockedReq : + MemCmd::ReadReq); pkt->dataStatic(data); diff -r ad267effc5f3 -r e90226748736 src/cpu/checker/cpu_impl.hh --- a/src/cpu/checker/cpu_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/checker/cpu_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -281,9 +281,7 @@ break; } } else { - PacketPtr pkt = new Packet(memReq, - MemCmd::ReadReq, - Packet::Broadcast); + PacketPtr pkt = new Packet(memReq, MemCmd::ReadReq); pkt->dataStatic(&machInst); icachePort->sendFunctional(pkt); diff -r ad267effc5f3 -r e90226748736 src/cpu/inorder/resources/cache_unit.hh --- a/src/cpu/inorder/resources/cache_unit.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/inorder/resources/cache_unit.hh Wed Apr 04 18:21:06 2012 +0100 @@ -252,8 +252,8 @@ { public: CacheReqPacket(CacheRequest *_req, - Command _cmd, short _dest, int _idx = 0) - : Packet(&(*_req->memReq), _cmd, _dest), cacheReq(_req), + Command _cmd, int _idx = 0) + : Packet(&(*_req->memReq), _cmd), cacheReq(_req), instIdx(_idx), hasSlot(false), reqData(NULL), memReq(NULL) { diff -r ad267effc5f3 -r e90226748736 src/cpu/inorder/resources/cache_unit.cc --- a/src/cpu/inorder/resources/cache_unit.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/inorder/resources/cache_unit.cc Wed Apr 04 18:21:06 2012 +0100 @@ -814,7 +814,6 @@ cache_req->dataPkt = new CacheReqPacket(cache_req, cache_req->pktCmd, - Packet::Broadcast, cache_req->instIdx); DPRINTF(InOrderCachePort, "[slot:%i]: Slot marked for %x\n", cache_req->getSlot(), @@ -1035,8 +1034,7 @@ cpu->dataMasterId(), 0); - split_pkt = new Packet(cache_req->memReq, cache_req->pktCmd, - Packet::Broadcast); + split_pkt = new Packet(cache_req->memReq, cache_req->pktCmd); split_pkt->dataStatic(inst->splitMemData); DPRINTF(InOrderCachePort, "Completing Split Access.\n"); diff -r ad267effc5f3 -r e90226748736 src/cpu/o3/fetch_impl.hh --- a/src/cpu/o3/fetch_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/o3/fetch_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -611,8 +611,7 @@ } // Build packet here. - PacketPtr data_pkt = new Packet(mem_req, - MemCmd::ReadReq, Packet::Broadcast); + PacketPtr data_pkt = new Packet(mem_req, MemCmd::ReadReq); data_pkt->dataDynamicArray(new uint8_t[cacheBlkSize]); cacheDataPC[tid] = block_PC; diff -r ad267effc5f3 -r e90226748736 src/cpu/o3/lsq_unit.hh --- a/src/cpu/o3/lsq_unit.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/o3/lsq_unit.hh Wed Apr 04 18:21:06 2012 +0100 @@ -605,18 +605,15 @@ ThreadContext *thread = cpu->tcBase(lsqID); Tick delay; - PacketPtr data_pkt = - new Packet(req, MemCmd::ReadReq, Packet::Broadcast); + PacketPtr data_pkt = new Packet(req, MemCmd::ReadReq); if (!TheISA::HasUnalignedMemAcc || !sreqLow) { data_pkt->dataStatic(load_inst->memData); delay = TheISA::handleIprRead(thread, data_pkt); } else { assert(sreqLow->isMmappedIpr() && sreqHigh->isMmappedIpr()); - PacketPtr fst_data_pkt = - new Packet(sreqLow, MemCmd::ReadReq, Packet::Broadcast); - PacketPtr snd_data_pkt = - new Packet(sreqHigh, MemCmd::ReadReq, Packet::Broadcast); + PacketPtr fst_data_pkt = new Packet(sreqLow, MemCmd::ReadReq); + PacketPtr snd_data_pkt = new Packet(sreqHigh, MemCmd::ReadReq); fst_data_pkt->dataStatic(load_inst->memData); snd_data_pkt->dataStatic(load_inst->memData + sreqLow->getSize()); @@ -689,8 +686,7 @@ "addr %#x, data %#x\n", store_idx, req->getVaddr(), data); - PacketPtr data_pkt = new Packet(req, MemCmd::ReadReq, - Packet::Broadcast); + PacketPtr data_pkt = new Packet(req, MemCmd::ReadReq); data_pkt->dataStatic(load_inst->memData); WritebackEvent *wb = new WritebackEvent(load_inst, data_pkt, this); @@ -772,7 +768,7 @@ if (!lsq->cacheBlocked()) { MemCmd command = req->isLLSC() ? MemCmd::LoadLockedReq : MemCmd::ReadReq; - PacketPtr data_pkt = new Packet(req, command, Packet::Broadcast); + PacketPtr data_pkt = new Packet(req, command); PacketPtr fst_data_pkt = NULL; PacketPtr snd_data_pkt = NULL; @@ -791,8 +787,8 @@ } else { // Create the split packets. - fst_data_pkt = new Packet(sreqLow, command, Packet::Broadcast); - snd_data_pkt = new Packet(sreqHigh, command, Packet::Broadcast); + fst_data_pkt = new Packet(sreqLow, command); + snd_data_pkt = new Packet(sreqHigh, command); fst_data_pkt->dataStatic(load_inst->memData); snd_data_pkt->dataStatic(load_inst->memData + sreqLow->getSize()); diff -r ad267effc5f3 -r e90226748736 src/cpu/o3/lsq_unit_impl.hh --- a/src/cpu/o3/lsq_unit_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/o3/lsq_unit_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -823,13 +823,13 @@ if (!TheISA::HasUnalignedMemAcc || !storeQueue[storeWBIdx].isSplit) { // Build a single data packet if the store isn't split. - data_pkt = new Packet(req, command, Packet::Broadcast); + data_pkt = new Packet(req, command); data_pkt->dataStatic(inst->memData); data_pkt->senderState = state; } else { // Create two packets if the store is split in two. - data_pkt = new Packet(sreqLow, command, Packet::Broadcast); - snd_data_pkt = new Packet(sreqHigh, command, Packet::Broadcast); + data_pkt = new Packet(sreqLow, command); + snd_data_pkt = new Packet(sreqHigh, command); data_pkt->dataStatic(inst->memData); snd_data_pkt->dataStatic(inst->memData + sreqLow->getSize()); diff -r ad267effc5f3 -r e90226748736 src/cpu/ozone/front_end_impl.hh --- a/src/cpu/ozone/front_end_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/ozone/front_end_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -477,8 +477,7 @@ #endif // Build packet here. - PacketPtr data_pkt = new Packet(memReq, - Packet::ReadReq, Packet::Broadcast); + PacketPtr data_pkt = new Packet(memReq, Packet::ReadReq); data_pkt->dataStatic(cacheData); if (!icachePort.sendTiming(data_pkt)) { diff -r ad267effc5f3 -r e90226748736 src/cpu/ozone/lw_lsq.hh --- a/src/cpu/ozone/lw_lsq.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/ozone/lw_lsq.hh Wed Apr 04 18:21:06 2012 +0100 @@ -571,7 +571,7 @@ (*sq_it).inst->seqNum, inst->seqNum, req->getVaddr(), *(inst->memData)); - PacketPtr data_pkt = new Packet(req, Packet::ReadReq, Packet::Broadcast); + PacketPtr data_pkt = new Packet(req, Packet::ReadReq); data_pkt->dataStatic(inst->memData); WritebackEvent *wb = new WritebackEvent(inst, data_pkt, this); @@ -635,8 +635,7 @@ PacketPtr data_pkt = new Packet(req, (req->isLLSC() ? - MemCmd::LoadLockedReq : Packet::ReadReq), - Packet::Broadcast); + MemCmd::LoadLockedReq : Packet::ReadReq)); data_pkt->dataStatic(inst->memData); LSQSenderState *state = new LSQSenderState; diff -r ad267effc5f3 -r e90226748736 src/cpu/ozone/lw_lsq_impl.hh --- a/src/cpu/ozone/lw_lsq_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/ozone/lw_lsq_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -577,7 +577,7 @@ MemCmd command = req->isSwap() ? MemCmd::SwapReq : (req->isLLSC() ? MemCmd::WriteReq : MemCmd::StoreCondReq); - PacketPtr data_pkt = new Packet(req, command, Packet::Broadcast); + PacketPtr data_pkt = new Packet(req, command); data_pkt->dataStatic(inst->memData); LSQSenderState *state = new LSQSenderState; diff -r ad267effc5f3 -r e90226748736 src/cpu/simple/atomic.cc --- a/src/cpu/simple/atomic.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/simple/atomic.cc Wed Apr 04 18:21:06 2012 +0100 @@ -272,8 +272,8 @@ // Now do the access. if (fault == NoFault && !req->getFlags().isSet(Request::NO_ACCESS)) { Packet pkt = Packet(req, - req->isLLSC() ? MemCmd::LoadLockedReq : MemCmd::ReadReq, - Packet::Broadcast); + req->isLLSC() ? MemCmd::LoadLockedReq : + MemCmd::ReadReq); pkt.dataStatic(data); if (req->isMmappedIpr()) @@ -374,7 +374,7 @@ } if (do_access && !req->getFlags().isSet(Request::NO_ACCESS)) { - Packet pkt = Packet(req, cmd, Packet::Broadcast); + Packet pkt = Packet(req, cmd); pkt.dataStatic(data); if (req->isMmappedIpr()) { @@ -473,8 +473,7 @@ //if(predecoder.needMoreBytes()) //{ icache_access = true; - Packet ifetch_pkt = Packet(&ifetch_req, MemCmd::ReadReq, - Packet::Broadcast); + Packet ifetch_pkt = Packet(&ifetch_req, MemCmd::ReadReq); ifetch_pkt.dataStatic(&inst); if (fastmem && system->isMemAddr(ifetch_pkt.getAddr())) diff -r ad267effc5f3 -r e90226748736 src/cpu/simple/timing.cc --- a/src/cpu/simple/timing.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/simple/timing.cc Wed Apr 04 18:21:06 2012 +0100 @@ -355,7 +355,7 @@ cmd = MemCmd::SwapReq; } } - pkt = new Packet(req, cmd, Packet::Broadcast); + pkt = new Packet(req, cmd); } void @@ -376,8 +376,7 @@ buildPacket(pkt2, req2, read); req->setPhys(req1->getPaddr(), req->getSize(), req1->getFlags(), dataMasterId()); - PacketPtr pkt = new Packet(req, pkt1->cmd.responseCommand(), - Packet::Broadcast); + PacketPtr pkt = new Packet(req, pkt1->cmd.responseCommand()); pkt->dataDynamicArray(data); pkt1->dataStatic(data); @@ -578,7 +577,7 @@ if (fault == NoFault) { DPRINTF(SimpleCPU, "Sending fetch for addr %#x(pa: %#x)\n", req->getVaddr(), req->getPaddr()); - ifetch_pkt = new Packet(req, MemCmd::ReadReq, Packet::Broadcast); + ifetch_pkt = new Packet(req, MemCmd::ReadReq); ifetch_pkt->dataStatic(&inst); DPRINTF(SimpleCPU, " -- pkt addr: %#x\n", ifetch_pkt->getAddr()); diff -r ad267effc5f3 -r e90226748736 src/cpu/testers/directedtest/InvalidateGenerator.cc --- a/src/cpu/testers/directedtest/InvalidateGenerator.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/testers/directedtest/InvalidateGenerator.cc Wed Apr 04 18:21:06 2012 +0100 @@ -68,13 +68,21 @@ cmd = MemCmd::ReadReq; port = safe_cast(m_directed_tester-> getCpuPort(m_active_read_node)); - pkt = new Packet(req, cmd, m_active_read_node); + pkt = new Packet(req, cmd); + // Normal request packets are routed based on address, override by + // setting the destination field that is normally only used for + // responses + pkt->setDest(m_active_read_node); } else if (m_status == InvalidateGeneratorStatus_Inv_Waiting) { DPRINTF(DirectedTest, "initiating invalidating write\n"); cmd = MemCmd::WriteReq; port = safe_cast(m_directed_tester-> getCpuPort(m_active_inv_node)); - pkt = new Packet(req, cmd, m_active_inv_node); + pkt = new Packet(req, cmd); + // Normal request packets are routed based on address, override by + // setting the destination field that is normally only used for + // responses + pkt->setDest(m_active_inv_node); } else { panic("initiate was unexpectedly called\n"); } diff -r ad267effc5f3 -r e90226748736 src/cpu/testers/directedtest/SeriesRequestGenerator.cc --- a/src/cpu/testers/directedtest/SeriesRequestGenerator.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/testers/directedtest/SeriesRequestGenerator.cc Wed Apr 04 18:21:06 2012 +0100 @@ -67,7 +67,11 @@ } else { cmd = MemCmd::ReadReq; } - PacketPtr pkt = new Packet(req, cmd, m_active_node); + PacketPtr pkt = new Packet(req, cmd); + // Normal request packets are routed based on address, override by + // setting the destination field that is normally only used for + // responses + pkt->setDest(m_active_node); uint8_t* dummyData = new uint8_t; *dummyData = 0; pkt->dataDynamic(dummyData); diff -r ad267effc5f3 -r e90226748736 src/cpu/testers/memtest/memtest.cc --- a/src/cpu/testers/memtest/memtest.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/testers/memtest/memtest.cc Wed Apr 04 18:21:06 2012 +0100 @@ -328,8 +328,7 @@ id, do_functional ? "functional " : "", req->getPaddr(), blockAddr(req->getPaddr()), *result); - PacketPtr pkt = new Packet(req, MemCmd::ReadReq, Packet::Broadcast); - pkt->setSrc(0); + PacketPtr pkt = new Packet(req, MemCmd::ReadReq); pkt->dataDynamicArray(new uint8_t[req->getSize()]); MemTestSenderState *state = new MemTestSenderState(result); pkt->senderState = state; @@ -360,8 +359,7 @@ do_functional ? "functional " : "", req->getPaddr(), blockAddr(req->getPaddr()), data & 0xff); - PacketPtr pkt = new Packet(req, MemCmd::WriteReq, Packet::Broadcast); - pkt->setSrc(0); + PacketPtr pkt = new Packet(req, MemCmd::WriteReq); uint8_t *pkt_data = new uint8_t[req->getSize()]; pkt->dataDynamicArray(pkt_data); memcpy(pkt_data, &data, req->getSize()); diff -r ad267effc5f3 -r e90226748736 src/cpu/testers/networktest/networktest.cc --- a/src/cpu/testers/networktest/networktest.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/testers/networktest/networktest.cc Wed Apr 04 18:21:06 2012 +0100 @@ -260,8 +260,7 @@ "Generated packet with destination %d, embedded in address %x\n", destination, req->getPaddr()); - PacketPtr pkt = new Packet(req, requestType, 0); - pkt->setSrc(0); //Not used + PacketPtr pkt = new Packet(req, requestType); pkt->dataDynamicArray(new uint8_t[req->getSize()]); NetworkTestSenderState *state = new NetworkTestSenderState(result); pkt->senderState = state; diff -r ad267effc5f3 -r e90226748736 src/cpu/testers/rubytest/Check.cc --- a/src/cpu/testers/rubytest/Check.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/cpu/testers/rubytest/Check.cc Wed Apr 04 18:21:06 2012 +0100 @@ -107,7 +107,7 @@ m_tester_ptr->masterId(), curTick(), m_pc.getAddress()); req->setThreadContext(index, 0); - PacketPtr pkt = new Packet(req, cmd, port->idx); + PacketPtr pkt = new Packet(req, cmd); // push the subblock onto the sender state. The sequencer will // update the subblock on the return @@ -148,7 +148,7 @@ cmd = MemCmd::FlushReq; - PacketPtr pkt = new Packet(req, cmd, port->idx); + PacketPtr pkt = new Packet(req, cmd); // push the subblock onto the sender state. The sequencer will // update the subblock on the return @@ -190,7 +190,7 @@ cmd = MemCmd::WriteReq; // } - PacketPtr pkt = new Packet(req, cmd, port->idx); + PacketPtr pkt = new Packet(req, cmd); uint8_t* writeData = new uint8_t; *writeData = m_value + m_store_count; pkt->dataDynamic(writeData); @@ -247,7 +247,7 @@ m_tester_ptr->masterId(), curTick(), m_pc.getAddress()); req->setThreadContext(index, 0); - PacketPtr pkt = new Packet(req, MemCmd::ReadReq, port->idx); + PacketPtr pkt = new Packet(req, MemCmd::ReadReq); uint8_t* dataArray = new uint8_t[CHECK_SIZE]; pkt->dataDynamicArray(dataArray); diff -r ad267effc5f3 -r e90226748736 src/dev/io_device.cc --- a/src/dev/io_device.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/dev/io_device.cc Wed Apr 04 18:21:06 2012 +0100 @@ -270,7 +270,7 @@ for (ChunkGenerator gen(addr, size, peerBlockSize()); !gen.done(); gen.next()) { Request *req = new Request(gen.addr(), gen.size(), flag, masterId); - PacketPtr pkt = new Packet(req, cmd, Packet::Broadcast); + PacketPtr pkt = new Packet(req, cmd); // Increment the data pointer on a write if (data) diff -r ad267effc5f3 -r e90226748736 src/mem/bridge.hh --- a/src/mem/bridge.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/bridge.hh Wed Apr 04 18:21:06 2012 +0100 @@ -91,7 +91,7 @@ PacketPtr pkt; bool nackedHere; Packet::SenderState *origSenderState; - short origSrc; + Packet::NodeID origSrc; bool expectResponse; PacketBuffer(PacketPtr _pkt, Tick t, bool nack = false) diff -r ad267effc5f3 -r e90226748736 src/mem/bridge.cc --- a/src/mem/bridge.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/bridge.cc Wed Apr 04 18:21:06 2012 +0100 @@ -144,9 +144,8 @@ // all checks are done when the request is accepted on the slave // side, so we are guaranteed to have space for the response - - DPRINTF(BusBridge, "recvTiming: src %d dest %d addr 0x%x\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr()); + DPRINTF(BusBridge, "recvTiming: response %s addr 0x%x\n", + pkt->cmdString(), pkt->getAddr()); DPRINTF(BusBridge, "Request queue size: %d\n", requestQueue.size()); @@ -161,8 +160,9 @@ // should only see requests on the slave side assert(pkt->isRequest()); - DPRINTF(BusBridge, "recvTiming: src %d dest %d addr 0x%x\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr()); + + DPRINTF(BusBridge, "recvTiming: request %s addr 0x%x\n", + pkt->cmdString(), pkt->getAddr()); DPRINTF(BusBridge, "Response queue size: %d outresp: %d\n", responseQueue.size(), outstandingResponses); @@ -277,6 +277,9 @@ // from original request buf->fixResponse(pkt); + // the bridge assumes that at least one bus has set the + // destination field of the packet + assert(pkt->isDestValid()); DPRINTF(BusBridge, "response, new dest %d\n", pkt->getDest()); delete buf; @@ -304,8 +307,8 @@ PacketPtr pkt = buf->pkt; - DPRINTF(BusBridge, "trySend: origSrc %d dest %d addr 0x%x\n", - buf->origSrc, pkt->getDest(), pkt->getAddr()); + DPRINTF(BusBridge, "trySend: origSrc %d addr 0x%x\n", + buf->origSrc, pkt->getAddr()); // If the send was successful, make sure sender state was set to NULL // otherwise we could get a NACK back of a packet that didn't expect a diff -r ad267effc5f3 -r e90226748736 src/mem/bus.cc --- a/src/mem/bus.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/bus.cc Wed Apr 04 18:21:06 2012 +0100 @@ -203,18 +203,17 @@ (!retryList.empty() && (!inRetry || src_port != retryList.front())))) { addToRetryList(src_port); - DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x BUSY\n", - src_id, pkt->getDest(), pkt->cmdString(), pkt->getAddr()); + DPRINTF(Bus, "recvTiming: src %s %s 0x%x BUSY\n", + src_port->name(), pkt->cmdString(), pkt->getAddr()); return false; } - DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x\n", - src_id, pkt->getDest(), pkt->cmdString(), pkt->getAddr()); + DPRINTF(Bus, "recvTiming: src %s %s 0x%x\n", + src_port->name(), pkt->cmdString(), pkt->getAddr()); Tick headerFinishTime = pkt->isExpressSnoop() ? 0 : calcPacketTiming(pkt); Tick packetFinishTime = pkt->isExpressSnoop() ? 0 : pkt->finishTime; - Packet::NodeID dest = pkt->getDest(); Port *dest_port; // rember if we remove an outstanding req so we can undo it if necessary @@ -227,7 +226,6 @@ if (pkt->isRequest()) { // the packet is a memory-mapped request and should be broadcasted to // our snoopers - assert(dest == Packet::Broadcast); // forward to all snoopers but the source forwardTiming(pkt, src_id); @@ -252,7 +250,7 @@ // the packet is a normal response, and it should always go // back through one of our slave ports, as determined by the // destination field - dest_port = slavePorts[dest]; + dest_port = slavePorts[pkt->getDest()]; // this is a response to a request that we should have seen // passing through the bus @@ -273,8 +271,9 @@ // It's also illegal to force a transaction to retry after // someone else has committed to respond. assert(!pkt->memInhibitAsserted()); - DPRINTF(Bus, "recvTiming: src %d dst %d %s 0x%x RETRY\n", - src_id, pkt->getDest(), pkt->cmdString(), pkt->getAddr()); + DPRINTF(Bus, "recvTiming: src %s dst %s %s 0x%x RETRY\n", + src_port->name(), dest_port->name(), pkt->cmdString(), + pkt->getAddr()); // if it was added, then erase it again if (added_outstanding) @@ -324,23 +323,20 @@ (retryList.size() && (!inRetry || src_port != retryList.front())))) { addToRetryList(src_port); - DPRINTF(Bus, "recvTimingSnoop: src %d dst %d %s 0x%x BUSY\n", - src_id, pkt->getDest(), pkt->cmdString(), pkt->getAddr()); + DPRINTF(Bus, "recvTimingSnoop: src %s %s 0x%x BUSY\n", + src_port->name(), pkt->cmdString(), pkt->getAddr()); return false; } - DPRINTF(Bus, "recvTimingSnoop: src %d dst %d %s 0x%x\n", - src_id, pkt->getDest(), pkt->cmdString(), pkt->getAddr()); + DPRINTF(Bus, "recvTimingSnoop: src %s %s 0x%x\n", + src_port->name(), pkt->cmdString(), pkt->getAddr()); Tick headerFinishTime = pkt->isExpressSnoop() ? 0 : calcPacketTiming(pkt); Tick packetFinishTime = pkt->isExpressSnoop() ? 0 : pkt->finishTime; - Packet::NodeID dest = pkt->getDest(); - if (pkt->isRequest()) { // the packet is an express snoop request and should be // broadcasted to our snoopers - assert(dest == Packet::Broadcast); assert(pkt->isExpressSnoop()); // forward to all snoopers @@ -361,6 +357,9 @@ return true; } else { + // determine the destination based on the field in the packet + Packet::NodeID dest = pkt->getDest(); + // the packet is a snoop response from a snooping master Port *dest_port; @@ -411,8 +410,8 @@ // since this is a response, the send should always // succeed with the current semantics assert(false); - DPRINTF(Bus, "recvTimingSnoop: src %d dst %d %s 0x%x RETRY\n", - src_id, pkt->getDest(), pkt->cmdString(), + DPRINTF(Bus, "recvTimingSnoop: src %s dst %s %s 0x%x RETRY\n", + src_port->name(), dest_port->name(), pkt->cmdString(), pkt->getAddr()); // we have to consider it outstanding again and undo @@ -575,11 +574,11 @@ Tick Bus::recvAtomic(PacketPtr pkt) { - DPRINTF(Bus, "recvAtomic: packet src %d dest %d addr 0x%x cmd %s\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr(), pkt->cmdString()); + DPRINTF(Bus, "recvAtomic: packet src %s addr 0x%x cmd %s\n", + slavePorts[pkt->getSrc()]->name(), pkt->getAddr(), + pkt->cmdString()); // we should always see a request routed based on the address - assert(pkt->getDest() == Packet::Broadcast); assert(pkt->isRequest()); // forward to all snoopers but the source @@ -609,11 +608,11 @@ Tick Bus::recvAtomicSnoop(PacketPtr pkt) { - DPRINTF(Bus, "recvAtomicSnoop: packet src %d dest %d addr 0x%x cmd %s\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr(), pkt->cmdString()); + DPRINTF(Bus, "recvAtomicSnoop: packet src %s addr 0x%x cmd %s\n", + masterPorts[pkt->getSrc()]->name(), pkt->getAddr(), + pkt->cmdString()); // we should always see a request routed based on the address - assert(pkt->getDest() == Packet::Broadcast); assert(pkt->isRequest()); // forward to all snoopers @@ -668,7 +667,7 @@ // restore original packet state for remaining snoopers pkt->cmd = orig_cmd; pkt->setSrc(orig_src_id); - pkt->setDest(Packet::Broadcast); + pkt->clearDest(); } } } @@ -682,13 +681,12 @@ if (!pkt->isPrint()) { // don't do DPRINTFs on PrintReq as it clutters up the output DPRINTF(Bus, - "recvFunctional: packet src %d dest %d addr 0x%x cmd %s\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr(), + "recvFunctional: packet src %s addr 0x%x cmd %s\n", + slavePorts[pkt->getSrc()]->name(), pkt->getAddr(), pkt->cmdString()); } // we should always see a request routed based on the address - assert(pkt->getDest() == Packet::Broadcast); assert(pkt->isRequest()); // forward to all snoopers but the source @@ -709,13 +707,12 @@ if (!pkt->isPrint()) { // don't do DPRINTFs on PrintReq as it clutters up the output DPRINTF(Bus, - "recvFunctionalSnoop: packet src %d dest %d addr 0x%x cmd %s\n", - pkt->getSrc(), pkt->getDest(), pkt->getAddr(), + "recvFunctionalSnoop: packet src %s addr 0x%x cmd %s\n", + masterPorts[pkt->getSrc()]->name(), pkt->getAddr(), pkt->cmdString()); } // we should always see a request routed based on the address - assert(pkt->getDest() == Packet::Broadcast); assert(pkt->isRequest()); // forward to all snoopers diff -r ad267effc5f3 -r e90226748736 src/mem/cache/cache_impl.hh --- a/src/mem/cache/cache_impl.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/cache/cache_impl.hh Wed Apr 04 18:21:06 2012 +0100 @@ -352,7 +352,7 @@ class ForwardResponseRecord : public Packet::SenderState, public FastAlloc { Packet::SenderState *prevSenderState; - int prevSrc; + Packet::NodeID prevSrc; #ifndef NDEBUG BaseCache *cache; #endif @@ -606,7 +606,7 @@ // block is invalid cmd = needsExclusive ? MemCmd::ReadExReq : MemCmd::ReadReq; } - PacketPtr pkt = new Packet(cpu_pkt->req, cmd, Packet::Broadcast, blkSize); + PacketPtr pkt = new Packet(cpu_pkt->req, cmd, blkSize); pkt->allocate(); return pkt; @@ -1002,7 +1002,7 @@ Request *writebackReq = new Request(tags->regenerateBlkAddr(blk->tag, blk->set), blkSize, 0, Request::wbMasterId); - PacketPtr writeback = new Packet(writebackReq, MemCmd::Writeback, -1); + PacketPtr writeback = new Packet(writebackReq, MemCmd::Writeback); if (blk->isWritable()) { writeback->setSupplyExclusive(); } diff -r ad267effc5f3 -r e90226748736 src/mem/cache/prefetch/base.cc --- a/src/mem/cache/prefetch/base.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/cache/prefetch/base.cc Wed Apr 04 18:21:06 2012 +0100 @@ -234,7 +234,7 @@ // create a prefetch memreq Request *prefetchReq = new Request(*addrIter, blkSize, 0, masterId); PacketPtr prefetch = - new Packet(prefetchReq, MemCmd::HardPFReq, Packet::Broadcast); + new Packet(prefetchReq, MemCmd::HardPFReq); prefetch->allocate(); prefetch->req->setThreadContext(pkt->req->contextId(), pkt->req->threadId()); diff -r ad267effc5f3 -r e90226748736 src/mem/cache/tags/iic.cc --- a/src/mem/cache/tags/iic.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/cache/tags/iic.cc Wed Apr 04 18:21:06 2012 +0100 @@ -370,8 +370,7 @@ */ Request *writebackReq = new Request(regenerateBlkAddr(tag_ptr->tag, 0), blkSize, 0, Request::wbMasterId); - PacketPtr writeback = new Packet(writebackReq, MemCmd::Writeback, - -1); + PacketPtr writeback = new Packet(writebackReq, MemCmd::Writeback); writeback->allocate(); memcpy(writeback->getPtr(), tag_ptr->data, blkSize); diff -r ad267effc5f3 -r e90226748736 src/mem/packet.hh --- a/src/mem/packet.hh Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/packet.hh Wed Apr 04 18:21:06 2012 +0100 @@ -1,4 +1,16 @@ /* + * Copyright (c) 2012 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2006 The Regents of The University of Michigan * Copyright (c) 2010 Advanced Micro Devices, Inc. * All rights reserved. @@ -317,10 +329,6 @@ /// The time at which the first chunk of the packet will be transmitted Tick firstWordTime; - /// The special destination address indicating that the packet - /// should be routed based on its address. - static const NodeID Broadcast = -1; - /** * A virtual base opaque structure used to hold state associated * with the packet but specific to the sending device (e.g., an @@ -478,6 +486,8 @@ NodeID getDest() const { assert(flags.isSet(VALID_DST)); return dest; } /// Accessor function to set the destination index of the packet. void setDest(NodeID _dest) { dest = _dest; flags.set(VALID_DST); } + /// Reset destination field, e.g. to turn a response into a request again. + void clearDest() { flags.clear(VALID_DST); } Addr getAddr() const { assert(flags.isSet(VALID_ADDR)); return addr; } unsigned getSize() const { assert(flags.isSet(VALID_SIZE)); return size; } @@ -513,9 +523,9 @@ * not be valid. The command and destination addresses must be * supplied. */ - Packet(Request *_req, MemCmd _cmd, NodeID _dest) - : flags(VALID_DST), cmd(_cmd), req(_req), data(NULL), - dest(_dest), bytesValidStart(0), bytesValidEnd(0), + Packet(Request *_req, MemCmd _cmd) + : cmd(_cmd), req(_req), data(NULL), + bytesValidStart(0), bytesValidEnd(0), time(curTick()), senderState(NULL) { if (req->hasPaddr()) { @@ -533,9 +543,9 @@ * a request that is for a whole block, not the address from the * req. this allows for overriding the size/addr of the req. */ - Packet(Request *_req, MemCmd _cmd, NodeID _dest, int _blkSize) - : flags(VALID_DST), cmd(_cmd), req(_req), data(NULL), - dest(_dest), bytesValidStart(0), bytesValidEnd(0), + Packet(Request *_req, MemCmd _cmd, int _blkSize) + : cmd(_cmd), req(_req), data(NULL), + bytesValidStart(0), bytesValidEnd(0), time(curTick()), senderState(NULL) { if (req->hasPaddr()) { @@ -659,7 +669,7 @@ assert(wasNacked()); cmd = origCmd; assert(needsResponse()); - setDest(Broadcast); + clearDest(); } void diff -r ad267effc5f3 -r e90226748736 src/mem/port.cc --- a/src/mem/port.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/port.cc Wed Apr 04 18:21:06 2012 +0100 @@ -120,7 +120,7 @@ MasterPort::printAddr(Addr a) { Request req(a, 1, 0, Request::funcMasterId); - Packet pkt(&req, MemCmd::PrintReq, Packet::Broadcast); + Packet pkt(&req, MemCmd::PrintReq); Packet::PrintReqState prs(std::cerr); pkt.senderState = &prs; diff -r ad267effc5f3 -r e90226748736 src/mem/port_proxy.cc --- a/src/mem/port_proxy.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/port_proxy.cc Wed Apr 04 18:21:06 2012 +0100 @@ -48,7 +48,7 @@ for (ChunkGenerator gen(addr, size, _port.peerBlockSize()); !gen.done(); gen.next()) { req.setPhys(gen.addr(), gen.size(), 0, Request::funcMasterId); - Packet pkt(&req, cmd, Packet::Broadcast); + Packet pkt(&req, cmd); pkt.dataStatic(p); _port.sendFunctional(&pkt); p += gen.size(); diff -r ad267effc5f3 -r e90226748736 src/mem/ruby/recorder/CacheRecorder.cc --- a/src/mem/ruby/recorder/CacheRecorder.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/ruby/recorder/CacheRecorder.cc Wed Apr 04 18:21:06 2012 +0100 @@ -77,7 +77,7 @@ RubySystem::getBlockSizeBytes(),0, Request::funcMasterId); MemCmd::Command requestType = MemCmd::FlushReq; - Packet *pkt = new Packet(req, requestType, -1); + Packet *pkt = new Packet(req, requestType); Sequencer* m_sequencer_ptr = m_seq_map[rec->m_cntrl_id]; assert(m_sequencer_ptr != NULL); @@ -113,7 +113,7 @@ RubySystem::getBlockSizeBytes(),0, Request::funcMasterId); } - Packet *pkt = new Packet(req, requestType, -1); + Packet *pkt = new Packet(req, requestType); pkt->dataStatic(traceRecord->m_data); Sequencer* m_sequencer_ptr = m_seq_map[traceRecord->m_cntrl_id]; diff -r ad267effc5f3 -r e90226748736 src/mem/ruby/system/RubyPort.cc --- a/src/mem/ruby/system/RubyPort.cc Wed Apr 04 18:21:03 2012 +0100 +++ b/src/mem/ruby/system/RubyPort.cc Wed Apr 04 18:21:06 2012 +0100 @@ -698,7 +698,7 @@ Request req(address.getAddress(), 0, 0, Request::funcMasterId); for (CpuPortIter p = slave_ports.begin(); p != slave_ports.end(); ++p) { if ((*p)->getMasterPort().isSnooping()) { - Packet *pkt = new Packet(&req, MemCmd::InvalidationReq, -1); + Packet *pkt = new Packet(&req, MemCmd::InvalidationReq); (*p)->sendNextCycle(pkt); } }