forked from Minki/linux
media: dvb-usb-v2: stop using coherent memory for URBs
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> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
parent
14f4eaedda
commit
1a0c10ed7b
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user