mirror of
https://github.com/torvalds/linux.git
synced 2026-06-10 07:32:29 +02:00
media: cx231xx: don't DMA to random addresses
commita7deca6fa7upstream. Commit7a6f6c29d2(cx231xx: use URB_NO_TRANSFER_DMA_MAP) was intended to avoid mapping the DMA buffer for URB twice. This works for the URBs allocated with usb_alloc_urb(), as those are allocated from cohernent DMA pools, but the flag was also added for the VBI and audio URBs, which have a manually allocated area. This leaves the random trash in the structure after allocation as the DMA address, corrupting memory and preventing VBI and audio from working. Letting the USB core map the buffers solves the problem. Signed-off-by: David Dillow <dave@thedillows.org> Cc: Sri Deevi <srinivasa.deevi@conexant.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
dfd45e89bc
commit
9ab2f39f3e
|
|
@ -307,7 +307,7 @@ static int cx231xx_init_audio_isoc(struct cx231xx *dev)
|
|||
urb->context = dev;
|
||||
urb->pipe = usb_rcvisocpipe(dev->udev,
|
||||
dev->adev.end_point_addr);
|
||||
urb->transfer_flags = URB_ISO_ASAP | URB_NO_TRANSFER_DMA_MAP;
|
||||
urb->transfer_flags = URB_ISO_ASAP;
|
||||
urb->transfer_buffer = dev->adev.transfer_buffer[i];
|
||||
urb->interval = 1;
|
||||
urb->complete = cx231xx_audio_isocirq;
|
||||
|
|
@ -368,7 +368,7 @@ static int cx231xx_init_audio_bulk(struct cx231xx *dev)
|
|||
urb->context = dev;
|
||||
urb->pipe = usb_rcvbulkpipe(dev->udev,
|
||||
dev->adev.end_point_addr);
|
||||
urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
|
||||
urb->transfer_flags = 0;
|
||||
urb->transfer_buffer = dev->adev.transfer_buffer[i];
|
||||
urb->complete = cx231xx_audio_bulkirq;
|
||||
urb->transfer_buffer_length = sb_size;
|
||||
|
|
|
|||
|
|
@ -452,7 +452,7 @@ int cx231xx_init_vbi_isoc(struct cx231xx *dev, int max_packets,
|
|||
return -ENOMEM;
|
||||
}
|
||||
dev->vbi_mode.bulk_ctl.urb[i] = urb;
|
||||
urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
|
||||
urb->transfer_flags = 0;
|
||||
|
||||
dev->vbi_mode.bulk_ctl.transfer_buffer[i] =
|
||||
kzalloc(sb_size, GFP_KERNEL);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user