On 2/2/2023 9:21 AM, Jiawen Wu wrote:
> When buffer size is less than 1K, round down makes it 0, which is an
> error value.
> 
> Fixes: 62fc35e63d0e ("net/ngbe: support Rx queue start/stop")
> Cc: sta...@dpdk.org
> 
> Signed-off-by: Jiawen Wu <jiawe...@trustnetic.com>
> ---
>  drivers/net/ngbe/ngbe_rxtx.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ngbe/ngbe_rxtx.c b/drivers/net/ngbe/ngbe_rxtx.c
> index 9fd24fa444..9a646cb6a7 100644
> --- a/drivers/net/ngbe/ngbe_rxtx.c
> +++ b/drivers/net/ngbe/ngbe_rxtx.c
> @@ -2944,7 +2944,10 @@ ngbe_dev_rx_init(struct rte_eth_dev *dev)
>                */
>               buf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mb_pool) -
>                       RTE_PKTMBUF_HEADROOM);
> -             buf_size = ROUND_DOWN(buf_size, 0x1 << 10);
> +             if (buf_size < 1024)
> +                     buf_size = ROUND_UP(buf_size, 0x1 << 10);

Back to original problem statement in previous version, can't this cause
HW to receive packets exceeding the buffer size?

If HW accepts buffer size in multiple of 1K, does this mean any buffer
size less than 1K is an error condition for this HW?

> +             else
> +                     buf_size = ROUND_DOWN(buf_size, 0x1 << 10);
>               srrctl |= NGBE_RXCFG_PKTLEN(buf_size);
>  
>               wr32(hw, NGBE_RXCFG(rxq->reg_idx), srrctl);

Reply via email to