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: Trying to acquire global lock from systemtap module


Thanks Jim,

rcu_read_lock/unlock works perfectly.

Cheers,
Anupama

-----Original Message-----
From: Jim Keniston [mailto:jkenisto@us.ibm.com] 
Sent: Wednesday, July 22, 2009 10:38 AM
To: Anupama Chandwani
Cc: systemtap@sourceware.org
Subject: Re: Trying to acquire global lock from systemtap module


On Wed, 2009-07-22 at 10:14 -0700, Anupama Chandwani wrote:
> Hi,
> 
> In my probe handler, I want to scan the task list using for_each_process(p).
> For this I need to hold a read_lock on tasklist_lock.
> 
> tasklist_lock is a global data structure of type rwlock_t, and I am setting the probe on copy_process (from kernel/fork.c where tasklist_lock is defined)
> But I am not able to dereference this address. Also when I do a read_lock(&tasklist_lock), i get following error while inserting module.
> 
> Error inserting module 'module_name.ko' : Unknown symbol in module
> 
> And dmesg tells me that the unknown symbol is 'tasklist_lock'
> 
> Any pointers?

tasklist_lock was unexported a while back.  But there's an alternative.
One effect of rcu_read_lock() is to prevent changes to the task list, so
wrapping your for_each_process() code in
rcu_read_lock()/rcu_read_unlock() should do the trick.  See, for
example, zap_threads() in fs/exec.c.

> 
> Cheers,
> Anupama

Jim


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