* [melver:cap-analysis/dev 34/34] kernel/sched/core.c:6748:9: warning: calling function 'pick_next_task' requires holding raw_spinlock '__rq_lockp(rq)' exclusively
@ 2025-08-04 2:54 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-08-04 2:54 UTC (permalink / raw)
To: elver; +Cc: oe-kbuild-all
tree: https://git.kernel.org/pub/scm/linux/kernel/git/melver/linux.git cap-analysis/dev
head: f1cc5c884f88ed0d4f9619b9d8b6e75d35d226d9
commit: f1cc5c884f88ed0d4f9619b9d8b6e75d35d226d9 [34/34] sched: Enable capability analysis for core.c and fair.c
config: s390-randconfig-001-20250804 (https://download.01.org/0day-ci/archive/20250804/202508041041.fLVE4JRa-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 8f09b03aebb71c154f3bbe725c29e3f47d37c26e)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250804/202508041041.fLVE4JRa-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508041041.fLVE4JRa-lkp@intel.com/
All warnings (new ones prefixed by >>):
| ^
kernel/sched/sched.h:1826:29: note: expanded from macro '__task_rq_lock'
1826 | #define __task_rq_lock(...) __acquire_ret(___task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
kernel/sched/core.c:4903:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
4903 | task_rq_unlock(rq, p, &rf);
| ^
kernel/sched/core.c:4904:1: warning: raw_spinlock '__ret->__lock' is still held at the end of function [-Wthread-safety-analysis]
4904 | }
| ^
kernel/sched/core.c:4885:7: note: raw_spinlock acquired here
4885 | rq = __task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1826:29: note: expanded from macro '__task_rq_lock'
1826 | #define __task_rq_lock(...) __acquire_ret(___task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
kernel/sched/core.c:5269:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
5269 | finish_lock_switch(rq);
| ^
kernel/sched/core.c:5310:1: warning: raw_spinlock '__rq_lockp(__this_rq())' is still held at the end of function [-Wthread-safety-analysis]
5310 | }
| ^
kernel/sched/core.c:5229:2: note: raw_spinlock acquired here
5229 | __releases(__rq_lockp(this_rq()))
| ^
include/linux/compiler-capability-analysis.h:286:26: note: expanded from macro '__releases'
286 | #define __releases(...) __releases_cap(__VA_ARGS__)
| ^
include/linux/compiler-capability-analysis.h:20:47: note: expanded from macro '__releases_cap'
20 | # define __releases_cap(...) __attribute__((release_capability(__VA_ARGS__)))
| ^
kernel/sched/core.c:5328:2: warning: releasing raw_spinlock '__rq_lockp(__this_rq())' that was not held [-Wthread-safety-analysis]
5328 | finish_task_switch(prev);
| ^
kernel/sched/core.c:5341:1: warning: raw_spinlock '__this_rq().__lock' is still held at the end of function [-Wthread-safety-analysis]
5341 | }
| ^
kernel/sched/core.c:5317:2: note: raw_spinlock acquired here
5317 | __releases(&this_rq()->__lock)
| ^
include/linux/compiler-capability-analysis.h:286:26: note: expanded from macro '__releases'
286 | #define __releases(...) __releases_cap(__VA_ARGS__)
| ^
include/linux/compiler-capability-analysis.h:20:47: note: expanded from macro '__releases_cap'
20 | # define __releases_cap(...) __attribute__((release_capability(__VA_ARGS__)))
| ^
kernel/sched/core.c:5401:2: warning: releasing raw_spinlock '__rq_lockp(rq)' that was not held [-Wthread-safety-analysis]
5401 | prepare_lock_switch(rq, next, rf);
| ^
kernel/sched/core.c:5408:1: warning: raw_spinlock 'rq->__lock' is still held at the end of function [-Wthread-safety-analysis]
5408 | }
| ^
kernel/sched/core.c:5349:2: note: raw_spinlock acquired here
5349 | __releases(&rq->__lock)
| ^
include/linux/compiler-capability-analysis.h:286:26: note: expanded from macro '__releases'
286 | #define __releases(...) __releases_cap(__VA_ARGS__)
| ^
include/linux/compiler-capability-analysis.h:20:47: note: expanded from macro '__releases_cap'
20 | # define __releases_cap(...) __attribute__((release_capability(__VA_ARGS__)))
| ^
kernel/sched/core.c:5601:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
5601 | task_rq_unlock(rq, p, &rf);
| ^
kernel/sched/core.c:5604:1: warning: raw_spinlock '__ret->__lock' is not held on every path through here [-Wthread-safety-analysis]
5604 | }
| ^
kernel/sched/core.c:5589:18: note: raw_spinlock acquired here
5589 | struct rq *rq = task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1829:27: note: expanded from macro 'task_rq_lock'
1829 | #define task_rq_lock(...) __acquire_ret(_task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
kernel/sched/core.c:6435:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
6435 | raw_spin_rq_unlock_irq(rq);
| ^
kernel/sched/core.c:6444:1: warning: raw_spinlock 'rq->__lock' is still held at the end of function [-Wthread-safety-analysis]
6444 | }
| ^
kernel/sched/core.c:6443:2: note: raw_spinlock acquired here
6443 | raw_spin_rq_lock_irq(rq);
| ^
>> kernel/sched/core.c:6748:9: warning: calling function 'pick_next_task' requires holding raw_spinlock '__rq_lockp(rq)' exclusively [-Wthread-safety-analysis]
6748 | next = pick_next_task(rq, prev, &rf);
| ^
kernel/sched/core.c:7309:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
7309 | raw_spin_rq_unlock(rq);
| ^
kernel/sched/core.c:7312:1: warning: raw_spinlock '__ret->__lock' is not held on every path through here [-Wthread-safety-analysis]
7312 | }
| ^
kernel/sched/core.c:7205:18: note: raw_spinlock acquired here
7205 | struct rq *rq = __task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1826:29: note: expanded from macro '__task_rq_lock'
1826 | #define __task_rq_lock(...) __acquire_ret(___task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
kernel/sched/core.c:7977:2: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
7977 | task_rq_unlock(rq, p, &rf);
| ^
kernel/sched/core.c:7978:1: warning: raw_spinlock '__ret->__lock' is still held at the end of function [-Wthread-safety-analysis]
7978 | }
| ^
kernel/sched/core.c:7962:7: note: raw_spinlock acquired here
7962 | rq = task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1829:27: note: expanded from macro 'task_rq_lock'
1829 | #define task_rq_lock(...) __acquire_ret(_task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
kernel/sched/core.c:6462:1: warning: unused function 'class_core_lock_lock_ptr' [-Wunused-function]
6462 | DEFINE_LOCK_GUARD_1(core_lock, int,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6463 | sched_core_lock(*_T->lock, &_T->flags),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6464 | sched_core_unlock(*_T->lock, &_T->flags),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6465 | unsigned long flags)
| ~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:444:49: note: expanded from macro 'DEFINE_LOCK_GUARD_1'
444 | __DEFINE_CLASS_IS_CONDITIONAL(_name, false); \
| ^
445 | __DEFINE_UNLOCK_GUARD(_name, _type, _unlock, __VA_ARGS__) \
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:413:10: note: expanded from macro '\
__DEFINE_UNLOCK_GUARD'
413 | \
| ^
414 | __DEFINE_GUARD_LOCK_PTR(_name, &_T->lock)
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/cleanup.h:319:23: note: expanded from macro '\
__DEFINE_GUARD_LOCK_PTR'
319 | static inline void * class_##_name##_lock_ptr(class_##_name##_t *_T) \
| ^~~~~~~~~~~~~~~~~~~~~~~~
<scratch space>:109:1: note: expanded from here
109 | class_core_lock_lock_ptr
| ^~~~~~~~~~~~~~~~~~~~~~~~
45 warnings generated.
--
In file included from kernel/sched/fair.c:57:
kernel/sched/sched.h:3062:3: warning: releasing raw_spinlock '__rq_lockp(busiest)' that was not held [-Wthread-safety-analysis]
3062 | __release(__rq_lockp(busiest)); /* fake release */
| ^
include/linux/compiler-capability-analysis.h:302:23: note: expanded from macro '__release'
302 | #define __release(x) __release_cap(x)
| ^
In file included from kernel/sched/fair.c:57:
kernel/sched/sched.h:3063:2: warning: raw_spinlock 'busiest->__lock' is not held on every path through here [-Wthread-safety-analysis]
3063 | lock_set_subclass(&__rq_lockp(this_rq)->dep_map, 0, _RET_IP_);
| ^
kernel/sched/sched.h:3057:2: note: raw_spinlock acquired here
3057 | __releases(&busiest->__lock)
| ^
include/linux/compiler-capability-analysis.h:286:26: note: expanded from macro '__releases'
286 | #define __releases(...) __releases_cap(__VA_ARGS__)
| ^
include/linux/compiler-capability-analysis.h:20:47: note: expanded from macro '__releases_cap'
20 | # define __releases_cap(...) __attribute__((release_capability(__VA_ARGS__)))
| ^
In file included from kernel/sched/fair.c:57:
In file included from kernel/sched/sched.h:3227:
kernel/sched/stats.h:209:3: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
209 | __task_rq_unlock(rq, &rf);
| ^
kernel/sched/stats.h:211:1: warning: raw_spinlock '__ret->__lock' is not held on every path through here [-Wthread-safety-analysis]
211 | }
| ^
kernel/sched/stats.h:207:8: note: raw_spinlock acquired here
207 | rq = __task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1826:29: note: expanded from macro '__task_rq_lock'
1826 | #define __task_rq_lock(...) __acquire_ret(___task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
>> kernel/sched/fair.c:2928:2: warning: spinlock 'group_lock' is not held on every path through here [-Wthread-safety-analysis]
2928 | for_each_online_node(nid) {
| ^
include/linux/nodemask.h:524:36: note: expanded from macro 'for_each_online_node'
524 | #define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
| ^
include/linux/nodemask.h:429:2: note: expanded from macro 'for_each_node_state'
429 | for_each_node_mask((__node), node_states[__state])
| ^
include/linux/nodemask.h:374:16: note: expanded from macro 'for_each_node_mask'
374 | for ((node) = first_node(mask); \
| ^
include/linux/nodemask.h:250:25: note: expanded from macro 'first_node'
250 | #define first_node(src) __first_node(&(src))
| ^
kernel/sched/fair.c:2924:3: note: spinlock acquired here
2924 | spin_lock_irq(group_lock);
| ^
>> kernel/sched/fair.c:2995:3: warning: releasing spinlock 'group_lock' that was not held [-Wthread-safety-analysis]
2995 | spin_unlock_irq(group_lock);
| ^
>> kernel/sched/fair.c:8703:3: warning: releasing raw_spinlock 'rq->__lock' that was not held [-Wthread-safety-analysis]
8703 | task_rq_unlock(rq, p, &rf);
| ^
>> kernel/sched/fair.c:8706:2: warning: raw_spinlock '__ret->__lock' is not held on every path through here [-Wthread-safety-analysis]
8706 | remove_entity_load_avg(se);
| ^
kernel/sched/fair.c:8698:8: note: raw_spinlock acquired here
8698 | rq = task_rq_lock(p, &rf);
| ^
kernel/sched/sched.h:1829:27: note: expanded from macro 'task_rq_lock'
1829 | #define task_rq_lock(...) __acquire_ret(_task_rq_lock(__VA_ARGS__), &__ret->__lock)
| ^
include/linux/compiler-capability-analysis.h:368:3: note: expanded from macro '__acquire_ret'
368 | __acquire(ret_expr); \
| ^
include/linux/compiler-capability-analysis.h:294:23: note: expanded from macro '__acquire'
294 | #define __acquire(x) __acquire_cap(x)
| ^
>> kernel/sched/fair.c:12852:2: warning: releasing raw_spinlock 'this_rq->__lock' that was not held [-Wthread-safety-analysis]
12852 | raw_spin_rq_unlock(this_rq);
| ^
>> kernel/sched/fair.c:12908:6: warning: raw_spinlock 'this_rq->__lock' is not held on every path through here [-Wthread-safety-analysis]
12908 | if (time_after(this_rq->next_balance, next_balance))
| ^
include/linux/jiffies.h:128:13: note: expanded from macro 'time_after'
128 | (typecheck(unsigned long, a) && \
| ^
kernel/sched/fair.c:12889:2: note: raw_spinlock acquired here
12889 | raw_spin_rq_lock(this_rq);
| ^
kernel/sched/fair.c:484:20: warning: unused function 'list_del_leaf_cfs_rq' [-Wunused-function]
484 | static inline void list_del_leaf_cfs_rq(struct cfs_rq *cfs_rq)
| ^~~~~~~~~~~~~~~~~~~~
kernel/sched/fair.c:505:19: warning: unused function 'tg_is_idle' [-Wunused-function]
505 | static inline int tg_is_idle(struct task_group *tg)
| ^~~~~~~~~~
kernel/sched/fair.c:4033:20: warning: unused function 'load_avg_is_decayed' [-Wunused-function]
4033 | static inline bool load_avg_is_decayed(struct sched_avg *sa)
| ^~~~~~~~~~~~~~~~~~~
kernel/sched/fair.c:6744:20: warning: unused function 'sync_throttle' [-Wunused-function]
6744 | static inline void sync_throttle(struct task_group *tg, int cpu) {}
| ^~~~~~~~~~~~~
kernel/sched/fair.c:6768:37: warning: unused function 'tg_cfs_bandwidth' [-Wunused-function]
6768 | static inline struct cfs_bandwidth *tg_cfs_bandwidth(struct task_group *tg)
| ^~~~~~~~~~~~~~~~
kernel/sched/fair.c:6772:20: warning: unused function 'destroy_cfs_bandwidth' [-Wunused-function]
6772 | static inline void destroy_cfs_bandwidth(struct cfs_bandwidth *cfs_b) {}
| ^~~~~~~~~~~~~~~~~~~~~
kernel/sched/fair.c:10103:20: warning: unused function 'check_misfit_status' [-Wunused-function]
10103 | static inline bool check_misfit_status(struct rq *rq)
| ^~~~~~~~~~~~~~~~~~~
17 warnings generated.
vim +6748 kernel/sched/core.c
7b3d61f6578ab0 kernel/sched/core.c John Stultz 2024-10-09 6631
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6632 /*
c259e01a1ec900 kernel/sched.c Thomas Gleixner 2011-06-22 6633 * __schedule() is the main scheduler function.
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6634 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6635 * The main means of driving the scheduler and thus entering this function are:
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6636 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6637 * 1. Explicit blocking: mutex, semaphore, waitqueue, etc.
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6638 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6639 * 2. TIF_NEED_RESCHED flag is checked on interrupt and userspace return
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6640 * paths. For example, see arch/x86/entry_64.S.
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6641 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6642 * To drive preemption between tasks, the scheduler sets the flag in timer
86dd6c04ef9f21 kernel/sched/core.c Ingo Molnar 2024-03-08 6643 * interrupt handler sched_tick().
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6644 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6645 * 3. Wakeups don't really cause entry into schedule(). They add a
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6646 * task to the run-queue and that's it.
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6647 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6648 * Now, if the new task added to the run-queue preempts the current
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6649 * task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6650 * called on the nearest possible occasion:
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6651 *
c1a280b68d4e6b kernel/sched/core.c Thomas Gleixner 2019-07-26 6652 * - If the kernel is preemptible (CONFIG_PREEMPTION=y):
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6653 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6654 * - in syscall or exception context, at the next outmost
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6655 * preempt_enable(). (this might be as soon as the wake_up()'s
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6656 * spin_unlock()!)
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6657 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6658 * - in IRQ context, return from interrupt-handler to
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6659 * preemptible context
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6660 *
c1a280b68d4e6b kernel/sched/core.c Thomas Gleixner 2019-07-26 6661 * - If the kernel is not preemptible (CONFIG_PREEMPTION is not set)
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6662 * then at the next:
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6663 *
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6664 * - cond_resched() call
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6665 * - explicit schedule() call
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6666 * - return from syscall or exception to user-space
edde96eafc91a5 kernel/sched/core.c Pekka Enberg 2012-08-04 6667 * - return from interrupt-handler to user-space
bfd9b2b5f80e72 kernel/sched/core.c Frederic Weisbecker 2015-01-28 6668 *
b30f0e3ffedfa5 kernel/sched/core.c Frederic Weisbecker 2015-05-12 6669 * WARNING: must be called with preemption disabled!
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6670 */
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6671 static void __sched notrace __schedule(int sched_mode)
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6672 {
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6673 struct task_struct *prev, *next;
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6674 /*
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6675 * On PREEMPT_RT kernel, SM_RTLOCK_WAIT is noted
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6676 * as a preemption by schedule_debug() and RCU.
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6677 */
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6678 bool preempt = sched_mode > SM_NONE;
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6679 bool is_switch = false;
67ca7bde2e9d35 kernel/sched.c Harvey Harrison 2008-02-15 6680 unsigned long *switch_count;
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6681 unsigned long prev_state;
d8ac897137a230 kernel/sched/core.c Matt Fleming 2016-09-21 6682 struct rq_flags rf;
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6683 struct rq *rq;
31656519e132f6 kernel/sched.c Peter Zijlstra 2008-07-18 6684 int cpu;
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6685
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6686 trace_sched_entry_tp(preempt, CALLER_ADDR0);
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6687
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6688 cpu = smp_processor_id();
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6689 rq = cpu_rq(cpu);
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6690 prev = rq->curr;
dd41f596cda0d7 kernel/sched.c Ingo Molnar 2007-07-09 6691
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6692 schedule_debug(prev, preempt);
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6693
e0ee463c93c43b kernel/sched/core.c Juri Lelli 2021-02-08 6694 if (sched_feat(HRTICK) || sched_feat(HRTICK_DL))
8f4d37ec073c17 kernel/sched.c Peter Zijlstra 2008-01-25 6695 hrtick_clear(rq);
8f4d37ec073c17 kernel/sched.c Peter Zijlstra 2008-01-25 6696
676e8cf70cb053 kernel/sched/core.c Peter Zijlstra 2025-05-09 6697 klp_sched_try_switch(prev);
676e8cf70cb053 kernel/sched/core.c Peter Zijlstra 2025-05-09 6698
46a5d164db53ba kernel/sched/core.c Paul E. McKenney 2015-10-07 6699 local_irq_disable();
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6700 rcu_note_context_switch(preempt);
46a5d164db53ba kernel/sched/core.c Paul E. McKenney 2015-10-07 6701
e0acd0a68ec7db kernel/sched/core.c Oleg Nesterov 2013-08-12 6702 /*
e0acd0a68ec7db kernel/sched/core.c Oleg Nesterov 2013-08-12 6703 * Make sure that signal_pending_state()->signal_pending() below
e0acd0a68ec7db kernel/sched/core.c Oleg Nesterov 2013-08-12 6704 * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE)
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6705 * done by the caller to avoid the race with signal_wake_up():
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6706 *
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6707 * __set_current_state(@state) signal_wake_up()
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6708 * schedule() set_tsk_thread_flag(p, TIF_SIGPENDING)
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6709 * wake_up_state(p, state)
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6710 * LOCK rq->lock LOCK p->pi_state
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6711 * smp_mb__after_spinlock() smp_mb__after_spinlock()
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6712 * if (signal_pending_state()) if (p->state & @state)
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6713 *
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6714 * Also, the membarrier system call requires a full memory barrier
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6715 * after coming from user-space, before storing to rq->curr; this
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6716 * barrier matches a full barrier in the proximity of the membarrier
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6717 * system call exit.
e0acd0a68ec7db kernel/sched/core.c Oleg Nesterov 2013-08-12 6718 */
8a8c69c3277886 kernel/sched/core.c Peter Zijlstra 2016-10-04 6719 rq_lock(rq, &rf);
d89e588ca40816 kernel/sched/core.c Peter Zijlstra 2016-09-05 6720 smp_mb__after_spinlock();
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6721
d1ccc66df8bfe3 kernel/sched/core.c Ingo Molnar 2017-02-01 6722 /* Promote REQ to ACT */
d1ccc66df8bfe3 kernel/sched/core.c Ingo Molnar 2017-02-01 6723 rq->clock_update_flags <<= 1;
bce4dc80c66ad3 kernel/sched/core.c Peter Zijlstra 2017-02-21 6724 update_rq_clock(rq);
5ebde09d91707a kernel/sched/core.c Hao Jia 2023-10-12 6725 rq->clock_update_flags = RQCF_UPDATED;
9edfbfed3f544a kernel/sched/core.c Peter Zijlstra 2015-01-05 6726
246d86b5184506 kernel/sched.c Oleg Nesterov 2010-05-19 6727 switch_count = &prev->nivcsw;
d136122f584584 kernel/sched/core.c Peter Zijlstra 2020-07-20 6728
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6729 /* Task state changes only considers SM_PREEMPT as preemption */
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6730 preempt = sched_mode == SM_PREEMPT;
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6731
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6732 /*
d136122f584584 kernel/sched/core.c Peter Zijlstra 2020-07-20 6733 * We must load prev->state once (task_struct::state is volatile), such
2500ad1c7fa42a kernel/sched/core.c Eric W. Biederman 2022-04-29 6734 * that we form a control dependency vs deactivate_task() below.
dbfb089d360b1c kernel/sched/core.c Peter Zijlstra 2020-07-03 6735 */
2f064a59a11ff9 kernel/sched/core.c Peter Zijlstra 2021-06-11 6736 prev_state = READ_ONCE(prev->__state);
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6737 if (sched_mode == SM_IDLE) {
edf1c586e92675 kernel/sched/core.c Pat Somaru 2024-09-20 6738 /* SCX must consult the BPF scheduler to tell if rq is empty */
edf1c586e92675 kernel/sched/core.c Pat Somaru 2024-09-20 6739 if (!rq->nr_running && !scx_enabled()) {
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6740 next = prev;
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6741 goto picked;
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6742 }
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6743 } else if (!preempt && prev_state) {
8feb053d531943 kernel/sched/core.c Peter Zijlstra 2025-03-19 6744 try_to_block_task(rq, prev, &prev_state);
6631e635c65dc3 kernel/sched.c Linus Torvalds 2011-04-13 6745 switch_count = &prev->nvcsw;
6631e635c65dc3 kernel/sched.c Linus Torvalds 2011-04-13 6746 }
73c101011926c5 kernel/sched.c Jens Axboe 2011-03-08 6747
d8ac897137a230 kernel/sched/core.c Matt Fleming 2016-09-21 @6748 next = pick_next_task(rq, prev, &rf);
af0c8b2bf67b25 kernel/sched/core.c Peter Zijlstra 2024-10-09 6749 rq_set_donor(rq, next);
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6750 picked:
f26f9aff6aaf67 kernel/sched.c Mike Galbraith 2010-12-08 6751 clear_tsk_need_resched(prev);
f27dde8deef33c kernel/sched/core.c Peter Zijlstra 2013-08-14 6752 clear_preempt_need_resched();
c006fac556e401 kernel/sched/core.c Paul Turner 2021-04-16 6753 rq->last_seen_need_resched_ns = 0;
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6754
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6755 is_switch = prev != next;
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6756 if (likely(is_switch)) {
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6757 rq->nr_switches++;
5311a98fef7d0d kernel/sched/core.c Eric W. Biederman 2019-09-14 6758 /*
5311a98fef7d0d kernel/sched/core.c Eric W. Biederman 2019-09-14 6759 * RCU users of rcu_dereference(rq->curr) may not see
5311a98fef7d0d kernel/sched/core.c Eric W. Biederman 2019-09-14 6760 * changes to task_struct made by pick_next_task().
5311a98fef7d0d kernel/sched/core.c Eric W. Biederman 2019-09-14 6761 */
5311a98fef7d0d kernel/sched/core.c Eric W. Biederman 2019-09-14 6762 RCU_INIT_POINTER(rq->curr, next);
22e4ebb9758228 kernel/sched/core.c Mathieu Desnoyers 2017-07-28 6763 /*
22e4ebb9758228 kernel/sched/core.c Mathieu Desnoyers 2017-07-28 6764 * The membarrier system call requires each architecture
22e4ebb9758228 kernel/sched/core.c Mathieu Desnoyers 2017-07-28 6765 * to have a full memory barrier after updating
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6766 * rq->curr, before returning to user-space.
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6767 *
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6768 * Here are the schemes providing that barrier on the
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6769 * various architectures:
d6cfd1770f2039 kernel/sched/core.c Andrea Parri 2024-01-31 6770 * - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC,
d6cfd1770f2039 kernel/sched/core.c Andrea Parri 2024-01-31 6771 * RISC-V. switch_mm() relies on membarrier_arch_switch_mm()
d6cfd1770f2039 kernel/sched/core.c Andrea Parri 2024-01-31 6772 * on PowerPC and on RISC-V.
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6773 * - finish_lock_switch() for weakly-ordered
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6774 * architectures where spin_unlock is a full barrier,
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6775 * - switch_to() for arm64 (weakly-ordered, spin_unlock
306e060435d7a3 kernel/sched/core.c Mathieu Desnoyers 2018-01-29 6776 * is a RELEASE barrier),
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6777 *
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6778 * The barrier matches a full barrier in the proximity of
a14d11a0f5f410 kernel/sched/core.c Andrea Parri 2024-01-31 6779 * the membarrier system call entry.
cd9b29014dc696 kernel/sched/core.c Andrea Parri 2024-01-31 6780 *
cd9b29014dc696 kernel/sched/core.c Andrea Parri 2024-01-31 6781 * On RISC-V, this barrier pairing is also needed for the
cd9b29014dc696 kernel/sched/core.c Andrea Parri 2024-01-31 6782 * SYNC_CORE command when switching between processes, cf.
cd9b29014dc696 kernel/sched/core.c Andrea Parri 2024-01-31 6783 * the inline comments in membarrier_arch_switch_mm().
22e4ebb9758228 kernel/sched/core.c Mathieu Desnoyers 2017-07-28 6784 */
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6785 ++*switch_count;
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6786
af449901b84c98 kernel/sched/core.c Peter Zijlstra 2020-09-17 6787 migrate_disable_switch(rq, prev);
ddae0ca2a8fe12 kernel/sched/core.c John Stultz 2024-06-18 6788 psi_account_irqtime(rq, prev, next);
7d9da040575b34 kernel/sched/core.c Chengming Zhou 2024-12-27 6789 psi_sched_switch(prev, next, !task_on_rq_queued(prev) ||
7d9da040575b34 kernel/sched/core.c Chengming Zhou 2024-12-27 6790 prev->se.sched_delayed);
b05e75d6113808 kernel/sched/core.c Johannes Weiner 2020-03-16 6791
3dcac251b066b6 kernel/sched/core.c Peter Zijlstra 2024-08-09 6792 trace_sched_switch(preempt, prev, next, prev_state);
d1ccc66df8bfe3 kernel/sched/core.c Ingo Molnar 2017-02-01 6793
d1ccc66df8bfe3 kernel/sched/core.c Ingo Molnar 2017-02-01 6794 /* Also unlocks the rq: */
d1ccc66df8bfe3 kernel/sched/core.c Ingo Molnar 2017-02-01 6795 rq = context_switch(rq, prev, next, &rf);
cbce1a68670059 kernel/sched/core.c Peter Zijlstra 2015-06-11 6796 } else {
565790d28b1e33 kernel/sched/core.c Peter Zijlstra 2020-05-11 6797 rq_unpin_lock(rq, &rf);
565790d28b1e33 kernel/sched/core.c Peter Zijlstra 2020-05-11 6798 __balance_callbacks(rq);
5cb9eaa3d274f7 kernel/sched/core.c Peter Zijlstra 2020-11-17 6799 raw_spin_rq_unlock_irq(rq);
565790d28b1e33 kernel/sched/core.c Peter Zijlstra 2020-05-11 6800 }
26f80681a09b95 kernel/sched/core.c Gabriele Monaco 2025-03-05 6801 trace_sched_exit_tp(is_switch, CALLER_ADDR0);
^1da177e4c3f41 kernel/sched.c Linus Torvalds 2005-04-16 6802 }
c259e01a1ec900 kernel/sched.c Thomas Gleixner 2011-06-22 6803
:::::: The code at line 6748 was first introduced by commit
:::::: d8ac897137a230ec351269f6378017f2decca512 sched/core: Add wrappers for lockdep_(un)pin_lock()
:::::: TO: Matt Fleming <matt@codeblueprint.co.uk>
:::::: CC: Ingo Molnar <mingo@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-08-04 2:54 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-04 2:54 [melver:cap-analysis/dev 34/34] kernel/sched/core.c:6748:9: warning: calling function 'pick_next_task' requires holding raw_spinlock '__rq_lockp(rq)' exclusively 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.