관리-도구
편집 파일: rcu.stp
// rcu tapset // Copyright (C) 2013, 2017 Red Hat // // This file is part of systemtap, and is free software. You can // redistribute it and/or modify it under the terms of the GNU General // Public License (GPL); either version 2, or (at your option) any // later version. %{ #include <linux/rcupdate.h> %} function rcu_dereference:long (protected_pointer:long) %{ /* pure */ void *protected_pointer = (void *)(uintptr_t)STAP_ARG_protected_pointer; long fetched_value; /* We call kderef() here to ensure the memory is valid to read. * Note the result is thrown away, then we use the "real" * rcu_dereference function now that we know the address is * safe. */ (void)kderef(sizeof(*protected_pointer), protected_pointer); rcu_read_lock(); fetched_value = (long)rcu_dereference(protected_pointer); rcu_read_unlock(); STAP_RETVALUE = fetched_value; CATCH_DEREF_FAULT(); %}