I have a question with regards to thread synchronization on the dm6446 using open source kernel 2.6.18.

I am trying to figure out how to prevent the context from switching at certain points in my application. For example, when I call VIDENC1_create or VIDENC1_process, this seems to open up the possibility of a context switch to another thread. This is bad, and will cause the program to hang, particularly if the other thread has file/hardware i/o in it.

So I would like to do something that I think should be easy, wrap the calls to VIDENC1_create/process/etc in a critical section that prevents the context from switching to another thread. On a microcontroller I would just disable all interrupts and then reenable them after the call.

I can't use a mutex, sema4, or a barrier as far as I know because the thread would have to be switched to in order to check these. In other words, if the thread is waiting on an interrupt/blocking function to return, it can no longer be made to wait. I don't want to make the main thread wait, because the interrupt that will unblock the second thread can happen at any time, or not at all.

I have seen use of functions pthread_sched_prevent and pthread_sched_resume, which look like they do what I would like. But these do not seem to be part of my kernel or pthread library. There is also preempt.h in the kernel which has preempt_disable and preempt_enable, but these seem just for kernel mode code (i also tried them and they don't do anything in the user mode app).

Is there any function that I am missing? Maybe some kind of scheduler library that has a pause or a way to temporarily disable the switching to a thread.
It has to be in there somewhere, I think this a basic embedded os feature.

Thanks,
-mat

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to