Messages in this thread Patch in this message | | | Date | Tue, 13 Feb 2007 17:58:40 -0800 | From | Ben Greear <> | Subject | suggestion for lock debugging. |
| |
While playing around with lockdep (nice tool!) I thought it might be nice to store the file-name and line where the lock was acquired. For the generic case, this could be done with the __FILE__ and __LINE__ compiler macros, but for highly interesting locks (ie, rtnl in my case), you could pass in the __FILE__ and __LINE__ where rtnl_lock() is called, something like:
+++ b/include/linux/rtnetlink.h @@ -1042,7 +1042,8 @@ __rta_reserve(struct sk_buff *skb, int attrtype, int attrlen) extern void rtmsg_ifinfo(int type, struct net_device *dev, unsigned change);
/* RTNL is used as a global lock for all changes to network configuration */ -extern void rtnl_lock(void); +#define rtnl_lock() __rtnl_lock(__FILE__, __LINE__); +extern void __rtnl_lock(const char* fname, int fline); extern void rtnl_unlock(void); extern int rtnl_trylock(void);
/* pass this off to lockdep and have it store the info for * later printing, instead of this current hack below that stores * it in a global variable... */ +void __rtnl_lock(const char* fname, int fline) { mutex_lock(&rtnl_mutex); + rtnl_locked_fname = fname; + rtnl_locked_fline = fline; }
I have a hacked up patch that allows lockdep to save and print this info, but I'm not clear on exactly how to pass the fname, fline info through mutex_lock and on to lockdep's methods.... Thanks, Ben
-- Ben Greear <greearb@candelatech.com> Candela Technologies Inc http://www.candelatech.com
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |