public inbox for llvm@lists.linux.dev
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Vincent Guittot <vincent.guittot@linaro.org>
Cc: llvm@lists.linux.dev, oe-kbuild-all@lists.linux.dev
Subject: Re: [RFC PATCH 5/5] sched/fair: Add push task callback for EAS
Date: Mon, 2 Sep 2024 16:00:05 +0800	[thread overview]
Message-ID: <202409021537.6ml3xfzW-lkp@intel.com> (raw)
In-Reply-To: <20240830130309.2141697-6-vincent.guittot@linaro.org>

Hi Vincent,

[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:

[auto build test ERROR on tip/sched/core]
[also build test ERROR on peterz-queue/sched/core next-20240830]
[cannot apply to linus/master v6.11-rc6]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Vincent-Guittot/sched-fair-Filter-false-overloaded_group-case-for-EAS/20240830-210826
base:   tip/sched/core
patch link:    https://lore.kernel.org/r/20240830130309.2141697-6-vincent.guittot%40linaro.org
patch subject: [RFC PATCH 5/5] sched/fair: Add push task callback for EAS
config: um-allnoconfig (https://download.01.org/0day-ci/archive/20240902/202409021537.6ml3xfzW-lkp@intel.com/config)
compiler: clang version 17.0.6 (https://github.com/llvm/llvm-project 6009708b4367171ccdbf4b5905cb6a803753fe18)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240902/202409021537.6ml3xfzW-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/202409021537.6ml3xfzW-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from kernel/sched/fair.c:28:
   In file included from include/linux/highmem.h:12:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:14:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:548:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     548 |         val = __raw_readb(PCI_IOBASE + addr);
         |                           ~~~~~~~~~~ ^
   include/asm-generic/io.h:561:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     561 |         val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
      37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
         |                                                   ^
   In file included from kernel/sched/fair.c:28:
   In file included from include/linux/highmem.h:12:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:14:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:574:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     574 |         val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
         |                                                         ~~~~~~~~~~ ^
   include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
      35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
         |                                                   ^
   In file included from kernel/sched/fair.c:28:
   In file included from include/linux/highmem.h:12:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/um/include/asm/hardirq.h:5:
   In file included from include/asm-generic/hardirq.h:17:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:14:
   In file included from arch/um/include/asm/io.h:24:
   include/asm-generic/io.h:585:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     585 |         __raw_writeb(value, PCI_IOBASE + addr);
         |                             ~~~~~~~~~~ ^
   include/asm-generic/io.h:595:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     595 |         __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:605:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     605 |         __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
         |                                                       ~~~~~~~~~~ ^
   include/asm-generic/io.h:693:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     693 |         readsb(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:701:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     701 |         readsw(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:709:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     709 |         readsl(PCI_IOBASE + addr, buffer, count);
         |                ~~~~~~~~~~ ^
   include/asm-generic/io.h:718:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     718 |         writesb(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:727:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     727 |         writesw(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
   include/asm-generic/io.h:736:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
     736 |         writesl(PCI_IOBASE + addr, buffer, count);
         |                 ~~~~~~~~~~ ^
>> kernel/sched/fair.c:13225:2: error: call to undeclared function 'check_misfit_cpu'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
    13225 |         check_misfit_cpu(curr, rq);
          |         ^
>> kernel/sched/fair.c:13417:27: error: no member named 'pushable_tasks' in 'struct cfs_rq'
    13417 |         plist_head_init(&cfs_rq->pushable_tasks);
          |                          ~~~~~~  ^
   12 warnings and 2 errors generated.


vim +/check_misfit_cpu +13225 kernel/sched/fair.c

 13198	
 13199	/*
 13200	 * scheduler tick hitting a task of our scheduling class.
 13201	 *
 13202	 * NOTE: This function can be called remotely by the tick offload that
 13203	 * goes along full dynticks. Therefore no local assumption can be made
 13204	 * and everything must be accessed through the @rq and @curr passed in
 13205	 * parameters.
 13206	 */
 13207	static void task_tick_fair(struct rq *rq, struct task_struct *curr, int queued)
 13208	{
 13209		struct cfs_rq *cfs_rq;
 13210		struct sched_entity *se = &curr->se;
 13211	
 13212		for_each_sched_entity(se) {
 13213			cfs_rq = cfs_rq_of(se);
 13214			entity_tick(cfs_rq, se, queued);
 13215		}
 13216	
 13217		if (static_branch_unlikely(&sched_numa_balancing))
 13218			task_tick_numa(rq, curr);
 13219	
 13220		update_misfit_status(curr, rq);
 13221		check_update_overutilized_status(task_rq(curr));
 13222	
 13223		task_tick_core(rq, curr);
 13224	
 13225		check_misfit_cpu(curr, rq);
 13226	}
 13227	
 13228	/*
 13229	 * called on fork with the child task as argument from the parent's context
 13230	 *  - child not yet on the tasklist
 13231	 *  - preemption disabled
 13232	 */
 13233	static void task_fork_fair(struct task_struct *p)
 13234	{
 13235		set_task_max_allowed_capacity(p);
 13236	}
 13237	
 13238	/*
 13239	 * Priority of the task has changed. Check to see if we preempt
 13240	 * the current task.
 13241	 */
 13242	static void
 13243	prio_changed_fair(struct rq *rq, struct task_struct *p, int oldprio)
 13244	{
 13245		if (!task_on_rq_queued(p))
 13246			return;
 13247	
 13248		if (rq->cfs.nr_running == 1)
 13249			return;
 13250	
 13251		/*
 13252		 * Reschedule if we are currently running on this runqueue and
 13253		 * our priority decreased, or if we are not currently running on
 13254		 * this runqueue and our priority is higher than the current's
 13255		 */
 13256		if (task_current(rq, p)) {
 13257			if (p->prio > oldprio)
 13258				resched_curr(rq);
 13259		} else
 13260			wakeup_preempt(rq, p, 0);
 13261	}
 13262	
 13263	#ifdef CONFIG_FAIR_GROUP_SCHED
 13264	/*
 13265	 * Propagate the changes of the sched_entity across the tg tree to make it
 13266	 * visible to the root
 13267	 */
 13268	static void propagate_entity_cfs_rq(struct sched_entity *se)
 13269	{
 13270		struct cfs_rq *cfs_rq = cfs_rq_of(se);
 13271	
 13272		if (cfs_rq_throttled(cfs_rq))
 13273			return;
 13274	
 13275		if (!throttled_hierarchy(cfs_rq))
 13276			list_add_leaf_cfs_rq(cfs_rq);
 13277	
 13278		/* Start to propagate at parent */
 13279		se = se->parent;
 13280	
 13281		for_each_sched_entity(se) {
 13282			cfs_rq = cfs_rq_of(se);
 13283	
 13284			update_load_avg(cfs_rq, se, UPDATE_TG);
 13285	
 13286			if (cfs_rq_throttled(cfs_rq))
 13287				break;
 13288	
 13289			if (!throttled_hierarchy(cfs_rq))
 13290				list_add_leaf_cfs_rq(cfs_rq);
 13291		}
 13292	}
 13293	#else
 13294	static void propagate_entity_cfs_rq(struct sched_entity *se) { }
 13295	#endif
 13296	
 13297	static void detach_entity_cfs_rq(struct sched_entity *se)
 13298	{
 13299		struct cfs_rq *cfs_rq = cfs_rq_of(se);
 13300	
 13301	#ifdef CONFIG_SMP
 13302		/*
 13303		 * In case the task sched_avg hasn't been attached:
 13304		 * - A forked task which hasn't been woken up by wake_up_new_task().
 13305		 * - A task which has been woken up by try_to_wake_up() but is
 13306		 *   waiting for actually being woken up by sched_ttwu_pending().
 13307		 */
 13308		if (!se->avg.last_update_time)
 13309			return;
 13310	#endif
 13311	
 13312		/* Catch up with the cfs_rq and remove our load when we leave */
 13313		update_load_avg(cfs_rq, se, 0);
 13314		detach_entity_load_avg(cfs_rq, se);
 13315		update_tg_load_avg(cfs_rq);
 13316		propagate_entity_cfs_rq(se);
 13317	}
 13318	
 13319	static void attach_entity_cfs_rq(struct sched_entity *se)
 13320	{
 13321		struct cfs_rq *cfs_rq = cfs_rq_of(se);
 13322	
 13323		/* Synchronize entity with its cfs_rq */
 13324		update_load_avg(cfs_rq, se, sched_feat(ATTACH_AGE_LOAD) ? 0 : SKIP_AGE_LOAD);
 13325		attach_entity_load_avg(cfs_rq, se);
 13326		update_tg_load_avg(cfs_rq);
 13327		propagate_entity_cfs_rq(se);
 13328	}
 13329	
 13330	static void detach_task_cfs_rq(struct task_struct *p)
 13331	{
 13332		struct sched_entity *se = &p->se;
 13333	
 13334		detach_entity_cfs_rq(se);
 13335	}
 13336	
 13337	static void attach_task_cfs_rq(struct task_struct *p)
 13338	{
 13339		struct sched_entity *se = &p->se;
 13340	
 13341		attach_entity_cfs_rq(se);
 13342	}
 13343	
 13344	static void switched_from_fair(struct rq *rq, struct task_struct *p)
 13345	{
 13346		detach_task_cfs_rq(p);
 13347		/*
 13348		 * Since this is called after changing class, this is a little weird
 13349		 * and we cannot use DEQUEUE_DELAYED.
 13350		 */
 13351		if (p->se.sched_delayed) {
 13352			dequeue_task(rq, p, DEQUEUE_NOCLOCK | DEQUEUE_SLEEP);
 13353			p->se.sched_delayed = 0;
 13354			p->se.rel_deadline = 0;
 13355			if (sched_feat(DELAY_ZERO) && p->se.vlag > 0)
 13356				p->se.vlag = 0;
 13357		}
 13358	}
 13359	
 13360	static void switched_to_fair(struct rq *rq, struct task_struct *p)
 13361	{
 13362		SCHED_WARN_ON(p->se.sched_delayed);
 13363	
 13364		attach_task_cfs_rq(p);
 13365	
 13366		set_task_max_allowed_capacity(p);
 13367	
 13368		if (task_on_rq_queued(p)) {
 13369			/*
 13370			 * We were most likely switched from sched_rt, so
 13371			 * kick off the schedule if running, otherwise just see
 13372			 * if we can still preempt the current task.
 13373			 */
 13374			if (task_current(rq, p))
 13375				resched_curr(rq);
 13376			else
 13377				wakeup_preempt(rq, p, 0);
 13378		}
 13379	}
 13380	
 13381	/* Account for a task changing its policy or group.
 13382	 *
 13383	 * This routine is mostly called to set cfs_rq->curr field when a task
 13384	 * migrates between groups/classes.
 13385	 */
 13386	static void set_next_task_fair(struct rq *rq, struct task_struct *p, bool first)
 13387	{
 13388		struct sched_entity *se = &p->se;
 13389	
 13390	#ifdef CONFIG_SMP
 13391		if (task_on_rq_queued(p)) {
 13392			/*
 13393			 * Move the next running task to the front of the list, so our
 13394			 * cfs_tasks list becomes MRU one.
 13395			 */
 13396			list_move(&se->group_node, &rq->cfs_tasks);
 13397		}
 13398	#endif
 13399	
 13400		for_each_sched_entity(se) {
 13401			struct cfs_rq *cfs_rq = cfs_rq_of(se);
 13402	
 13403			set_next_entity(cfs_rq, se);
 13404			/* ensure bandwidth has been allocated on our new cfs_rq */
 13405			account_cfs_rq_runtime(cfs_rq, 0);
 13406		}
 13407	
 13408		if (!first)
 13409			return;
 13410	
 13411		SCHED_WARN_ON(se->sched_delayed);
 13412	}
 13413	
 13414	void init_cfs_rq(struct cfs_rq *cfs_rq)
 13415	{
 13416		cfs_rq->tasks_timeline = RB_ROOT_CACHED;
 13417		plist_head_init(&cfs_rq->pushable_tasks);
 13418		cfs_rq->min_vruntime = (u64)(-(1LL << 20));
 13419	#ifdef CONFIG_SMP
 13420		raw_spin_lock_init(&cfs_rq->removed.lock);
 13421	#endif
 13422	}
 13423	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

           reply	other threads:[~2024-09-02  8:00 UTC|newest]

Thread overview: expand[flat|nested]  mbox.gz  Atom feed
 [parent not found: <20240830130309.2141697-6-vincent.guittot@linaro.org>]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202409021537.6ml3xfzW-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=llvm@lists.linux.dev \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=vincent.guittot@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox