Blame SOURCES/0001-Prevent-compiler-from-optimizing-mmio_read64-to-sing.patch

30c59b
From 33e60ff64a043b189d2661543b417b21b6f3667b Mon Sep 17 00:00:00 2001
30c59b
From: Adam Judge <ajudge@iol.unh.edu>
30c59b
Date: Tue, 9 Jun 2020 15:58:49 -0400
30c59b
Subject: [PATCH] Prevent compiler from optimizing mmio_read64 to single 64b
30c59b
 read
30c59b
30c59b
---
30c59b
 nvme-print.c | 8 ++++++--
30c59b
 1 file changed, 6 insertions(+), 2 deletions(-)
30c59b
30c59b
diff --git a/nvme-print.c b/nvme-print.c
30c59b
index fc8f99d..c0de928 100644
30c59b
--- a/nvme-print.c
30c59b
+++ b/nvme-print.c
30c59b
@@ -1311,9 +1311,13 @@ static inline uint32_t mmio_read32(void *addr)
30c59b
 /* Access 64-bit registers as 2 32-bit; Some devices fail 64-bit MMIO. */
30c59b
 static inline __u64 mmio_read64(void *addr)
30c59b
 {
30c59b
-	__le32 *p = addr;
30c59b
+	const volatile __u32 *p = addr;
30c59b
+	__u32 low, high;
30c59b
+
30c59b
+	low = le32_to_cpu(*p);
30c59b
+	high = le32_to_cpu(*(p + 1));
30c59b
 
30c59b
-	return le32_to_cpu(*p) | ((uint64_t)le32_to_cpu(*(p + 1)) << 32);
30c59b
+	return ((__u64) high << 32) | low;
30c59b
 }
30c59b
 
30c59b
 static void json_ctrl_registers(void *bar)
30c59b
-- 
30c59b
2.31.1
30c59b