diff options
author | Nathan Binkert <binkertn@umich.edu> | 2004-11-17 01:27:08 -0500 |
---|---|---|
committer | Nathan Binkert <binkertn@umich.edu> | 2004-11-17 01:27:08 -0500 |
commit | 5f6328d9c63e44dd16be54a6fbab4fbdb3b78d7e (patch) | |
tree | 659cbca3325dc0aaed454585bea496f4f7b2a5ef | |
parent | c43c3f2af3d328e040b1e8f8149879b1cdb74c5f (diff) | |
download | gem5-5f6328d9c63e44dd16be54a6fbab4fbdb3b78d7e.tar.xz |
properly implement the fifo _reserved stuff.
dev/pktfifo.cc:
need to checkpoint _reserved
dev/pktfifo.hh:
When clearing, clear _reserved
size() is used for determining how many bytes are in the fifo
ready to be pulled, so we don't want to add _reserved
avail() on the other hand is used for determining how much
free space is in the fifo for adding packets.
adjust the implementation of empty() and full() to reflect this.
--HG--
extra : convert_revision : 3281972b4b70ea5833d39ae7ce1e73648b3573b0
-rw-r--r-- | dev/pktfifo.cc | 2 | ||||
-rw-r--r-- | dev/pktfifo.hh | 12 |
2 files changed, 9 insertions, 5 deletions
diff --git a/dev/pktfifo.cc b/dev/pktfifo.cc index cf09ae910..00c12ce68 100644 --- a/dev/pktfifo.cc +++ b/dev/pktfifo.cc @@ -36,6 +36,7 @@ PacketFifo::serialize(const string &base, ostream &os) { paramOut(os, base + ".size", _size); paramOut(os, base + ".maxsize", _maxsize); + paramOut(os, base + ".reserved", _reserved); paramOut(os, base + ".packets", fifo.size()); int i = 0; @@ -54,6 +55,7 @@ PacketFifo::unserialize(const string &base, Checkpoint *cp, { paramIn(cp, section, base + ".size", _size); paramIn(cp, section, base + ".maxsize", _maxsize); + paramIn(cp, section, base + ".reserved", _reserved); int fifosize; paramIn(cp, section, base + ".packets", fifosize); diff --git a/dev/pktfifo.hh b/dev/pktfifo.hh index 56e72947a..0c237949c 100644 --- a/dev/pktfifo.hh +++ b/dev/pktfifo.hh @@ -49,12 +49,13 @@ class PacketFifo explicit PacketFifo(int max) : _maxsize(max), _size(0), _reserved(0) {} virtual ~PacketFifo() {} - int maxsize() const { return _maxsize; } int packets() const { return fifo.size(); } - int size() const { return _size + _reserved; } - int avail() const { return maxsize() - size(); } - bool empty() const { return size() == 0; } - bool full() const { return size() >= maxsize(); } + int maxsize() const { return _maxsize; } + int size() const { return _size; } + int reserved() const { return _reserved; } + int avail() const { return _maxsize - _size - _reserved; } + bool empty() const { return size() <= 0; } + bool full() const { return avail() <= 0; } int reserve(int len = 0) { @@ -91,6 +92,7 @@ class PacketFifo { fifo.clear(); _size = 0; + _reserved = 0; } /** |