Index: kernel/generic/include/synch/rcu.h
===================================================================
--- kernel/generic/include/synch/rcu.h	(revision 5b382774cede49c01f80b52156d1d7532b7dc182)
+++ kernel/generic/include/synch/rcu.h	(revision 4a6da62213f167347482a2aa866949ef31ac7ad7)
@@ -147,9 +147,4 @@
 
 
-#ifndef member_to_inst
-#define member_to_inst(ptr_member, type, member_identif) \
-	((type*) (((void*)(ptr_member)) - ((void*)&(((type*)0)->member_identif))))
-#endif
-
 /** Use to assign a pointer to newly initialized data to a rcu reader 
  * accessible pointer.
@@ -205,4 +200,5 @@
 extern void rcu_read_lock(void);
 extern void rcu_read_unlock(void);
+extern bool rcu_read_locked(void);
 extern void rcu_synchronize(void);
 extern void rcu_call(rcu_item_t *rcu_item, rcu_func_t func);
Index: kernel/generic/src/synch/rcu.c
===================================================================
--- kernel/generic/src/synch/rcu.c	(revision 5b382774cede49c01f80b52156d1d7532b7dc182)
+++ kernel/generic/src/synch/rcu.c	(revision 4a6da62213f167347482a2aa866949ef31ac7ad7)
@@ -386,4 +386,14 @@
 	
 	preemption_enable();
+}
+
+/** Returns true if in an rcu reader section. */
+bool rcu_read_locked(void)
+{
+	preemption_disable();
+	bool locked = 0 < *CPU->rcu.pnesting_cnt;
+	preemption_enable();
+	
+	return locked;
 }
 
