tree:
https://git.kernel.org/pub/scm/linux/kernel/git/luto/linux.git x86/membarrier
head: df3b012fb56f54e581492d7ec053e36d4eacfabc
commit: 77bac12bb7899853f4a19463b7e7ab1a7652666e [4/8] membarrier: Make the post-switch-mm
barrier explicit
config: alpha-randconfig-s031-20210617 (attached as .config)
compiler: alpha-linux-gcc (GCC) 9.3.0
reproduce:
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.3-341-g8af24329-dirty
#
https://git.kernel.org/pub/scm/linux/kernel/git/luto/linux.git/commit/?id...
git remote add luto
https://git.kernel.org/pub/scm/linux/kernel/git/luto/linux.git
git fetch --no-tags luto x86/membarrier
git checkout 77bac12bb7899853f4a19463b7e7ab1a7652666e
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' W=1 ARCH=alpha
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
All errors (new ones prefixed by >>):
kernel/sched/core.c: In function 'ttwu_stat':
kernel/sched/core.c:2916:13: warning: variable 'rq' set but not used
[-Wunused-but-set-variable]
2916 | struct rq *rq;
| ^~
kernel/sched/core.c: In function 'finish_task_switch':
kernel/sched/core.c:4225:5: error: 'If' undeclared (first use in this
function)
4225 | * If an architecture needs to take a specific action for
| ^~
kernel/sched/core.c:4225:5: note: each undeclared identifier is reported only once for
each function it appears in
kernel/sched/core.c:4225:7: error: expected ';' before 'an'
4225 | * If an architecture needs to take a specific action for
| ^~~
| ;
> kernel/sched/core.c:4226:51: error: macro "switch_mm"
requires 3 arguments, but only 1 given
4226 | * SYNC_CORE, it can do so in
switch_mm_irqs_off().
| ^
In file included from include/linux/mmu_context.h:5,
from kernel/sched/sched.h:55,
from kernel/sched/core.c:13:
arch/alpha/include/asm/mmu_context.h:225: note: macro "switch_mm" defined
here
225 | # define switch_mm(a,b,c) ev5_switch_mm((a),(b),(c))
|
kernel/sched/core.c:4174:20: warning: unused variable 'mm' [-Wunused-variable]
4174 | struct mm_struct *mm = rq->prev_mm;
| ^~
vim +/switch_mm +4226 kernel/sched/core.c
4866cde064afbb kernel/sched.c Nicholas Piggin 2005-06-25 4150
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4151 /**
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4152 *
finish_task_switch - clean up after a task-switch
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4153 * @prev: the
thread we just switched away from.
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4154 *
4866cde064afbb kernel/sched.c Nicholas Piggin 2005-06-25 4155 *
finish_task_switch must be called after the context switch, paired
4866cde064afbb kernel/sched.c Nicholas Piggin 2005-06-25 4156 * with a
prepare_task_switch call before the context switch.
4866cde064afbb kernel/sched.c Nicholas Piggin 2005-06-25 4157 *
finish_task_switch will reconcile locking set up by prepare_task_switch,
4866cde064afbb kernel/sched.c Nicholas Piggin 2005-06-25 4158 * and do any
other architecture-specific cleanup actions.
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4159 *
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4160 * Note that we
may have delayed dropping an mm in context_switch(). If
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4161 * so, we finish
that here outside of the runqueue lock. (Doing it
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4162 * with the lock
held can cause deadlocks; see schedule() for
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4163 * details.)
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4164 *
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4165 * The context
switch have flipped the stack from under us and restored the
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4166 * local
variables which were saved when this task called schedule() in the
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4167 * past. prev ==
current is still correct but we need to recalculate this_rq
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4168 * because prev
may have moved to another CPU.
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4169 */
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4170 static struct rq
*finish_task_switch(struct task_struct *prev)
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4171
__releases(rq->lock)
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4172 {
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4173 struct rq *rq =
this_rq();
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4174 struct mm_struct
*mm = rq->prev_mm;
55a101f8f71a3d kernel/sched.c Oleg Nesterov 2006-09-29 4175 long
prev_state;
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4176
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4177 /*
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4178 * The previous
task will have left us with a preempt_count of 2
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4179 * because it
left us after:
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4180 *
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4181 * schedule()
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4182 *
preempt_disable(); // 1
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4183 *
__schedule()
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4184 *
raw_spin_lock_irq(&rq->lock) // 2
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4185 *
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4186 * Also, see
FORK_PREEMPT_COUNT.
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4187 */
e2bf1c4b17aff2 kernel/sched/core.c Peter Zijlstra 2015-09-29 4188 if
(WARN_ONCE(preempt_count() != 2*PREEMPT_DISABLE_OFFSET,
e2bf1c4b17aff2 kernel/sched/core.c Peter Zijlstra 2015-09-29 4189
"corrupted preempt_count: %s/%d/0x%x\n",
e2bf1c4b17aff2 kernel/sched/core.c Peter Zijlstra 2015-09-29 4190
current->comm, current->pid, preempt_count()))
e2bf1c4b17aff2 kernel/sched/core.c Peter Zijlstra 2015-09-29 4191
preempt_count_set(FORK_PREEMPT_COUNT);
609ca066386b2e kernel/sched/core.c Peter Zijlstra 2015-09-28 4192
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4193 rq->prev_mm =
NULL;
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4194
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4195 /*
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4196 * A task struct
has one reference for the use as "current".
c394cc9fbb367f kernel/sched.c Oleg Nesterov 2006-09-29 4197 * If a task
dies, then it sets TASK_DEAD in tsk->state and calls
55a101f8f71a3d kernel/sched.c Oleg Nesterov 2006-09-29 4198 * schedule one
last time. The schedule call will never return, and
55a101f8f71a3d kernel/sched.c Oleg Nesterov 2006-09-29 4199 * the scheduled
task must drop that reference.
95913d97914f44 kernel/sched/core.c Peter Zijlstra 2015-09-29 4200 *
95913d97914f44 kernel/sched/core.c Peter Zijlstra 2015-09-29 4201 * We must
observe prev->state before clearing prev->on_cpu (in
31cb1bc0dc9488 kernel/sched/core.c rodrigosiqueira 2017-12-15 4202 * finish_task),
otherwise a concurrent wakeup can get prev
95913d97914f44 kernel/sched/core.c Peter Zijlstra 2015-09-29 4203 * running on
another CPU and we could rave with its RUNNING -> DEAD
95913d97914f44 kernel/sched/core.c Peter Zijlstra 2015-09-29 4204 * transition,
resulting in a double drop.
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4205 */
55a101f8f71a3d kernel/sched.c Oleg Nesterov 2006-09-29 4206 prev_state =
prev->state;
bf9fae9f5e4ca8 kernel/sched/core.c Frederic Weisbecker 2012-09-08 4207
vtime_task_switch(prev);
a8d757ef076f0f kernel/sched.c Stephane Eranian 2011-08-25 4208
perf_event_task_sched_in(prev, current);
31cb1bc0dc9488 kernel/sched/core.c rodrigosiqueira 2017-12-15 4209
finish_task(prev);
31cb1bc0dc9488 kernel/sched/core.c rodrigosiqueira 2017-12-15 4210
finish_lock_switch(rq);
01f23e1630d944 kernel/sched/core.c Catalin Marinas 2011-11-27 4211
finish_arch_post_lock_switch();
0ed557aa813922 kernel/sched/core.c Mark Rutland 2018-06-14 4212
kcov_finish_switch(current);
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4213 /*
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4214 *
kmap_local_sched_out() is invoked with rq::lock held and
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4215 * interrupts
disabled. There is no requirement for that, but the
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4216 * sched out
code does not have an interrupt enabled section.
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4217 * Restoring the
maps on sched in does not require interrupts being
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4218 * disabled
either.
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4219 */
5fbda3ecd14a53 kernel/sched/core.c Thomas Gleixner 2020-11-18 4220
kmap_local_sched_in();
e8fa136262e112 kernel/sched.c Steven Rostedt 2008-01-25 4221
e107be36efb2a2 kernel/sched.c Avi Kivity 2007-07-26 4222
fire_sched_in_preempt_notifiers(current);
9f81d011fbe6ff kernel/sched/core.c Andy Lutomirski 2020-12-02 4223
70216e18e519a5 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 4224 *
9f81d011fbe6ff kernel/sched/core.c Andy Lutomirski 2020-12-02 @4225 * If an
architecture needs to take a specific action for
9f81d011fbe6ff kernel/sched/core.c Andy Lutomirski 2020-12-02 @4226 * SYNC_CORE, it
can do so in switch_mm_irqs_off().
9f81d011fbe6ff kernel/sched/core.c Andy Lutomirski 2020-12-02 4227 if (mm)
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4228 mmdrop(mm);
9f81d011fbe6ff kernel/sched/core.c Andy Lutomirski 2020-12-02 4229
1cef1150ef40ec kernel/sched/core.c Peter Zijlstra 2018-06-07 4230 if
(unlikely(prev_state == TASK_DEAD)) {
e6c390f2dfd04c kernel/sched/core.c Dario Faggioli 2013-11-07 4231 if
(prev->sched_class->task_dead)
e6c390f2dfd04c kernel/sched/core.c Dario Faggioli 2013-11-07 4232
prev->sched_class->task_dead(prev);
e6c390f2dfd04c kernel/sched/core.c Dario Faggioli 2013-11-07 4233
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4234 /*
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4235 * Remove
function-return probe instances associated with this
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4236 * task and put
them back on the free list.
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4237 */
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4238
kprobe_flush_task(prev);
68f24b08ee892d kernel/sched/core.c Andy Lutomirski 2016-09-15 4239
68f24b08ee892d kernel/sched/core.c Andy Lutomirski 2016-09-15 4240 /* Task is done
with its stack. */
68f24b08ee892d kernel/sched/core.c Andy Lutomirski 2016-09-15 4241
put_task_stack(prev);
68f24b08ee892d kernel/sched/core.c Andy Lutomirski 2016-09-15 4242
0ff7b2cfbae36e kernel/sched/core.c Eric W. Biederman 2019-09-14 4243
put_task_struct_rcu_user(prev);
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4244 }
99e5ada9407cc1 kernel/sched/core.c Frederic Weisbecker 2013-04-20 4245
de734f89b67c2d kernel/sched/core.c Frederic Weisbecker 2015-06-11 4246
tick_nohz_task_switch();
dfa50b605c2a93 kernel/sched/core.c Oleg Nesterov 2014-10-09 4247 return rq;
c6fd91f0bdcd29 kernel/sched.c bibo mao 2006-03-26 4248 }
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 4249
:::::: The code at line 4226 was first introduced by commit
:::::: 9f81d011fbe6ff333c5a68e317d7ed7835db699d x86/mm: Handle unlazying membarrier core
sync in the arch code
:::::: TO: Andy Lutomirski <luto(a)kernel.org>
:::::: CC: Andy Lutomirski <luto(a)kernel.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org