On Sat, May 08, 2021 at 01:33:59PM +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> > --- Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Change for v4: > - Add missing usb_free_urb() to balance refcount to be 0. > > 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 | 16 ++++++---------- > 1 file changed, 6 insertions(+), 10 deletions(-) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index d7eb9f179ca6..0f8b7c93310e 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2159,16 +2159,12 @@ 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); > + usb_free_urb(urb); > + return NULL; > + } > + > urb->context = done; > return urb; > } > -- > 2.25.1 >