[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