Caglar, Are you seeing this OOPs when you do Ctrl-C? Since you say that mutex is deleted, which means that some thread has done the cleanup (Mutex got deleted).
Please provide more details regarding the scenario. Regards, Samir -----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Yusuf Caglar AKYUZ Sent: Tuesday, March 10, 2009 4:36 PM To: davinci-linux-open-sou...@linux. Subject: Re: DSPLINK 1.60 Oops'es on 2.6.28 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Yusuf Caglar AKYUZ wrote: > Hi, > > I'm using dsplink 1.60 along with CE 2.21 and sometimes I face > kernel oops messages. [1] Then the issuing process locks-up. The > error always(up to now) shows-up while process is finishing. I > debugged this issue a little deeper further down and I suspect that > some mutex is tried to be locked after it is deleted. > Hi again, I found my problem. I *think* dsplink incorrectly handles kernel signals, actually it incorrectly handles message queue timeouts. Also when it receives the signal, it tries to use a deleted mutex also. My current solution is attached to illustrate my situation. Regards, Caglar - --- sync_orig.c 2008-10-24 22:58:01.000000000 +0300 +++ sync.c 2009-03-10 12:49:04.000000000 +0200 @@ -30,9 +30,14 @@ /* ----------------------------------- OS Specific Headers */ +#include <linux/version.h> #include <linux/autoconf.h> #include <linux/spinlock.h> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) #include <asm/semaphore.h> +#else +#include <linux/semaphore.h> +#endif #include <linux/timer.h> #include <linux/sched.h> #include <linux/delay.h> @@ -947,19 +952,25 @@ /* Schedule out for given timeout */ osStatus = schedule_timeout (MAX_SCHEDULE_TIMEOUT) ; /* Take the lock */ - - SYNC_SpinLockStartEx (semObj->lock) ; + //SYNC_SpinLockStartEx (semObj->lock) ; + if (signal_pending(current)) { + status = -ERESTARTSYS; + SET_FAILURE_REASON ; + } +#if 0 if (osStatus == -ERESTARTSYS) { /* Interrupted? huh? */ status = -ERESTARTSYS ; SET_FAILURE_REASON ; break ; } +#endif } while (0) ; /* Remove from wait list */ remove_wait_queue (&semObj->list, &wait) ; /* Set the current task status as running */ - - set_current_state (TASK_RUNNING) ; + //set_current_state (TASK_RUNNING) ; /* End the lock */ - - SYNC_SpinLockEndEx (semObj->lock, 0u) ; + //SYNC_SpinLockEndEx (semObj->lock, 0u) ; } else { if (semObj->semType == SyncSemType_Binary) { -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iEYEARECAAYFAkm2SaIACgkQ/nL+S5dojejIagCfc+Si9VdNghcYguUBODFeLnY1 AugAoLhy1ozDCJZREeUxd75uZmYMBZul =CGVj -----END PGP SIGNATURE----- _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
