summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
diff options
context:
space:
mode:
authorhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>2010-09-09 09:30:19 +0000
committerhhuan13 <hhuan13@6f19259b-4bc3-4df7-8a09-765794883524>2010-09-09 09:30:19 +0000
commit2e4c2a049be0cfebb2caa79884f22e80ee96eca7 (patch)
tree2daab5e2bc3e93b9e428ccd2d99ccbcfbcb05bbc /MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
parentf3e699088b9d47ab0c4df2286ff14818a155ee46 (diff)
downloadedk2-2e4c2a049be0cfebb2caa79884f22e80ee96eca7.tar.gz
edk2-2e4c2a049be0cfebb2caa79884f22e80ee96eca7.tar.bz2
edk2-2e4c2a049be0cfebb2caa79884f22e80ee96eca7.zip
Improve PXE Over IPv4 performance:
1. Stop UdpWrite instance upon return from EfiPxeBcUdpWrite() to avoid mass pkgs enqueue to this useless instance in Udp layer. 2. Enhance Udp timeout logic to prevent the worst case happen, and set PxeUdp instance to 50ms to avoid enqueue mass pkgs in background. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10861 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c')
-rw-r--r--MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
index ba8fe5c429..50736a9731 100644
--- a/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
+++ b/MdeModulePkg/Universal/Network/UefiPxeBcDxe/PxeBcImpl.c
@@ -1407,20 +1407,20 @@ EfiPxeBcUdpWrite (
if (SrcPort != NULL) {
Private->CurrentUdpSrcPort = *SrcPort;
}
-
- Status = PxeBcConfigureUdpWriteInstance (
- Udp4,
- &Private->StationIp.v4,
- &Private->SubnetMask.v4,
- &Private->GatewayIp.v4,
- &Private->CurrentUdpSrcPort
- );
- if (EFI_ERROR (Status)) {
- Private->CurrentUdpSrcPort = 0;
- return EFI_INVALID_PARAMETER;
- }
}
+ Status = PxeBcConfigureUdpWriteInstance (
+ Udp4,
+ &Private->StationIp.v4,
+ &Private->SubnetMask.v4,
+ &Private->GatewayIp.v4,
+ &Private->CurrentUdpSrcPort
+ );
+ if (EFI_ERROR (Status)) {
+ Private->CurrentUdpSrcPort = 0;
+ return EFI_INVALID_PARAMETER;
+ }
+
ZeroMem (&Token, sizeof (EFI_UDP4_COMPLETION_TOKEN));
ZeroMem (&Udp4Session, sizeof (EFI_UDP4_SESSION_DATA));
@@ -1492,6 +1492,10 @@ ON_EXIT:
FreePool (Udp4TxData);
+ //
+ // Reset the instance.
+ //
+ Udp4->Configure (Udp4, NULL);
return Status;
}