Hello Jesse Brandeburg, The patch 41c445ff0f48: "i40e: main driver core" from Sep 11, 2013, leads to the following static checker warning:
drivers/net/ethernet/intel/i40e/i40e_main.c:13065 i40e_veb_setup() warn: potential off by one 'pf->vsi[]' 'vsi_idx == pf->num_alloc_vsi' drivers/net/ethernet/intel/i40e/i40e_main.c 13025 uplink_seid, vsi_seid); 13026 return NULL; 13027 } 13028 13029 /* make sure there is such a vsi and uplink */ 13030 for (vsi_idx = 0; vsi_idx < pf->num_alloc_vsi; vsi_idx++) 13031 if (pf->vsi[vsi_idx] && pf->vsi[vsi_idx]->seid == vsi_seid) 13032 break; 13033 if (vsi_idx >= pf->num_alloc_vsi && vsi_seid != 0) { ^^^^^^^^^^^^^ I think if pf->num_alloc_vsi is zero then we're going to run into problems. We should remove this condition. 13034 dev_info(&pf->pdev->dev, "vsi seid %d not found\n", 13035 vsi_seid); 13036 return NULL; 13037 } 13038 13039 if (uplink_seid && uplink_seid != pf->mac_seid) { 13040 for (veb_idx = 0; veb_idx < I40E_MAX_VEB; veb_idx++) { 13041 if (pf->veb[veb_idx] && 13042 pf->veb[veb_idx]->seid == uplink_seid) { 13043 uplink_veb = pf->veb[veb_idx]; 13044 break; 13045 } 13046 } 13047 if (!uplink_veb) { 13048 dev_info(&pf->pdev->dev, 13049 "uplink seid %d not found\n", uplink_seid); 13050 return NULL; 13051 } 13052 } 13053 13054 /* get veb sw struct */ 13055 veb_idx = i40e_veb_mem_alloc(pf); 13056 if (veb_idx < 0) 13057 goto err_alloc; 13058 veb = pf->veb[veb_idx]; 13059 veb->flags = flags; 13060 veb->uplink_seid = uplink_seid; 13061 veb->veb_idx = (uplink_veb ? uplink_veb->idx : I40E_NO_VEB); 13062 veb->enabled_tc = (enabled_tc ? enabled_tc : 0x1); 13063 13064 /* create the VEB in the switch */ 13065 ret = i40e_add_veb(veb, pf->vsi[vsi_idx]); ^^^^^^^^^^^^^^^^ 13066 if (ret) 13067 goto err_veb; regards, dan carpenter