14 Star 6 Fork 54

src-openEuler/edk2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0001-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch 2.00 KB
一键复制 编辑 原始数据 按行查看 历史
From 85a19a714c4b4702edc59db0a3419f48fffe2b0a Mon Sep 17 00:00:00 2001
From: Jinhua Cao <caojinhua1@huawei.com>
Date: Thu, 17 Feb 2022 17:38:41 +0800
Subject: [PATCH] OvmfPkg: VirtioNetDxe: Extend the RxBufferSize to avoid data
truncation
1822 net card needs at least 1536 bytes for DMA, even we never negotiate
VIRTIO_NET_F_MRG_RXBUF. The original max size of packet is 15144 which would
cause data trucation. Now we extend the RxBufSize to 9014(Jumbo Frame type)
so that we can avoid it.
Signed-off-by: Jinhua Cao <caojinhua1@huawei.com>
---
OvmfPkg/Include/IndustryStandard/Virtio095Net.h | 7 +++++++
OvmfPkg/VirtioNetDxe/SnpInitialize.c | 3 ++-
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h
index 9c0ed5ed24..28f5cc0899 100644
--- a/OvmfPkg/Include/IndustryStandard/Virtio095Net.h
+++ b/OvmfPkg/Include/IndustryStandard/Virtio095Net.h
@@ -88,4 +88,11 @@ typedef struct {
#define VIRTIO_NET_S_LINK_UP BIT0
#define VIRTIO_NET_S_ANNOUNCE BIT1
+//
+// 1822 net card needs at least 1536 bytes for DMA, even we never negotiate
+// VIRTIO_NET_F_MRG_RXBUF. The original max size of packet is 15144 which would
+// cause data trucation. Now we extend the RxBufSize to 9014(Jumbo Frame type)
+// so that we can avoid it.
+#define VIRTIO_RXBUF_JUMBO_PADDING 7500
+
#endif // _VIRTIO_0_9_5_NET_H_
diff --git a/OvmfPkg/VirtioNetDxe/SnpInitialize.c b/OvmfPkg/VirtioNetDxe/SnpInitialize.c
index bb3b552d68..6febfea3bb 100644
--- a/OvmfPkg/VirtioNetDxe/SnpInitialize.c
+++ b/OvmfPkg/VirtioNetDxe/SnpInitialize.c
@@ -337,7 +337,8 @@ VirtioNetInitRx (
// and Ethernet payload).
//
RxBufSize = VirtioNetReqSize +
- (Dev->Snm.MediaHeaderSize + Dev->Snm.MaxPacketSize);
+ (Dev->Snm.MediaHeaderSize + Dev->Snm.MaxPacketSize) +
+ VIRTIO_RXBUF_JUMBO_PADDING;
//
// Limit the number of pending RX packets if the queue is big. The division
--
2.27.0
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/edk2.git
git@gitee.com:src-openeuler/edk2.git
src-openeuler
edk2
edk2
master

搜索帮助