All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alan Stern <stern@rowland.harvard.edu>
To: Felipe Balbi <balbi@ti.com>
Cc: Linux USB Mailing List <linux-usb@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@suse.de>,
	Thomas Dahlmann <dahlmann.thomas@arcor.de>,
	Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
	"open list:DESIGNWARE USB3 D..." <linux-omap@vger.kernel.org>,
	open list <linux-kernel@vger.kernel.org>,
	"open list:AMD GEODE CS5536..." <linux-geode@lists.infradead.org>
Subject: Re: [PATCH 1/9] usb: gadget: add generic map/unmap request utilities
Date: Mon, 19 Dec 2011 11:27:21 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1112191116320.1746-100000@iolanthe.rowland.org> (raw)
In-Reply-To: <20111219154931.GA30355@legolas.emea.dhcp.ti.com>

On Mon, 19 Dec 2011, Felipe Balbi wrote:

> > > +		if (dma_mapping_error(&gadget->dev, req->dma)) {
> > > +			dev_err(&gadget->dev, "failed to map buffer\n");
> > > +			return -EFAULT;
> > > +		}
> > > +	}
> > > +
> > > +	return 0;
> > 
> > You forgot to set req->mapped.
> 
> actually there's no 'mapped' field on struct usb_request. That's a

Whoops, you're right.  It's part of the UDC-private structure.

> nonsense added to all struct my_controller_request just because of that
> DMA_ADDR_INVALID hackery. I'm dropping that completely. There were no
> gadget drivers allocating memory from coherent or mapping requests
> themselves, so req->mapped becomes useless.

There's more to it than that.  A controller might support DMA on some
endpoints but not others, or for certain request lengths but not
others.  Hence when a request finishes, the driver needs to know
whether the request was mapped for DMA.

For example, your net2280 patch needs to be fixed.  Here's how it looks
now:

> --- a/drivers/usb/gadget/net2280.c
> +++ b/drivers/usb/gadget/net2280.c
> @@ -806,12 +806,8 @@ done (struct net2280_ep *ep, struct net2280_request *req, int status)
>  		status = req->req.status;
>  
>  	dev = ep->dev;
> -	if (req->mapped) {
> -		pci_unmap_single (dev->pdev, req->req.dma, req->req.length,
> -			ep->is_in ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
> -		req->req.dma = DMA_ADDR_INVALID;
> -		req->mapped = 0;
> -	}
> +	if (req->mapped)
> +		usb_gadget_unmap_request(&dev->gadget, &req->req, ep->is_in);

This code will never be executed because you never set req->mapped.  
And after that's fixed, when the unmapping occurs, req->mapped has to
be set back to 0.

> @@ -857,10 +853,13 @@ net2280_queue (struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
>  		return -EOPNOTSUPP;
>  
>  	/* set up dma mapping in case the caller didn't */
> -	if (ep->dma && _req->dma == DMA_ADDR_INVALID) {
> -		_req->dma = pci_map_single (dev->pdev, _req->buf, _req->length,
> -			ep->is_in ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE);
> -		req->mapped = 1;
> +	if (ep->dma) {
> +		int ret;
> +
> +		ret = usb_gadget_map_request(&dev->gadget, &req->req,
> +				ep->is_in);
> +		if (ret)
> +			return ret;

You probably need to set req->mapped right here.  Or rather, avoid 
removing the line that sets it.

>  	}

Alan Stern


  reply	other threads:[~2011-12-19 16:27 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-12-19 10:30 [PATCH 0/9] Add a generic request map/unmap routine Felipe Balbi
2011-12-19 10:30 ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 1/9] usb: gadget: add generic map/unmap request utilities Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 15:19   ` Alan Stern
2011-12-19 15:49     ` Felipe Balbi
2011-12-19 15:49       ` Felipe Balbi
2011-12-19 16:27       ` Alan Stern [this message]
2011-12-19 10:30 ` [PATCH 2/9] usb: dwc3: gadget: use generic map/unmap routines Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 3/9] usb: gadget: langwell: use generic map/unmap functions Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 4/9] usb: renesas: gadget: use generic map/unmap routines Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-20  1:46   ` Kuninori Morimoto
2011-12-20  1:46     ` Kuninori Morimoto
2011-12-20 10:51     ` Felipe Balbi
2011-12-20  2:29   ` Kuninori Morimoto
2011-12-20  2:29     ` Kuninori Morimoto
2011-12-19 10:30 ` [PATCH 5/9] usb: gadget: amd5536: " Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 6/9] usb: gadget: r8a66597: " Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 7/9] usb: gadget: net2272: use generic map/umap routines Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 8/9] usb: gadget: net2280: use generic map/unmap routines Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 15:21   ` Alan Stern
2011-12-19 15:49     ` Felipe Balbi
2011-12-19 10:30 ` [PATCH 9/9] usb: gadget: goku: " Felipe Balbi
2011-12-19 10:30   ` Felipe Balbi
2011-12-19 13:02   ` Sergei Shtylyov
2011-12-19 13:02     ` Sergei Shtylyov
2011-12-19 13:05     ` Sergei Shtylyov
2011-12-19 13:05       ` Sergei Shtylyov
2011-12-19 13:09     ` Felipe Balbi
2011-12-19 13:09       ` Felipe Balbi
2011-12-19 13:10       ` Sergei Shtylyov
2011-12-19 13:10         ` Sergei Shtylyov
2012-01-24 11:45 [PATCH 0/9] usb: gadget: " Felipe Balbi
2012-01-24 11:45 ` [PATCH 1/9] usb: gadget: add generic map/unmap request utilities Felipe Balbi
2012-01-24 11:45   ` Felipe Balbi

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=Pine.LNX.4.44L0.1112191116320.1746-100000@iolanthe.rowland.org \
    --to=stern@rowland.harvard.edu \
    --cc=balbi@ti.com \
    --cc=dahlmann.thomas@arcor.de \
    --cc=gregkh@suse.de \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=linux-geode@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.