From: Adam Judge Date: Tue, 9 Jun 2020 19:58:49 +0000 (-0400) Subject: Prevent compiler from optimizing mmio_read64 to single 64b read X-Git-Tag: v1.13~101 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=33e60ff64a043b189d2661543b417b21b6f3667b;p=users%2Fsagi%2Fnvme-cli.git Prevent compiler from optimizing mmio_read64 to single 64b read --- diff --git a/nvme-print.c b/nvme-print.c index fc8f99d0..c0de9283 100644 --- a/nvme-print.c +++ b/nvme-print.c @@ -1311,9 +1311,13 @@ static inline uint32_t mmio_read32(void *addr) /* Access 64-bit registers as 2 32-bit; Some devices fail 64-bit MMIO. */ static inline __u64 mmio_read64(void *addr) { - __le32 *p = addr; + const volatile __u32 *p = addr; + __u32 low, high; + + low = le32_to_cpu(*p); + high = le32_to_cpu(*(p + 1)); - return le32_to_cpu(*p) | ((uint64_t)le32_to_cpu(*(p + 1)) << 32); + return ((__u64) high << 32) | low; } static void json_ctrl_registers(void *bar)