projects
/
profile
/
common
/
kernel-common.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
f875fdb
)
usb: chipidea: udc: fix the oops after rmmod gadget
author
Peter Chen
<peter.chen@freescale.com>
Tue, 17 Sep 2013 04:37:20 +0000
(12:37 +0800)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Thu, 26 Sep 2013 00:30:29 +0000
(17:30 -0700)
When we rmmod gadget, the ci->driver needs to be cleared.
Otherwise, when we plug in usb cable again, the driver will
consider gadget is there, and go to enumeration procedure,
but in fact, it was removed.
ci_hdrc ci_hdrc.0: Connected to host
Unable to handle kernel paging request at virtual address
7f02a42c
pgd =
80004000
[
7f02a42c
] *pgd=
3f13d811
, *pte=
00000000
, *ppte=
00000000
Internal error: Oops: 7 [#1] SMP ARM
Modules linked in: usb_f_acm u_serial libcomposite configfs [last unloaded: g_serial]
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.0+ #42
task:
807dba88
ti:
807d0000
task.ti:
807d0000
PC is at udc_irq+0x8fc/0xea4
LR is at l2x0_cache_sync+0x5c/0x6c
pc : [<
803de7f4
>] lr : [<
8001d0f0
>] psr:
20000193
sp :
807d1d98
ip :
807d1d80
fp :
807d1df4
r10:
af809900
r9 :
808184d4
r8 :
00080001
r7 :
00082001
r6 :
afb711f8
r5 :
afb71010
r4 :
ffffffea
r3 :
7f02a41c
r2 :
afb71010
r1 :
807d1dc0
r0 :
afb71068
Flags: nzCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel
Control:
10c53c7d
Table:
3f01804a
DAC:
00000017
Process swapper/0 (pid: 0, stack limit = 0x807d0238)
Stack: (0x807d1d98 to 0x807d2000)
1d80:
00000000
afb71014
1da0:
000040f6
00000000
00000001
00000000
00007530
00000000
afb71010
001dcd65
1dc0:
01000680
00400000
807d1e2c
afb71010
0000004e
00000000
00000000
0000004b
1de0:
808184d4
af809900
807d1e0c
807d1df8
803dbc24
803ddf04
afba75c0
0000004e
1e00:
807d1e44
807d1e10
8007a19c
803dbb9c
8108e7e0
8108e7e0
9ceddce0
af809900
1e20:
0000004e
807d0000
0000004b
00000000
00000010
00000000
807d1e5c
807d1e48
1e40:
8007a334
8007a154
af809900
0000004e
807d1e74
807d1e60
8007d3b4
8007a2f0
1e60:
0000004b
807cce3c
807d1e8c
807d1e78
80079b08
8007d300
00000180
807d8ba0
1e80:
807d1eb4
807d1e90
8000eef4
80079aec
00000000
f400010c
807d8ce4
807d1ed8
1ea0:
f4000100
96d5c75d
807d1ed4
807d1eb8
80008600
8000eeac
8042699c
60000013
1ec0:
ffffffff
807d1f0c
807d1f54
807d1ed8
8000e180
800085dc
807d1f20
00000046
1ee0:
9cedd275
00000010
8108f080
807de294
00000001
807de248
96d5c75d
00000010
1f00:
00000000
807d1f54
00000000
807d1f20
8005ff54
8042699c
60000013
ffffffff
1f20:
9cedd275
00000010
00000005
8108f080
8108f080
00000001
807de248
8086bd00
1f40:
807d0000
00000001
807d1f7c
807d1f58
80426af0
80426950
807d0000
00000000
1f60:
808184c0
808184c0
807d8954
805b886c
807d1f8c
807d1f80
8000f294
80426a44
1f80:
807d1fac
807d1f90
8005f110
8000f288
807d1fac
807d8908
805b4748
807dc86c
1fa0:
807d1fbc
807d1fb0
805aa58c
8005f068
807d1ff4
807d1fc0
8077c860
805aa530
1fc0:
ffffffff
ffffffff
8077c330
00000000
00000000
807bef88
00000000
10c53c7d
1fe0:
807d88d0
807bef84
00000000
807d1ff8
10008074
8077c594
00000000
00000000
Backtrace:
[<
803ddef8
>] (udc_irq+0x0/0xea4) from [<
803dbc24
>] (ci_irq+0x94/0x14c)
[<
803dbb90
>] (ci_irq+0x0/0x14c) from [<
8007a19c
>] (handle_irq_event_percpu+0x54/0x19c)
r5:
0000004e
r4:
afba75c0
[<
8007a148
>] (handle_irq_event_percpu+0x0/0x19c) from [<
8007a334
>] (handle_irq_event+0x50/0x70)
[<
8007a2e4
>] (handle_irq_event+0x0/0x70) from [<
8007d3b4
>] (handle_fasteoi_irq+0xc0/0x16c)
r5:
0000004e
r4:
af809900
[<
8007d2f4
>] (handle_fasteoi_irq+0x0/0x16c) from [<
80079b08
>] (generic_handle_irq+0x28/0x38)
r5:
807cce3c
r4:
0000004b
[<
80079ae0
>] (generic_handle_irq+0x0/0x38) from [<
8000eef4
>] (handle_IRQ+0x54/0xb4)
r4:
807d8ba0
r3:
00000180
[<
8000eea0
>] (handle_IRQ+0x0/0xb4) from [<
80008600
>] (gic_handle_irq+0x30/0x64)
r8:
96d5c75d
r7:
f4000100
r6:
807d1ed8
r5:
807d8ce4
r4:
f400010c
r3:
00000000
[<
800085d0
>] (gic_handle_irq+0x0/0x64) from [<
8000e180
>] (__irq_svc+0x40/0x54)
Exception stack(0x807d1ed8 to 0x807d1f20)
1ec0:
807d1f20
00000046
1ee0:
9cedd275
00000010
8108f080
807de294
00000001
807de248
96d5c75d
00000010
1f00:
00000000
807d1f54
00000000
807d1f20
8005ff54
8042699c
60000013
ffffffff
r7:
807d1f0c
r6:
ffffffff
r5:
60000013
r4:
8042699c
[<
80426944
>] (cpuidle_enter_state+0x0/0xf4) from [<
80426af0
>] (cpuidle_idle_call+0xb8/0x174)
r9:
00000001
r8:
807d0000
r7:
8086bd00
r6:
807de248
r5:
00000001
r4:
8108f080
[<
80426a38
>] (cpuidle_idle_call+0x0/0x174) from [<
8000f294
>] (arch_cpu_idle+0x18/0x5c)
[<
8000f27c
>] (arch_cpu_idle+0x0/0x5c) from [<
8005f110
>] (cpu_startup_entry+0xb4/0x148)
[<
8005f05c
>] (cpu_startup_entry+0x0/0x148) from [<
805aa58c
>] (rest_init+0x68/0x80)
r7:
807dc86c
[<
805aa524
>] (rest_init+0x0/0x80) from [<
8077c860
>] (start_kernel+0x2d8/0x334)
[<
8077c588
>] (start_kernel+0x0/0x334) from [<
10008074
>] (0x10008074)
Code:
e59031e0
e51b203c
e24b1034
e2820058
(
e5933010
)
---[ end trace
f874b2c5533c04bc
]---
Kernel panic - not syncing: Fatal exception in interrupt
Tested-by: Marek Vasut <marex@denx.de>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/chipidea/udc.c
patch
|
blob
|
history
diff --git
a/drivers/usb/chipidea/udc.c
b/drivers/usb/chipidea/udc.c
index
6b4c2f2
..
5280454
100644
(file)
--- a/
drivers/usb/chipidea/udc.c
+++ b/
drivers/usb/chipidea/udc.c
@@
-1667,13
+1667,13
@@
static int ci_udc_stop(struct usb_gadget *gadget,
if (ci->platdata->notify_event)
ci->platdata->notify_event(ci,
CI_HDRC_CONTROLLER_STOPPED_EVENT);
- ci->driver = NULL;
spin_unlock_irqrestore(&ci->lock, flags);
_gadget_stop_activity(&ci->gadget);
spin_lock_irqsave(&ci->lock, flags);
pm_runtime_put(&ci->gadget.dev);
}
+ ci->driver = NULL;
spin_unlock_irqrestore(&ci->lock, flags);
return 0;