When doing a build for a system with WAITPKG support and a modern
compiler, we get build errors for the "_umonitor" intrinsic, due to the
casting away of the "volatile" on the parameter.

../lib/eal/x86/rte_power_intrinsics.c: In function 'rte_power_monitor':
../lib/eal/x86/rte_power_intrinsics.c:113:22: error: passing argument 1
of '_umonitor' discards 'volatile' qualifier from pointer target type
[-Werror=discarded-qualifiers]
  113 |         _umonitor(pmc->addr);
        |                   ~~~^~~~~~

We can avoid this issue by casting through "uintptr_t" and thereby
remove the volatile without warning.  We also ensure comments are
correct for each leg of the ifdef..else..endif block.

Fixes: 60943c04f3bc ("eal/x86: use intrinsics for power management")
Cc: roret...@linux.microsoft.com

Signed-off-by: Bruce Richardson <bruce.richard...@intel.com>
Acked-by: Morten Brørup <m...@smartsharesystems.com>
Tested-by: David Marchand <david.march...@redhat.com>
---
 lib/eal/x86/rte_power_intrinsics.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/lib/eal/x86/rte_power_intrinsics.c 
b/lib/eal/x86/rte_power_intrinsics.c
index 4066d1392e..97202e42fc 100644
--- a/lib/eal/x86/rte_power_intrinsics.c
+++ b/lib/eal/x86/rte_power_intrinsics.c
@@ -103,15 +103,15 @@ rte_power_monitor(const struct rte_power_monitor_cond 
*pmc,
        rte_spinlock_lock(&s->lock);
        s->monitor_addr = pmc->addr;
 
-       /*
-        * we're using raw byte codes for now as only the newest compiler
-        * versions support this instruction natively.
-        */
-
        /* set address for UMONITOR */
 #if defined(RTE_TOOLCHAIN_MSVC) || defined(__WAITPKG__)
-       _umonitor(pmc->addr);
+       /* cast away "volatile" when using the intrinsic */
+       _umonitor((void *)(uintptr_t)pmc->addr);
 #else
+       /*
+        * we're using raw byte codes for compiler versions which
+        * don't support this instruction natively.
+        */
        asm volatile(".byte 0xf3, 0x0f, 0xae, 0xf7;"
                        :
                        : "D"(pmc->addr));
-- 
2.39.2

Reply via email to