@@ -319,6 +319,7 @@ static int bnxt_vfr_alloc(struct rte_eth_dev *vfr_ethdev)
{
int rc = 0;
struct bnxt_vf_representor *vfr = vfr_ethdev->data->dev_private;
+ struct bnxt *parent_bp;
if (!vfr || !vfr->parent_dev) {
PMD_DRV_LOG(ERR,
@@ -326,6 +327,13 @@ static int bnxt_vfr_alloc(struct rte_eth_dev *vfr_ethdev)
return -ENOMEM;
}
+ parent_bp = vfr->parent_dev->data->dev_private;
+ if (parent_bp && !parent_bp->ulp_ctx) {
+ PMD_DRV_LOG(ERR,
+ "ulp context not allocated for parent\n");
+ return -EIO;
+ }
+
/* Check if representor has been already allocated in FW */
if (vfr->vfr_tx_cfa_action)
return 0;
@@ -534,6 +542,11 @@ int bnxt_vf_rep_rx_queue_setup_op(struct rte_eth_dev *eth_dev,
return -EINVAL;
}
+ if (!parent_bp->rx_queues) {
+ PMD_DRV_LOG(ERR, "Parent Rx qs not configured yet\n");
+ return -EINVAL;
+ }
+
parent_rxq = parent_bp->rx_queues[queue_idx];
if (!parent_rxq) {
PMD_DRV_LOG(ERR, "Parent RxQ has not been configured yet\n");
@@ -628,6 +641,11 @@ int bnxt_vf_rep_tx_queue_setup_op(struct rte_eth_dev *eth_dev,
return -EINVAL;
}
+ if (!parent_bp->tx_queues) {
+ PMD_DRV_LOG(ERR, "Parent Tx qs not configured yet\n");
+ return -EINVAL;
+ }
+
parent_txq = parent_bp->tx_queues[queue_idx];
if (!parent_txq) {
PMD_DRV_LOG(ERR, "Parent TxQ has not been configured yet\n");
@@ -884,6 +884,8 @@ bnxt_ulp_deinit(struct bnxt *bp)
ulp_session_deinit(session);
rte_free(bp->ulp_ctx);
+
+ bp->ulp_ctx = NULL;
}
/* Function to set the Mark DB into the context */
@@ -465,7 +465,7 @@ bnxt_ulp_create_df_rules(struct bnxt *bp)
int rc;
if (!BNXT_TRUFLOW_EN(bp) ||
- BNXT_ETH_DEV_IS_REPRESENTOR(bp->eth_dev))
+ BNXT_ETH_DEV_IS_REPRESENTOR(bp->eth_dev) || !bp->ulp_ctx)
return 0;
port_id = bp->eth_dev->data->port_id;