Hi Vincent,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on tip/sched/core]
[also build test WARNING on v4.17-rc2 next-20180426]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:    
https://github.com/0day-ci/linux/commits/Vincent-Guittot/sched-fair-use-RETRY_TASK-in-idle_balance/20180428-050824
config: x86_64-randconfig-x012-04271426 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   kernel/sched/fair.c: In function 'idle_balance':
>> kernel/sched/fair.c:9865:15: warning: assignment makes integer from pointer 
>> without a cast [-Wint-conversion]
      pulled_task = RETRY_TASK;
                  ^
   Cyclomatic Complexity 5 include/linux/compiler.h:__read_once_size
   Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
   Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:clear_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:constant_test_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:variable_test_bit
   Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls
   Cyclomatic Complexity 1 arch/x86/include/asm/arch_hweight.h:__arch_hweight64
   Cyclomatic Complexity 2 include/linux/bitops.h:hweight_long
   Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u32
   Cyclomatic Complexity 1 arch/x86/include/asm/current.h:get_current
   Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
   Cyclomatic Complexity 1 include/linux/list.h:__list_add_valid
   Cyclomatic Complexity 1 include/linux/list.h:__list_del_entry_valid
   Cyclomatic Complexity 2 include/linux/list.h:__list_add
   Cyclomatic Complexity 1 include/linux/list.h:list_add
   Cyclomatic Complexity 1 include/linux/list.h:__list_del
   Cyclomatic Complexity 2 include/linux/list.h:__list_del_entry
   Cyclomatic Complexity 1 include/linux/list.h:list_del_init
   Cyclomatic Complexity 1 include/linux/list.h:list_move
   Cyclomatic Complexity 1 include/linux/list.h:list_empty
   Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:atomic_read
   Cyclomatic Complexity 1 arch/x86/include/asm/atomic64_64.h:atomic64_add
   Cyclomatic Complexity 1 include/linux/jump_label.h:static_key_count
   Cyclomatic Complexity 3 include/linux/string.h:memset
   Cyclomatic Complexity 3 include/linux/bitmap.h:bitmap_and
   Cyclomatic Complexity 3 include/linux/bitmap.h:bitmap_intersects
   Cyclomatic Complexity 3 include/linux/bitmap.h:bitmap_subset
   Cyclomatic Complexity 3 include/linux/bitmap.h:bitmap_weight
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_check
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_first
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_clear_cpu
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_test_cpu
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_and
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_intersects
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_subset
   Cyclomatic Complexity 1 include/linux/cpumask.h:cpumask_weight
   Cyclomatic Complexity 1 
arch/x86/include/asm/paravirt.h:arch_local_irq_restore
   Cyclomatic Complexity 1 arch/x86/include/asm/paravirt.h:arch_local_irq_enable
   Cyclomatic Complexity 1 include/linux/math64.h:div_u64_rem
   Cyclomatic Complexity 1 include/linux/math64.h:div_u64
   Cyclomatic Complexity 1 include/linux/math64.h:mul_u64_u32_shr
   Cyclomatic Complexity 2 include/linux/thread_info.h:test_ti_thread_flag
   Cyclomatic Complexity 1 include/linux/lockdep.h:lock_is_held
   Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_lock_acquire
   Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_lock_release
   Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_read_lock
   Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_read_unlock
   Cyclomatic Complexity 1 include/linux/spinlock.h:spin_trylock
   Cyclomatic Complexity 1 include/linux/spinlock.h:spin_unlock
   Cyclomatic Complexity 1 include/linux/jiffies.h:_msecs_to_jiffies
   Cyclomatic Complexity 3 include/linux/jiffies.h:msecs_to_jiffies
   Cyclomatic Complexity 1 include/linux/rbtree.h:rb_link_node
   Cyclomatic Complexity 1 include/linux/sched.h:task_thread_info
   Cyclomatic Complexity 1 include/linux/sched.h:test_tsk_thread_flag
   Cyclomatic Complexity 1 include/linux/sched.h:test_tsk_need_resched
   Cyclomatic Complexity 1 include/linux/sched.h:task_cpu
   Cyclomatic Complexity 1 include/linux/sched/clock.h:local_clock
   Cyclomatic Complexity 1 include/linux/sched/cputime.h:get_running_cputimer
   Cyclomatic Complexity 2 
