X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_ef10_rx.c;h=2b4393d232696f02a464ea1b2549de86ac08708e;hb=31d7c6f7d424c533b0a4dd9b4408b814ac7852f1;hp=62d0b6206b41615bdd5e05bd87bc0a1a8d63de6b;hpb=e7fbf6f5db6eead3ea9b980174e4332509175aef;p=dpdk.git diff --git a/drivers/net/sfc/sfc_ef10_rx.c b/drivers/net/sfc/sfc_ef10_rx.c index 62d0b6206b..2b4393d232 100644 --- a/drivers/net/sfc/sfc_ef10_rx.c +++ b/drivers/net/sfc/sfc_ef10_rx.c @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: BSD-3-Clause * - * Copyright(c) 2019-2020 Xilinx, Inc. + * Copyright(c) 2019-2021 Xilinx, Inc. * Copyright(c) 2016-2019 Solarflare Communications Inc. * * This software was jointly developed between OKTET Labs (under contract @@ -148,7 +148,7 @@ sfc_ef10_rx_qrefill(struct sfc_ef10_rxq *rxq) struct sfc_ef10_rx_sw_desc *rxd; rte_iova_t phys_addr; - MBUF_RAW_ALLOC_CHECK(m); + __rte_mbuf_raw_sanity_check(m); SFC_ASSERT((id & ~ptr_mask) == 0); rxd = &rxq->sw_ring[id]; @@ -223,6 +223,18 @@ sfc_ef10_rx_pending(struct sfc_ef10_rxq *rxq, struct rte_mbuf **rx_pkts, return rx_pkts; } +/* + * Below Rx pseudo-header (aka Rx prefix) accessors rely on the + * following fields layout. + */ +static const efx_rx_prefix_layout_t sfc_ef10_rx_prefix_layout = { + .erpl_fields = { + [EFX_RX_PREFIX_FIELD_RSS_HASH] = + { 0, sizeof(uint32_t) * CHAR_BIT, B_FALSE }, + [EFX_RX_PREFIX_FIELD_LENGTH] = + { 8 * CHAR_BIT, sizeof(uint16_t) * CHAR_BIT, B_FALSE }, + } +}; static uint16_t sfc_ef10_rx_pseudo_hdr_get_len(const uint8_t *pseudo_hdr) { @@ -285,7 +297,7 @@ sfc_ef10_rx_process_event(struct sfc_ef10_rxq *rxq, efx_qword_t rx_ev, rxd = &rxq->sw_ring[pending++ & ptr_mask]; m = rxd->mbuf; - MBUF_RAW_ALLOC_CHECK(m); + __rte_mbuf_raw_sanity_check(m); m->data_off = RTE_PKTMBUF_HEADROOM; rte_pktmbuf_data_len(m) = seg_len; @@ -700,7 +712,8 @@ sfc_ef10_rx_qdestroy(struct sfc_dp_rxq *dp_rxq) static sfc_dp_rx_qstart_t sfc_ef10_rx_qstart; static int -sfc_ef10_rx_qstart(struct sfc_dp_rxq *dp_rxq, unsigned int evq_read_ptr) +sfc_ef10_rx_qstart(struct sfc_dp_rxq *dp_rxq, unsigned int evq_read_ptr, + const efx_rx_prefix_layout_t *pinfo) { struct sfc_ef10_rxq *rxq = sfc_ef10_rxq_by_dp_rxq(dp_rxq); @@ -708,6 +721,10 @@ sfc_ef10_rx_qstart(struct sfc_dp_rxq *dp_rxq, unsigned int evq_read_ptr) SFC_ASSERT(rxq->pending == 0); SFC_ASSERT(rxq->added == 0); + if (pinfo->erpl_length != rxq->prefix_size || + efx_rx_prefix_layout_check(pinfo, &sfc_ef10_rx_prefix_layout) != 0) + return ENOTSUP; + sfc_ef10_rx_qrefill(rxq); rxq->evq_read_ptr = evq_read_ptr;