if (unlikely(in_compat_syscall())) {
struct lttng_syscall_filter *filter;
- filter = lttng_rcu_dereference(chan->sc_filter);
+ filter = rcu_dereference_raw_check(chan->sc_filter);
if (filter) {
if (id < 0 || id >= NR_compat_syscalls
|| !test_bit(id, filter->sc_compat)) {
} else {
struct lttng_syscall_filter *filter;
- filter = lttng_rcu_dereference(chan->sc_filter);
+ filter = rcu_dereference_raw_check(chan->sc_filter);
if (filter) {
if (id < 0 || id >= NR_syscalls
|| !test_bit(id, filter->sc)) {
if (unlikely(in_compat_syscall())) {
struct lttng_syscall_filter *filter;
- filter = lttng_rcu_dereference(chan->sc_filter);
+ filter = rcu_dereference_raw_check(chan->sc_filter);
if (filter) {
if (id < 0 || id >= NR_compat_syscalls
|| !test_bit(id, filter->sc_compat)) {
} else {
struct lttng_syscall_filter *filter;
- filter = lttng_rcu_dereference(chan->sc_filter);
+ filter = rcu_dereference_raw_check(chan->sc_filter);
if (filter) {
if (id < 0 || id >= NR_syscalls
|| !test_bit(id, filter->sc)) {
#include <probes/lttng-probe-user.h>
#include <include/ringbuffer/frontend_types.h>
#include <include/ringbuffer/backend.h>
-#include <wrapper/rcu.h>
#include <wrapper/user_namespace.h>
#include <lttng-events.h>
#include <lttng-tracer-core.h>
return; \
if (unlikely(!READ_ONCE(__event->enabled))) \
return; \
- __lf = lttng_rcu_dereference(__session->pid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->pid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \
return; \
- __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vpid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \
return; \
- __lf = lttng_rcu_dereference(__session->uid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->uid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_uid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vuid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_vuid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->gid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->gid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_gid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vgid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_vgid()))) \
return; \
\
__event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \
tp_locvar, _args); \
- lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \
+ list_for_each_entry_rcu_notrace(bc_runtime, &__event->bytecode_runtime_head, node) { \
if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \
__stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \
__filter_record = 1; \
return; \
if (unlikely(!READ_ONCE(__event->enabled))) \
return; \
- __lf = lttng_rcu_dereference(__session->pid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->pid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, current->tgid))) \
return; \
- __lf = lttng_rcu_dereference(__session->vpid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vpid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, task_tgid_vnr(current)))) \
return; \
- __lf = lttng_rcu_dereference(__session->uid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->uid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_uid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->vuid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vuid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_vuid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->gid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->gid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_gid()))) \
return; \
- __lf = lttng_rcu_dereference(__session->vgid_tracker.p); \
+ __lf = rcu_dereference_raw_check(__session->vgid_tracker.p); \
if (__lf && likely(!lttng_id_tracker_lookup(__lf, \
lttng_current_vgid()))) \
return; \
\
__event_prepare_filter_stack__##_name(__stackvar.__filter_stack_data, \
tp_locvar); \
- lttng_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \
+ list_for_each_entry_rcu_notrace(bc_runtime, &__event->bytecode_runtime_head, node) { \
if (unlikely(bc_runtime->filter(bc_runtime, &__lttng_probe_ctx, \
__stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) { \
__filter_record = 1; \
+++ /dev/null
-/* SPDX-License-Identifier: (GPL-2.0-only or LGPL-2.1-only)
- *
- * wrapper/rcu.h
- *
- * wrapper around linux/rcupdate.h and linux/rculist.h.
- *
- * Copyright (C) 2014 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- */
-
-#ifndef _LTTNG_WRAPPER_RCU_H
-#define _LTTNG_WRAPPER_RCU_H
-
-#include <linux/version.h>
-#include <linux/rculist.h>
-#include <linux/rcupdate.h>
-
-#ifndef rcu_dereference_raw_notrace
-#define rcu_dereference_raw_notrace(p) rcu_dereference_raw(p)
-#endif
-
-#define lttng_rcu_dereference(p) rcu_dereference_raw_notrace(p)
-
-/**
- * lttng_list_entry_rcu - get the struct for this entry
- * @ptr: the &struct list_head pointer.
- * @type: the type of the struct this is embedded in.
- * @member: the name of the list_head within the struct.
- *
- * This primitive may safely run concurrently with the _rcu list-mutation
- * primitives such as list_add_rcu() as long as it's guarded by
- * rcu_read_lock_sched().
- * Can be used while tracing RCU.
- */
-#define lttng_list_entry_rcu(ptr, type, member) \
-({ \
- typeof(*ptr) __rcu *__ptr = (typeof(*ptr) __rcu __force *)ptr; \
- container_of((typeof(ptr))lttng_rcu_dereference(__ptr), type, member); \
-})
-
-/**
- * lttng_list_for_each_entry_rcu - iterate over rcu list of given type
- * @pos: the type * to use as a loop cursor.
- * @head: the head for your list.
- * @member: the name of the list_head within the struct.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as list_add_rcu()
- * as long as the traversal is guarded by rcu_read_lock_sched().
- * Can be used while tracing RCU.
- */
-#define lttng_list_for_each_entry_rcu(pos, head, member) \
- for (pos = lttng_list_entry_rcu((head)->next, typeof(*pos), member); \
- &pos->member != (head); \
- pos = lttng_list_entry_rcu(pos->member.next, typeof(*pos), member))
-
-#endif /* _LTTNG_WRAPPER_RCU_H */