include/linux/sched/cputime.h:account_group_exec_runtime
   Cyclomatic Complexity 1 include/linux/tick.h:tick_nohz_tick_stopped
   Cyclomatic Complexity 1 include/linux/sched/topology.h:sched_domain_span
   Cyclomatic Complexity 1 include/linux/cgroup.h:task_css_set
   Cyclomatic Complexity 1 include/linux/cgroup.h:task_dfl_cgroup
   Cyclomatic Complexity 3 include/linux/cgroup.h:cgroup_parent
   Cyclomatic Complexity 1 include/linux/cgroup.h:cpuacct_charge
   Cyclomatic Complexity 2 include/linux/cgroup.h:cgroup_account_cputime
   Cyclomatic Complexity 1 kernel/sched/sched.h:sched_asym_prefer
   Cyclomatic Complexity 1 kernel/sched/sched.h:cpu_of
   Cyclomatic Complexity 1 kernel/sched/sched.h:__rq_clock_broken
   Cyclomatic Complexity 4 kernel/sched/sched.h:assert_clock_updated
   Cyclomatic Complexity 4 kernel/sched/sched.h:rq_clock
   Cyclomatic Complexity 4 kernel/sched/sched.h:rq_clock_task
   Cyclomatic Complexity 5 kernel/sched/sched.h:rq_clock_skip_update
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_pin_lock
   Cyclomatic Complexity 2 kernel/sched/sched.h:rq_unpin_lock
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_repin_lock
   Cyclomatic Complexity 1 kernel/sched/sched.h:sched_group_span
   Cyclomatic Complexity 1 kernel/sched/sched.h:group_balance_mask
   Cyclomatic Complexity 1 kernel/sched/sched.h:task_group
   Cyclomatic Complexity 1 kernel/sched/sched.h:task_running
   Cyclomatic Complexity 1 kernel/sched/sched.h:task_on_rq_queued
   Cyclomatic Complexity 1 kernel/sched/sched.h:put_prev_task
   Cyclomatic Complexity 4 kernel/sched/sched.h:idle_get_state
   Cyclomatic Complexity 1 kernel/sched/sched.h:sched_update_tick_dependency
   Cyclomatic Complexity 4 kernel/sched/sched.h:add_nr_running
   Cyclomatic Complexity 1 kernel/sched/sched.h:sub_nr_running
   Cyclomatic Complexity 1 kernel/sched/sched.h:sched_avg_period
   Cyclomatic Complexity 1 kernel/sched/sched.h:hrtick_enabled
   Cyclomatic Complexity 1 kernel/sched/sched.h:arch_scale_freq_capacity
   Cyclomatic Complexity 4 kernel/sched/sched.h:arch_scale_cpu_capacity
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_lock_irqsave
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_lock_irq
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_lock
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_unlock_irqrestore
   Cyclomatic Complexity 1 kernel/sched/sched.h:rq_unlock
   Cyclomatic Complexity 1 kernel/sched/sched.h:cpufreq_update_util
   Cyclomatic Complexity 1 include/trace/events/sched.h:trace_sched_stat_runtime
   Cyclomatic Complexity 1 kernel/sched/fair.c:update_load_add

