dev: Fix address type promotion issues in VirtIO devices
authorSascha Bischoff <sascha.bischoff@arm.com>
Tue, 18 Apr 2017 14:11:15 +0000 (15:11 +0100)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Mon, 10 Jul 2017 08:30:42 +0000 (08:30 +0000)
With the change we explicitly update the types for the VirtIO bit
masks to be Addr (uint64_t). By changing this, we ensure type
promotion where it is needed. Therefore, this fixes issues where, in
certain situations, address calculations were performed in 32-bits,
resulting in overflows.

Change-Id: I5c5c3f9a3f94e806812282da01268e18ae0d2d39
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/3968

src/dev/virtio/base.hh

index 89c281f215fe4d9383647925a94046d110a5fbba..ed3b1b431e1a9da30e5e78fb858c95a7df34a2a9 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2016 ARM Limited
+ * Copyright (c) 2014, 2016-2017 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -433,8 +433,8 @@ public:
      * Page size used by VirtIO.\ It's hard-coded to 4096 bytes in
      * the spec for historical reasons.
      */
-    static const unsigned ALIGN_BITS = 12;
-    static const unsigned ALIGN_SIZE = 1 << ALIGN_BITS;
+    static const Addr ALIGN_BITS = 12;
+    static const Addr ALIGN_SIZE = 1 << ALIGN_BITS;
     /** @} */
 
   protected: