From: Mathieu Desnoyers Date: Tue, 14 Apr 2020 12:23:19 +0000 (-0400) Subject: wrapper: remove rcu list traversal wrapper X-Git-Tag: for-upstreaming-review-1~4 X-Git-Url: http://git.liburcu.org/?p=lttng-modules.git;a=commitdiff_plain;h=39848b23f3afb4e6a51550a9d12e5610fbfdb8b5 wrapper: remove rcu list traversal wrapper --- diff --git a/lttng-syscalls.c b/lttng-syscalls.c index edb69b09..41fc2e3d 100644 --- a/lttng-syscalls.c +++ b/lttng-syscalls.c @@ -391,7 +391,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) 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)) { @@ -405,7 +405,7 @@ void syscall_entry_probe(void *__data, struct pt_regs *regs, long id) } 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)) { @@ -545,7 +545,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) 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)) { @@ -559,7 +559,7 @@ void syscall_exit_probe(void *__data, struct pt_regs *regs, long ret) } 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)) { diff --git a/probes/lttng-tracepoint-event-impl.h b/probes/lttng-tracepoint-event-impl.h index 11c89390..8584fbe0 100644 --- a/probes/lttng-tracepoint-event-impl.h +++ b/probes/lttng-tracepoint-event-impl.h @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -1156,25 +1155,25 @@ static void __event_probe__##_name(void *__data, _proto) \ 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; \ @@ -1187,7 +1186,7 @@ static void __event_probe__##_name(void *__data, _proto) \ \ __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; \ @@ -1251,25 +1250,25 @@ static void __event_probe__##_name(void *__data) \ 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; \ @@ -1282,7 +1281,7 @@ static void __event_probe__##_name(void *__data) \ \ __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; \ diff --git a/wrapper/rcu.h b/wrapper/rcu.h deleted file mode 100644 index b1877a49..00000000 --- a/wrapper/rcu.h +++ /dev/null @@ -1,56 +0,0 @@ -/* 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 - */ - -#ifndef _LTTNG_WRAPPER_RCU_H -#define _LTTNG_WRAPPER_RCU_H - -#include -#include -#include - -#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 */