]> sourceware.org Git - systemtap.git/commitdiff
Always grab the rcu read lock in rcu_dereference().
authorDavid Smith <dsmith@redhat.com>
Wed, 29 May 2013 15:28:14 +0000 (10:28 -0500)
committerDavid Smith <dsmith@redhat.com>
Wed, 29 May 2013 15:28:14 +0000 (10:28 -0500)
tapset/linux/rcu.stp

index 8d2e286e7fbae374ed59c20a7ffe1fae84d66022..fa85927d103614f68e33b989dc67031023b63d45 100644 (file)
@@ -8,17 +8,11 @@
 
 %{
 #include <linux/rcupdate.h>
-#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();
 %}
This page took 0.026917 seconds and 5 git commands to generate.