[PATCH] USB: fsl_udc_core: Fix kernel oops on module removal
Anton Vorontsov
avorontsov at ru.mvista.com
Fri Oct 30 03:50:43 EST 2009
fsl_udc_release() calls dma_free_coherent() with an inappropriate
device passed to it, and since the device has no dma_ops, the following
oops pops up:
Kernel BUG at d103ce9c [verbose debug info unavailable]
Oops: Exception in kernel mode, sig: 5 [#1]
...
NIP [d103ce9c] fsl_udc_release+0x50/0x80 [fsl_usb2_udc]
LR [d103ce74] fsl_udc_release+0x28/0x80 [fsl_usb2_udc]
Call Trace:
[cfbc7dc0] [d103ce74] fsl_udc_release+0x28/0x80 [fsl_usb2_udc]
[cfbc7dd0] [c01a35c4] device_release+0x2c/0x90
[cfbc7de0] [c016b480] kobject_cleanup+0x58/0x98
[cfbc7e00] [c016c52c] kref_put+0x54/0x6c
[cfbc7e10] [c016b360] kobject_put+0x34/0x64
[cfbc7e20] [c01a1d0c] put_device+0x1c/0x2c
[cfbc7e30] [d103dbfc] fsl_udc_remove+0xc0/0x1e4 [fsl_usb2_udc]
...
This patch fixes the issue by passing dev->parent, which points to
a correct device.
Signed-off-by: Anton Vorontsov <avorontsov at ru.mvista.com>
---
drivers/usb/gadget/fsl_udc_core.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/usb/gadget/fsl_udc_core.c b/drivers/usb/gadget/fsl_udc_core.c
index 42a74b8..fa3d142 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -2139,7 +2139,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
static void fsl_udc_release(struct device *dev)
{
complete(udc_controller->done);
- dma_free_coherent(dev, udc_controller->ep_qh_size,
+ dma_free_coherent(dev->parent, udc_controller->ep_qh_size,
udc_controller->ep_qh, udc_controller->ep_qh_dma);
kfree(udc_controller);
}
--
1.6.3.3
More information about the Linuxppc-dev
mailing list