All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.