linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Fredrik Noring <noring@nocrew.org>
To: Guenter Roeck <linux@roeck-us.net>
Cc: laurentiu.tudor@nxp.com, hch@lst.de, stern@rowland.harvard.edu,
	gregkh@linuxfoundation.org, linux-usb@vger.kernel.org,
	marex@denx.de, leoyang.li@nxp.com, linux-kernel@vger.kernel.org,
	robin.murphy@arm.com, JuergenUrban@gmx.de
Subject: Re: [PATCH v7 3/5] usb: host: ohci-sm501: init genalloc for local memory
Date: Thu, 13 Jun 2019 17:34:14 +0200	[thread overview]
Message-ID: <20190613153414.GA909@sx9> (raw)
In-Reply-To: <bdfd2178-9e3c-dc15-6aa1-ec1f1fbcb191@roeck-us.net>

Hi Guenter,

> Thanks for the confirmation. Do you see the problem only with the
> ohci-sm501 driver or also with others ?

All are likely affected, but it depends, because I believe the problem is
that the USB subsystem runs out of memory. Please try the attached patch!

The pool assumed 4096 byte page alignment for every allocation, which is
excessive given that many requests are for 16 and 32 bytes. In the patch
below, I have turned down the order to 5, which is good enough for the ED
and TD structures of the OHCI, but not enough for the HCCA that needs 256
byte alignment. With some luck, the WARN_ON_ONCE will not trigger in your
test, though. If it does, you may try to increase the order from 5 to 8.

I have observed strange things happen when the USB subsystem runs out of
memory. The mass storage drivers often seem to busy-wait on -ENOMEM,
consuming a lot of processor resources. It would be much more efficient
to sleep waiting for memory to become available.

In your case I suspect that allocation failures are not correctly
attributed. Certain kinds of temporary freezes may also occur, as the
various devices are reset due to host memory allocation errors.

Fredrik

diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -3011,7 +3011,7 @@ int usb_hcd_setup_local_mem(struct usb_hcd *hcd, phys_addr_t phys_addr,
 	int err;
 	void __iomem *local_mem;
 
-	hcd->localmem_pool = devm_gen_pool_create(hcd->self.sysdev, PAGE_SHIFT,
+	hcd->localmem_pool = devm_gen_pool_create(hcd->self.sysdev, 5,
 						  dev_to_node(hcd->self.sysdev),
 						  dev_name(hcd->self.sysdev));
 	if (IS_ERR(hcd->localmem_pool))
diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c
--- a/drivers/usb/host/ohci-hcd.c
+++ b/drivers/usb/host/ohci-hcd.c
@@ -517,6 +517,7 @@ static int ohci_init (struct ohci_hcd *ohci)
 						GFP_KERNEL);
 	if (!ohci->hcca)
 		return -ENOMEM;
+	WARN_ON_ONCE(ohci->hcca_dma & 0xff);
 
 	if ((ret = ohci_mem_init (ohci)) < 0)
 		ohci_stop (hcd);

  reply	other threads:[~2019-06-13 15:34 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-29 10:28 [PATCH v7 0/5] prerequisites for device reserved local mem rework laurentiu.tudor
2019-05-29 10:28 ` [PATCH v7 1/5] lib/genalloc.c: Add gen_pool_dma_zalloc() for zeroed DMA allocations laurentiu.tudor
2019-05-29 10:28 ` [PATCH v7 2/5] USB: use genalloc for USB HCs with local memory laurentiu.tudor
2019-05-29 10:38   ` Greg KH
2019-05-29 11:15     ` Laurentiu Tudor
2019-05-29 11:23       ` Greg KH
2019-05-29 11:25         ` hch
2019-05-29 11:32           ` Greg KH
2019-05-29 10:28 ` [PATCH v7 3/5] usb: host: ohci-sm501: init genalloc for " laurentiu.tudor
2019-06-05 21:46   ` Guenter Roeck
2019-06-11 13:32     ` Guenter Roeck
2019-06-11 17:26       ` Fredrik Noring
2019-06-11 19:03         ` Guenter Roeck
2019-06-13 13:40           ` Fredrik Noring
2019-06-13 13:54             ` Guenter Roeck
2019-06-13 15:34               ` Fredrik Noring [this message]
2019-06-13 18:05                 ` Guenter Roeck
2019-06-14 14:28                   ` Fredrik Noring
2019-06-24  6:35                     ` Christoph Hellwig
2019-06-24 12:59                       ` Fredrik Noring
2019-06-25  6:00                         ` Christoph Hellwig
2019-06-25 15:05                           ` [PATCH 1/2] lib/genalloc.c: Add algorithm, align and zeroed family of DMA allocators Fredrik Noring
2019-06-25 15:08                             ` [PATCH 2/2] usb: host: Fix excessive alignment restriction for local memory allocations Fredrik Noring
2019-06-25 20:54                               ` Guenter Roeck
2019-06-25 20:54                             ` [PATCH 1/2] lib/genalloc.c: Add algorithm, align and zeroed family of DMA allocators Guenter Roeck
2019-06-28  5:57                             ` Christoph Hellwig
2019-06-18 10:48                   ` [PATCH v7 3/5] usb: host: ohci-sm501: init genalloc for local memory Laurentiu Tudor
2019-05-29 10:28 ` [PATCH v7 4/5] usb: host: ohci-tmio: " laurentiu.tudor
2019-05-29 10:28 ` [PATCH v7 5/5] USB: drop HCD_LOCAL_MEM flag laurentiu.tudor
2019-05-29 11:34 ` [PATCH v7 0/5] prerequisites for device reserved local mem rework Greg KH
2019-05-29 11:37   ` Christoph Hellwig
2019-05-29 14:06     ` Laurentiu Tudor
2019-05-31 16:43       ` Christoph Hellwig
2019-05-31 17:06         ` Laurentiu Tudor
2019-06-04 14:16         ` Laurentiu Tudor

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=20190613153414.GA909@sx9 \
    --to=noring@nocrew.org \
    --cc=JuergenUrban@gmx.de \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=laurentiu.tudor@nxp.com \
    --cc=leoyang.li@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=marex@denx.de \
    --cc=robin.murphy@arm.com \
    --cc=stern@rowland.harvard.edu \
    /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;
as well as URLs for NNTP newsgroup(s).