From 1dae37b163e1e08e719ac06fa86b3414b4ddfb2b Mon Sep 17 00:00:00 2001 From: CoprDistGit Date: Mon, 30 Oct 2023 11:56:48 +0000 Subject: automatic import of edk2 --- ...tioNetDxe-Extend-the-RxBufferSize-to-avoi.patch | 50 ++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch (limited to '0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch') diff --git a/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch b/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch new file mode 100644 index 0000000..a4db4de --- /dev/null +++ b/0020-OvmfPkg-VirtioNetDxe-Extend-the-RxBufferSize-to-avoi.patch @@ -0,0 +1,50 @@ +From 85a19a714c4b4702edc59db0a3419f48fffe2b0a Mon Sep 17 00:00:00 2001 +From: Jinhua Cao +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 +--- + 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 + -- cgit v1.2.3