summaryrefslogtreecommitdiff
path: root/src/dev/i8254xGBe.cc
diff options
context:
space:
mode:
authorAli Saidi <Ali.Saidi@ARM.com>2012-09-07 14:20:53 -0500
committerAli Saidi <Ali.Saidi@ARM.com>2012-09-07 14:20:53 -0500
commit5217d5a451322199b4165ee0293ed2681dae5da3 (patch)
treef9a03a52fcf38177872bf96483462a8b143456c3 /src/dev/i8254xGBe.cc
parent124aac72b41f2dd29778168f808a9d08282abcfe (diff)
downloadgem5-5217d5a451322199b4165ee0293ed2681dae5da3.tar.xz
Igbe: Newer kernels seem to allow TSO headers and packet data to be in one desc
Implement some code we used to panic on as it actually does happen with the e1000 driver in Linux 3.3+. We used to assume that a TSO header would never be part of a larger payload, however it appears as though it now can be.
Diffstat (limited to 'src/dev/i8254xGBe.cc')
-rw-r--r--src/dev/i8254xGBe.cc8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/dev/i8254xGBe.cc b/src/dev/i8254xGBe.cc
index 71b88377d..d2b7c0f75 100644
--- a/src/dev/i8254xGBe.cc
+++ b/src/dev/i8254xGBe.cc
@@ -1650,11 +1650,9 @@ IGbE::TxDescCache::headerComplete()
unusedCache.pop_front();
usedCache.push_back(desc);
} else {
- // I don't think this case happens, I think the headrer is always
- // it's own packet, if it wasn't it might be as simple as just
- // incrementing descBytesUsed by the header length, but I'm not
- // completely sure
- panic("TSO header part of bigger packet, not implemented\n");
+ DPRINTF(EthernetDesc, "TSO: header part of larger payload\n");
+ tsoDescBytesUsed = tsoHeaderLen;
+ tsoLoadedHeader = true;
}
enableSm();
igbe->checkDrain();