Re: [PATCH 1/2] perf_event: Fix incorrect range check on cpu number

From: Corey Ashford
Date: Tue Dec 15 2009 - 13:55:19 EST



Paul Mackerras wrote:
On Tue, Dec 15, 2009 at 11:31:32AM +0100, Peter Zijlstra wrote:

On Tue, 2009-12-15 at 19:40 +1100, Paul Mackerras wrote:
It is quite legitimate for CPUs to be numbered sparsely, meaning that
it possible for an online CPU to have a number which is greater than
the total count of possible CPUs.

Currently find_get_context() has a sanity check on the cpu number
where it checks it against num_possible_cpus(). This test can fail
for a legitimate cpu number if the cpu_possible_mask is sparsely
populated.

This fixes the problem by checking the CPU number against
nr_cpumask_bits instead, since that is the appropriate check to ensure
that the cpu number is same to pass to cpu_isset() subsequently.
Cute, do you actually have hardware that does this?

Yeah, Mikey ran across this on a POWER7 box here.

Does the perf tool need to be fixed too? The "perf stat" tool, at least, has a "-a" switch that tells the tool to count the event on all cpus, and it does this by iterating over the number of cpus, 0..n, assuming they are all contiguous.

- Corey

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/