Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-19 Thread Philippe Gerum
On Mon, 2007-02-19 at 01:20 +0100, Gilles Chanteperdrix wrote:
 Philippe Gerum wrote:
   On Mon, 2007-02-19 at 00:31 +0100, Gilles Chanteperdrix wrote:
Jan Kiszka wrote:
  Hi Philippe,
  
  I just verfied that the mlockall issue persists. But it doesn't appear
  to be a regression anymore. This little posix demo exposes it now on
  both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:
  
  #include stdio.h
  #include sys/mman.h
  #include pthread.h
  
  int main(int argc, char *argv[])
  {
struct sched_param param = { .sched_priority = 10 };
  
  //mlockall(MCL_CURRENT|MCL_FUTURE);
  
pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
  
printf(shouldn't be printed...\n);
pause();
  }
  
  
  In contrast, the same done via the native skin (rt_task_shadow) 
 triggers
  warning and program termination as expected.
  
  It looks to me like the temporary mlockall during libpthread_rt init 
 is
  not really reverted (but munlockall is actually called) or not
  propagated to the mm state that is later checked on xnshadow_map.

The problem is that the root thread is already shadowed in this program
when pthread_setschedparam is called. So, xnshadow_map is not called and
the flag is not checked.

   
   Yep. This makes sense, since kernel-wise, sys_munlockall does clear the
   VM_LOCKED bit from the caller's mm default flags.
   
   Since this behaviour is specific to the POSIX skin because it silently
   shadows the main thread as a Xenomai thread from the SCHED_NORMAL class,
   maybe we should check the mm state in the POSIX thread creation routine
   too, when SCHED_FIFO or SCHED_RR are passed as the scheduling class.
 
 The flag is checked if another thread is created, since xnshadow_map is
 called.

Ack, it must be so anyway.

  The only solution I see at the moment is to remove the call to
 munlockall in the library initialization.

The main thread of a POSIX program cannot have real-time constraints
(i.e. it may be acceptable for it to take page faults, unless otherwise
_explicitely_ specified) so there is no point to trigger SIGXCPU in that
case; the user has to (re)assert mlockall explicitely before creating
real-time threads from the main one, period. I agree that compared to
the usual behaviour of skins, it's a bit disturbing, but this all comes
from the implicit initial shadowing that other skins don't do.

-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-19 Thread Philippe Gerum
On Mon, 2007-02-19 at 13:31 +0100, Jan Kiszka wrote:
 Jan Kiszka wrote:
  Gilles Chanteperdrix wrote:
  Philippe Gerum wrote:
On Mon, 2007-02-19 at 00:31 +0100, Gilles Chanteperdrix wrote:
 Jan Kiszka wrote:
   Hi Philippe,
   
   I just verfied that the mlockall issue persists. But it doesn't 
  appear
   to be a regression anymore. This little posix demo exposes it now 
  on
   both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:
   
   #include stdio.h
   #include sys/mman.h
   #include pthread.h
   
   int main(int argc, char *argv[])
   {
  struct sched_param param = { .sched_priority = 10 };
   
   // mlockall(MCL_CURRENT|MCL_FUTURE);
   
  pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
   
  printf(shouldn't be printed...\n);
  pause();
   }
   
   
   In contrast, the same done via the native skin (rt_task_shadow) 
  triggers
   warning and program termination as expected.
   
   It looks to me like the temporary mlockall during libpthread_rt 
  init is
   not really reverted (but munlockall is actually called) or not
   propagated to the mm state that is later checked on xnshadow_map.
 
 The problem is that the root thread is already shadowed in this 
  program
 when pthread_setschedparam is called. So, xnshadow_map is not called 
  and
 the flag is not checked.
 

Yep. This makes sense, since kernel-wise, sys_munlockall does clear the
VM_LOCKED bit from the caller's mm default flags.

Since this behaviour is specific to the POSIX skin because it silently
shadows the main thread as a Xenomai thread from the SCHED_NORMAL class,
maybe we should check the mm state in the POSIX thread creation routine
too, when SCHED_FIFO or SCHED_RR are passed as the scheduling class.
 
  The flag is checked if another thread is created, since xnshadow_map is
  called. The only solution I see at the moment is to remove the call to
  munlockall in the library initialization.
 
  
  So this piece of code should trigger again?
  
  #include stdio.h
  #include sys/mman.h
  #include pthread.h
  
  void *thread(void *arg)
  {
  struct sched_param param = { .sched_priority = 10 };
  
  pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
  printf(shouldn't be printed...\n);
  return NULL;
  }
  
  int main(int argc, char *argv[])
  {
  pthread_t th;
  
  pthread_create(th, NULL, thread, NULL);
  pthread_join(th, NULL);
  }
  
  
  Well, it doesn't in fact, and I think I found my regression again. This
  demo behaves as expected over 1.6-06, but remains silent over I-pipe 1.7-02.
 
 May this hunk explain the behaviour?
 

Yes it is; the original version does overwrite the default flags
properly, not the modified one.

 http://www.rts.uni-hannover.de/xenomai/lxr/source/ksrc/arch/i386/patches/adeos-ipipe-2.6.20-i386-1.7-02.patch?a=i386;v=SVN-2.3.x#7755
 
 munlockall is realised via mlockall, so OR'ing here would never take
 away any flag.
 
 Jan
 
-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


[Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-19 Thread Philippe Gerum
On Mon, 2007-02-19 at 23:48 +0100, Gilles Chanteperdrix wrote:

 Here comes yet another amendment of the nocow patch, which avoid a race
 between pgd_alloc creating a new pgd, and __ipipe_pin_range_globally not
 seeing the new pgd because its task is not yet in the task
 list. Unfortunately, __ipipe_pin_range_globally becomes an architecture
 dependent function, but at least we should have no race. The patch also
 fixes the issue with munlockall not clearing the VM_LOCKED flag.

Ok, I'm queuing this one for 1.7-04, in order to play safe with 1.7-03
for the upcoming 2.3.1 release. Since the race has always been there
anyway, we have some time ahead to shake this fix over 2.4-devel.

-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-18 Thread Jan Kiszka
Hi Philippe,

I just verfied that the mlockall issue persists. But it doesn't appear
to be a regression anymore. This little posix demo exposes it now on
both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:

#include stdio.h
#include sys/mman.h
#include pthread.h

int main(int argc, char *argv[])
{
struct sched_param param = { .sched_priority = 10 };

//  mlockall(MCL_CURRENT|MCL_FUTURE);

pthread_setschedparam(pthread_self(), SCHED_FIFO, param);

printf(shouldn't be printed...\n);
pause();
}


In contrast, the same done via the native skin (rt_task_shadow) triggers
warning and program termination as expected.

It looks to me like the temporary mlockall during libpthread_rt init is
not really reverted (but munlockall is actually called) or not
propagated to the mm state that is later checked on xnshadow_map.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-18 Thread Philippe Gerum
On Mon, 2007-02-19 at 00:31 +0100, Gilles Chanteperdrix wrote:
 Jan Kiszka wrote:
   Hi Philippe,
   
   I just verfied that the mlockall issue persists. But it doesn't appear
   to be a regression anymore. This little posix demo exposes it now on
   both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:
   
   #include stdio.h
   #include sys/mman.h
   #include pthread.h
   
   int main(int argc, char *argv[])
   {
  struct sched_param param = { .sched_priority = 10 };
   
   // mlockall(MCL_CURRENT|MCL_FUTURE);
   
  pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
   
  printf(shouldn't be printed...\n);
  pause();
   }
   
   
   In contrast, the same done via the native skin (rt_task_shadow) triggers
   warning and program termination as expected.
   
   It looks to me like the temporary mlockall during libpthread_rt init is
   not really reverted (but munlockall is actually called) or not
   propagated to the mm state that is later checked on xnshadow_map.
 
 The problem is that the root thread is already shadowed in this program
 when pthread_setschedparam is called. So, xnshadow_map is not called and
 the flag is not checked.
 

Yep. This makes sense, since kernel-wise, sys_munlockall does clear the
VM_LOCKED bit from the caller's mm default flags.

Since this behaviour is specific to the POSIX skin because it silently
shadows the main thread as a Xenomai thread from the SCHED_NORMAL class,
maybe we should check the mm state in the POSIX thread creation routine
too, when SCHED_FIFO or SCHED_RR are passed as the scheduling class.

-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-18 Thread Gilles Chanteperdrix
Philippe Gerum wrote:
  On Mon, 2007-02-19 at 00:31 +0100, Gilles Chanteperdrix wrote:
   Jan Kiszka wrote:
 Hi Philippe,
 
 I just verfied that the mlockall issue persists. But it doesn't appear
 to be a regression anymore. This little posix demo exposes it now on
 both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:
 
 #include stdio.h
 #include sys/mman.h
 #include pthread.h
 
 int main(int argc, char *argv[])
 {
 struct sched_param param = { .sched_priority = 10 };
 
 //  mlockall(MCL_CURRENT|MCL_FUTURE);
 
 pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
 
 printf(shouldn't be printed...\n);
 pause();
 }
 
 
 In contrast, the same done via the native skin (rt_task_shadow) triggers
 warning and program termination as expected.
 
 It looks to me like the temporary mlockall during libpthread_rt init is
 not really reverted (but munlockall is actually called) or not
 propagated to the mm state that is later checked on xnshadow_map.
   
   The problem is that the root thread is already shadowed in this program
   when pthread_setschedparam is called. So, xnshadow_map is not called and
   the flag is not checked.
   
  
  Yep. This makes sense, since kernel-wise, sys_munlockall does clear the
  VM_LOCKED bit from the caller's mm default flags.
  
  Since this behaviour is specific to the POSIX skin because it silently
  shadows the main thread as a Xenomai thread from the SCHED_NORMAL class,
  maybe we should check the mm state in the POSIX thread creation routine
  too, when SCHED_FIFO or SCHED_RR are passed as the scheduling class.

The flag is checked if another thread is created, since xnshadow_map is
called. The only solution I see at the moment is to remove the call to
munlockall in the library initialization.

-- 


Gilles Chanteperdrix.

___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


Re: [Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-18 Thread Jan Kiszka
Gilles Chanteperdrix wrote:
 Philippe Gerum wrote:
   On Mon, 2007-02-19 at 00:31 +0100, Gilles Chanteperdrix wrote:
Jan Kiszka wrote:
  Hi Philippe,
  
  I just verfied that the mlockall issue persists. But it doesn't appear
  to be a regression anymore. This little posix demo exposes it now on
  both 2.6.20-1.7-02 and 2.6.19-1.6-06 against latest trunk:
  
  #include stdio.h
  #include sys/mman.h
  #include pthread.h
  
  int main(int argc, char *argv[])
  {
struct sched_param param = { .sched_priority = 10 };
  
  //mlockall(MCL_CURRENT|MCL_FUTURE);
  
pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
  
printf(shouldn't be printed...\n);
pause();
  }
  
  
  In contrast, the same done via the native skin (rt_task_shadow) 
 triggers
  warning and program termination as expected.
  
  It looks to me like the temporary mlockall during libpthread_rt init 
 is
  not really reverted (but munlockall is actually called) or not
  propagated to the mm state that is later checked on xnshadow_map.

The problem is that the root thread is already shadowed in this program
when pthread_setschedparam is called. So, xnshadow_map is not called and
the flag is not checked.

   
   Yep. This makes sense, since kernel-wise, sys_munlockall does clear the
   VM_LOCKED bit from the caller's mm default flags.
   
   Since this behaviour is specific to the POSIX skin because it silently
   shadows the main thread as a Xenomai thread from the SCHED_NORMAL class,
   maybe we should check the mm state in the POSIX thread creation routine
   too, when SCHED_FIFO or SCHED_RR are passed as the scheduling class.
 
 The flag is checked if another thread is created, since xnshadow_map is
 called. The only solution I see at the moment is to remove the call to
 munlockall in the library initialization.
 

So this piece of code should trigger again?

#include stdio.h
#include sys/mman.h
#include pthread.h

void *thread(void *arg)
{
struct sched_param param = { .sched_priority = 10 };

pthread_setschedparam(pthread_self(), SCHED_FIFO, param);
printf(shouldn't be printed...\n);
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t th;

pthread_create(th, NULL, thread, NULL);
pthread_join(th, NULL);
}


Well, it doesn't in fact, and I think I found my regression again. This
demo behaves as expected over 1.6-06, but remains silent over I-pipe 1.7-02.

Jan



signature.asc
Description: OpenPGP digital signature
___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


[Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-15 Thread Philippe Gerum
On Thu, 2007-02-15 at 14:06 +0100, Jan Kiszka wrote:
 Hi all,
 
 I think I found another unwanted side-effect of the no-cow changes:
 
 With the I-pipe 1.7 patch series the test for missing mlockall no longer
 works. I just - once again - wrote a test program that was lacking this
 call, but only with I-pipe 1.6-06 (same Xenomai version: latest trunk) I
 get the usual error message on startup.
 

I can't reproduce this with 1.7-01 here. Which Xenomai codebase are you
currently using (trunk/, 2.3.x maintenance or stock 2.3)?

 Jan
 
-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core


[Xenomai-core] Re: I-pipe 1.7 breaks mlockall safety check

2007-02-15 Thread Philippe Gerum
On Thu, 2007-02-15 at 14:58 +0100, Jan Kiszka wrote:
 Philippe Gerum wrote:
  On Thu, 2007-02-15 at 14:06 +0100, Jan Kiszka wrote:
  Hi all,
 
  I think I found another unwanted side-effect of the no-cow changes:
 
  With the I-pipe 1.7 patch series the test for missing mlockall no longer
  works. I just - once again - wrote a test program that was lacking this
  call, but only with I-pipe 1.6-06 (same Xenomai version: latest trunk) I
  get the usual error message on startup.
 
  
  I can't reproduce this with 1.7-01 here. Which Xenomai codebase are you
  currently using (trunk/, 2.3.x maintenance or stock 2.3)?
 
 Specifically trunk, but the first observation was over 2.3.x
 maintenance. The test code is using the posix skin.

I still don't find any explanation for that behaviour, only trivially
testing with and without mlockall() in a bare main routine though.

In relation to this, I've rolled out 1.7-02/x86, so that we could close
the last pending issue(s) holding v2.3.1 wrt the interrupt pipeline
support. Specifically, the -nocow related changes have been amended, and
we are now back to the implementation that prevailed in the 1.6 series
wrt vmalloc and ioremap memory, while still retaining the ability to
break COW eagerly for the RT threads.

Feedback welcome on this.

-- 
Philippe.



___
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core