I have seen something similar before. Our fix was to use pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) so child threads wouldn't inherit attribute from parent. Hope it helps.<br><br><br><div><span class="gmail_quote">
On 9/11/07, <b class="gmail_sendername">Ilya Lipovsky</b> <<a href="mailto:lipovsky@cs.bu.edu">lipovsky@cs.bu.edu</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hmm. Just for kicks - inside the important thread could you add:<br><br>int curpolicy;<br>struct sched_param sp;<br>pthread_getschedparam (pthread_self (), &curpolicy, &sp)<br>printf("important's policy is %d and priority is %d\n", curpolicy,
<br>sp.__sched_priority);<br><br>before the very first futex syscall and after your "printf("important got<br>futex!\n");" line.<br><br>Do similar for the unimportant thread, and see if you get anything weird -
<br>e.g. priorities come out to be the same for threads.<br><br><br>-----Original Message-----<br>From: linuxppc-embedded-bounces+lipovsky=<a href="mailto:cs.bu.edu@ozlabs.org">cs.bu.edu@ozlabs.org</a><br>[mailto:<a href="mailto:linuxppc-embedded-bounces+lipovsky=cs.bu.edu@ozlabs.org">
linuxppc-embedded-bounces+lipovsky=cs.bu.edu@ozlabs.org</a>] On Behalf<br>Of Benedict, Michael<br>Sent: Monday, September 10, 2007 5:41 PM<br>To: <a href="mailto:linuxppc-embedded@ozlabs.org">linuxppc-embedded@ozlabs.org</a>
<br>Subject: RE: futex priority based wakeup<br><br>Ilya Lipovsky wrote:<br>> Your code looks correct to me, so if the kernel developers<br>> did their job<br>> correctly, the only potentially weak link is glibc.
<br>><br><br>Well, either the kernel developers didn't do their job, or I am missing<br>something. The following also fails, and it should be bypassing glibc:<br><br>#define _XOPEN_SOURCE 600<br><br>#include <linux/futex.h>
<br>#include <sys/time.h><br>#include <asm/atomic.h><br><br>#include <sys/syscall.h><br>#include <unistd.h><br><br>#include <sched.h><br>#include <stdint.h><br>#include <stdio.h><br>
#include <stdlib.h><br><br>int myfutex = 0;<br><br>void *important(void *ign)<br>{<br> sleep(1);<br> printf("important waiting for futex\n");<br> fflush(stdout);<br> if(syscall(SYS_futex, &myfutex, FUTEX_WAIT, 0, NULL)) {
<br> perror("futex");<br> exit(1);<br> } else {<br> printf("important got futex!\n");<br> fflush(stdout);<br> syscall(SYS_futex, &myfutex, FUTEX_WAKE, 1, NULL);
<br>}<br><br> return NULL;<br>}<br><br><br>void *unimportant(void *ign)<br>{<br> printf("unimportant waiting for futex\n");<br> fflush(stdout);<br> if(syscall(SYS_futex, &myfutex, FUTEX_WAIT, 0, NULL)) {
<br> perror("futex");<br> exit(1);<br> } else {<br> printf("unimportant got futex!\n");<br> fflush(stdout);<br> syscall(SYS_futex, &myfutex, FUTEX_WAKE, 1, NULL);
<br>}<br><br> return NULL;<br>}<br><br>int main()<br>{<br> struct sched_param p;<br> pthread_attr_t attr;<br> pthread_t i, u;<br><br> p.__sched_priority = sched_get_priority_min(SCHED_FIFO);
<br> if(-1 == p.__sched_priority) {<br> perror("sched_get_priority_min");<br> return 1;<br> }<br> pthread_attr_init(&attr);<br> pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
<br> pthread_attr_setschedparam(&attr, &p);<br> pthread_create(&u, &attr, unimportant, NULL);<br><br> p.__sched_priority = sched_get_priority_max(SCHED_FIFO);<br> pthread_attr_setschedparam(&attr, &p);
<br> pthread_create(&i, &attr, important, NULL);<br><br> sleep(5);<br> printf("futex FUTEX_WAKE\n");<br> fflush(stdout);<br> syscall(SYS_futex, &myfutex, FUTEX_WAKE, 1, NULL);
<br><br> pthread_join(u, NULL);<br> pthread_join(i, NULL);<br><br> return 0;<br>}<br><br>Which produces:<br>unimportant waiting for futex<br>important waiting for futex<br>futex FUTEX_WAKE<br>unimportant got futex!
<br>important got futex!<br><br><br>Could someone with 2.6.22 please verify?<br><br>_______________________________________________<br>Linuxppc-embedded mailing list<br><a href="mailto:Linuxppc-embedded@ozlabs.org">Linuxppc-embedded@ozlabs.org
</a><br><a href="https://ozlabs.org/mailman/listinfo/linuxppc-embedded">https://ozlabs.org/mailman/listinfo/linuxppc-embedded</a><br><br>_______________________________________________<br>Linuxppc-embedded mailing list<br>
<a href="mailto:Linuxppc-embedded@ozlabs.org">Linuxppc-embedded@ozlabs.org</a><br><a href="https://ozlabs.org/mailman/listinfo/linuxppc-embedded">https://ozlabs.org/mailman/listinfo/linuxppc-embedded</a><br><br></blockquote>
</div><br>