linux-3.0: sporadic "illegal instruction" in init scripts

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm using linux-3.0 as released on ftp/kernel.org on an DM37x based
board, and I've run into sporadic cases where the init scripts exit with
"illegal instruction" when using a ramdisk as the rootfs:

[    9.640838] VFS: Mounted root (ext2 filesystem) on device 1:0.
[    9.647521] Freeing init memory: 240K
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
[   10.121917] udevd (57): /proc/57/oom_adj is deprecated, please use
/proc/57/oom_score_adj instead.
/etc/rc.d/init.d/udev: line 41:    58 Illegal instruction     udevtrigger
/etc/rc.d/init.d/udev: line 41:    59 Illegal instruction     udevsettle
--timeout=300
/etc/rc.d/init.d/udev: line 41:    60 Illegal instruction     mkdir /dev/pts
/etc/rc.d/init.d/udev: line 41:    61 Illegal instruction     mount -n
-t devpts devpts /dev/pts
/etc/rc.d/init.d/udev: line 41:    62 Illegal instruction     mkdir /dev/shm
/etc/rc.d/rcS: line 24:    63 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    64 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    65 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    66 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    67 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    68 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    69 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    70 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    71 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    72 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    73 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 24:    74 Illegal instruction    
/etc/rc.d/init.d/$i $mode
/etc/rc.d/rcS: line 37:    75 Illegal instruction     /etc/rc.d/rc.local
$mode

If I switch to an initramfs it works fine...

I added code to arch/arm/kernel/traps.c to dump the PC on SIGILL and
determined do_undefinstr() was triggering the SIGILL signal:

[   10.103637] Freeing init memory: 240K
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
[   10.608764] udevd (56): /proc/56/oom_adj is deprecated, please use
/proc/56/oom_score_adj instead.
[   10.629028] do_undefinstr:376 SIGILL pc 400af000
/etc/rc.d/init.d/udev: line 41:    57 Illegal instruction     udevtrigger
[   10.659301] do_undefinstr:376 SIGILL pc 400ed000
/etc/rc.d/init.d/udev: line 41:    58 Illegal instruction     udevsettle
--timeout=300
[   10.682373] do_undefinstr:376 SIGILL pc 40037000
/etc/rc.d/init.d/udev: line 41:    59 Illegal instruction     mkdir /dev/pts
[   10.704864] do_undefinstr:376 SIGILL pc 400cc000
/etc/rc.d/init.d/udev: line 41:    60 Illegal instruction     mount -n
-t devpts devpts /dev/pts
[   10.727325] do_undefinstr:376 SIGILL pc 400eb000
/etc/rc.d/init.d/udev: line 41:    61 Illegal instruction     mkdir /dev/shm
[   10.756286] do_undefinstr:376 SIGILL pc 4004f000
/etc/rc.d/rcS: line 24:    62 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.780395] do_undefinstr:376 SIGILL pc 400e8000
/etc/rc.d/rcS: line 24:    63 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.803924] do_undefinstr:376 SIGILL pc 4001f000
/etc/rc.d/rcS: line 24:    64 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.827270] do_undefinstr:376 SIGILL pc 400ed000
/etc/rc.d/rcS: line 24:    65 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.850555] do_undefinstr:376 SIGILL pc 400e7000
/etc/rc.d/rcS: line 24:    66 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.874023] do_undefinstr:376 SIGILL pc 400b9000
/etc/rc.d/rcS: line 24:    67 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.897705] do_undefinstr:376 SIGILL pc 4007f000
/etc/rc.d/rcS: line 24:    68 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.920928] do_undefinstr:376 SIGILL pc 40070000
/etc/rc.d/rcS: line 24:    69 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.944427] do_undefinstr:376 SIGILL pc 40021000
/etc/rc.d/rcS: line 24:    70 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.967712] do_undefinstr:376 SIGILL pc 40047000
/etc/rc.d/rcS: line 24:    71 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   10.991455] do_undefinstr:376 SIGILL pc 400e0000
/etc/rc.d/rcS: line 24:    72 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   11.015350] do_undefinstr:376 SIGILL pc 40094000
/etc/rc.d/rcS: line 24:    73 Illegal instruction    
/etc/rc.d/init.d/$i $mode
[   11.039978] do_undefinstr:376 SIGILL pc 40106000
/etc/rc.d/rcS: line 37:    74 Illegal instruction     /etc/rc.d/rc.local
$mode
[   11.057037] do_undefinstr:376 SIGILL pc 40031000
[   12.064910] do_undefinstr:376 SIGILL pc 4010c000
[   13.071105] do_undefinstr:376 SIGILL pc 40106000
[   14.077056] do_undefinstr:376 SIGILL pc 400ef000
[   15.082885] do_undefinstr:376 SIGILL pc 40085000
[   16.089080] do_undefinstr:376 SIGILL pc 4004b000
[   17.095642] do_undefinstr:376 SIGILL pc 4002e000
[   18.101379] do_undefinstr:376 SIGILL pc 40092000
[   19.107543] do_undefinstr:376 SIGILL pc 400ec000
[   20.113433] do_undefinstr:376 SIGILL pc 40018000
[   21.119781] do_undefinstr:376 SIGILL pc 40055000

All the PC addresses look to be the first instruction of a page.  If I
switch to an initramfs (instead of a ramdisk) for the rootfs everything
looks to work.

Does this look like the instruction cache wasn't invalidated properly
(IIRC there were change to handle flushing the instruction cache during
COW operations)?
How can I dump the instruction at the user address within
do_undefinstr() to see if the the instruction looks right?
Does anyone have suggestions on how to fix this?

Its sporadic enough that modifying the kernel causes the problem to
disappear for a while (only to come back with yet another
change/addition to the kernel).

Any suggestions are appreciated!

-- 
Peter Barada
peter.barada@xxxxxxxxxxx

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux