Linux 2.4.5-ac6
The oops problem with the cs46xx in my ThinkPad 600X under -ac4 and -ac5 has changed now. It no longer gives an oops; instead the program trying to access the sound card hangs (until I kill it). Subsequent attempts to access the sound card get a "Device or resource busy" error. There are no messages on the screen or sent to syslog (or messages or debug) when the hang occurs. I don't know if it will help or not, but here are the last few lines of an strace of the hanging process:
stat("/usr/bin/sox", {st_mode=S_IFREG|0755, st_size=120744, ...}) = 0rt_sigprocmask(SIG_BLOCK, ~[], [], 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0fork() = 186rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGINT, {0x806c04c, [], 0x4000000}, {SIG_DFL}, 8) = 0wait4(-1, 0xbffff744, 0, NULL) = ? ERESTARTSYS (To be restarted)
--- SIGTERM (Terminated) ---
+++ killed by SIGTERM +++
At the point of the hang, the output stops at "wait4(-1, " and the rest of that line (and the next two lines) appears after I kill the process.
Here are the last few lines of another strace of the same program under 2.4.5-ac3, which works fine:
stat("/usr/bin/sox", {st_mode=S_IFREG|0755, st_size=120744, ...}) = 0rt_sigprocmask(SIG_BLOCK, ~[], [], 8) = 0rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0fork() = 435rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigaction(SIGINT, {0x806c04c, [], 0x4000000}, {SIG_DFL}, 8) = 0 wait4(-1, [WIFEXITED(s) && WEXITSTATUS(s) == 0], 0, NULL) = 435 rt_sigprocmask(SIG_BLOCK, [CHLD TTOU], [CHLD], 8) = 0 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [CHLD], 8) = 0 rt_sigprocmask(SIG_SETMASK, [CHLD], NULL, 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) ---wait4(-1, 0xbffff438, WNOHANG, NULL) = -1 ECHILD (No child processes)sigreturn() = ? (mask now [])rt_sigaction(SIGINT, {SIG_DFL}, {0x806c04c, [], 0x4000000}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD TTOU], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0read(255, "", 4472) = 0_exit(0) = ?h