All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] media: dvb-usb-v2: stop using coherent memory for URBs
@ 2018-03-08 19:09 Mauro Carvalho Chehab
  2018-03-13 19:22 ` Antti Palosaari
  0 siblings, 1 reply; 2+ messages in thread
From: Mauro Carvalho Chehab @ 2018-03-08 19:09 UTC (permalink / raw)
  To: Linux Media Mailing List
  Cc: Mauro Carvalho Chehab, Mauro Carvalho Chehab, Antti Palosaari

There's no need to use coherent buffers there. So, let the
DVB core do the allocation. That should give some performance
gain outside x86.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
---
 drivers/media/usb/dvb-usb-v2/usb_urb.c | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/drivers/media/usb/dvb-usb-v2/usb_urb.c b/drivers/media/usb/dvb-usb-v2/usb_urb.c
index dce2b97efce4..b0499f95ec45 100644
--- a/drivers/media/usb/dvb-usb-v2/usb_urb.c
+++ b/drivers/media/usb/dvb-usb-v2/usb_urb.c
@@ -155,8 +155,7 @@ static int usb_urb_alloc_bulk_urbs(struct usb_data_stream *stream)
 				stream->props.u.bulk.buffersize,
 				usb_urb_complete, stream);
 
-		stream->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
-		stream->urb_list[i]->transfer_dma = stream->dma_addr[i];
+		stream->urb_list[i]->transfer_flags = URB_FREE_BUFFER;
 		stream->urbs_initialized++;
 	}
 	return 0;
@@ -187,13 +186,12 @@ static int usb_urb_alloc_isoc_urbs(struct usb_data_stream *stream)
 		urb->complete = usb_urb_complete;
 		urb->pipe = usb_rcvisocpipe(stream->udev,
 				stream->props.endpoint);
-		urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
+		urb->transfer_flags = URB_ISO_ASAP | URB_FREE_BUFFER;
 		urb->interval = stream->props.u.isoc.interval;
 		urb->number_of_packets = stream->props.u.isoc.framesperurb;
 		urb->transfer_buffer_length = stream->props.u.isoc.framesize *
 				stream->props.u.isoc.framesperurb;
 		urb->transfer_buffer = stream->buf_list[i];
-		urb->transfer_dma = stream->dma_addr[i];
 
 		for (j = 0; j < stream->props.u.isoc.framesperurb; j++) {
 			urb->iso_frame_desc[j].offset = frame_offset;
@@ -212,11 +210,7 @@ static int usb_free_stream_buffers(struct usb_data_stream *stream)
 	if (stream->state & USB_STATE_URB_BUF) {
 		while (stream->buf_num) {
 			stream->buf_num--;
-			dev_dbg(&stream->udev->dev, "%s: free buf=%d\n",
-				__func__, stream->buf_num);
-			usb_free_coherent(stream->udev, stream->buf_size,
-					  stream->buf_list[stream->buf_num],
-					  stream->dma_addr[stream->buf_num]);
+			stream->buf_list[stream->buf_num] = NULL;
 		}
 	}
 
@@ -236,9 +230,7 @@ static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
 			__func__,  num * size);
 
 	for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) {
-		stream->buf_list[stream->buf_num] = usb_alloc_coherent(
-				stream->udev, size, GFP_ATOMIC,
-				&stream->dma_addr[stream->buf_num]);
+		stream->buf_list[stream->buf_num] = kzalloc(size, GFP_ATOMIC);
 		if (!stream->buf_list[stream->buf_num]) {
 			dev_dbg(&stream->udev->dev, "%s: alloc buf=%d failed\n",
 					__func__, stream->buf_num);
@@ -250,7 +242,6 @@ static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
 				__func__, stream->buf_num,
 				stream->buf_list[stream->buf_num],
 				(long long)stream->dma_addr[stream->buf_num]);
-		memset(stream->buf_list[stream->buf_num], 0, size);
 		stream->state |= USB_STATE_URB_BUF;
 	}
 
-- 
2.14.3

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] media: dvb-usb-v2: stop using coherent memory for URBs
  2018-03-08 19:09 [PATCH] media: dvb-usb-v2: stop using coherent memory for URBs Mauro Carvalho Chehab
@ 2018-03-13 19:22 ` Antti Palosaari
  0 siblings, 0 replies; 2+ messages in thread
From: Antti Palosaari @ 2018-03-13 19:22 UTC (permalink / raw)
  To: Mauro Carvalho Chehab, Linux Media Mailing List; +Cc: Mauro Carvalho Chehab

On 03/08/2018 09:09 PM, Mauro Carvalho Chehab wrote:
> There's no need to use coherent buffers there. So, let the
> DVB core do the allocation. That should give some performance
> gain outside x86.

Hello! I am not familiar with that change, but I think you know what you 
do. Feel free to apply!

regards
Antti


> 
> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
> ---
>   drivers/media/usb/dvb-usb-v2/usb_urb.c | 17 ++++-------------
>   1 file changed, 4 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/media/usb/dvb-usb-v2/usb_urb.c b/drivers/media/usb/dvb-usb-v2/usb_urb.c
> index dce2b97efce4..b0499f95ec45 100644
> --- a/drivers/media/usb/dvb-usb-v2/usb_urb.c
> +++ b/drivers/media/usb/dvb-usb-v2/usb_urb.c
> @@ -155,8 +155,7 @@ static int usb_urb_alloc_bulk_urbs(struct usb_data_stream *stream)
>   				stream->props.u.bulk.buffersize,
>   				usb_urb_complete, stream);
>   
> -		stream->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
> -		stream->urb_list[i]->transfer_dma = stream->dma_addr[i];
> +		stream->urb_list[i]->transfer_flags = URB_FREE_BUFFER;
>   		stream->urbs_initialized++;
>   	}
>   	return 0;
> @@ -187,13 +186,12 @@ static int usb_urb_alloc_isoc_urbs(struct usb_data_stream *stream)
>   		urb->complete = usb_urb_complete;
>   		urb->pipe = usb_rcvisocpipe(stream->udev,
>   				stream->props.endpoint);
> -		urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
> +		urb->transfer_flags = URB_ISO_ASAP | URB_FREE_BUFFER;
>   		urb->interval = stream->props.u.isoc.interval;
>   		urb->number_of_packets = stream->props.u.isoc.framesperurb;
>   		urb->transfer_buffer_length = stream->props.u.isoc.framesize *
>   				stream->props.u.isoc.framesperurb;
>   		urb->transfer_buffer = stream->buf_list[i];
> -		urb->transfer_dma = stream->dma_addr[i];
>   
>   		for (j = 0; j < stream->props.u.isoc.framesperurb; j++) {
>   			urb->iso_frame_desc[j].offset = frame_offset;
> @@ -212,11 +210,7 @@ static int usb_free_stream_buffers(struct usb_data_stream *stream)
>   	if (stream->state & USB_STATE_URB_BUF) {
>   		while (stream->buf_num) {
>   			stream->buf_num--;
> -			dev_dbg(&stream->udev->dev, "%s: free buf=%d\n",
> -				__func__, stream->buf_num);
> -			usb_free_coherent(stream->udev, stream->buf_size,
> -					  stream->buf_list[stream->buf_num],
> -					  stream->dma_addr[stream->buf_num]);
> +			stream->buf_list[stream->buf_num] = NULL;
>   		}
>   	}
>   
> @@ -236,9 +230,7 @@ static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
>   			__func__,  num * size);
>   
>   	for (stream->buf_num = 0; stream->buf_num < num; stream->buf_num++) {
> -		stream->buf_list[stream->buf_num] = usb_alloc_coherent(
> -				stream->udev, size, GFP_ATOMIC,
> -				&stream->dma_addr[stream->buf_num]);
> +		stream->buf_list[stream->buf_num] = kzalloc(size, GFP_ATOMIC);
>   		if (!stream->buf_list[stream->buf_num]) {
>   			dev_dbg(&stream->udev->dev, "%s: alloc buf=%d failed\n",
>   					__func__, stream->buf_num);
> @@ -250,7 +242,6 @@ static int usb_alloc_stream_buffers(struct usb_data_stream *stream, int num,
>   				__func__, stream->buf_num,
>   				stream->buf_list[stream->buf_num],
>   				(long long)stream->dma_addr[stream->buf_num]);
> -		memset(stream->buf_list[stream->buf_num], 0, size);
>   		stream->state |= USB_STATE_URB_BUF;
>   	}
>   
> 

-- 
http://palosaari.fi/

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-03-13 19:22 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-03-08 19:09 [PATCH] media: dvb-usb-v2: stop using coherent memory for URBs Mauro Carvalho Chehab
2018-03-13 19:22 ` Antti Palosaari

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.