From 1e55b4fe77f41aaf222de5132c6ca208f27a573f Mon Sep 17 00:00:00 2001 From: David Smith Date: Wed, 29 May 2013 10:28:14 -0500 Subject: [PATCH] Always grab the rcu read lock in rcu_dereference(). --- tapset/linux/rcu.stp | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/tapset/linux/rcu.stp b/tapset/linux/rcu.stp index 8d2e286e7..fa85927d1 100644 --- a/tapset/linux/rcu.stp +++ b/tapset/linux/rcu.stp @@ -8,17 +8,11 @@ %{ #include -#ifndef rcu_dereference_check -#define STAP_ALWAYS_ACQUIRE_RCU_LOCK -#endif %} function rcu_dereference:long (protected_pointer:long) %{ /* pure */ void *protected_pointer = (void *)(long)STAP_ARG_protected_pointer; long fetched_value; -#ifndef STAP_ALWAYS_ACQUIRE_RCU_LOCK - int lock_acquired = 0; -#endif /* We call kderef() here to ensure the memory is valid to read. * Note the result is thrown away, then we use the "real" @@ -26,24 +20,10 @@ function rcu_dereference:long (protected_pointer:long) %{ /* pure */ * safe. */ (void)kderef(sizeof(*protected_pointer), protected_pointer); -#ifndef STAP_ALWAYS_ACQUIRE_RCU_LOCK - if (! rcu_read_lock_held()) { - rcu_read_lock(); - lock_acquired = 1; - } -#else rcu_read_lock(); -#endif - fetched_value = (long)rcu_dereference(protected_pointer); - -#ifndef STAP_ALWAYS_ACQUIRE_RCU_LOCK - if (lock_acquired) { - rcu_read_unlock(); - } -#else rcu_read_unlock(); -#endif STAP_RETVALUE = fetched_value; + CATCH_DEREF_FAULT(); %} -- 2.43.5