From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.164]) by dpdk.org (Postfix) with ESMTP id 36A7A1B58C for ; Thu, 7 Feb 2019 17:30:39 +0100 (CET) X-Virus-Scanned: Proofpoint Essentials engine Received: from webmail.solarflare.com (webmail.solarflare.com [12.187.104.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mx1-us3.ppe-hosted.com (Proofpoint Essentials ESMTP Server) with ESMTPS id D0EC6B8006C for ; Thu, 7 Feb 2019 16:30:37 +0000 (UTC) Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4; Thu, 7 Feb 2019 08:30:32 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1395.4 via Frontend Transport; Thu, 7 Feb 2019 08:30:31 -0800 Received: from ukv-loginhost.uk.solarflarecom.com (ukv-loginhost.uk.solarflarecom.com [10.17.10.39]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id x17GUUdd015380 for ; Thu, 7 Feb 2019 16:30:30 GMT Received: from ukv-loginhost.uk.solarflarecom.com (localhost [127.0.0.1]) by ukv-loginhost.uk.solarflarecom.com (Postfix) with ESMTP id AEA221613E4 for ; Thu, 7 Feb 2019 16:30:30 +0000 (GMT) From: Andrew Rybchenko To: Date: Thu, 7 Feb 2019 16:29:37 +0000 Message-ID: <1549556983-10896-33-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1549556983-10896-1-git-send-email-arybchenko@solarflare.com> References: <1549556983-10896-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-TM-AS-Product-Ver: SMEX-12.5.0.1300-8.5.1010-24412.006 X-TM-AS-Result: No-1.300700-4.000000-10 X-TMASE-MatchedRID: GhdZ4a7VZuM2jeY+Udg/IgwfhKwa9GwDN/BTU5ZfZRKNTnqOMBIJ4dGX gQphHQmx09NQNrxIpFYBtjkcfRMmqZvrNI7WoC7k0Xw0ILvo/uUpWss5kPUFdPHFoBcOsKezHYF /YOVwBjSJEOK6xautYQuZPTveySLjAxYKB0LOn5ruykw7cfAoIDatsM27MbfLu3Ry99yHPvKalh hVUOxDMDjvSRfAt/XIrsKGPVE8DfVn/2sJnwgGLlZ4U3MrW+XSZ+8pliwlpwfHeIFnKQ51HDzpr L002Ijx4vM1YF6AJbbCCfuIMF6xLSrJhLSjJRVmMizVTpnerxda36kv2FZAZm78+YfCvxsb+iMv GZk8JhrzvNvrIgC/x0x2RAhGls3Zfxw3+OgkLLfQhhn8gauIUk1iUOHJIRXjqha7fcVIKfrqvk9 CHHb0NQbT7eVkE2ZC2rhEGiFuOiuGIp1rjCG/op6oP1a0mRIj X-TM-AS-User-Approved-Sender: No X-TM-AS-User-Blocked-Sender: No X-TMASE-Result: 10-1.300700-4.000000 X-TMASE-Version: SMEX-12.5.0.1300-8.5.1010-24412.006 X-MDID: 1549557038-unpgbohPVZEB Subject: [dpdk-dev] [PATCH 32/38] net/sfc/base: allow to specify Rx buffer size on queue setup X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Feb 2019 16:30:40 -0000 Rx buffer size must be specified on Rx queue creation on Riverhead. Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/base/ef10_rx.c | 46 +++++++++++++++++++-------------- drivers/net/sfc/base/efx.h | 1 + drivers/net/sfc/base/efx_impl.h | 6 +++-- drivers/net/sfc/base/efx_rx.c | 12 +++++++-- drivers/net/sfc/sfc_rx.c | 1 + 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/drivers/net/sfc/base/ef10_rx.c b/drivers/net/sfc/base/ef10_rx.c index 3b296e488..5cb7da99b 100644 --- a/drivers/net/sfc/base/ef10_rx.c +++ b/drivers/net/sfc/base/ef10_rx.c @@ -1018,7 +1018,7 @@ ef10_rx_qcreate( uint32_t es_buf_stride = 0; uint32_t hol_block_timeout = 0; - _NOTE(ARGUNUSED(id, erp, type_data)) + _NOTE(ARGUNUSED(id, erp)) EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS == (1 << ESF_DZ_RX_QLABEL_WIDTH)); EFSYS_ASSERT3U(label, <, EFX_EV_RX_NLABELS); @@ -1031,13 +1031,18 @@ ef10_rx_qcreate( switch (type) { case EFX_RXQ_TYPE_DEFAULT: + if (type_data == NULL) { + rc = EINVAL; + goto fail2; + } + erp->er_buf_size = type_data->ertd_default.ed_buf_size; ps_buf_size = 0; break; #if EFSYS_OPT_RX_PACKED_STREAM case EFX_RXQ_TYPE_PACKED_STREAM: if (type_data == NULL) { rc = EINVAL; - goto fail2; + goto fail3; } switch (type_data->ertd_packed_stream.eps_buf_size) { case EFX_RXQ_PACKED_STREAM_BUF_SIZE_1M: @@ -1057,15 +1062,16 @@ ef10_rx_qcreate( break; default: rc = ENOTSUP; - goto fail3; + goto fail4; } + erp->er_buf_size = type_data->ertd_packed_stream.eps_buf_size; break; #endif /* EFSYS_OPT_RX_PACKED_STREAM */ #if EFSYS_OPT_RX_ES_SUPER_BUFFER case EFX_RXQ_TYPE_ES_SUPER_BUFFER: if (type_data == NULL) { rc = EINVAL; - goto fail4; + goto fail5; } ps_buf_size = 0; es_bufs_per_desc = @@ -1080,7 +1086,7 @@ ef10_rx_qcreate( #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ default: rc = ENOTSUP; - goto fail5; + goto fail6; } #if EFSYS_OPT_RX_PACKED_STREAM @@ -1088,13 +1094,13 @@ ef10_rx_qcreate( /* Check if datapath firmware supports packed stream mode */ if (encp->enc_rx_packed_stream_supported == B_FALSE) { rc = ENOTSUP; - goto fail6; + goto fail7; } /* 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 fail7; + goto fail8; } } #else /* EFSYS_OPT_RX_PACKED_STREAM */ @@ -1105,17 +1111,17 @@ ef10_rx_qcreate( if (es_bufs_per_desc > 0) { if (encp->enc_rx_es_super_buffer_supported == B_FALSE) { rc = ENOTSUP; - goto fail8; + goto fail9; } if (!IS_P2ALIGNED(es_max_dma_len, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail9; + goto fail10; } if (!IS_P2ALIGNED(es_buf_stride, EFX_RX_ES_SUPER_BUFFER_BUF_ALIGNMENT)) { rc = EINVAL; - goto fail10; + goto fail11; } } #else /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ @@ -1137,7 +1143,7 @@ ef10_rx_qcreate( esmp, disable_scatter, want_inner_classes, ps_buf_size, es_bufs_per_desc, es_max_dma_len, es_buf_stride, hol_block_timeout)) != 0) - goto fail11; + goto fail12; erp->er_eep = eep; erp->er_label = label; @@ -1148,34 +1154,36 @@ 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); -fail8: - EFSYS_PROBE(fail8); #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ #if EFSYS_OPT_RX_PACKED_STREAM +fail8: + EFSYS_PROBE(fail8); fail7: EFSYS_PROBE(fail7); +#endif /* EFSYS_OPT_RX_PACKED_STREAM */ fail6: EFSYS_PROBE(fail6); -#endif /* EFSYS_OPT_RX_PACKED_STREAM */ +#if EFSYS_OPT_RX_ES_SUPER_BUFFER fail5: EFSYS_PROBE(fail5); -#if EFSYS_OPT_RX_ES_SUPER_BUFFER -fail4: - EFSYS_PROBE(fail4); #endif /* EFSYS_OPT_RX_ES_SUPER_BUFFER */ #if EFSYS_OPT_RX_PACKED_STREAM +fail4: + EFSYS_PROBE(fail4); 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/net/sfc/base/efx.h b/drivers/net/sfc/base/efx.h index 71c335279..35f896750 100644 --- a/drivers/net/sfc/base/efx.h +++ b/drivers/net/sfc/base/efx.h @@ -2527,6 +2527,7 @@ efx_rx_qcreate( __in unsigned int index, __in unsigned int label, __in efx_rxq_type_t type, + __in size_t buf_size, __in efsys_mem_t *esmp, __in size_t ndescs, __in uint32_t id, diff --git a/drivers/net/sfc/base/efx_impl.h b/drivers/net/sfc/base/efx_impl.h index e2cdba692..70e05232c 100644 --- a/drivers/net/sfc/base/efx_impl.h +++ b/drivers/net/sfc/base/efx_impl.h @@ -131,8 +131,9 @@ typedef struct efx_tx_ops_s { } efx_tx_ops_t; typedef union efx_rxq_type_data_u { - /* Dummy member to have non-empty union if no options are enabled */ - uint32_t ertd_dummy; + struct { + size_t ed_buf_size; + } ertd_default; #if EFSYS_OPT_RX_PACKED_STREAM struct { uint32_t eps_buf_size; @@ -792,6 +793,7 @@ struct efx_rxq_s { unsigned int er_index; unsigned int er_label; unsigned int er_mask; + size_t er_buf_size; efsys_mem_t *er_esmp; efx_evq_rxq_state_t *er_ev_qstate; }; diff --git a/drivers/net/sfc/base/efx_rx.c b/drivers/net/sfc/base/efx_rx.c index 8a12ef705..49c304c0b 100644 --- a/drivers/net/sfc/base/efx_rx.c +++ b/drivers/net/sfc/base/efx_rx.c @@ -693,6 +693,7 @@ efx_rx_qpost( const efx_rx_ops_t *erxop = enp->en_erxop; EFSYS_ASSERT3U(erp->er_magic, ==, EFX_RXQ_MAGIC); + EFSYS_ASSERT(erp->er_buf_size == 0 || size == erp->er_buf_size); erxop->erxo_qpost(erp, addrp, size, ndescs, completed, added); } @@ -869,6 +870,7 @@ efx_rx_qcreate( __in unsigned int index, __in unsigned int label, __in efx_rxq_type_t type, + __in size_t buf_size, __in efsys_mem_t *esmp, __in size_t ndescs, __in uint32_t id, @@ -876,7 +878,13 @@ efx_rx_qcreate( __in efx_evq_t *eep, __deref_out efx_rxq_t **erpp) { - return efx_rx_qcreate_internal(enp, index, label, type, NULL, + efx_rxq_type_data_t type_data; + + memset(&type_data, 0, sizeof (type_data)); + + type_data.ertd_default.ed_buf_size = buf_size; + + return efx_rx_qcreate_internal(enp, index, label, type, &type_data, esmp, ndescs, id, flags, eep, erpp); } @@ -1614,7 +1622,6 @@ siena_rx_qcreate( efx_rc_t rc; _NOTE(ARGUNUSED(esmp)) - _NOTE(ARGUNUSED(type_data)) EFX_STATIC_ASSERT(EFX_EV_RX_NLABELS == (1 << FRF_AZ_RX_DESCQ_LABEL_WIDTH)); @@ -1637,6 +1644,7 @@ siena_rx_qcreate( switch (type) { case EFX_RXQ_TYPE_DEFAULT: + erp->er_buf_size = type_data->ertd_default.ed_buf_size; break; default: diff --git a/drivers/net/sfc/sfc_rx.c b/drivers/net/sfc/sfc_rx.c index 20910d212..4b1d01e66 100644 --- a/drivers/net/sfc/sfc_rx.c +++ b/drivers/net/sfc/sfc_rx.c @@ -692,6 +692,7 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index) switch (rxq_info->type) { case EFX_RXQ_TYPE_DEFAULT: rc = efx_rx_qcreate(sa->nic, rxq->hw_index, 0, rxq_info->type, + rxq->buf_size, &rxq->mem, rxq_info->entries, 0 /* not used on EF10 */, rxq_info->type_flags, evq->common, &rxq->common); break; -- 2.17.1