changeset 23593fdaadcd in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=23593fdaadcd
description:
mem: Remove redundant Packet::allocate calls
This patch cleans up the packet memory allocation confusion. The data
is always allocated at the requesting side, when a packet is created
(or copied), and there is never a need for any device to allocate any
space if it is merely responding to a paket. This behaviour is in line
with how SystemC and TLM works as well, thus increasing
interoperability, and matching established conventions.
The redundant calls to Packet::allocate are removed, and the checks in
the function are tightened up to make sure data is only ever allocated
once. There are still some oddities in the packet copy constructor
where we copy the data pointer if it is static (without ownership),
and allocate new space if the data is dynamic (with ownership). The
latter is being worked on further in a follow-on patch.
diffstat:
src/dev/alpha/backdoor.cc | 1 -
src/dev/alpha/tsunami_cchip.cc | 1 -
src/dev/alpha/tsunami_io.cc | 2 --
src/dev/alpha/tsunami_pchip.cc | 1 -
src/dev/arm/a9scu.cc | 1 -
src/dev/arm/amba_device.cc | 2 --
src/dev/arm/amba_fake.cc | 2 --
src/dev/arm/energy_ctrl.cc | 1 -
src/dev/arm/gic_pl390.cc | 6 ------
src/dev/arm/hdlcd.cc | 2 --
src/dev/arm/kmi.cc | 2 --
src/dev/arm/pl011.cc | 1 -
src/dev/arm/pl111.cc | 1 -
src/dev/arm/rtc_pl031.cc | 2 --
src/dev/arm/rv_ctrl.cc | 1 -
src/dev/arm/timer_cpulocal.cc | 2 --
src/dev/arm/timer_sp804.cc | 2 --
src/dev/arm/vgic.cc | 4 ----
src/dev/copy_engine.cc | 2 --
src/dev/i8254xGBe.cc | 2 --
src/dev/ide_ctrl.cc | 3 ---
src/dev/isa_fake.cc | 1 -
src/dev/mips/malta_cchip.cc | 1 -
src/dev/mips/malta_pchip.cc | 1 -
src/dev/ns_gige.cc | 2 --
src/dev/pciconfigall.cc | 3 ---
src/dev/pcidev.cc | 4 ----
src/dev/sinic.cc | 2 --
src/dev/sparc/dtod.cc | 1 -
src/dev/uart8250.cc | 1 -
src/dev/virtio/base.cc | 2 --
src/dev/virtio/pci.cc | 4 ----
src/mem/cache/cache_impl.hh | 2 --
src/mem/packet.cc | 1 -
src/mem/packet.hh | 12 ++++++------
35 files changed, 6 insertions(+), 72 deletions(-)
diffs (truncated from 550 to 300 lines):
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/alpha/backdoor.cc
--- a/src/dev/alpha/backdoor.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/alpha/backdoor.cc Tue Dec 02 06:07:41 2014 -0500
@@ -111,7 +111,6 @@
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
pkt->makeAtomicResponse();
switch (pkt->getSize())
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/alpha/tsunami_cchip.cc
--- a/src/dev/alpha/tsunami_cchip.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/alpha/tsunami_cchip.cc Tue Dec 02 06:07:41 2014 -0500
@@ -83,7 +83,6 @@
Addr regnum = (pkt->getAddr() - pioAddr) >> 6;
Addr daddr = (pkt->getAddr() - pioAddr);
- pkt->allocate();
switch (pkt->getSize()) {
case sizeof(uint64_t):
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/alpha/tsunami_io.cc
--- a/src/dev/alpha/tsunami_io.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/alpha/tsunami_io.cc Tue Dec 02 06:07:41 2014 -0500
@@ -96,8 +96,6 @@
DPRINTF(Tsunami, "io read va=%#x size=%d IOPorrt=%#x\n", pkt->getAddr(),
pkt->getSize(), daddr);
- pkt->allocate();
-
if (pkt->getSize() == sizeof(uint8_t)) {
switch(daddr) {
// PIC1 mask read
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/alpha/tsunami_pchip.cc
--- a/src/dev/alpha/tsunami_pchip.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/alpha/tsunami_pchip.cc Tue Dec 02 06:07:41 2014 -0500
@@ -72,7 +72,6 @@
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
- pkt->allocate();
Addr daddr = (pkt->getAddr() - pioAddr) >> 6;;
assert(pkt->getSize() == sizeof(uint64_t));
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/a9scu.cc
--- a/src/dev/arm/a9scu.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/a9scu.cc Tue Dec 02 06:07:41 2014 -0500
@@ -55,7 +55,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
switch(daddr) {
case Control:
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/amba_device.cc
--- a/src/dev/arm/amba_device.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/amba_device.cc Tue Dec 02 06:07:41 2014 -0500
@@ -76,8 +76,6 @@
if (daddr < AMBA_PER_ID0 || daddr > AMBA_CEL_ID3)
return false;
- pkt->allocate();
-
int byte = (daddr - AMBA_PER_ID0) << 1;
// Too noisy right now
DPRINTF(AMBA, "Returning %#x for offset %#x(%d)\n",
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/amba_fake.cc
--- a/src/dev/arm/amba_fake.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/amba_fake.cc Tue Dec 02 06:07:41 2014 -0500
@@ -57,7 +57,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(AMBA, " read register %#x\n", daddr);
@@ -74,7 +73,6 @@
{
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
if (!params()->ignore_access)
panic("Tried to write AmbaFake at offset %#x that doesn't exist\n",
daddr);
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/energy_ctrl.cc
--- a/src/dev/arm/energy_ctrl.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/energy_ctrl.cc Tue Dec 02 06:07:41 2014 -0500
@@ -64,7 +64,6 @@
{
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
- pkt->allocate();
Addr daddr = pkt->getAddr() - pioAddr;
assert((daddr & 3) == 0);
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/gic_pl390.cc
--- a/src/dev/arm/gic_pl390.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/gic_pl390.cc Tue Dec 02 06:07:41 2014 -0500
@@ -150,7 +150,6 @@
Pl390::readDistributor(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - distAddr;
- pkt->allocate();
int ctx_id = pkt->req->contextId();
@@ -284,7 +283,6 @@
Pl390::readCpu(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - cpuAddr;
- pkt->allocate();
assert(pkt->req->hasContextId());
int ctx_id = pkt->req->contextId();
@@ -369,7 +367,6 @@
Pl390::readMsix(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - msixRegAddr;
- pkt->allocate();
DPRINTF(GIC, "Gic MSIX read register %#x\n", daddr);
@@ -390,7 +387,6 @@
Pl390::writeDistributor(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - distAddr;
- pkt->allocate();
assert(pkt->req->hasContextId());
int ctx_id = pkt->req->contextId();
@@ -531,7 +527,6 @@
Pl390::writeCpu(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - cpuAddr;
- pkt->allocate();
assert(pkt->req->hasContextId());
int ctx_id = pkt->req->contextId();
@@ -586,7 +581,6 @@
Pl390::writeMsix(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - msixRegAddr;
- pkt->allocate();
DPRINTF(GIC, "Gic MSI-X write register %#x data %d\n",
daddr, pkt->get<uint32_t>());
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/hdlcd.cc
--- a/src/dev/arm/hdlcd.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/hdlcd.cc Tue Dec 02 06:07:41 2014 -0500
@@ -104,8 +104,6 @@
pkt->getAddr() < pioAddr + pioSize &&
pkt->getSize() == 4);
- pkt->allocate();
-
switch (daddr) {
case Version:
data = version;
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/kmi.cc
--- a/src/dev/arm/kmi.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/kmi.cc Tue Dec 02 06:07:41 2014 -0500
@@ -69,8 +69,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
-
uint32_t data = 0;
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/pl011.cc
--- a/src/dev/arm/pl011.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/pl011.cc Tue Dec 02 06:07:41 2014 -0500
@@ -64,7 +64,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(Uart, " read register %#x size=%d\n", daddr, pkt->getSize());
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/pl111.cc
--- a/src/dev/arm/pl111.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/pl111.cc Tue Dec 02 06:07:41 2014 -0500
@@ -104,7 +104,6 @@
pkt->getAddr() < pioAddr + pioSize);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(PL111, " read register %#x size=%d\n", daddr, pkt->getSize());
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/rtc_pl031.cc
--- a/src/dev/arm/rtc_pl031.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/rtc_pl031.cc Tue Dec 02 06:07:41 2014 -0500
@@ -62,7 +62,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
uint32_t data;
DPRINTF(Timer, "Reading from RTC at offset: %#x\n", daddr);
@@ -125,7 +124,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(Timer, "Writing to RTC at offset: %#x\n", daddr);
switch (daddr) {
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/rv_ctrl.cc
--- a/src/dev/arm/rv_ctrl.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/rv_ctrl.cc Tue Dec 02 06:07:41 2014 -0500
@@ -54,7 +54,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
switch(daddr) {
case ProcId0:
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/timer_cpulocal.cc
--- a/src/dev/arm/timer_cpulocal.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/timer_cpulocal.cc Tue Dec 02 06:07:41 2014 -0500
@@ -75,7 +75,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
int cpu_id = pkt->req->contextId();
DPRINTF(Timer, "Reading from CpuLocalTimer at offset: %#x\n", daddr);
assert(cpu_id >= 0);
@@ -154,7 +153,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
int cpu_id = pkt->req->contextId();
DPRINTF(Timer, "Writing to CpuLocalTimer at offset: %#x\n", daddr);
assert(cpu_id >= 0);
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/timer_sp804.cc
--- a/src/dev/arm/timer_sp804.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/timer_sp804.cc Tue Dec 02 06:07:41 2014 -0500
@@ -66,7 +66,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(Timer, "Reading from DualTimer at offset: %#x\n", daddr);
if (daddr < Timer::Size)
@@ -121,7 +120,6 @@
assert(pkt->getAddr() >= pioAddr && pkt->getAddr() < pioAddr + pioSize);
assert(pkt->getSize() == 4);
Addr daddr = pkt->getAddr() - pioAddr;
- pkt->allocate();
DPRINTF(Timer, "Writing to DualTimer at offset: %#x\n", daddr);
if (daddr < Timer::Size)
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/arm/vgic.cc
--- a/src/dev/arm/vgic.cc Tue Dec 02 06:07:38 2014 -0500
+++ b/src/dev/arm/vgic.cc Tue Dec 02 06:07:41 2014 -0500
@@ -92,7 +92,6 @@
VGic::readVCpu(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - vcpuAddr;
- pkt->allocate();
int ctx_id = pkt->req->contextId();
assert(ctx_id < VGIC_CPU_MAX);
@@ -137,7 +136,6 @@
VGic::readCtrl(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - hvAddr;
- pkt->allocate();
int ctx_id = pkt->req->contextId();
@@ -232,7 +230,6 @@
VGic::writeVCpu(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - vcpuAddr;
- pkt->allocate();
int ctx_id = pkt->req->contextId();
assert(ctx_id < VGIC_CPU_MAX);
@@ -280,7 +277,6 @@
VGic::writeCtrl(PacketPtr pkt)
{
Addr daddr = pkt->getAddr() - hvAddr;
- pkt->allocate();
int ctx_id = pkt->req->contextId();
diff -r a8c16e2d466a -r 23593fdaadcd src/dev/copy_engine.cc
--- a/src/dev/copy_engine.cc Tue Dec 02 06:07:38 2014 -0500
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev