Hi Rafael,

I love your patch! Perhaps something to improve:

[auto build test WARNING on pm/linux-next]
[also build test WARNING on v4.18-rc8 next-20180810]
[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/Rafael-J-Wysocki/cpuidle-menu-Handle-stopped-tick-more-aggressively/20180811-191914
base:   https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git 
linux-next
config: mips-allyesconfig (attached as .config)
compiler: mips-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=mips 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.
http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings

All warnings (new ones prefixed by >>):

   drivers/cpuidle/governors/menu.c: In function 'menu_select':
>> drivers/cpuidle/governors/menu.c:289:6: warning: 'first_idx' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
     int first_idx;
         ^~~~~~~~~

vim +/first_idx +289 drivers/cpuidle/governors/menu.c

1f85f87d4 Arjan van de Ven              2010-05-24  276  
4f86d3a8e Len Brown                     2007-10-03  277  /**
4f86d3a8e Len Brown                     2007-10-03  278   * menu_select - 
selects the next idle state to enter
46bcfad7a Deepthi Dharwar               2011-10-28  279   * @drv: cpuidle 
driver containing state data
4f86d3a8e Len Brown                     2007-10-03  280   * @dev: the CPU
45f1ff59e Rafael J. Wysocki             2018-03-22  281   * @stop_tick: 
indication on whether or not to stop the tick
4f86d3a8e Len Brown                     2007-10-03  282   */
45f1ff59e Rafael J. Wysocki             2018-03-22  283  static int 
menu_select(struct cpuidle_driver *drv, struct cpuidle_device *dev,
45f1ff59e Rafael J. Wysocki             2018-03-22  284                        
bool *stop_tick)
4f86d3a8e Len Brown                     2007-10-03  285  {
229b6863b Christoph Lameter             2014-08-17  286         struct 
menu_device *data = this_cpu_ptr(&menu_devices);
0fc784fb0 Rafael J. Wysocki             2018-05-30  287         int latency_req 
= cpuidle_governor_latency_req(dev->cpu);
4f86d3a8e Len Brown                     2007-10-03  288         int i;
3ed09c945 Nicholas Piggin               2017-06-26 @289         int first_idx;
3ed09c945 Nicholas Piggin               2017-06-26  290         int idx;
96e95182e tuukka.tikka...@linaro.org    2014-02-24  291         unsigned int 
interactivity_req;
e132b9b3b Rik van Riel                  2016-03-16  292         unsigned int 
expected_interval;
372ba8cb4 Mel Gorman                    2014-08-06  293         unsigned long 
nr_iowaiters, cpu_load;
296bb1e51 Rafael J. Wysocki             2018-04-05  294         ktime_t 
delta_next;
4f86d3a8e Len Brown                     2007-10-03  295  
672917dcc Corrado Zoccolo               2009-09-21  296         if 
(data->needs_update) {
46bcfad7a Deepthi Dharwar               2011-10-28  297                 
menu_update(drv, dev);
672917dcc Corrado Zoccolo               2009-09-21  298                 
data->needs_update = 0;
672917dcc Corrado Zoccolo               2009-09-21  299         }
672917dcc Corrado Zoccolo               2009-09-21  300  
69d25870f Arjan van de Ven              2009-09-21  301         /* Special case 
when user has set very strict latency requirement */
45f1ff59e Rafael J. Wysocki             2018-03-22  302         if 
(unlikely(latency_req == 0)) {
45f1ff59e Rafael J. Wysocki             2018-03-22  303                 
*stop_tick = false;
a2bd92023 venkatesh.pallip...@intel.com 2008-07-30  304                 return 
0;
45f1ff59e Rafael J. Wysocki             2018-03-22  305         }
a2bd92023 venkatesh.pallip...@intel.com 2008-07-30  306  
69d25870f Arjan van de Ven              2009-09-21  307         /* determine 
the expected residency time, round up */
296bb1e51 Rafael J. Wysocki             2018-04-05  308         
data->next_timer_us = ktime_to_us(tick_nohz_get_sleep_length(&delta_next));
69d25870f Arjan van de Ven              2009-09-21  309  
5f9f09809 Rafael J. Wysocki             2018-08-10  310         /*
5f9f09809 Rafael J. Wysocki             2018-08-10  311          * If the tick 
is already stopped, the cost of possible short idle
5f9f09809 Rafael J. Wysocki             2018-08-10  312          * duration 
misprediction is much higher, because the CPU may be stuck
5f9f09809 Rafael J. Wysocki             2018-08-10  313          * in a shallow 
idle state for a long time as a result of it.  In that
5f9f09809 Rafael J. Wysocki             2018-08-10  314          * case say we 
might mispredict and use the known time till the closest
5f9f09809 Rafael J. Wysocki             2018-08-10  315          * timer event 
for the idle state selection.
5f9f09809 Rafael J. Wysocki             2018-08-10  316          */
5f9f09809 Rafael J. Wysocki             2018-08-10  317         if 
(tick_nohz_tick_stopped()) {
5f9f09809 Rafael J. Wysocki             2018-08-10  318                 
data->predicted_us = ktime_to_us(delta_next);
5f9f09809 Rafael J. Wysocki             2018-08-10  319                 goto 
select;
5f9f09809 Rafael J. Wysocki             2018-08-10  320         }
5f9f09809 Rafael J. Wysocki             2018-08-10  321  
372ba8cb4 Mel Gorman                    2014-08-06  322         
get_iowait_load(&nr_iowaiters, &cpu_load);
64b4ca5cb Mel Gorman                    2014-08-06  323         data->bucket = 
which_bucket(data->next_timer_us, nr_iowaiters);
69d25870f Arjan van de Ven              2009-09-21  324  
69d25870f Arjan van de Ven              2009-09-21  325         /*
51f245b89 Tuukka Tikkanen               2013-08-14  326          * Force the 
result of multiplication to be 64 bits even if both
51f245b89 Tuukka Tikkanen               2013-08-14  327          * operands are 
32 bits.
51f245b89 Tuukka Tikkanen               2013-08-14  328          * Make sure to 
round up for half microseconds.
51f245b89 Tuukka Tikkanen               2013-08-14  329          */
ee3c86f35 Javi Merino                   2015-04-16  330         
data->predicted_us = DIV_ROUND_CLOSEST_ULL((uint64_t)data->next_timer_us *
51f245b89 Tuukka Tikkanen               2013-08-14  331                         
                 data->correction_factor[data->bucket],
69d25870f Arjan van de Ven              2009-09-21  332                         
                 RESOLUTION * DECAY);
69d25870f Arjan van de Ven              2009-09-21  333  
e132b9b3b Rik van Riel                  2016-03-16  334         
expected_interval = get_typical_interval(data);
e132b9b3b Rik van Riel                  2016-03-16  335         
expected_interval = min(expected_interval, data->next_timer_us);
96e95182e tuukka.tikka...@linaro.org    2014-02-24  336  
dc2251bf9 Rafael J. Wysocki             2017-08-23  337         first_idx = 0;
dc2251bf9 Rafael J. Wysocki             2017-08-23  338         if 
(drv->states[0].flags & CPUIDLE_FLAG_POLLING) {
dc2251bf9 Rafael J. Wysocki             2017-08-23  339                 struct 
cpuidle_state *s = &drv->states[1];
0c313cb20 Rafael J. Wysocki             2016-03-20  340                 
unsigned int polling_threshold;
0c313cb20 Rafael J. Wysocki             2016-03-20  341  
96e95182e tuukka.tikka...@linaro.org    2014-02-24  342                 /*
69d25870f Arjan van de Ven              2009-09-21  343                  * We 
want to default to C1 (hlt), not to busy polling
e132b9b3b Rik van Riel                  2016-03-16  344                  * 
unless the timer is happening really really soon, or
e132b9b3b Rik van Riel                  2016-03-16  345                  * C1's 
exit latency exceeds the user configured limit.
69d25870f Arjan van de Ven              2009-09-21  346                  */
0c313cb20 Rafael J. Wysocki             2016-03-20  347                 
polling_threshold = max_t(unsigned int, 20, s->target_residency);
0c313cb20 Rafael J. Wysocki             2016-03-20  348                 if 
(data->next_timer_us > polling_threshold &&
0c313cb20 Rafael J. Wysocki             2016-03-20  349                     
latency_req > s->exit_latency && !s->disabled &&
dc2251bf9 Rafael J. Wysocki             2017-08-23  350                     
!dev->states_usage[1].disable)
dc2251bf9 Rafael J. Wysocki             2017-08-23  351                         
first_idx = 1;
9c4b2867e Rafael J. Wysocki             2016-01-14  352         }
4f86d3a8e Len Brown                     2007-10-03  353  
71abbbf85 Ai Li                         2010-08-09  354         /*
e132b9b3b Rik van Riel                  2016-03-16  355          * Use the 
lowest expected idle interval to pick the idle state.
e132b9b3b Rik van Riel                  2016-03-16  356          */
e132b9b3b Rik van Riel                  2016-03-16  357         
data->predicted_us = min(data->predicted_us, expected_interval);
e132b9b3b Rik van Riel                  2016-03-16  358  
e132b9b3b Rik van Riel                  2016-03-16  359         /*
5f9f09809 Rafael J. Wysocki             2018-08-10  360          * Use the 
performance multiplier and the user-configurable latency_req
5f9f09809 Rafael J. Wysocki             2018-08-10  361          * to determine 
the maximum exit latency.
e132b9b3b Rik van Riel                  2016-03-16  362          */
e132b9b3b Rik van Riel                  2016-03-16  363         
interactivity_req = data->predicted_us / performance_multiplier(nr_iowaiters, 
cpu_load);
e132b9b3b Rik van Riel                  2016-03-16  364         if (latency_req 
> interactivity_req)
e132b9b3b Rik van Riel                  2016-03-16  365                 
latency_req = interactivity_req;
e132b9b3b Rik van Riel                  2016-03-16  366  
5f9f09809 Rafael J. Wysocki             2018-08-10  367  select:
45f1ff59e Rafael J. Wysocki             2018-03-22  368         
expected_interval = data->predicted_us;
e132b9b3b Rik van Riel                  2016-03-16  369         /*
71abbbf85 Ai Li                         2010-08-09  370          * Find the 
idle state with the lowest power while satisfying
71abbbf85 Ai Li                         2010-08-09  371          * our 
constraints.
71abbbf85 Ai Li                         2010-08-09  372          */
3ed09c945 Nicholas Piggin               2017-06-26  373         idx = -1;
3ed09c945 Nicholas Piggin               2017-06-26  374         for (i = 
first_idx; i < drv->state_count; i++) {
46bcfad7a Deepthi Dharwar               2011-10-28  375                 struct 
cpuidle_state *s = &drv->states[i];
dc7fd275a ShuoX Liu                     2012-07-03  376                 struct 
cpuidle_state_usage *su = &dev->states_usage[i];
4f86d3a8e Len Brown                     2007-10-03  377  
cbc9ef028 Rafael J. Wysocki             2012-07-03  378                 if 
(s->disabled || su->disable)
3a53396b0 ShuoX Liu                     2012-03-28  379                         
continue;
3ed09c945 Nicholas Piggin               2017-06-26  380                 if (idx 
== -1)
3ed09c945 Nicholas Piggin               2017-06-26  381                         
idx = i; /* first enabled state */
148519120 Rafael J. Wysocki             2013-07-27  382                 if 
(s->target_residency > data->predicted_us)
8e37e1a2a Alex Shi                      2017-01-12  383                         
break;
45f1ff59e Rafael J. Wysocki             2018-03-22  384                 if 
(s->exit_latency > latency_req) {
45f1ff59e Rafael J. Wysocki             2018-03-22  385                         
/*
45f1ff59e Rafael J. Wysocki             2018-03-22  386                         
 * If we break out of the loop for latency reasons, use
45f1ff59e Rafael J. Wysocki             2018-03-22  387                         
 * the target residency of the selected state as the
45f1ff59e Rafael J. Wysocki             2018-03-22  388                         
 * expected idle duration so that the tick is retained
45f1ff59e Rafael J. Wysocki             2018-03-22  389                         
 * as long as that target residency is low enough.
45f1ff59e Rafael J. Wysocki             2018-03-22  390                         
 */
45f1ff59e Rafael J. Wysocki             2018-03-22  391                         
expected_interval = drv->states[idx].target_residency;
8e37e1a2a Alex Shi                      2017-01-12  392                         
break;
45f1ff59e Rafael J. Wysocki             2018-03-22  393                 }
3ed09c945 Nicholas Piggin               2017-06-26  394                 idx = i;
71abbbf85 Ai Li                         2010-08-09  395         }
4f86d3a8e Len Brown                     2007-10-03  396  
3ed09c945 Nicholas Piggin               2017-06-26  397         if (idx == -1)
3ed09c945 Nicholas Piggin               2017-06-26  398                 idx = 
0; /* No states enabled. Must use 0. */
3ed09c945 Nicholas Piggin               2017-06-26  399  
45f1ff59e Rafael J. Wysocki             2018-03-22  400         /*
45f1ff59e Rafael J. Wysocki             2018-03-22  401          * Don't stop 
the tick if the selected state is a polling one or if the
45f1ff59e Rafael J. Wysocki             2018-03-22  402          * expected 
idle duration is shorter than the tick period length.
45f1ff59e Rafael J. Wysocki             2018-03-22  403          */
5f9f09809 Rafael J. Wysocki             2018-08-10  404         if 
(((drv->states[idx].flags & CPUIDLE_FLAG_POLLING) ||
5f9f09809 Rafael J. Wysocki             2018-08-10  405             
expected_interval < TICK_USEC) && !tick_nohz_tick_stopped()) {
296bb1e51 Rafael J. Wysocki             2018-04-05  406                 
unsigned int delta_next_us = ktime_to_us(delta_next);
296bb1e51 Rafael J. Wysocki             2018-04-05  407  
45f1ff59e Rafael J. Wysocki             2018-03-22  408                 
*stop_tick = false;
45f1ff59e Rafael J. Wysocki             2018-03-22  409  
5f9f09809 Rafael J. Wysocki             2018-08-10  410                 if (idx 
> 0 && drv->states[idx].target_residency > delta_next_us) {
296bb1e51 Rafael J. Wysocki             2018-04-05  411                         
/*
296bb1e51 Rafael J. Wysocki             2018-04-05  412                         
 * The tick is not going to be stopped and the target
296bb1e51 Rafael J. Wysocki             2018-04-05  413                         
 * residency of the state to be returned is not within
296bb1e51 Rafael J. Wysocki             2018-04-05  414                         
 * the time until the next timer event including the
296bb1e51 Rafael J. Wysocki             2018-04-05  415                         
 * tick, so try to correct that.
296bb1e51 Rafael J. Wysocki             2018-04-05  416                         
 */
296bb1e51 Rafael J. Wysocki             2018-04-05  417                         
for (i = idx - 1; i >= 0; i--) {
296bb1e51 Rafael J. Wysocki             2018-04-05  418                         
    if (drv->states[i].disabled ||
296bb1e51 Rafael J. Wysocki             2018-04-05  419                         
        dev->states_usage[i].disable)
296bb1e51 Rafael J. Wysocki             2018-04-05  420                         
                continue;
296bb1e51 Rafael J. Wysocki             2018-04-05  421  
296bb1e51 Rafael J. Wysocki             2018-04-05  422                         
        idx = i;
296bb1e51 Rafael J. Wysocki             2018-04-05  423                         
        if (drv->states[i].target_residency <= delta_next_us)
296bb1e51 Rafael J. Wysocki             2018-04-05  424                         
                break;
296bb1e51 Rafael J. Wysocki             2018-04-05  425                         
}
296bb1e51 Rafael J. Wysocki             2018-04-05  426                 }
296bb1e51 Rafael J. Wysocki             2018-04-05  427         }
296bb1e51 Rafael J. Wysocki             2018-04-05  428  
3ed09c945 Nicholas Piggin               2017-06-26  429         
data->last_state_idx = idx;
3ed09c945 Nicholas Piggin               2017-06-26  430  
69d25870f Arjan van de Ven              2009-09-21  431         return 
data->last_state_idx;
4f86d3a8e Len Brown                     2007-10-03  432  }
4f86d3a8e Len Brown                     2007-10-03  433  

:::::: The code at line 289 was first introduced by commit
:::::: 3ed09c94580de9d5b18cc35d1f97e9f24cd9233b cpuidle: menu: allow state 0 to 
be disabled

:::::: TO: Nicholas Piggin <npig...@gmail.com>
:::::: CC: Rafael J. Wysocki <rafael.j.wyso...@intel.com>

---
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