cpu: Fix the traffic gen read percentage
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 7 Jan 2013 18:05:35 +0000 (13:05 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 7 Jan 2013 18:05:35 +0000 (13:05 -0500)
This patch fixes the computation that determines whether to perform a
read or a write such that the two corner cases (0 and 100) are both
more efficient and handled correctly.

src/cpu/testers/traffic_gen/traffic_gen.cc

index e0657822cfea2b014507a81f0da42834d0bcc44a..59a2ae6d5686656f5ea3f256040760864b7e48eb 100644 (file)
@@ -370,10 +370,11 @@ void
 TrafficGen::StateGraph::LinearGen::execute()
 {
     // choose if we generate a read or a write here
-    bool isRead = random_mt.random<uint8_t>(0, 100) < readPercent;
+    bool isRead = readPercent != 0 &&
+        (readPercent == 100 || random_mt.random<uint8_t>(0, 100) < readPercent);
 
-    if (readPercent == 0)
-        assert(!isRead);
+    assert((readPercent == 0 && !isRead) || (readPercent == 100 && isRead) ||
+           readPercent != 100);
 
     DPRINTF(TrafficGen, "LinearGen::execute: %c to addr %x, size %d\n",
             isRead ? 'r' : 'w', nextAddr, blocksize);
@@ -442,10 +443,11 @@ void
 TrafficGen::StateGraph::RandomGen::execute()
 {
     // choose if we generate a read or a write here
-    bool isRead = random_mt.random<uint8_t>(0, 100) < readPercent;
+    bool isRead = readPercent != 0 &&
+        (readPercent == 100 || random_mt.random<uint8_t>(0, 100) < readPercent);
 
-    if (readPercent == 0)
-        assert(!isRead);
+    assert((readPercent == 0 && !isRead) || (readPercent == 100 && isRead) ||
+           readPercent != 100);
 
     // address of the request
     Addr addr = random_mt.random<Addr>(startAddr, endAddr - 1);