]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Fix a potential issue in calling Cpu->GetTimerValue (Cpu, 0, &CurrentTick, (UINT64...
authortye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 18 Nov 2010 08:09:09 +0000 (08:09 +0000)
committertye1 <tye1@6f19259b-4bc3-4df7-8a09-765794883524>
Thu, 18 Nov 2010 08:09:09 +0000 (08:09 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11076 6f19259b-4bc3-4df7-8a09-765794883524

NetworkPkg/Application/Ping6/Ping6.c
NetworkPkg/Application/Ping6/Ping6.h

index b86ee18ae5bf01ada301491b0d8806e00ed75a74..345d3b90fd442f354675681aeb34d0529bb88d27 100644 (file)
@@ -59,7 +59,7 @@ EFI_HII_HANDLE    mHiiHandle;
 CONST CHAR16      *mIp6DstString;\r
 CONST CHAR16      *mIp6SrcString;\r
 EFI_GUID          mEfiPing6Guid = EFI_PING6_GUID;\r
-UINT32            mFrequency = 0;\r
+UINT64            mFrequency = 0;\r
 /**\r
   Get and caculate the frequency in tick/ms.\r
   The result is saved in the globle variable mFrequency\r
@@ -76,7 +76,7 @@ Ping6GetFrequency (
   EFI_STATUS               Status;\r
   EFI_CPU_ARCH_PROTOCOL    *Cpu;\r
   UINT64                   CurrentTick;\r
-  UINT32                   TimerPeriod;\r
+  UINT64                   TimerPeriod;\r
 \r
   Status = gBS->LocateProtocol (&gEfiCpuArchProtocolGuid, NULL, (VOID **) &Cpu);\r
 \r
@@ -84,20 +84,20 @@ Ping6GetFrequency (
     return Status;\r
   }\r
 \r
-  Status = Cpu->GetTimerValue (Cpu, 0, &CurrentTick, (UINT64 *) &TimerPeriod);\r
+  Status = Cpu->GetTimerValue (Cpu, 0, &CurrentTick, &TimerPeriod);\r
 \r
   if (EFI_ERROR (Status)) {\r
     //\r
     // For NT32 Simulator only. 358049 is a similar value to keep timer granularity.\r
     // Set the timer period by ourselves.\r
     //\r
-    TimerPeriod = NTTIMERPERIOD;\r
+    TimerPeriod = (UINT64) NTTIMERPERIOD;\r
   }\r
   //\r
   // The timer period is in femtosecond (1 femtosecond is 1e-15 second).\r
   // So 1e+12 is divided by timer period to produce the freq in tick/ms.\r
   //\r
-  mFrequency = (UINT32) DivU64x32 (1000000000000ULL, TimerPeriod);\r
+  mFrequency = DivU64x64Remainder (1000000000000ULL, TimerPeriod, NULL);\r
 \r
   return EFI_SUCCESS;\r
 }\r
@@ -111,14 +111,14 @@ Ping6GetFrequency (
   @return The duration in ms.\r
 \r
 **/\r
-UINT32\r
+UINT64\r
 Ping6CalculateTick (\r
   IN UINT64    Begin,\r
   IN UINT64    End\r
   )\r
 {\r
   ASSERT (End > Begin);\r
-  return (UINT32) DivU64x32 (End - Begin, mFrequency);\r
+  return DivU64x64Remainder (End - Begin, mFrequency, NULL);\r
 }\r
 \r
 /**\r
@@ -242,7 +242,7 @@ Ping6OnEchoReplyReceived (
   EFI_IP6_RECEIVE_DATA        *RxData;\r
   ICMP6_ECHO_REQUEST_REPLY    *Reply;\r
   UINT32                      PayLoad;\r
-  UINT32                      Rtt;\r
+  UINT64                      Rtt;\r
   CHAR8                       Near;\r
 \r
   Private = (PING6_PRIVATE_DATA *) Context;\r
@@ -524,7 +524,7 @@ Ping6OnTimerRoutine (
   PING6_ICMP6_TX_INFO    *TxInfo;\r
   LIST_ENTRY             *Entry;\r
   LIST_ENTRY             *NextEntry;\r
-  UINT32                 Time;\r
+  UINT64                 Time;\r
 \r
   Private = (PING6_PRIVATE_DATA *) Context;\r
 \r
@@ -870,7 +870,7 @@ Ping6 (
   Private->ImageHandle = ImageHandle;\r
   Private->SendNum     = SendNumber;\r
   Private->BufferSize  = BufferSize;\r
-  Private->RttMin      = 0xFFFF;\r
+  Private->RttMin      = ~((UINT64 )(0x0));\r
   Private->Status      = EFI_NOT_READY;\r
 \r
   InitializeListHead (&Private->TxList);\r
@@ -989,7 +989,7 @@ ON_STAT:
       mHiiHandle,\r
       Private->RttMin,\r
       Private->RttMax,\r
-      Private->RttSum / Private->RxCount\r
+      DivU64x64Remainder (Private->RttSum, Private->RxCount, NULL)\r
       );\r
   }\r
 \r
index 02271e1b5834e6452684f17e9b6fc22769dedfd0..914e5e46e161bea333b27798fc2643f3cbe034d9 100644 (file)
@@ -65,9 +65,9 @@ typedef struct _PING6_PRIVATE_DATA {
   EFI_IP6_COMPLETION_TOKEN    RxToken;\r
   UINT16                      RxCount;\r
   UINT16                      TxCount;\r
-  UINT32                      RttSum;\r
-  UINT32                      RttMin;\r
-  UINT32                      RttMax;\r
+  UINT64                      RttSum;\r
+  UINT64                      RttMin;\r
+  UINT64                      RttMax;\r
   UINT32                      SequenceNum;\r
 \r
   EFI_IPv6_ADDRESS            SrcAddress;\r