[U-Boot] [PATCH v1] net: mvneta - Fixed recv() when multiple packets have arrived.

Stefan Roese sr at denx.de
Wed Nov 29 10:30:11 UTC 2017


On 28.11.2017 20:12, Jason Brown wrote:
> This patch fixes a problem in the mvneta driver where if more than
> one packet arrives between calls to mvneta_recv(), the additional
> descriptors will be marked as free even though only one descriptor
> has been read and processed from the receive queue.  This causes
> the additional packet(s) to be delayed until the next packet arrives.
>  From this point on all packets will be delayed because the receive
> queue will contain unprocessed packets but the hardware shows no
> busy descriptors.
> 
> Signed-off-by: Jason Brown <jason.brown at apcon.com>
> ---
> 
>   drivers/net/mvneta.c | 6 +++++-
>   1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/mvneta.c b/drivers/net/mvneta.c
> index f1be952..83e3153 100644
> --- a/drivers/net/mvneta.c
> +++ b/drivers/net/mvneta.c
> @@ -1654,7 +1654,11 @@ static int mvneta_recv(struct udevice *dev, int flags, uchar **packetp)
>   		 */
>   		*packetp = data;
>   
> -		mvneta_rxq_desc_num_update(pp, rxq, rx_done, rx_done);
> +		/*
> +		 * Only mark one descriptor as free
> +		 * since only one was processed
> +		 */
> +		mvneta_rxq_desc_num_update(pp, rxq, 1, 1);
>   	}
>   
>   	return rx_bytes;
> 

Thanks for catching and fixing this issue.

Reviewed-by: Stefan Roese <sr at denx.de>

Thanks,
Stefan


More information about the U-Boot mailing list