-   Linux - Embedded & Single-board computer (
-   -   Kernel oops - Driver pointer and swap memory (

engr04 10-16-2012 09:30 PM

Kernel oops - Driver pointer and swap memory
I have an ARM9 design running Qt. My application randmoly quits with the kernel error posted below. The error happens randomly, sometimes within 10 minutes, sometimes after six hours.


Unable to handle kernel paging request at virtual address 4544ec64
pgd = c0428000
[4544ec64] *pgd=23ac8031, *pte=22e9c34d, *ppte=00000000
Internal error: Oops: 817 [#1] PREEMPT
Modules linked in: atmel_pwm_bl backlight touchDriver mymodule owl
CPU: 0 Not tainted (2.6.30-ts-armv5l #241)
PC is at memcpy+0xa4/0x330
LR is at 0x0
pc : [<c0c1b984>] lr : [<00000000>] psr: 00000013
sp : c3acdf0c ip : 0000000c fp : 4544ef9c
r10: 00000000 r9 : c3acc000 r8 : 00000000
r7 : 00000000 r6 : 00000000 r5 : 00000000 r4 : c2a2fba0
r3 : 00000000 r2 : fffffff4 r1 : bf05d4ac r0 : 4544ec64
Flags: nzcv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 0005317f Table: 20428000 DAC: 00000015
Process webkit_qt (pid: 2168, stack limit = 0xc3acc268)
Stack: (0xc3acdf0c to 0xc3ace000)
df00: bf05d468 4544ec64 00000014 c3859ce0 4544ec64
df20: c2a2fba0 bf05c820 c2a2f920 c0b5b960 4544ef9c 00000000 c3859ce0 c0b15024
df40: c3acdf40 c3acdf40 00000014 c2a2fba0 4544ec64 c3acdf80 00000014 c0b5ab4c
df60: c2a2fba0 4544ec64 00000014 c2a2fba0 4544ec64 00000000 00000000 c0b5ac10
df80: 00000000 00000000 00000014 00000001 0005fb20 0002a888 0002aa54 00000003
dfa0: c0ae7f68 c0ae7dc0 0005fb20 0002a888 00000013 4544ec64 00000014 00000002
dfc0: 0005fb20 0002a888 0002aa54 00000003 00000013 bea4ca90 00000000 4544ef9c
dfe0: 00000000 4544ec58 41e499ec 41e4a1f4 80000010 00000013 00000000 00000000
Code: e1a00000 e1a00000 e4803004 e4804004 (e4805004)
---[ end trace e962b516cdd6e3da ]---
I have an encoder driver. A thread in my application makes a blocking read call from the driver. The application sends a pointer to the driver. When the encoder turns, the driver populates the pointer, and returns.

Is it possible that the thread passes the pointer to the driver, and while the driver is blocking, the thread gets written to swap, leaving the pointer invalid? The problem has to exist in a driver, correct? The only other driver calls I make in the application are to /dev/tty* serial ports.

All times are GMT -5. The time now is 03:00 AM.