On Mon, Feb 06, 2017 at 11:38:52AM +0000, Mark Rutland wrote: > In some cases, it's useful to be able to select a random cpu from the > intersection of two masks, excluding a particular CPU. > > For example, in some systems an uncore PMU is shared by a subset of > CPUs, and management of this PMU is assigned to some arbitrary CPU in > this set. Whenever the management CPU is hotplugged out, we wish to > migrate responsibility to another arbitrary CPU which is both in this > set and online. > > Today we can use cpumask_any_and() to select an arbitrary CPU in the > intersection of two masks. We can also use cpumask_any_but() to select > any arbitrary cpu in a mask excluding, a particular CPU. > > To do both, we either need to use a temporary cpumask, which is > wasteful, or use some lower-level cpumask helpers, which can be unclear. > > This patch adds a new cpumask_any_and_but() to cater for these cases. > > Signed-off-by: Mark Rutland <[email protected]> > Cc: Thomas Gleixner <[email protected]> > Cc: Andrew Morton <[email protected]> > Cc: Peter Zijlstra <[email protected]> > Cc: Rusty Russell <[email protected]> > Cc: [email protected] > --- > include/linux/cpumask.h | 3 +++ > lib/cpumask.c | 23 +++++++++++++++++++++++ > 2 files changed, 26 insertions(+) > > This patch would help in cases like the Qualcomm L2 cache PMU driver [1]. If > people are happy with this patch, I'd like to take it along with that patch > (modified to use the new helper). I'm also happy to leave this as a subsequent > cleanup.
Have at; looks ok I suppose.

