]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
perf tools: Fix perf regs mask generation
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Thu, 28 Apr 2016 09:31:10 +0000 (15:01 +0530)
committerBen Hutchings <ben@decadent.org.uk>
Mon, 22 Aug 2016 21:37:58 +0000 (22:37 +0100)
commit f47822078dece7189cad0a5f472f148e5e916736 upstream.

On some architectures (powerpc in particular), the number of registers
exceeds what can be represented in an integer bitmask. Ensure we
generate the proper bitmask on such platforms.

Fixes: 71ad0f5e4 ("perf tools: Support for DWARF CFI unwinding on post processing")
Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
tools/perf/util/perf_regs.c

index 43168fb0d9a28a1151721cd3379b1d3234fef0ab..2fb6f2afb84f143bdbba9de2a34954aaec8f2990 100644 (file)
@@ -7,18 +7,18 @@ int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
        int i, idx = 0;
        u64 mask = regs->mask;
 
-       if (regs->cache_mask & (1 << id))
+       if (regs->cache_mask & (1ULL << id))
                goto out;
 
-       if (!(mask & (1 << id)))
+       if (!(mask & (1ULL << id)))
                return -EINVAL;
 
        for (i = 0; i < id; i++) {
-               if (mask & (1 << i))
+               if (mask & (1ULL << i))
                        idx++;
        }
 
-       regs->cache_mask |= (1 << id);
+       regs->cache_mask |= (1ULL << id);
        regs->cache_regs[id] = regs->regs[idx];
 
 out: