# Node ID e097a1615dce35cd571111fdafe1b15216a3cb3a # Parent c38fcdaa5fe508dbb18cc084e758ad0ce8e2e2f4 diff --git a/src/dev/net/dist_etherlink.cc b/src/dev/net/dist_etherlink.cc --- a/src/dev/net/dist_etherlink.cc +++ b/src/dev/net/dist_etherlink.cc @@ -234,7 +234,7 @@ bool packet_exists; UNSERIALIZE_SCALAR(packet_exists); if (packet_exists) { - packet = make_shared(); + packet = make_shared(16384); packet->unserialize("packet", cp); } diff --git a/src/dev/net/dist_iface.cc b/src/dev/net/dist_iface.cc --- a/src/dev/net/dist_iface.cc +++ b/src/dev/net/dist_iface.cc @@ -534,7 +534,7 @@ { UNSERIALIZE_SCALAR(sendTick); UNSERIALIZE_SCALAR(sendDelay); - packet = std::make_shared(); + packet = std::make_shared(16384); packet->unserialize("rxPacket", cp); } diff --git a/src/dev/net/etherlink.cc b/src/dev/net/etherlink.cc --- a/src/dev/net/etherlink.cc +++ b/src/dev/net/etherlink.cc @@ -235,7 +235,7 @@ bool packet_exists; paramIn(cp, base + ".packet_exists", packet_exists); if (packet_exists) { - packet = make_shared(); + packet = make_shared(16384); packet->unserialize(base + ".packet", cp); } @@ -251,7 +251,7 @@ if (optParamIn(cp, base + ".tx_queue_size", tx_queue_size)) { for (size_t idx = 0; idx < tx_queue_size; ++idx) { Tick tick; - EthPacketPtr delayed_packet = make_shared(); + EthPacketPtr delayed_packet = make_shared(16384); paramIn(cp, csprintf("%s.txQueue[%i].tick", base, idx), tick); delayed_packet->unserialize( diff --git a/src/dev/net/etherpkt.hh b/src/dev/net/etherpkt.hh --- a/src/dev/net/etherpkt.hh +++ b/src/dev/net/etherpkt.hh @@ -55,6 +55,11 @@ uint8_t *data; /** + * Total size of the allocated data buffer. + */ + unsigned bufLength; + + /** * Amount of space occupied by the payload in the data buffer */ unsigned length; @@ -69,11 +74,11 @@ unsigned simLength; EthPacketData() - : data(nullptr), length(0), simLength(0) + : data(nullptr), bufLength(0), length(0), simLength(0) { } explicit EthPacketData(unsigned size) - : data(new uint8_t[size]), length(0), simLength(0) + : data(new uint8_t[size]), bufLength(size), length(0), simLength(0) { } ~EthPacketData() { if (data) delete [] data; } diff --git a/src/dev/net/etherpkt.cc b/src/dev/net/etherpkt.cc --- a/src/dev/net/etherpkt.cc +++ b/src/dev/net/etherpkt.cc @@ -42,6 +42,7 @@ EthPacketData::serialize(const string &base, CheckpointOut &cp) const { paramOut(cp, base + ".simLength", simLength); + paramOut(cp, base + ".bufLength", bufLength); paramOut(cp, base + ".length", length); arrayParamOut(cp, base + ".data", data, length); } @@ -50,11 +51,11 @@ EthPacketData::unserialize(const string &base, CheckpointIn &cp) { paramIn(cp, base + ".length", length); - if (length) { - assert(data == nullptr); - data = new uint8_t[length]; - arrayParamIn(cp, base + ".data", data, length); - } + optParamIn(cp, base + ".bufLength", bufLength); + assert(length <= bufLength); + if (!data) + data = new uint8_t[bufLength]; + arrayParamIn(cp, base + ".data", data, length); if (!optParamIn(cp, base + ".simLength", simLength)) simLength = length; } diff --git a/src/dev/net/i8254xGBe.cc b/src/dev/net/i8254xGBe.cc --- a/src/dev/net/i8254xGBe.cc +++ b/src/dev/net/i8254xGBe.cc @@ -2522,7 +2522,7 @@ bool txPktExists; UNSERIALIZE_SCALAR(txPktExists); if (txPktExists) { - txPacket = std::make_shared(); + txPacket = std::make_shared(16384); txPacket->unserialize("txpacket", cp); } diff --git a/src/dev/net/ns_gige.cc b/src/dev/net/ns_gige.cc --- a/src/dev/net/ns_gige.cc +++ b/src/dev/net/ns_gige.cc @@ -2352,7 +2352,7 @@ bool txPacketExists; UNSERIALIZE_SCALAR(txPacketExists); if (txPacketExists) { - txPacket = make_shared(); + txPacket = make_shared(16384); txPacket->unserialize("txPacket", cp); uint32_t txPktBufPtr; UNSERIALIZE_SCALAR(txPktBufPtr); @@ -2364,7 +2364,7 @@ UNSERIALIZE_SCALAR(rxPacketExists); rxPacket = 0; if (rxPacketExists) { - rxPacket = make_shared(); + rxPacket = make_shared(16384); rxPacket->unserialize("rxPacket", cp); uint32_t rxPktBufPtr; UNSERIALIZE_SCALAR(rxPktBufPtr); diff --git a/src/dev/net/pktfifo.cc b/src/dev/net/pktfifo.cc --- a/src/dev/net/pktfifo.cc +++ b/src/dev/net/pktfifo.cc @@ -77,7 +77,7 @@ void PacketFifoEntry::unserialize(const string &base, CheckpointIn &cp) { - packet = make_shared(); + packet = make_shared(16384); packet->unserialize(base + ".packet", cp); paramIn(cp, base + ".slack", slack); paramIn(cp, base + ".number", number); diff --git a/src/dev/net/sinic.cc b/src/dev/net/sinic.cc --- a/src/dev/net/sinic.cc +++ b/src/dev/net/sinic.cc @@ -1496,7 +1496,7 @@ UNSERIALIZE_SCALAR(txPacketExists); txPacket = 0; if (txPacketExists) { - txPacket = make_shared(); + txPacket = make_shared(16384); txPacket->unserialize("txPacket", cp); UNSERIALIZE_SCALAR(txPacketOffset); UNSERIALIZE_SCALAR(txPacketBytes);