* [peterz-queue:sched/urgent 1/1] kernel/cgroup/cpuset.c:3749:1: error: expected 'while' before 'bool'
@ 2023-01-31 17:25 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-01-31 17:25 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git sched/urgent
head: 4f4d0b01796a0e1cae148d96b32520ebabb3951f
commit: 4f4d0b01796a0e1cae148d96b32520ebabb3951f [1/1] cpuset: Fix cpuset_cpus_allowed() to not filter offline CPUs
config: x86_64-rhel-8.3-func (https://download.01.org/0day-ci/archive/20230201/202302010148.eYoerj1L-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-8) 11.3.0
reproduce (this is a W=1 build):
# https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git/commit/?id=4f4d0b01796a0e1cae148d96b32520ebabb3951f
git remote add peterz-queue https://git.kernel.org/pub/scm/linux/kernel/git/peterz/queue.git
git fetch --no-tags peterz-queue sched/urgent
git checkout 4f4d0b01796a0e1cae148d96b32520ebabb3951f
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 olddefconfig
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
kernel/cgroup/cpuset.c: In function 'cpuset_cpus_allowed':
>> kernel/cgroup/cpuset.c:3749:1: error: expected 'while' before 'bool'
3749 | bool cpuset_cpus_allowed_fallback(struct task_struct *tsk)
| ^~~~
kernel/cgroup/cpuset.c:3783:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
3783 | void __init cpuset_init_current_mems_allowed(void)
| ^~~~
>> kernel/cgroup/cpuset.c:3829:23: error: invalid storage class for function 'nearest_hardwall_ancestor'
3829 | static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs)
| ^~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/cgroup/cpuset.c:3937:12: error: invalid storage class for function 'cpuset_spread_node'
3937 | static int cpuset_spread_node(int *rotor)
| ^~~~~~~~~~~~~~~~~~
In file included from include/linux/linkage.h:7,
from arch/x86/include/asm/cache.h:5,
from include/linux/cache.h:6,
from arch/x86/include/asm/current.h:9,
from include/linux/sched.h:12,
from include/linux/ratelimit.h:6,
from include/linux/dev_printk.h:16,
from include/linux/device.h:15,
from include/linux/node.h:18,
from include/linux/cpu.h:17,
from kernel/cgroup/cpuset.c:25:
>> kernel/cgroup/cpuset.c:3960:19: error: non-static declaration of 'cpuset_mem_spread_node' follows static declaration
3960 | EXPORT_SYMBOL_GPL(cpuset_mem_spread_node);
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/export.h:87:28: note: in definition of macro '___EXPORT_SYMBOL'
87 | extern typeof(sym) sym; \
| ^~~
include/linux/export.h:147:41: note: in expansion of macro '__EXPORT_SYMBOL'
147 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:151:41: note: in expansion of macro '_EXPORT_SYMBOL'
151 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3960:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
3960 | EXPORT_SYMBOL_GPL(cpuset_mem_spread_node);
| ^~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3942:5: note: previous definition of 'cpuset_mem_spread_node' with type 'int(void)'
3942 | int cpuset_mem_spread_node(void)
| ^~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/dev_printk.h:14,
from include/linux/device.h:15,
from include/linux/node.h:18,
from include/linux/cpu.h:17,
from kernel/cgroup/cpuset.c:25:
include/linux/compiler.h:215:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
215 | static void * __used __attrs \
| ^~~~~~
include/linux/compiler.h:218:9: note: in expansion of macro '___ADDRESSABLE'
218 | ___ADDRESSABLE(sym, __section(".discard.addressable"))
| ^~~~~~~~~~~~~~
include/linux/export.h:41:9: note: in expansion of macro '__ADDRESSABLE'
41 | __ADDRESSABLE(sym) \
| ^~~~~~~~~~~~~
include/linux/export.h:96:9: note: in expansion of macro '__KSYMTAB_ENTRY'
96 | __KSYMTAB_ENTRY(sym, sec)
| ^~~~~~~~~~~~~~~
include/linux/export.h:140:41: note: in expansion of macro '___EXPORT_SYMBOL'
140 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:147:41: note: in expansion of macro '__EXPORT_SYMBOL'
147 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:151:41: note: in expansion of macro '_EXPORT_SYMBOL'
151 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3960:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
3960 | EXPORT_SYMBOL_GPL(cpuset_mem_spread_node);
| ^~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3973:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
3973 | int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
| ^~~
>> kernel/cgroup/cpuset.c:4006:5: error: section attribute cannot be specified for local variables
4006 | int cpuset_memory_pressure_enabled __read_mostly;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> kernel/cgroup/cpuset.c:4080:1: error: expected declaration or statement at end of input
4080 | }
| ^
kernel/cgroup/cpuset.c:4006:5: warning: unused variable 'cpuset_memory_pressure_enabled' [-Wunused-variable]
4006 | int cpuset_memory_pressure_enabled __read_mostly;
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/linkage.h:7,
from arch/x86/include/asm/cache.h:5,
from include/linux/cache.h:6,
from arch/x86/include/asm/current.h:9,
from include/linux/sched.h:12,
from include/linux/ratelimit.h:6,
from include/linux/dev_printk.h:16,
from include/linux/device.h:15,
from include/linux/node.h:18,
from include/linux/cpu.h:17,
from kernel/cgroup/cpuset.c:25:
include/linux/export.h:89:27: warning: unused variable '__kstrtabns_cpuset_mem_spread_node' [-Wunused-variable]
89 | extern const char __kstrtabns_##sym[]; \
| ^~~~~~~~~~~~
include/linux/export.h:140:41: note: in expansion of macro '___EXPORT_SYMBOL'
140 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:147:41: note: in expansion of macro '__EXPORT_SYMBOL'
147 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:151:41: note: in expansion of macro '_EXPORT_SYMBOL'
151 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3960:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
3960 | EXPORT_SYMBOL_GPL(cpuset_mem_spread_node);
| ^~~~~~~~~~~~~~~~~
include/linux/export.h:88:27: warning: unused variable '__kstrtab_cpuset_mem_spread_node' [-Wunused-variable]
88 | extern const char __kstrtab_##sym[]; \
| ^~~~~~~~~~
include/linux/export.h:140:41: note: in expansion of macro '___EXPORT_SYMBOL'
140 | #define __EXPORT_SYMBOL(sym, sec, ns) ___EXPORT_SYMBOL(sym, sec, ns)
| ^~~~~~~~~~~~~~~~
include/linux/export.h:147:41: note: in expansion of macro '__EXPORT_SYMBOL'
147 | #define _EXPORT_SYMBOL(sym, sec) __EXPORT_SYMBOL(sym, sec, "")
| ^~~~~~~~~~~~~~~
include/linux/export.h:151:41: note: in expansion of macro '_EXPORT_SYMBOL'
151 | #define EXPORT_SYMBOL_GPL(sym) _EXPORT_SYMBOL(sym, "_gpl")
| ^~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3960:1: note: in expansion of macro 'EXPORT_SYMBOL_GPL'
3960 | EXPORT_SYMBOL_GPL(cpuset_mem_spread_node);
| ^~~~~~~~~~~~~~~~~
At top level:
kernel/cgroup/cpuset.c:4074:6: warning: 'cpuset_task_status_allowed' defined but not used [-Wunused-function]
4074 | void cpuset_task_status_allowed(struct seq_file *m, struct task_struct *task)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:4043:5: warning: 'proc_cpuset_show' defined but not used [-Wunused-function]
4043 | int proc_cpuset_show(struct seq_file *m, struct pid_namespace *ns,
| ^~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:4026:6: warning: '__cpuset_memory_pressure_bump' defined but not used [-Wunused-function]
4026 | void __cpuset_memory_pressure_bump(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3985:6: warning: 'cpuset_print_current_mems_allowed' defined but not used [-Wunused-function]
3985 | void cpuset_print_current_mems_allowed(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3973:5: warning: 'cpuset_mems_allowed_intersects' defined but not used [-Wunused-function]
3973 | int cpuset_mems_allowed_intersects(const struct task_struct *tsk1,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3951:5: warning: 'cpuset_slab_spread_node' defined but not used [-Wunused-function]
3951 | int cpuset_slab_spread_node(void)
| ^~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3876:6: warning: '__cpuset_node_allowed' defined but not used [-Wunused-function]
3876 | bool __cpuset_node_allowed(int node, gfp_t gfp_mask)
| ^~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3818:5: warning: 'cpuset_nodemask_valid_mems_allowed' defined but not used [-Wunused-function]
3818 | int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3798:12: warning: 'cpuset_mems_allowed' defined but not used [-Wunused-function]
3798 | nodemask_t cpuset_mems_allowed(struct task_struct *tsk)
| ^~~~~~~~~~~~~~~~~~~
kernel/cgroup/cpuset.c:3783:13: warning: 'cpuset_init_current_mems_allowed' defined but not used [-Wunused-function]
3783 | void __init cpuset_init_current_mems_allowed(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +3749 kernel/cgroup/cpuset.c
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3734
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3735 /**
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3736 * cpuset_cpus_allowed_fallback - final fallback before complete catastrophe.
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3737 * @tsk: pointer to task_struct with which the scheduler is struggling
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3738 *
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3739 * Description: In the case that the scheduler cannot find an allowed cpu in
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3740 * tsk->cpus_allowed, we fall back to task_cs(tsk)->cpus_allowed. In legacy
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3741 * mode however, this value is the same as task_cs(tsk)->effective_cpus,
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3742 * which will not contain a sane cpumask during cases such as cpu hotplugging.
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3743 * This is the absolute last resort for the scheduler and it is only used if
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3744 * _every_ other avenue has been traveled.
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3745 *
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3746 * Returns true if the affinity of @tsk was changed, false otherwise.
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3747 **/
d477f8c202d1f0d kernel/cgroup/cpuset.c Joel Savitz 2019-06-12 3748
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 @3749 bool cpuset_cpus_allowed_fallback(struct task_struct *tsk)
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3750 {
d4b96fb92ae7fe7 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3751 const struct cpumask *possible_mask = task_cpu_possible_mask(tsk);
d4b96fb92ae7fe7 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3752 const struct cpumask *cs_mask;
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3753 bool changed = false;
d4b96fb92ae7fe7 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3754
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3755 rcu_read_lock();
d4b96fb92ae7fe7 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3756 cs_mask = task_cs(tsk)->cpus_allowed;
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3757 if (is_in_v2_mode() && cpumask_subset(cs_mask, possible_mask)) {
d4b96fb92ae7fe7 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3758 do_set_cpus_allowed(tsk, cs_mask);
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3759 changed = true;
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3760 }
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3761 rcu_read_unlock();
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3762
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3763 /*
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3764 * We own tsk->cpus_allowed, nobody can change it under us.
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3765 *
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3766 * But we used cs && cs->cpus_allowed lockless and thus can
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3767 * race with cgroup_attach_task() or update_cpumask() and get
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3768 * the wrong tsk->cpus_allowed. However, both cases imply the
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3769 * subsequent cpuset_change_cpumask()->set_cpus_allowed_ptr()
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3770 * which takes task_rq_lock().
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3771 *
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3772 * If we are called after it dropped the lock we must see all
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3773 * changes in tsk_cs()->cpus_allowed. Otherwise we can temporary
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3774 * set any mask even if it is not right from task_cs() pov,
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3775 * the pending set_cpus_allowed_ptr() will fix things.
2baab4e90495ebc kernel/cpuset.c Peter Zijlstra 2012-03-20 3776 *
2baab4e90495ebc kernel/cpuset.c Peter Zijlstra 2012-03-20 3777 * select_fallback_rq() will fix things ups and set cpu_possible_mask
2baab4e90495ebc kernel/cpuset.c Peter Zijlstra 2012-03-20 3778 * if required.
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3779 */
97c0054dbe2c3c5 kernel/cgroup/cpuset.c Will Deacon 2021-07-30 3780 return changed;
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3781 }
9084bb8246ea935 kernel/cpuset.c Oleg Nesterov 2010-03-15 3782
8f4ab07f4bf1b10 kernel/cpuset.c Rasmus Villemoes 2015-02-12 3783 void __init cpuset_init_current_mems_allowed(void)
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3784 {
f9a86fcbbb1e554 kernel/cpuset.c Mike Travis 2008-04-04 3785 nodes_setall(current->mems_allowed);
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3786 }
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3787
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3788 /**
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3789 * cpuset_mems_allowed - return mems_allowed mask from a tasks cpuset.
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3790 * @tsk: pointer to task_struct from which to obtain cpuset->mems_allowed.
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3791 *
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3792 * Description: Returns the nodemask_t mems_allowed of the cpuset
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3793 * attached to the specified @tsk. Guaranteed to return some non-empty
38d7bee9d24adf4 kernel/cpuset.c Lai Jiangshan 2012-12-12 3794 * subset of node_states[N_MEMORY], even if this means going outside the
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3795 * tasks cpuset.
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3796 **/
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3797
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3798 nodemask_t cpuset_mems_allowed(struct task_struct *tsk)
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3799 {
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3800 nodemask_t mask;
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3801 unsigned long flags;
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3802
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3803 spin_lock_irqsave(&callback_lock, flags);
b8dadcb58d542ec kernel/cpuset.c Li Zefan 2014-03-03 3804 rcu_read_lock();
ae1c802382f7af6 kernel/cpuset.c Li Zefan 2014-07-09 3805 guarantee_online_mems(task_cs(tsk), &mask);
b8dadcb58d542ec kernel/cpuset.c Li Zefan 2014-03-03 3806 rcu_read_unlock();
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3807 spin_unlock_irqrestore(&callback_lock, flags);
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3808
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3809 return mask;
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3810 }
909d75a3b77bdd8 kernel/cpuset.c Paul Jackson 2006-01-08 3811
d9fd8a6d443b509 kernel/cpuset.c Randy Dunlap 2005-07-27 3812 /**
08b2b6fdf6b2603 kernel/cgroup/cpuset.c Zhen Lei 2021-05-24 3813 * cpuset_nodemask_valid_mems_allowed - check nodemask vs. current mems_allowed
19770b32609b6bf kernel/cpuset.c Mel Gorman 2008-04-28 3814 * @nodemask: the nodemask to be checked
d9fd8a6d443b509 kernel/cpuset.c Randy Dunlap 2005-07-27 3815 *
19770b32609b6bf kernel/cpuset.c Mel Gorman 2008-04-28 3816 * Are any of the nodes in the nodemask allowed in current->mems_allowed?
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3817 */
19770b32609b6bf kernel/cpuset.c Mel Gorman 2008-04-28 3818 int cpuset_nodemask_valid_mems_allowed(nodemask_t *nodemask)
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3819 {
19770b32609b6bf kernel/cpuset.c Mel Gorman 2008-04-28 3820 return nodes_intersects(*nodemask, current->mems_allowed);
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3821 }
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3822
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3823 /*
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3824 * nearest_hardwall_ancestor() - Returns the nearest mem_exclusive or
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3825 * mem_hardwall ancestor to the specified cpuset. Call holding
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3826 * callback_lock. If no ancestor is mem_exclusive or mem_hardwall
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3827 * (an unusual configuration), then returns the root cpuset.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3828 */
c9710d8018273b0 kernel/cpuset.c Tejun Heo 2013-08-08 @3829 static struct cpuset *nearest_hardwall_ancestor(struct cpuset *cs)
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3830 {
c431069fe4bacc0 kernel/cpuset.c Tejun Heo 2013-01-07 3831 while (!(is_mem_exclusive(cs) || is_mem_hardwall(cs)) && parent_cs(cs))
c431069fe4bacc0 kernel/cpuset.c Tejun Heo 2013-01-07 3832 cs = parent_cs(cs);
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3833 return cs;
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3834 }
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3835
c70cd039f1d7791 kernel/cgroup/cpuset.c Jiapeng Chong 2022-02-16 3836 /*
c70cd039f1d7791 kernel/cgroup/cpuset.c Jiapeng Chong 2022-02-16 3837 * __cpuset_node_allowed - Can we allocate on a memory node?
a1bc5a4eee990a1 kernel/cpuset.c David Rientjes 2009-04-02 3838 * @node: is this an allowed node?
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3839 * @gfp_mask: memory allocation flags
d9fd8a6d443b509 kernel/cpuset.c Randy Dunlap 2005-07-27 3840 *
6e276d2a517fba7 kernel/cpuset.c David Rientjes 2015-04-14 3841 * If we're in interrupt, yes, we can always allocate. If @node is set in
6e276d2a517fba7 kernel/cpuset.c David Rientjes 2015-04-14 3842 * current's mems_allowed, yes. If it's not a __GFP_HARDWALL request and this
6e276d2a517fba7 kernel/cpuset.c David Rientjes 2015-04-14 3843 * node is set in the nearest hardwalled cpuset ancestor to current's cpuset,
da99ecf117fce65 kernel/cgroup/cpuset.c Michal Hocko 2017-09-06 3844 * yes. If current has access to memory reserves as an oom victim, yes.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3845 * Otherwise, no.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3846 *
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3847 * GFP_USER allocations are marked with the __GFP_HARDWALL bit,
c596d9f320aaf30 kernel/cpuset.c David Rientjes 2007-05-06 3848 * and do not allow allocations outside the current tasks cpuset
da99ecf117fce65 kernel/cgroup/cpuset.c Michal Hocko 2017-09-06 3849 * unless the task has been OOM killed.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3850 * GFP_KERNEL allocations are not so marked, so can escape to the
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3851 * nearest enclosing hardwalled ancestor cpuset.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3852 *
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3853 * Scanning up parent cpusets requires callback_lock. The
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3854 * __alloc_pages() routine only calls here with __GFP_HARDWALL bit
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3855 * _not_ set if it's a GFP_KERNEL allocation, and all nodes in the
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3856 * current tasks mems_allowed came up empty on the first pass over
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3857 * the zonelist. So only GFP_KERNEL allocations, if all nodes in the
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3858 * cpuset are short of memory, might require taking the callback_lock.
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3859 *
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3860 * The first call here from mm/page_alloc:get_page_from_freelist()
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3861 * has __GFP_HARDWALL set in gfp_mask, enforcing hardwall cpusets,
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3862 * so no allocation on a node outside the cpuset is allowed (unless
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3863 * in interrupt, of course).
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3864 *
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3865 * The second pass through get_page_from_freelist() doesn't even call
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3866 * here for GFP_ATOMIC calls. For those calls, the __alloc_pages()
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3867 * variable 'wait' is not set, and the bit ALLOC_CPUSET is not set
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3868 * in alloc_flags. That logic and the checks below have the combined
36be57ffe39e03a kernel/cpuset.c Paul Jackson 2006-05-20 3869 * affect that:
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3870 * in_interrupt - any node ok (current task context irrelevant)
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3871 * GFP_ATOMIC - any node ok
da99ecf117fce65 kernel/cgroup/cpuset.c Michal Hocko 2017-09-06 3872 * tsk_is_oom_victim - any node ok
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3873 * GFP_KERNEL - any node in enclosing hardwalled cpuset ok
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3874 * GFP_USER - only nodes in current tasks mems allowed ok.
02a0e53d8227aff kernel/cpuset.c Paul Jackson 2006-12-13 3875 */
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3876 bool __cpuset_node_allowed(int node, gfp_t gfp_mask)
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3877 {
c9710d8018273b0 kernel/cpuset.c Tejun Heo 2013-08-08 3878 struct cpuset *cs; /* current cpuset ancestors */
d4296faebd337e5 kernel/cgroup/cpuset.c Qi Zheng 2021-12-19 3879 bool allowed; /* is allocation in zone z allowed? */
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3880 unsigned long flags;
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3881
6e276d2a517fba7 kernel/cpuset.c David Rientjes 2015-04-14 3882 if (in_interrupt())
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3883 return true;
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3884 if (node_isset(node, current->mems_allowed))
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3885 return true;
c596d9f320aaf30 kernel/cpuset.c David Rientjes 2007-05-06 3886 /*
c596d9f320aaf30 kernel/cpuset.c David Rientjes 2007-05-06 3887 * Allow tasks that have access to memory reserves because they have
c596d9f320aaf30 kernel/cpuset.c David Rientjes 2007-05-06 3888 * been OOM killed to get memory anywhere.
c596d9f320aaf30 kernel/cpuset.c David Rientjes 2007-05-06 3889 */
da99ecf117fce65 kernel/cgroup/cpuset.c Michal Hocko 2017-09-06 3890 if (unlikely(tsk_is_oom_victim(current)))
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3891 return true;
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3892 if (gfp_mask & __GFP_HARDWALL) /* If hardwall request, stop here */
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3893 return false;
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3894
5563e77078d85c4 kernel/cpuset.c Bob Picco 2005-11-13 3895 if (current->flags & PF_EXITING) /* Let dying task have memory */
002f290627c2706 kernel/cpuset.c Vlastimil Babka 2016-05-19 3896 return true;
5563e77078d85c4 kernel/cpuset.c Bob Picco 2005-11-13 3897
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3898 /* Not hardwall and node outside mems_allowed: scan up cpusets */
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3899 spin_lock_irqsave(&callback_lock, flags);
053199edf54f685 kernel/cpuset.c Paul Jackson 2005-10-30 3900
b8dadcb58d542ec kernel/cpuset.c Li Zefan 2014-03-03 3901 rcu_read_lock();
786083667e0ced8 kernel/cpuset.c Paul Menage 2008-04-29 3902 cs = nearest_hardwall_ancestor(task_cs(current));
99afb0fd5f05aac kernel/cpuset.c Li Zefan 2014-02-27 3903 allowed = node_isset(node, cs->mems_allowed);
b8dadcb58d542ec kernel/cpuset.c Li Zefan 2014-03-03 3904 rcu_read_unlock();
053199edf54f685 kernel/cpuset.c Paul Jackson 2005-10-30 3905
8447a0fee974433 kernel/cpuset.c Vladimir Davydov 2014-10-20 3906 spin_unlock_irqrestore(&callback_lock, flags);
9bf2229f8817677 kernel/cpuset.c Paul Jackson 2005-09-06 3907 return allowed;
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3908 }
^1da177e4c3f415 kernel/cpuset.c Linus Torvalds 2005-04-16 3909
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3910 /**
6adef3ebe570bcd kernel/cpuset.c Jack Steiner 2010-05-26 3911 * cpuset_mem_spread_node() - On which node to begin search for a file page
6adef3ebe570bcd kernel/cpuset.c Jack Steiner 2010-05-26 3912 * cpuset_slab_spread_node() - On which node to begin search for a slab page
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3913 *
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3914 * If a task is marked PF_SPREAD_PAGE or PF_SPREAD_SLAB (as for
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3915 * tasks in a cpuset with is_spread_page or is_spread_slab set),
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3916 * and if the memory allocation used cpuset_mem_spread_node()
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3917 * to determine on which node to start looking, as it will for
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3918 * certain page cache or slab cache pages such as used for file
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3919 * system buffers and inode caches, then instead of starting on the
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3920 * local node to look for a free page, rather spread the starting
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3921 * node around the tasks mems_allowed nodes.
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3922 *
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3923 * We don't have to worry about the returned node being offline
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3924 * because "it can't happen", and even if it did, it would be ok.
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3925 *
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3926 * The routines calling guarantee_online_mems() are careful to
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3927 * only set nodes in task->mems_allowed that are online. So it
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3928 * should not be possible for the following code to return an
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3929 * offline node. But if it did, that would be ok, as this routine
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3930 * is not returning the node where the allocation must be, only
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3931 * the node where the search should start. The zonelist passed to
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3932 * __alloc_pages() will include all nodes. If the slab allocator
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3933 * is passed an offline node, it will fall back to the local node.
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3934 * See kmem_cache_alloc_node().
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3935 */
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3936
6adef3ebe570bcd kernel/cpuset.c Jack Steiner 2010-05-26 @3937 static int cpuset_spread_node(int *rotor)
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3938 {
0edaf86cf1a6a97 kernel/cpuset.c Andrew Morton 2016-05-19 3939 return *rotor = next_node_in(*rotor, current->mems_allowed);
825a46af5ac171f kernel/cpuset.c Paul Jackson 2006-03-24 3940 }
6adef3ebe570bcd kernel/cpuset.c Jack Steiner 2010-05-26 3941
:::::: The code at line 3749 was first introduced by commit
:::::: 97c0054dbe2c3c59d1156fd233f2d44e91981c8e cpuset: Cleanup cpuset_cpus_allowed_fallback() use in select_fallback_rq()
:::::: TO: Will Deacon <will@kernel.org>
:::::: CC: Peter Zijlstra <peterz@infradead.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-01-31 17:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-31 17:25 [peterz-queue:sched/urgent 1/1] kernel/cgroup/cpuset.c:3749:1: error: expected 'while' before 'bool' kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.