diff options
-rw-r--r-- | packages/linux/linux-omap/dvb-fix-dma.diff | 60 | ||||
-rw-r--r-- | packages/linux/linux-omap_git.bb | 3 | ||||
-rw-r--r-- | packages/python/python-native_2.5.1.bb | 4 |
3 files changed, 64 insertions, 3 deletions
diff --git a/packages/linux/linux-omap/dvb-fix-dma.diff b/packages/linux/linux-omap/dvb-fix-dma.diff new file mode 100644 index 0000000000..e05473fc7f --- /dev/null +++ b/packages/linux/linux-omap/dvb-fix-dma.diff @@ -0,0 +1,60 @@ +Hi, +I post this patch that fixes a kernel crash that happens when using a dvb +usb stick on a mips platform and I think even on other platforms on which +the dma access in not cache-coherent. + +The problem's origin is that, inside the method usb_bulk_urb_init of file +drivers/media/dvb/dvb-usb/usb-urb.c, stream->urb_list[i]->transfer_buffer +points to a memory area that has been allocated to be dma-coherent but +stream->urb_list[i]->transfer_flags doesn't include the +URB_NO_TRANSFER_DMA_MAP flag and stream->urb_list[i]->transfer_dma is not +set. +When later on the stream->urb_list[i]->transfer_buffer pointer is used +inside function usb_hcd_submit_urb of file drivers/usb/core/hcd.c since the +flag URB_NO_TRANSFER_DMA_MAP is not set the urb->transfer_buffer pointer is +passed to the dma_map_single function that since the address is dma-coherent +returns a wrong tranfer_dma address that later on leads to the kernel crash. + +The problem is solved by setting the URB_NO_TRANSFER_DMA_MAP flag and the +stream->urb_list[i]->transfer_dma address. + +Perhaps to be more safe the URB_NO_TRANSFER_DMA_MAP flag can be set only +if stream->urb_list[i]->transfer_dma != 0. + +I don't know if half of the fault can be of the dma_map_single function that +should anyway returns a valid address both for a not dma-coherent and a +dma-coherent address. + +Just to be clear: +I've done this patch to solve my problem and I tested it only on a mips +platform +but I think it should not cause any problems on other platforms. +I posted it here to help someone else that can have my same problem and to +point it out +to the mantainer of this part of code. +You can use it at your own risk and I'm not resposible in any way for any +problem or +damage that it can cause. +I'm available to discuss about it + +Bye + +Michele Scorcia + +-------------------- + + + + +--- /tmp/usb-urb.c 2008-10-08 09:53:23.000000000 +0200 ++++ git/drivers/media/dvb/dvb-usb/usb-urb.c 2008-10-08 09:54:16.000000000 +0200 +@@ -152,7 +152,8 @@ + stream->props.u.bulk.buffersize, + usb_urb_complete, stream); + +- stream->urb_list[i]->transfer_flags = 0; ++ stream->urb_list[i]->transfer_flags = URB_NO_TRANSFER_DMA_MAP; ++ stream->urb_list[i]->transfer_dma = stream->dma_addr[i]; + stream->urbs_initialized++; + } + return 0; diff --git a/packages/linux/linux-omap_git.bb b/packages/linux/linux-omap_git.bb index 290d90084b..a81cec89aa 100644 --- a/packages/linux/linux-omap_git.bb +++ b/packages/linux/linux-omap_git.bb @@ -9,7 +9,7 @@ COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard| SRCREV = "e1c49d7d22af768188e2a54c167ed79919361e55" PV = "2.6.26+2.6.27-rc7+${PR}+git${SRCREV}" -PR = "r12" +PR = "r13" SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git;protocol=git \ file://defconfig" @@ -34,6 +34,7 @@ SRC_URI_append = " \ file://musb-fix-multiple-bulk-transfers.diff;patch=1 \ file://mru-256MB.diff;patch=1 \ file://musb-fix-endpoints.diff;patch=1 \ + file://dvb-fix-dma.diff;patch=1 \ " diff --git a/packages/python/python-native_2.5.1.bb b/packages/python/python-native_2.5.1.bb index d43cb520cb..be8fc35a5a 100644 --- a/packages/python/python-native_2.5.1.bb +++ b/packages/python/python-native_2.5.1.bb @@ -26,8 +26,8 @@ exec_prefix = "${STAGING_DIR_NATIVE}/${layout_exec_prefix}" EXTRA_OECONF = "--with-threads --with-pymalloc --with-cyclic-gc \ --without-cxx --with-signal-module --with-wctype-functions" -EXTRA_OEMAKE = 'BUILD_SYS="" HOST_SYS="" STAGING_LIBDIR=${STAGING_LIBDIR} \ - STAGING_INCDIR=${STAGING_INCDIR}' +EXTRA_OEMAKE = 'BUILD_SYS="" HOST_SYS="" STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE} \ + STAGING_INCDIR=${STAGING_INCDIR_NATIVE}' do_stage_append() { install -m 0755 Parser/pgen ${STAGING_BINDIR_NATIVE}/ |