diff options
| author | Jack Pham <jackp@codeaurora.org> | 2017-08-01 05:00:56 -0400 |
|---|---|---|
| committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2017-08-15 07:18:54 -0400 |
| commit | 31fe084ffaaf8abece14f8ca28e5e3b4e2bf97b6 (patch) | |
| tree | 42714e3aa40f6ce62c1e42be22a24de6efe467f1 /include | |
| parent | f8faa3bf5fc988e504766b8d1bb7b3d5fb09f6f8 (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.h | 2 |
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); |
