Patch "sched/fair, cpumask: Export for_each_cpu_wrap()" has been added to the 4.11-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
sched/fair, cpumask: Export for_each_cpu_wrap()
to the 4.11-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sched-fair-cpumask-export-for_each_cpu_wrap.patch
and it can be found in the queue-4.11 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
c6508a39640b9a27fc2bc10cb708152672c82045Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <[email protected]>
Date: Fri, 14 Apr 2017 14:20:05 +0200
Subject: sched/fair, cpumask: Export for_each_cpu_wrap()
From: Peter Zijlstra <[email protected]>
commit c6508a39640b9a27fc2bc10cb708152672c82045 upstream.
commit c743f0a5c50f2fcbc628526279cfa24f3dabe182 upstream.
More users for for_each_cpu_wrap() have appeared. Promote the construct to generic cpumask interface.
The implementation is slightly modified to reduce arguments.
--- include/linux/cpumask.h | 17 +++++++++++++++++ kernel/sched/fair.c | 45 ++++----------------------------------------- lib/cpumask.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 41 deletions(-)
include/linux/cpumask.h +17 -0
@@ -236,6 +236,23 @@ unsigned int cpumask_local_spread(unsign (cpu) =cpumask_next_zero ((cpu), (mask)), \ (cpu) < nr_cpu_ids;) +extern int cpumask_next_wrap (int n,const struct cpumask *mask,int start,bool wrap); + +/** +* for_each_cpu_wrap - iterate over every cpu in a mask, starting at a specified location +* @cpu: the (optionally unsigned) integer iterator +* @mask: the cpumask poiter +* @start: the start location +* +* The implementation does not assume any bit in @mask is set (including @start). +* +* After the loop, cpu is >= nr_cpu_ids. +*/ +#define for_each_cpu_wrap (cpu, mask, start) \ + for ((cpu) = cpumask_next_wrap((start)-1, (mask), (start), false); \ + (cpu) < nr_cpumask_bits; \ + (cpu) = cpumask_next_wrap((cpu), (mask), (start), true)) +/** * for_each_cpu_and - iterate over every cpu in both masks * @cpu: the (optionally unsigned) integer iterator
kernel/sched/fair.c +4 -41
75 lines not on this page · raw message
lib/cpumask.c +32 -0
@@ -43,6 +43,38 @@ int cpumask_any_but(const struct cpumask }EXPORT_SYMBOL (cpumask_any_but); +/** +* cpumask_next_wrap - helper to implement for_each_cpu_wrap +* @n: the cpu prior to the place to search +* @mask: the cpumask pointer +* @start: the start point of the iteration +* @wrap: assume @n crossing @start terminates the iteration +* +* Returns >= nr_cpu_ids on completion +* +* Note: the @wrap argument is required for the start condition when +* we cannot assume @start is set in @mask. +*/ +int cpumask_next_wrap (int n,const struct cpumask *mask,int start,bool wrap) +{ +int next; + +again: + next =cpumask_next (n, mask); + +if (wrap && n < start && next >= start) { +return nr_cpumask_bits; + + }else if (next >= nr_cpumask_bits) { + wrap = true; + n =-1 ; + goto again; + } + +return next; +} +EXPORT_SYMBOL (cpumask_next_wrap); +/* These are not inline because of header tangles. */ #ifdef CONFIG_CPUMASK_OFFSTACK /**
Patches currently in stable-queue which might be from [email protected] are
queue-4.11/efi-process-the-memattr-table-only-if-efi_memmap-is-enabled.patch queue-4.11/sched-topology-fix-building-of-overlapping-sched-groups.patch queue-4.11/sched-topology-fix-overlapping-sched_group_mask.patch queue-4.11/sched-fair-cpumask-export-for_each_cpu_wrap.patch queue-4.11/kernel-extable.c-mark-core_kernel_text-notrace.patch queue-4.11/sched-topology-optimize-build_group_mask.patch queue-4.11/tools-lib-lockdep-reduce-max_lock_depth-to-avoid-overflowing-lock_chain-depth.patch