struct ice_hw *hw;
struct ice_vsi_ctx vsi_ctx;
enum ice_status ret;
+ int error = 0;
if (!vsi)
- return 0;
+ return error;
hw = ICE_VSI_TO_HW(vsi);
ret = ice_free_vsi(hw, vsi->idx, &vsi_ctx, false, NULL);
if (ret != ICE_SUCCESS) {
PMD_INIT_LOG(ERR, "Failed to free vsi by aq, %u", vsi->vsi_id);
- rte_free(vsi);
- return -1;
+ error = -1;
}
+ rte_free(vsi->rss_lut);
+ rte_free(vsi->rss_key);
rte_free(vsi);
- return 0;
+ return error;
}
void
if (ret)
PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV4_SCTP rss flow fail %d",
__func__, ret);
-
- ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV4,
- ICE_FLOW_SEG_HDR_PPPOE, 0);
- if (ret)
- PMD_DRV_LOG(ERR, "%s PPPoE_IPV4_SCTP rss flow fail %d",
- __func__, ret);
}
if (rss_hf & ETH_RSS_NONFRAG_IPV6_SCTP) {
if (ret)
PMD_DRV_LOG(ERR, "%s GTPU_EH_IPV6_SCTP rss flow fail %d",
__func__, ret);
-
- ret = ice_add_rss_cfg(hw, vsi->idx, ICE_HASH_SCTP_IPV6,
- ICE_FLOW_SEG_HDR_PPPOE, 0);
- if (ret)
- PMD_DRV_LOG(ERR, "%s PPPoE_IPV6_SCTP rss flow fail %d",
- __func__, ret);
}
}
return 0;
}
- if (!vsi->rss_key)
+ if (!vsi->rss_key) {
vsi->rss_key = rte_zmalloc(NULL,
vsi->rss_key_size, 0);
- if (!vsi->rss_lut)
+ if (vsi->rss_key == NULL) {
+ PMD_DRV_LOG(ERR, "Failed to allocate memory for rss_key");
+ return -ENOMEM;
+ }
+ }
+ if (!vsi->rss_lut) {
vsi->rss_lut = rte_zmalloc(NULL,
vsi->rss_lut_size, 0);
-
+ if (vsi->rss_lut == NULL) {
+ PMD_DRV_LOG(ERR, "Failed to allocate memory for rss_key");
+ rte_free(vsi->rss_key);
+ vsi->rss_key = NULL;
+ return -ENOMEM;
+ }
+ }
/* configure RSS key */
if (!rss_conf->rss_key) {
/* Calculate the default hash key */
rte_memcpy(key.standard_rss_key, vsi->rss_key, vsi->rss_key_size);
ret = ice_aq_set_rss_key(hw, vsi->idx, &key);
if (ret)
- return -EINVAL;
+ goto out;
/* init RSS LUT table */
for (i = 0; i < vsi->rss_lut_size; i++)
ICE_AQC_GSET_RSS_LUT_TABLE_TYPE_PF,
vsi->rss_lut, vsi->rss_lut_size);
if (ret)
- return -EINVAL;
+ goto out;
/* Enable registers for symmetric_toeplitz function. */
reg = ICE_READ_REG(hw, VSIQF_HASH_CTL(vsi->vsi_id));
ice_rss_hash_set(pf, rss_conf->rss_hf);
return 0;
+out:
+ rte_free(vsi->rss_key);
+ vsi->rss_key = NULL;
+ rte_free(vsi->rss_lut);
+ vsi->rss_lut = NULL;
+ return -EINVAL;
}
static int