Re: [PATCH v3 3/3] usb: core: hcd: use map_urb_for_dma for single step set feature urb

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, May 07, 2021 at 09:52:40AM -0700, Jack Pham wrote:
> On Fri, May 07, 2021 at 11:42:29AM -0400, Alan Stern wrote:
> > On Fri, May 07, 2021 at 02:58:02PM +0800, Li Jun wrote:
> > > Use map_urb_for_dma() to improve the dma map code for single step
> > > set feature request urb in test mode.
> > > 
> > > Signed-off-by: Li Jun <jun.li@xxxxxxx>
> > > ---
> > > Change for v3:
> > > - Correct the error handling if map_urb_for_dma() fails.
> > > 
> > > change for v2:
> > > - Add this new patch to use map_urb_for_dma API to
> > >   replace both of dma_map_single() calls, suggested by
> > >   Jack Pham.
> > > 
> > >  drivers/usb/core/hcd.c | 15 +++++----------
> > >  1 file changed, 5 insertions(+), 10 deletions(-)
> > > 
> > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
> > > index d7eb9f179ca6..fa72697f4829 100644
> > > --- a/drivers/usb/core/hcd.c
> > > +++ b/drivers/usb/core/hcd.c
> > > @@ -2159,16 +2159,11 @@ static struct urb *request_single_step_set_feature_urb(
> > >  	usb_get_urb(urb);
> > >  	atomic_inc(&urb->use_count);
> > >  	atomic_inc(&urb->dev->urbnum);
> > > -	urb->setup_dma = dma_map_single(
> > > -			hcd->self.sysdev,
> > > -			urb->setup_packet,
> > > -			sizeof(struct usb_ctrlrequest),
> > > -			DMA_TO_DEVICE);
> > > -	urb->transfer_dma = dma_map_single(
> > > -			hcd->self.sysdev,
> > > -			urb->transfer_buffer,
> > > -			urb->transfer_buffer_length,
> > > -			DMA_FROM_DEVICE);
> > > +	if (map_urb_for_dma(hcd, urb, GFP_KERNEL)) {
> > > +		usb_put_urb(urb);
> > 
> > You need to call usb_free_urb() here.
> 
> Hi Alan,
> 
> Aren't usb_put_urb() and usb_free_urb() identical? The former appears
> to just be a macro subsitution of the latter.

Yes, they are identical, although that's more or less an historical 
accident.  usb_free_urb was written before the refcount API came along.

The usb_put_urb() call here undoes the usb_get_urb() call at the top of 
the patch.  You still need one more call to decrease the refcount to 0.

Alan Stern



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux