Hi Philippe,

The gdb test fails on xenomai 3.2 because low priority smokey process still has 
chance to scheduled to 
execute it's user space's task. According to my debug , it seems it is related 
to handle_ptrace_resume of 
dovetail/kevents.c because in failed case it would try to resume hi-thread like 
stack [1] and then
 hi-thread call xnthread_harden like stack [2].
But on IPIPE-xenomai image it would resume smokey thread at first and then 
xnthread_harden would
be called in smokey thread in the following.
The problem is that I do know why in failed case it would xnthread_resume 
hi-thread at first like log[3] but with 
IPIPE-xenomai image it always xnthread_resume smokey non-rt thread like in log 
[4] so that I still do not 
know how to fix it. I still need more time to debug it out.  Please comment.

In addition , I found that there is comments in handle_ptstep_event of 
kernel/evl/thread.c. It said that 
"the ptracer might have switched focus"  but  in gdb test case breakpoint 
exactly switch to hi-thread 
from smokey process . Does that means we need to do some special handle for it ?
But for me evl is quite so different from xenomai on handling 
INBAND_TASK_PTSTEP  in handle_inband_event.

[1]:
0xffffffff811c4020 xnthread_resume(): kernel/xenomai/thread.c, line 1039        
0xffffffff811b51e0 handle_ptrace_resume(): ...ernel/xenomai/pipeline/kevents.c, 
line 474        
0xffffffff81078bec inband_ptstep_notify(): ./include/linux/dovetail.h, line 121 
0xffffffff81078bec ptrace_resume(): kernel/ptrace.c, line 830   
0xffffffff81079f32 ptrace_request(): kernel/ptrace.c, line 1194 
0xffffffff8102eaab arch_ptrace(): arch/x86/kernel/ptrace.c, line 818    
0xffffffff8107949b __do_sys_ptrace(): kernel/ptrace.c, line 1279        
0xffffffff8107949b __se_sys_ptrace(): kernel/ptrace.c, line 1244        
0xffffffff8107949b __x64_sys_ptrace(): kernel/ptrace.c, line 1244       
0xffffffff81b93549 do_syscall_64(): arch/x86/entry/common.c, line 53    
0xffffffff81c0007c entry_SYSCALL_64_after_hwframe(): arch/x86/entry/entry_64.S, 
line 118        

[2]:
0xffffffff811c6340 xnthread_harden(): kernel/xenomai/thread.c, line 1864        
0xffffffff811b56fa handle_user_return(): ...ernel/xenomai/pipeline/kevents.c, 
line 339  
0xffffffff811b56fa handle_inband_event(): ...ernel/xenomai/pipeline/kevents.c, 
line 514 
0xffffffff8110791e do_retuser(): kernel/entry/common.c, line 238        
0xffffffff8110791e exit_to_user_mode_prepare(): kernel/entry/common.c, line 262 
0xffffffff81b97795 irqentry_exit_to_user_mode(): kernel/entry/common.c, line 
356        
0xffffffff81b941dc exc_int3(): arch/x86/kernel/traps.c, line 710        
0xffffffff81c00aa1 asm_exc_int3(): .../arch/x86/include/asm/idtentry.h, line 
592        

[3]:
gdb-1153    [003] d..3 17451.761941: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] d..3 17451.761944: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] d..3 17451.761947: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] d..3 17451.761953: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] d..3 17451.761958: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] d..3 17451.761973: sched_wait_task: comm=hi-thread pid=1160 
prio=97
gdb-1153    [003] D..1 17451.761976: cobalt_thread_resume: name=hi-thread 
pid=1160 mask=0x400000
gdb-1153    [003] D..1 17451.761977: cobalt_trace_pid: pid=1160, prio=2
gdb-1153    [003] d..3 17451.761978: sched_waking: comm=hi-thread pid=1160 
prio=97 target_cpu=000

[4]
             gdb-839     [000] d..1  2420.981050: signal_deliver: sig=17 
errno=0 code=4 sa_handler=55bb958074d0 sa_flags=14000000
             gdb-839     [000] ....  2420.981069: sched_process_wait: comm=gdb 
pid=0 prio=120
             gdb-839     [000] d..2  2420.981075: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] d..2  2420.981080: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] d..2  2420.981082: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] d..2  2420.981084: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] ....  2420.981087: sched_process_wait: comm=gdb 
pid=0 prio=120
             gdb-839     [000] d..2  2420.981147: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] d..2  2420.981150: sched_wait_task: 
comm=hi-thread pid=846 prio=97
             gdb-839     [000] d..1  2420.981303: cobalt_thread_resume: 
name=smokey pid=841 mask=0x400000
             gdb-839     [000] d..1  2420.981304: cobalt_thread_unblock: 
pid=841 state=0x48848 info=0x0
             gdb-839     [000] d..1  2420.981305: cobalt_schedule_remote: 
status=0x10000000
             gdb-839     [000] d..1  2420.981305: cobalt_schedule: 
status=0x10000000

Regards

Hongzhan Chen


Reply via email to