common/sfc_efx/base: free Rx queue structure in generic code
[dpdk.git] / drivers / common / sfc_efx / base / efx_rx.c
index cce34cf..d208c22 100644 (file)
@@ -819,6 +819,8 @@ efx_rx_qcreate_internal(
        EFSYS_ASSERT3U(enp->en_magic, ==, EFX_NIC_MAGIC);
        EFSYS_ASSERT3U(enp->en_mod_flags, &, EFX_MOD_RX);
 
+       EFSYS_ASSERT3U(enp->en_rx_qcount + 1, <, encp->enc_rxq_limit);
+
        EFSYS_ASSERT(ISP2(encp->enc_rxq_max_ndescs));
        EFSYS_ASSERT(ISP2(encp->enc_rxq_min_ndescs));
 
@@ -975,7 +977,13 @@ efx_rx_qdestroy(
 
        EFSYS_ASSERT3U(erp->er_magic, ==, EFX_RXQ_MAGIC);
 
+       EFSYS_ASSERT(enp->en_rx_qcount != 0);
+       --enp->en_rx_qcount;
+
        erxop->erxo_qdestroy(erp);
+
+       /* Free the RXQ object */
+       EFSYS_KMEM_FREE(enp->en_esip, sizeof (efx_rxq_t), erp);
 }
 
        __checkReturn   efx_rc_t
@@ -1626,7 +1634,6 @@ siena_rx_qcreate(
        EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS ==
            (1 << FRF_AZ_RX_DESCQ_LABEL_WIDTH));
        EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS);
-       EFSYS_ASSERT3U(enp->en_rx_qcount + 1, <, encp->enc_rxq_limit);
 
        if (index >= encp->enc_rxq_limit) {
                rc = EINVAL;
@@ -1697,17 +1704,11 @@ siena_rx_qdestroy(
        efx_nic_t *enp = erp->er_enp;
        efx_oword_t oword;
 
-       EFSYS_ASSERT(enp->en_rx_qcount != 0);
-       --enp->en_rx_qcount;
-
        /* Purge descriptor queue */
        EFX_ZERO_OWORD(oword);
 
        EFX_BAR_TBL_WRITEO(enp, FR_AZ_RX_DESC_PTR_TBL,
                            erp->er_index, &oword, B_TRUE);
-
-       /* Free the RXQ object */
-       EFSYS_KMEM_FREE(enp->en_esip, sizeof (efx_rxq_t), erp);
 }
 
 static         void