net/bnxt: cleanup and check ULP context allocation
[dpdk.git] / drivers / net / bnxt / bnxt_reps.c
index 6fa9a30..2941aff 100644 (file)
@@ -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");