Message ID | 1516953322-26378-1-git-send-email-tdu@semihalf.com (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Ferruh Yigit |
Headers | show |
Context | Check | Description |
---|---|---|
ci/checkpatch | success | coding style OK |
On 1/26/2018 7:55 AM, Tomasz Duszynski wrote: > From: Natalie Samsonov <nsamsono@marvell.com> > > Since in DPDK 17.11 port type was changed from uint8_t to uint16_t > the MBUF_INVALID_PORT value became 0xffff but in mrvl_tx_pkt_burst() > when trying to lookup bpool using mbuf port, we check if the port > is invalid according to value 0xff. This causes segmentation fault. > > Solution: since the valid port value cannot exceed RTE_MAX_ETHPORTS > (size of bpool lookup table) any other values consider as invalid so > the packet should be returned to DPDK pool. > > Fixes: afb4d0d0bf91 ("net/mrvl: add Rx/Tx support") > Cc: stable@dpdk.org > > Signed-off-by: Natalie Samsonov <nsamsono@marvell.com> Applied to dpdk-next-net/master, thanks.
diff --git a/drivers/net/mrvl/mrvl_ethdev.c b/drivers/net/mrvl/mrvl_ethdev.c index 3b60f91..705c4bd 100644 --- a/drivers/net/mrvl/mrvl_ethdev.c +++ b/drivers/net/mrvl/mrvl_ethdev.c @@ -2096,8 +2096,9 @@ mrvl_tx_pkt_burst(void *txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) sq->ent[sq->head].buff.addr = rte_mbuf_data_iova_default(mbuf); sq->ent[sq->head].bpool = - (unlikely(mbuf->port == 0xff || mbuf->refcnt > 1)) ? - NULL : mrvl_port_to_bpool_lookup[mbuf->port]; + (unlikely(mbuf->port >= RTE_MAX_ETHPORTS || + mbuf->refcnt > 1)) ? NULL : + mrvl_port_to_bpool_lookup[mbuf->port]; sq->head = (sq->head + 1) & MRVL_PP2_TX_SHADOWQ_MASK; sq->size++; @@ -2430,6 +2431,7 @@ rte_pmd_mrvl_probe(struct rte_vdev_device *vdev) } memset(mrvl_port_bpool_size, 0, sizeof(mrvl_port_bpool_size)); + memset(mrvl_port_to_bpool_lookup, 0, sizeof(mrvl_port_to_bpool_lookup)); mrvl_lcore_first = RTE_MAX_LCORE; mrvl_lcore_last = 0;