From e9b9b2e56ea71b9467bd667d2863a3e3fa89e7eb Mon Sep 17 00:00:00 2001 From: Andrew Rybchenko Date: Thu, 24 Sep 2020 13:12:06 +0100 Subject: [PATCH] common/sfc_efx/base: move Rx index check to generic code Make NIC family specific functions a bit shorter and reduce code duplication. Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/common/sfc_efx/base/ef10_rx.c | 45 +++++++++++---------------- drivers/common/sfc_efx/base/efx_rx.c | 31 +++++++++--------- 2 files changed, 35 insertions(+), 41 deletions(-) diff --git a/drivers/common/sfc_efx/base/ef10_rx.c b/drivers/common/sfc_efx/base/ef10_rx.c index 58152be768..48666be5b5 100644 --- a/drivers/common/sfc_efx/base/ef10_rx.c +++ b/drivers/common/sfc_efx/base/ef10_rx.c @@ -845,16 +845,11 @@ ef10_rx_qcreate( EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS == (1 << ESF_DZ_RX_QLABEL_WIDTH)); EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS); - if (index >= encp->enc_rxq_limit) { - rc = EINVAL; - goto fail1; - } - switch (type) { case EFX_RXQ_TYPE_DEFAULT: if (type_data == NULL) { rc = EINVAL; - goto fail2; + goto fail1; } erp->er_buf_size = type_data->ertd_default.ed_buf_size; ps_buf_size = 0; @@ -863,7 +858,7 @@ ef10_rx_qcreate( case EFX_RXQ_TYPE_PACKED_STREAM: if (type_data == NULL) { rc = EINVAL; - goto fail3; + goto fail2; } switch (type_data->ertd_packed_stream.eps_buf_size) { case EFX_RXQ_PACKED_STREAM_BUF_SIZE_1M: @@ -883,7 +878,7 @@ ef10_rx_qcreate( break; default: rc = ENOTSUP; - goto fail4; + goto fail3; } erp->er_buf_size = type_data->ertd_packed_stream.eps_buf_size; break; @@ -892,7 +887,7 @@ ef10_rx_qcreate( case EFX_RXQ_TYPE_ES_SUPER_BUFFER: if (type_data == NULL) { rc = EINVAL; - goto fail5; + goto fail4; } ps_buf_size = 0; es_bufs_per_desc = @@ -907,7 +902,7 @@ ef10_rx_qcreate( #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ default: rc = ENOTSUP; - goto fail6; + goto fail5; } #if EFSYS_OPT_RX_PACKED_STREAM @@ -915,13 +910,13 @@ ef10_rx_qcreate( /* Check if datapath firmware supports packed stream mode */ if (encp->enc_rx_packed_stream_supported == B_FALSE) { rc = ENOTSUP; - goto fail7; + goto fail6; } /* Check if packed stream allows configurable buffer sizes */ if ((ps_buf_size != MC_CMD_INIT_RXQ_EXT_IN_PS_BUFF_1M) && (encp->enc_rx_var_packed_stream_supported == B_FALSE)) { rc = ENOTSUP; - goto fail8; + goto fail7; } } #else /* EFSYS_OPT_RX_PACKED_STREAM */ @@ -932,17 +927,17 @@ ef10_rx_qcreate( if (es_bufs_per_desc > 0) { if (encp->enc_rx_es_super_buffer_supported == B_FALSE) { rc = ENOTSUP; - goto fail9; + goto fail8; } if (!EFX_IS_P2ALIGNED(uint32_t, es_max_dma_len, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail10; + goto fail9; } if (!EFX_IS_P2ALIGNED(uint32_t, es_buf_stride, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail11; + goto fail10; } } #else /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ @@ -964,7 +959,7 @@ ef10_rx_qcreate( esmp, disable_scatter, want_inner_classes, erp->er_buf_size, ps_buf_size, es_bufs_per_desc, es_max_dma_len, es_buf_stride, hol_block_timeout)) != 0) - goto fail12; + goto fail11; erp->er_eep = eep; erp->er_label = label; @@ -975,36 +970,34 @@ ef10_rx_qcreate( return (0); -fail12: - EFSYS_PROBE(fail12); -#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail11: EFSYS_PROBE(fail11); +#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail10: EFSYS_PROBE(fail10); fail9: EFSYS_PROBE(fail9); -#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ -#if EFSYS_OPT_RX_PACKED_STREAM fail8: EFSYS_PROBE(fail8); +#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ +#if EFSYS_OPT_RX_PACKED_STREAM fail7: EFSYS_PROBE(fail7); -#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail6: EFSYS_PROBE(fail6); -#if EFSYS_OPT_RX_ES_SUPER_BUFFER +#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail5: EFSYS_PROBE(fail5); -#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ -#if EFSYS_OPT_RX_PACKED_STREAM +#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail4: EFSYS_PROBE(fail4); +#endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ +#if EFSYS_OPT_RX_PACKED_STREAM fail3: EFSYS_PROBE(fail3); -#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail2: EFSYS_PROBE(fail2); +#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail1: EFSYS_PROBE1(fail1, efx_rc_t, rc); diff --git a/drivers/common/sfc_efx/base/efx_rx.c b/drivers/common/sfc_efx/base/efx_rx.c index d208c2292e..bacab5ec67 100644 --- a/drivers/common/sfc_efx/base/efx_rx.c +++ b/drivers/common/sfc_efx/base/efx_rx.c @@ -824,11 +824,16 @@ efx_rx_qcreate_internal( EFSYS_ASSERT(ISP2(encp->enc_rxq_max_ndescs)); EFSYS_ASSERT(ISP2(encp->enc_rxq_min_ndescs)); + if (index >= encp->enc_rxq_limit) { + rc = EINVAL; + goto fail1; + } + if (!ISP2(ndescs) || ndescs < encp->enc_rxq_min_ndescs || ndescs > encp->enc_rxq_max_ndescs) { rc = EINVAL; - goto fail1; + goto fail2; } /* Allocate an RXQ object */ @@ -836,7 +841,7 @@ efx_rx_qcreate_internal( if (erp == NULL) { rc = ENOMEM; - goto fail2; + goto fail3; } erp->er_magic = EFX_RXQ_MAGIC; @@ -847,17 +852,19 @@ efx_rx_qcreate_internal( if ((rc = erxop->erxo_qcreate(enp, index, label, type, type_data, esmp, ndescs, id, flags, eep, erp)) != 0) - goto fail3; + goto fail4; enp->en_rx_qcount++; *erpp = erp; return (0); -fail3: - EFSYS_PROBE(fail3); +fail4: + EFSYS_PROBE(fail4); EFSYS_KMEM_FREE(enp->en_esip, sizeof (efx_rxq_t), erp); +fail3: + EFSYS_PROBE(fail3); fail2: EFSYS_PROBE(fail2); fail1: @@ -1635,10 +1642,6 @@ siena_rx_qcreate( (1 << FRF_AZ_RX_DESCQ_LABEL_WIDTH)); EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS); - if (index >= encp->enc_rxq_limit) { - rc = EINVAL; - goto fail1; - } for (size = 0; (1U << size) <= encp->enc_rxq_max_ndescs / encp->enc_rxq_min_ndescs; size++) @@ -1646,7 +1649,7 @@ siena_rx_qcreate( break; if (id + (1 << size) >= encp->enc_buftbl_limit) { rc = EINVAL; - goto fail2; + goto fail1; } switch (type) { @@ -1656,7 +1659,7 @@ siena_rx_qcreate( default: rc = EINVAL; - goto fail3; + goto fail2; } if (flags & EFX_RXQ_FLAG_SCATTER) { @@ -1664,7 +1667,7 @@ siena_rx_qcreate( jumbo = B_TRUE; #else rc = EINVAL; - goto fail4; + goto fail3; #endif /* EFSYS_OPT_RX_SCATTER */ } @@ -1684,11 +1687,9 @@ siena_rx_qcreate( return (0); #if !EFSYS_OPT_RX_SCATTER -fail4: - EFSYS_PROBE(fail4); -#endif fail3: EFSYS_PROBE(fail3); +#endif fail2: EFSYS_PROBE(fail2); fail1: -- 2.20.1