* [android-common:android16-6.12 12/12] kernel/sched/core.c:7745:20: sparse: sparse: incorrect type in assignment (different address spaces)
@ 2026-07-18 17:39 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-18 17:39 UTC (permalink / raw)
To: cros-kernel-buildreports; +Cc: oe-kbuild-all
tree: https://android.googlesource.com/kernel/common android16-6.12
head: 0fd55a309793adc6b8cddb5c29e80caa545ba4bb
commit: 998de772b46b660a07d46c79ccd2e290a2948357 [12/12] ANDROID: sched: Fix potentially missing balancing with Proxy Exec
config: arm-randconfig-r112-20260716 (https://download.01.org/0day-ci/archive/20260719/202607190108.x6It4FEc-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 15.2.0
sparse: v0.6.5-rc1
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260719/202607190108.x6It4FEc-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/202607190108.x6It4FEc-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
kernel/sched/core.c:1502:47: sparse: got struct rq *
kernel/sched/core.c:2339:39: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/core.c:2339:39: sparse: expected struct task_struct *donor
kernel/sched/core.c:2339:39: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/core.c:2350:65: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *tsk @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/core.c:2350:65: sparse: expected struct task_struct *tsk
kernel/sched/core.c:2350:65: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:2408:22: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:2408:22: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:2408:22: sparse: got struct rq *
kernel/sched/core.c:3863:14: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:3863:14: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:3863:14: sparse: got struct rq *
kernel/sched/core.c:4279:29: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:4279:29: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:4279:29: sparse: got struct rq *
kernel/sched/core.c:4571:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:4571:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:4571:25: sparse: got struct rq *
kernel/sched/core.c:4931:34: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:4931:34: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:4931:34: sparse: got struct rq *
kernel/sched/core.c:5037:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5037:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5037:25: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5043:13: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5043:13: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5043:13: sparse: got struct rq *
kernel/sched/core.c:5865:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:5865:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:5865:25: sparse: got struct rq *
kernel/sched/core.c:6050:24: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6050:24: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6050:24: sparse: got struct rq *
kernel/sched/core.c:6070:16: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6070:16: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6070:16: sparse: got struct rq *
kernel/sched/core.c:6076:16: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6076:16: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6076:16: sparse: got struct rq *
kernel/sched/core.c:6085:24: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6085:24: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6085:24: sparse: got struct rq *
kernel/sched/core.c:6099:29: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6099:29: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6099:29: sparse: got struct rq *
kernel/sched/core.c:6297:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:6297:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:6297:25: sparse: got struct rq *
kernel/sched/core.c:6310:15: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *donor @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/core.c:6310:15: sparse: expected struct task_struct *donor
kernel/sched/core.c:6310:15: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/core.c:6665:60: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *prev @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/core.c:6665:60: sparse: expected struct task_struct *prev
kernel/sched/core.c:6665:60: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/core.c:7743:14: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:7743:14: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:7743:14: sparse: got struct rq *
kernel/sched/core.c:7744:14: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *prev @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/core.c:7744:14: sparse: expected struct task_struct *prev
kernel/sched/core.c:7744:14: sparse: got struct task_struct [noderef] __rcu *curr
>> kernel/sched/core.c:7745:20: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected struct task_struct *prev_donor @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/core.c:7745:20: sparse: expected struct task_struct *prev_donor
kernel/sched/core.c:7745:20: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/core.c:7830:37: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected struct task_struct *prev @@ got struct task_struct [noderef] __rcu *donor @@
kernel/sched/core.c:7830:37: sparse: expected struct task_struct *prev
kernel/sched/core.c:7830:37: sparse: got struct task_struct [noderef] __rcu *donor
kernel/sched/core.c:7844:31: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/core.c:7844:31: sparse: struct task_struct [noderef] __rcu *
kernel/sched/core.c:7844:31: sparse: struct task_struct *
kernel/sched/core.c:8378:17: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/core.c:8378:17: sparse: struct task_struct *
kernel/sched/core.c:8378:17: sparse: struct task_struct [noderef] __rcu *
kernel/sched/core.c:8936:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:8936:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:8936:25: sparse: got struct rq *
kernel/sched/core.c:9695:22: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:9695:22: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:9695:22: sparse: got struct rq *
kernel/sched/core.c:11285:25: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected void const [noderef] __percpu *__vpp_verify @@ got struct rq * @@
kernel/sched/core.c:11285:25: sparse: expected void const [noderef] __percpu *__vpp_verify
kernel/sched/core.c:11285:25: sparse: got struct rq *
kernel/sched/core.c:11285:25: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct task_struct *p @@ got struct task_struct [noderef] __rcu *curr @@
kernel/sched/core.c:11285:25: sparse: expected struct task_struct *p
kernel/sched/core.c:11285:25: sparse: got struct task_struct [noderef] __rcu *curr
kernel/sched/core.c:685:6: sparse: sparse: context imbalance in 'raw_spin_rq_lock_nested' - wrong count at exit
kernel/sched/core.c:711:6: sparse: sparse: context imbalance in 'raw_spin_rq_trylock' - wrong count at exit
kernel/sched/core.c:735:6: sparse: sparse: context imbalance in 'raw_spin_rq_unlock' - unexpected unlock
kernel/sched/core.c:775:36: sparse: sparse: context imbalance in '__task_rq_lock' - wrong count at exit
kernel/sched/core.c:817:36: sparse: sparse: context imbalance in 'task_rq_lock' - wrong count at exit
kernel/sched/core.c:937:11: sparse: sparse: dereference of noderef expression
kernel/sched/core.c: note: in included file:
kernel/sched/sched.h:2369:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2369:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2369:25: sparse: struct task_struct *
kernel/sched/sched.h:2369:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2369:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2369:25: sparse: struct task_struct *
kernel/sched/sched.h:2369:25: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2369:25: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2369:25: sparse: struct task_struct *
kernel/sched/sched.h:2380:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2380:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2380:26: sparse: struct task_struct *
kernel/sched/sched.h:2604:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2604:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2604:9: sparse: struct task_struct *
kernel/sched/sched.h:2604:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2604:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2604:9: sparse: struct task_struct *
kernel/sched/sched.h:2380:26: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2380:26: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2380:26: sparse: struct task_struct *
kernel/sched/sched.h:2581:9: sparse: sparse: incompatible types in comparison expression (different address spaces):
kernel/sched/sched.h:2581:9: sparse: struct task_struct [noderef] __rcu *
kernel/sched/sched.h:2581:9: sparse: struct task_struct *
vim +7745 kernel/sched/core.c
7684
7685 /*
7686 * __schedule() is the main scheduler function.
7687 *
7688 * The main means of driving the scheduler and thus entering this function are:
7689 *
7690 * 1. Explicit blocking: mutex, semaphore, waitqueue, etc.
7691 *
7692 * 2. TIF_NEED_RESCHED flag is checked on interrupt and userspace return
7693 * paths. For example, see arch/x86/entry_64.S.
7694 *
7695 * To drive preemption between tasks, the scheduler sets the flag in timer
7696 * interrupt handler sched_tick().
7697 *
7698 * 3. Wakeups don't really cause entry into schedule(). They add a
7699 * task to the run-queue and that's it.
7700 *
7701 * Now, if the new task added to the run-queue preempts the current
7702 * task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
7703 * called on the nearest possible occasion:
7704 *
7705 * - If the kernel is preemptible (CONFIG_PREEMPTION=y):
7706 *
7707 * - in syscall or exception context, at the next outmost
7708 * preempt_enable(). (this might be as soon as the wake_up()'s
7709 * spin_unlock()!)
7710 *
7711 * - in IRQ context, return from interrupt-handler to
7712 * preemptible context
7713 *
7714 * - If the kernel is not preemptible (CONFIG_PREEMPTION is not set)
7715 * then at the next:
7716 *
7717 * - cond_resched() call
7718 * - explicit schedule() call
7719 * - return from syscall or exception to user-space
7720 * - return from interrupt-handler to user-space
7721 *
7722 * WARNING: must be called with preemption disabled!
7723 */
7724 static void __sched notrace __schedule(int sched_mode)
7725 {
7726 struct task_struct *prev, *next;
7727 struct task_struct *prev_donor;
7728 /*
7729 * On PREEMPT_RT kernel, SM_RTLOCK_WAIT is noted
7730 * as a preemption by schedule_debug() and RCU.
7731 */
7732 bool preempt = sched_mode > SM_NONE;
7733 bool block = false;
7734 unsigned long *switch_count;
7735 unsigned long prev_state;
7736 struct rq_flags rf;
7737 struct rq *rq;
7738 bool prev_not_proxied;
7739 int cpu;
7740 bool skip_schedule = false;
7741
7742 cpu = smp_processor_id();
7743 rq = cpu_rq(cpu);
7744 prev = rq->curr;
> 7745 prev_donor = rq->donor;
7746
7747 schedule_debug(prev, preempt);
7748
7749 trace_android_vh_lock_delay_schedule(prev, sched_mode, &skip_schedule);
7750
7751 if (skip_schedule)
7752 return;
7753
7754 if (sched_feat(HRTICK) || sched_feat(HRTICK_DL))
7755 hrtick_clear(rq);
7756
7757 local_irq_disable();
7758 rcu_note_context_switch(preempt);
7759
7760 /*
7761 * Make sure that signal_pending_state()->signal_pending() below
7762 * can't be reordered with __set_current_state(TASK_INTERRUPTIBLE)
7763 * done by the caller to avoid the race with signal_wake_up():
7764 *
7765 * __set_current_state(@state) signal_wake_up()
7766 * schedule() set_tsk_thread_flag(p, TIF_SIGPENDING)
7767 * wake_up_state(p, state)
7768 * LOCK rq->lock LOCK p->pi_state
7769 * smp_mb__after_spinlock() smp_mb__after_spinlock()
7770 * if (signal_pending_state()) if (p->state & @state)
7771 *
7772 * Also, the membarrier system call requires a full memory barrier
7773 * after coming from user-space, before storing to rq->curr; this
7774 * barrier matches a full barrier in the proximity of the membarrier
7775 * system call exit.
7776 */
7777 rq_lock(rq, &rf);
7778 smp_mb__after_spinlock();
7779
7780 /* Promote REQ to ACT */
7781 rq->clock_update_flags <<= 1;
7782 update_rq_clock(rq);
7783 rq->clock_update_flags = RQCF_UPDATED;
7784
7785 switch_count = &prev->nivcsw;
7786
7787 /* Task state changes only considers SM_PREEMPT as preemption */
7788 preempt = sched_mode == SM_PREEMPT;
7789
7790 /*
7791 * We must load prev->state once (task_struct::state is volatile), such
7792 * that we form a control dependency vs deactivate_task() below.
7793 */
7794 prev_state = READ_ONCE(prev->__state);
7795 if (sched_mode == SM_IDLE) {
7796 /* SCX must consult the BPF scheduler to tell if rq is empty */
7797 if (!rq->nr_running && !scx_enabled()) {
7798 next = prev;
7799 goto picked;
7800 }
7801 } else if (!preempt && prev_state) {
7802 /*
7803 * We pass task_is_blocked() as the should_block arg
7804 * in order to keep mutex-blocked tasks on the runqueue
7805 * for slection with proxy-exec (without proxy-exec
7806 * task_is_blocked() will always be false).
7807 */
7808 block = try_to_block_task(rq, prev, &prev_state,
7809 !task_is_blocked(prev));
7810 switch_count = &prev->nvcsw;
7811 } else if (preempt && prev->blocked_on) {
7812 /*
7813 * If we are SM_PREEMPT, we may have interrupted
7814 * after blocked_on was set, before schedule()
7815 * was run, preventing workques from running. So
7816 * clear blocked_on and mark task RUNNING so it
7817 * can be reselected to run and complete its
7818 * logic
7819 */
7820 if (prev_state & TASK_NORMAL) {
7821 WRITE_ONCE(prev->__state, TASK_RUNNING);
7822 clear_task_blocked_on(prev, NULL);
7823 }
7824 }
7825
7826 prev_not_proxied = !prev->blocked_donor;
7827
7828 trace_sched_start_task_selection(prev, cpu, task_is_blocked(prev));
7829 pick_again:
7830 next = pick_next_task(rq, rq->donor, &rf);
7831 rq_set_donor(rq, next);
7832 next->blocked_donor = NULL;
7833 if (unlikely(task_is_blocked(next))) {
7834 next = find_proxy_task(rq, next, &rf);
7835 if (!next) {
7836 /* zap the balance_callbacks before picking again */
7837 zap_balance_callbacks(rq);
7838 goto pick_again;
7839 }
7840 if (next == rq->idle) {
7841 zap_balance_callbacks(rq);
7842 goto keep_resched;
7843 }
7844 if (rq->donor == prev_donor && prev != next) {
7845 struct task_struct *donor = rq->donor;
7846 /*
7847 * When transitioning like:
7848 *
7849 * prev next
7850 * donor: B B
7851 * curr: A B or C
7852 *
7853 * then put_prev_set_next_task() will not have done
7854 * anything, since B == B. However, A might have
7855 * missed a RT/DL balance opportunity due to being
7856 * on_cpu.
7857 */
7858 donor->sched_class->put_prev_task(rq, donor, donor);
7859 donor->sched_class->set_next_task(rq, donor, true);
7860 }
7861 }
7862 trace_sched_finish_task_selection(rq->donor, next, cpu);
7863 picked:
7864 clear_tsk_need_resched(prev);
7865 clear_preempt_need_resched();
7866 trace_android_vh_clear_curr_lazy(prev);
7867 keep_resched:
7868 #ifdef CONFIG_SCHED_DEBUG
7869 rq->last_seen_need_resched_ns = 0;
7870 #endif
7871
7872 trace_android_rvh_schedule(prev, next, rq);
7873 if (likely(prev != next)) {
7874 rq->nr_switches++;
7875 /*
7876 * RCU users of rcu_dereference(rq->curr) may not see
7877 * changes to task_struct made by pick_next_task().
7878 */
7879 RCU_INIT_POINTER(rq->curr, next);
7880
7881 /*
7882 * The membarrier system call requires each architecture
7883 * to have a full memory barrier after updating
7884 * rq->curr, before returning to user-space.
7885 *
7886 * Here are the schemes providing that barrier on the
7887 * various architectures:
7888 * - mm ? switch_mm() : mmdrop() for x86, s390, sparc, PowerPC,
7889 * RISC-V. switch_mm() relies on membarrier_arch_switch_mm()
7890 * on PowerPC and on RISC-V.
7891 * - finish_lock_switch() for weakly-ordered
7892 * architectures where spin_unlock is a full barrier,
7893 * - switch_to() for arm64 (weakly-ordered, spin_unlock
7894 * is a RELEASE barrier),
7895 *
7896 * The barrier matches a full barrier in the proximity of
7897 * the membarrier system call entry.
7898 *
7899 * On RISC-V, this barrier pairing is also needed for the
7900 * SYNC_CORE command when switching between processes, cf.
7901 * the inline comments in membarrier_arch_switch_mm().
7902 */
7903 ++*switch_count;
7904
7905 migrate_disable_switch(rq, prev);
7906 psi_account_irqtime(rq, prev, next);
7907 psi_sched_switch(prev, next, !task_on_rq_queued(prev) ||
7908 prev->se.sched_delayed);
7909
7910 trace_sched_switch(preempt, prev, next, prev_state);
7911
7912 if (block && (prev_state & TASK_UNINTERRUPTIBLE)
7913 && trace_sched_blocked_reason_enabled()) {
7914 unsigned long blocked_func = 0;
7915
--
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:[~2026-07-18 17:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-18 17:39 [android-common:android16-6.12 12/12] kernel/sched/core.c:7745:20: sparse: sparse: incorrect type in assignment (different address spaces) 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.