arch/ppc: Fix get_cpu_clock asm clobber list
authorOliver O'Halloran <oohall@gmail.com>
Thu, 6 Jul 2017 08:47:10 +0000 (18:47 +1000)
committerOliver O'Halloran <oohall@gmail.com>
Tue, 29 Aug 2017 06:51:46 +0000 (16:51 +1000)
Mark condition register 0 (cr0) as being clobbered by the inline asm in
get_cpu_clock(). Not doing this results in strange behaviour due to GCC
optimising away some checking. For example e.g:

  $ ./fio examples/null.fio --output-format=json
  time     5500  cycles_start=8085227422910      <--- bad!
  {
    "fio version" : "fio-2.21-89-gb034",
    <snip>

The extra output is due to the flag checking in dprint being removed
at higher optimisation levels.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
arch/arch-ppc.h

index ba452b15b1fff30e92e62820b1301ab42cf100ed..804d596aecc632cb27f547c90a5b2b997ef79b42 100644 (file)
@@ -62,7 +62,8 @@ static inline unsigned long long get_cpu_clock(void)
                "       cmpwi %0,0;\n"
                "       beq-  90b;\n"
        : "=r" (rval)
-       : "i" (SPRN_TBRL));
+       : "i" (SPRN_TBRL)
+       : "cr0");
 
        return rval;
 }