aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorJack Pham <jackp@codeaurora.org>2017-08-01 05:00:56 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2017-08-15 07:18:54 -0400
commit31fe084ffaaf8abece14f8ca28e5e3b4e2bf97b6 (patch)
tree42714e3aa40f6ce62c1e42be22a24de6efe467f1 /include
parentf8faa3bf5fc988e504766b8d1bb7b3d5fb09f6f8 (diff)
usb: gadget: core: unmap request from DMA only if previously mapped
In the SG case this is already handled since a non-zero request->num_mapped_sgs is a clear indicator that dma_map_sg() had been called. While it would be nice to do the same for the singly mapped case by simply checking for non-zero request->dma, it's conceivable that 0 is a valid dma_addr_t handle. Hence add a flag 'dma_mapped' to struct usb_request and use this to determine the need to call dma_unmap_single(). Otherwise, if a request is not DMA mapped then the result of calling usb_request_unmap_request() would safely be a no-op. Signed-off-by: Jack Pham <jackp@codeaurora.org> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/usb/gadget.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 1a4a4bacfae6..21468a722c4a 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -48,6 +48,7 @@ struct usb_ep;
48 * by adding a zero length packet as needed; 48 * by adding a zero length packet as needed;
49 * @short_not_ok: When reading data, makes short packets be 49 * @short_not_ok: When reading data, makes short packets be
50 * treated as errors (queue stops advancing till cleanup). 50 * treated as errors (queue stops advancing till cleanup).
51 * @dma_mapped: Indicates if request has been mapped to DMA (internal)
51 * @complete: Function called when request completes, so this request and 52 * @complete: Function called when request completes, so this request and
52 * its buffer may be re-used. The function will always be called with 53 * its buffer may be re-used. The function will always be called with
53 * interrupts disabled, and it must not sleep. 54 * interrupts disabled, and it must not sleep.
@@ -103,6 +104,7 @@ struct usb_request {
103 unsigned no_interrupt:1; 104 unsigned no_interrupt:1;
104 unsigned zero:1; 105 unsigned zero:1;
105 unsigned short_not_ok:1; 106 unsigned short_not_ok:1;
107 unsigned dma_mapped:1;
106 108
107 void (*complete)(struct usb_ep *ep, 109 void (*complete)(struct usb_ep *ep,
108 struct usb_request *req); 110 struct usb_request *req);