Hi Edward,

I love your patch! Perhaps something to improve:

[auto build test WARNING on net/master]

url:    
https://github.com/0day-ci/linux/commits/Edward-Cree/sfc-ARFS-filter-IDs/20180424-080737
config: i386-allmodconfig (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=i386 

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/net/ethernet/sfc/farch.c: In function 
'efx_farch_filter_rfs_expire_one':
>> drivers/net/ethernet/sfc/farch.c:2938:7: warning: 'rule' may be used 
>> uninitialized in this function [-Wmaybe-uninitialized]
       if (rule)
          ^

coccinelle warnings: (new ones prefixed by >>)

>> drivers/net/ethernet/sfc/efx.c:3032:1-20: alloc with no test, possible model 
>> on line 3041
   drivers/net/ethernet/sfc/efx.c:3032:1-20: alloc with no test, possible model 
on line 3062

vim +/rule +2938 drivers/net/ethernet/sfc/farch.c

  2902  
  2903  bool efx_farch_filter_rfs_expire_one(struct efx_nic *efx, u32 flow_id,
  2904                                       unsigned int index)
  2905  {
  2906          struct efx_farch_filter_state *state = efx->filter_state;
  2907          struct efx_farch_filter_table *table;
  2908          bool ret = false, force = false;
  2909          u16 arfs_id;
  2910  
  2911          down_write(&state->lock);
  2912          spin_lock_bh(&efx->rps_hash_lock);
  2913          table = &state->table[EFX_FARCH_FILTER_TABLE_RX_IP];
  2914          if (test_bit(index, table->used_bitmap) &&
  2915              table->spec[index].priority == EFX_FILTER_PRI_HINT) {
  2916                  struct efx_filter_spec spec;
  2917                  struct efx_arfs_rule *rule;
  2918  
  2919                  efx_farch_filter_to_gen_spec(&spec, 
&table->spec[index]);
  2920                  if (!efx->rps_hash_table) {
  2921                          /* In the absence of the table, we always 
returned 0 to
  2922                           * ARFS, so use the same to query it.
  2923                           */
  2924                          arfs_id = 0;
  2925                  } else {
  2926                          rule = efx_rps_hash_find(efx, &spec);
  2927                          if (!rule) {
  2928                                  /* ARFS table doesn't know of this 
filter, remove it */
  2929                                  force = true;
  2930                          } else {
  2931                                  arfs_id = rule->arfs_id;
  2932                                  if (!efx_rps_check_rule(rule, index, 
&force))
  2933                                          goto out_unlock;
  2934                          }
  2935                  }
  2936                  if (force || rps_may_expire_flow(efx->net_dev, 
spec.dmaq_id,
  2937                                                   flow_id, arfs_id)) {
> 2938                          if (rule)
  2939                                  rule->filter_id = 
EFX_ARFS_FILTER_ID_REMOVING;
  2940                          efx_rps_hash_del(efx, &spec);
  2941                          efx_farch_filter_table_clear_entry(efx, table, 
index);
  2942                          ret = true;
  2943                  }
  2944          }
  2945  out_unlock:
  2946          spin_unlock_bh(&efx->rps_hash_lock);
  2947          up_write(&state->lock);
  2948          return ret;
  2949  }
  2950  

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