This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: kernel read fault when accessing context variables


That's strange, I have tried probing at every line in the scheduler and get a
semantic error or a kernel read fault. Can you tell me your setup and how
you built your debug kernel?


Mark Wielaard-4 wrote:
> 
> On Thu, 2010-07-08 at 22:42 +0200, Mark Wielaard wrote:
>> On Thu, 2010-07-08 at 09:15 -0700, tonyg362 wrote:
>> > Could you tell me if it works for you if you look at a line in sched.c
>> where
>> > prev is set (or near it), and not just at the beginning of the
>> function? In
>> > the meantime I will try using a gcc version as suggested by Frank. As
>> for my
>> > compiler I used 4.4.1 which I guess is the latest version available
>> through
>> > apt-get on Ubuntu 9.10. I would like to know if anybody can get this
>> working
>> > on Ubuntu 9.10 so I can know their setup.
>> 
>> I looked a bit at the sources, and when I set the probe at line 42 of
>> the function (if (likely(prev != next))) it seems to work fine:
>> 
>> $ stap -e 'probe kernel.statement("schedule@kernel/sched.c+42")
>>   { ppid = $prev->tgid; npid = $next->tgid;
>>     printf("ppid:%d, npid:%d\n", ppid, npid) }'
>> ppid:24737, npid:0
>> ppid:0, npid:21431
>> ppid:21431, npid:23130
>> ppid:23130, npid:22989
>> ppid:22989, npid:21431
>> [...]
>> 
>> If I set the probe earlier next isn't assigned yet in the function and I
>> see what you are seeing:
>> 
>> $ stap -e 'probe kernel.statement("schedule@kernel/sched.c+16")
>>   { ppid = $prev->tgid; npid = $next->tgid;
>>     printf("ppid:%d, npid:%d\n", ppid, npid) }'
>> ERROR: kernel read fault at 0x0000129c29e10ec5 (addr) near identifier
>> '$next' at <input>:1:83
>> 
>> So it might actually be that in your case the probe is at a point where
>> next isn't initialized yet?
> 
> Looking a bit more I see right after that line (+42) there is a call
> into context_switch, which has a trace point "sched_switch" in it:
> 
> $ stap -L 'kernel.trace("sched_switch")'
> kernel.trace("sched_switch") $rq:struct rq* $prev:struct task_struct*
> $next:struct task_struct*
> 
> So, if you are interested in scheduler switches, then maybe this is more
> robust:
> 
> $ stap -e 'probe kernel.trace("sched_switch")
>   { ppid = $prev->tgid; npid = $next->tgid;
>     printf("ppid:%d, npid:%d\n", ppid, npid) }'
> 
> Cheers,
> 
> Mark
> 
> 
> 

-- 
View this message in context: http://old.nabble.com/kernel-read-fault-when-accessing-context-variables-tp29099754p29114046.html
Sent from the Sourceware - systemtap mailing list archive at Nabble.com.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]