vim +9865 kernel/sched/fair.c

  9757  
  9758  /*
  9759   * idle_balance is called by schedule() if this_cpu is about to become
  9760   * idle. Attempts to pull tasks from other CPUs.
  9761   */
  9762  static int idle_balance(struct rq *this_rq, struct rq_flags *rf)
  9763  {
  9764          unsigned long next_balance = jiffies + HZ;
  9765          int this_cpu = this_rq->cpu;
  9766          struct sched_domain *sd;
  9767          int pulled_task = 0;
  9768          u64 curr_cost = 0;
  9769  
  9770          /*
  9771           * We must set idle_stamp _before_ calling idle_balance(), such 
that we
  9772           * measure the duration of idle_balance() as idle time.
  9773           */
  9774          this_rq->idle_stamp = rq_clock(this_rq);
  9775  
  9776          /*
  9777           * Do not pull tasks towards !active CPUs...
  9778           */
  9779          if (!cpu_active(this_cpu))
  9780                  return 0;
  9781  
  9782          /*
  9783           * This is OK, because current is on_cpu, which avoids it being 
picked
  9784           * for load-balance and preemption/IRQs are still disabled 
avoiding
  9785           * further scheduler activity on it and we're being very 
careful to
  9786           * re-start the picking loop.
  9787           */
  9788          rq_unpin_lock(this_rq, rf);
  9789  
  9790          if (this_rq->avg_idle < sysctl_sched_migration_cost ||
  9791              !this_rq->rd->overload) {
  9792  
  9793                  rcu_read_lock();
  9794                  sd = rcu_dereference_check_sched_domain(this_rq->sd);
  9795                  if (sd)
  9796                          update_next_balance(sd, &next_balance);
  9797                  rcu_read_unlock();
  9798  
  9799                  nohz_newidle_balance(this_rq);
  9800  
  9801                  goto out;
  9802          }
  9803  
  9804          raw_spin_unlock(&this_rq->lock);
  9805  
  9806          update_blocked_averages(this_cpu);
  9807          rcu_read_lock();
  9808          for_each_domain(this_cpu, sd) {
  9809                  int continue_balancing = 1;
  9810                  u64 t0, domain_cost;
  9811  
  9812                  if (!(sd->flags & SD_LOAD_BALANCE))
  9813                          continue;
  9814  
  9815                  if (this_rq->avg_idle < curr_cost + 
sd->max_newidle_lb_cost) {
  9816                          update_next_balance(sd, &next_balance);
  9817                          break;
  9818                  }
  9819  
  9820                  if (sd->flags & SD_BALANCE_NEWIDLE) {
  9821                          t0 = sched_clock_cpu(this_cpu);
  9822  
  9823                          pulled_task = load_balance(this_cpu, this_rq,
  9824                                                     sd, CPU_NEWLY_IDLE,
  9825                                                     &continue_balancing);
  9826  
  9827                          domain_cost = sched_clock_cpu(this_cpu) - t0;
  9828                          if (domain_cost > sd->max_newidle_lb_cost)
  9829                                  sd->max_newidle_lb_cost = domain_cost;
  9830  
  9831                          curr_cost += domain_cost;
  9832                  }
  9833  
  9834                  update_next_balance(sd, &next_balance);
  9835  
  9836                  /*
  9837                   * Stop searching for tasks to pull if there are
  9838                   * now runnable tasks on this rq.
  9839                   */
  9840                  if (pulled_task || this_rq->nr_running > 0)
  9841                          break;
  9842          }
  9843          rcu_read_unlock();
  9844  
  9845          raw_spin_lock(&this_rq->lock);
  9846  
  9847          if (curr_cost > this_rq->max_idle_balance_cost)
  9848                  this_rq->max_idle_balance_cost = curr_cost;
  9849  
  9850          /*
  9851           * While browsing the domains, we released the rq lock, a task 
could
  9852           * have been enqueued in the meantime. Since we're not going 
idle,
  9853           * pretend we pulled a task.
  9854           */
  9855          if (this_rq->cfs.h_nr_running && !pulled_task)
  9856                  pulled_task = 1;
  9857  
  9858  out:
  9859          /* Move the next balance forward */
  9860          if (time_after(this_rq->next_balance, next_balance))
  9861                  this_rq->next_balance = next_balance;
  9862  
  9863          /* Is there a task of a high priority class? */
  9864          if (this_rq->nr_running != this_rq->cfs.h_nr_running)
> 9865                  pulled_task = RETRY_TASK;
  9866  
  9867          if (pulled_task)
  9868                  this_rq->idle_stamp = 0;
  9869  
  9870          rq_repin_lock(this_rq, rf);
  9871  
  9872          return pulled_task;
  9873  }
  9874  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to