mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Barebox List <barebox@lists.infradead.org>
Cc: "Edmund Henniges" <eh@emlix.com>, "Daniel Glöckner" <dg@emlix.com>
Subject: [PATCH 10/20] usbnet: Be more friendly in the receive path
Date: Thu, 13 Aug 2020 15:42:47 +0200	[thread overview]
Message-ID: <20200813134257.24627-11-s.hauer@pengutronix.de> (raw)
In-Reply-To: <20200813134257.24627-1-s.hauer@pengutronix.de>

To recognize if we have a receive packet pending we must set up a USB
bulk transfer. When there's no incoming packet we must wait until the
transfer times out. We do this with every poller call which can
considerably slow down the system. With this patch we do two things
against this:

- lower the timeout for the bulk transfer
- When we haven't received a packet for longer then lower the frequency
  of calling into the USB stack to once every 100ms

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 drivers/net/usb/usbnet.c | 19 ++++++++++++++++++-
 include/usb/usbnet.h     |  3 +++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index 46ea73247f..aa48678f87 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -122,12 +122,29 @@ static int usbnet_recv(struct eth_device *edev)
 
 	dev_dbg(&edev->dev, "%s\n",__func__);
 
+	/*
+	 * we must let the usb_bulk_msg below timeout before we realize
+	 * that we have no packet received. Since this function runs
+	 * inside a poller we considerably slow down barebox when we
+	 * wait for the timeout too often. To improve this we only poll
+	 * with full speed when we actually have received a packet in the
+	 * last 100ms.
+	 */
+	if (is_timeout(dev->last_pkt_received, 100 * MSECOND) &&
+	    !is_timeout(dev->last_recv_call, 100 * MSECOND)) {
+		return 0;
+	}
+
+	dev->last_recv_call = get_time_ns();
+
 	len = dev->rx_urb_size;
 
-	ret = usb_bulk_msg(dev->udev, dev->in, dev->rx_buf, len, &alen, 100);
+	ret = usb_bulk_msg(dev->udev, dev->in, dev->rx_buf, len, &alen, 2);
 	if (ret)
 		return ret;
 
+	dev->last_pkt_received = get_time_ns();
+
 	if (alen) {
 		if (info->rx_fixup)
 			return info->rx_fixup(dev, dev->rx_buf, alen);
diff --git a/include/usb/usbnet.h b/include/usb/usbnet.h
index 450db47b40..7ff32f280a 100644
--- a/include/usb/usbnet.h
+++ b/include/usb/usbnet.h
@@ -54,6 +54,9 @@ struct usbnet {
 #		define EVENT_RX_MEMORY	2
 #		define EVENT_STS_SPLIT	3
 #		define EVENT_LINK_RESET	4
+
+	uint64_t last_pkt_received;
+	uint64_t last_recv_call;
 };
 
 #if 0
-- 
2.28.0


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  parent reply	other threads:[~2020-08-13 13:43 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-13 13:42 [PATCH v6 00/20] Slices and fastboot over UDP Sascha Hauer
2020-08-13 13:42 ` [PATCH 01/20] Introduce slices Sascha Hauer
2020-08-13 13:42 ` [PATCH 02/20] Add workqueues Sascha Hauer
2020-08-13 13:42 ` [PATCH 03/20] ratp: Switch to workqueues Sascha Hauer
2020-08-13 13:42 ` [PATCH 04/20] net: Add a slice to struct eth_device Sascha Hauer
2020-08-13 13:42 ` [PATCH 05/20] net: mdiobus: Add slice Sascha Hauer
2020-08-13 13:42 ` [PATCH 06/20] usb: Add a slice to usb host controllers Sascha Hauer
2020-08-13 13:42 ` [PATCH 07/20] usbnet: Add slice Sascha Hauer
2020-08-13 13:42 ` [PATCH 08/20] net: Call net_poll() in a poller Sascha Hauer
2020-08-13 13:42 ` [PATCH 09/20] net: reply to ping requests Sascha Hauer
2020-08-13 13:42 ` Sascha Hauer [this message]
2020-08-13 13:42 ` [PATCH 11/20] globalvar: Add helper for deprecated variable names Sascha Hauer
2020-08-13 13:42 ` [PATCH 12/20] fastboot: rename usbgadget.fastboot_* variables to fastboot.* Sascha Hauer
2020-08-13 13:42 ` [PATCH 13/20] fastboot: Warn when cb_download is called with file still open Sascha Hauer
2020-08-13 13:42 ` [PATCH 14/20] fastboot: Add fastboot_abort() Sascha Hauer
2020-08-13 13:42 ` [PATCH 15/20] fastboot: init list head in common Sascha Hauer
2020-08-13 13:42 ` [PATCH 16/20] fastboot net: implement fastboot over UDP Sascha Hauer
2020-08-13 13:42 ` [PATCH 17/20] usb: fastboot: execute commands in command context Sascha Hauer
2020-08-13 13:42 ` [PATCH 18/20] Add WARN_ONCE() macro Sascha Hauer
2020-08-13 13:42 ` [PATCH 19/20] fs: Warn when filesystem operations are called from a poller Sascha Hauer
2020-08-13 13:42 ` [PATCH 20/20] Documentation: Add document about background execution in barebox Sascha Hauer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200813134257.24627-11-s.hauer@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=dg@emlix.com \
    --cc=eh@emlix.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox