#include <linux/limits.h>
#include <wrapper/random.h>
-#include <wrapper/list.h>
#include <lttng-kernel-version.h>
#include <lttng-events.h>
#include <lttng-tracer.h>
name_len = strlen(event_name);
hash = jhash(event_name, name_len, 0);
head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)];
- lttng_hlist_for_each_entry(event, head, hlist) {
+ hlist_for_each_entry(event, head, hlist) {
WARN_ON_ONCE(!event->desc);
if (!strncmp(event->desc->name, event_name,
LTTNG_KERNEL_SYM_NAME_LEN - 1)
for (i = 0; i < LTTNG_ID_TABLE_SIZE; i++) {
struct hlist_head *head = &id_tracker_p->id_hash[i];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (iter++ >= *pos)
return e;
}
for (i = 0; i < LTTNG_ID_TABLE_SIZE; i++) {
struct hlist_head *head = &id_tracker_p->id_hash[i];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (iter++ >= *ppos)
return e;
}
*/
hash = jhash(event_name, name_len, 0);
head = &session->events_ht.table[hash & (LTTNG_EVENT_HT_SIZE - 1)];
- lttng_hlist_for_each_entry(event, head, hlist) {
+ hlist_for_each_entry(event, head, hlist) {
if (event->desc == desc
&& event->chan == enabler->chan)
found = 1;
#include <linux/jhash.h>
#include <linux/slab.h>
-#include <wrapper/list.h>
#include <lttng-filter.h>
#define MERGE_POINT_TABLE_BITS 7
memcpy(&mp_node->stack, stack, sizeof(mp_node->stack));
head = &mp_table->mp_head[hash & (MERGE_POINT_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry(lookup_node, head, node) {
+ hlist_for_each_entry(lookup_node, head, node) {
if (lttng_hash_match(lookup_node, target_pc)) {
found = 1;
break;
struct hlist_head *head;
head = &mp_table->mp_head[i];
- lttng_hlist_for_each_entry_safe(mp_node, tmp, head, node) {
+ hlist_for_each_entry_safe(mp_node, tmp, head, node) {
kfree(mp_node);
nr_nodes++;
}
/* Validate merge points */
hash = jhash_1word(target_pc, 0);
head = &mp_table->mp_head[hash & (MERGE_POINT_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry(mp_node, head, node) {
+ hlist_for_each_entry(mp_node, head, node) {
if (lttng_hash_match(mp_node, target_pc)) {
found = 1;
break;
#include <asm/syscall.h>
#include <lib/bitfield.h>
-#include <wrapper/rcu.h>
#include <lttng-events.h>
#include "lttng-tracepoint.h"
#include <linux/module.h>
#include <lttng-tracepoint.h>
-#include <wrapper/list.h>
/*
* Protect the tracepoint table. lttng_tracepoint_mutex nests within
u32 hash = jhash(name, strlen(name), 0);
head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (!strcmp(name, e->name))
return e;
}
u32 hash = jhash(name, name_len - 1, 0);
head = &tracepoint_table[hash & (TRACEPOINT_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (!strcmp(name, e->name)) {
printk(KERN_NOTICE
"tracepoint %s busy\n", name);
#include <linux/hash.h>
#include <linux/rcupdate.h>
-#include <wrapper/rcu.h>
-#include <wrapper/list.h>
#include <lttng-events.h>
/*
uint32_t hash = hash_32(id, 32);
head = &p->id_hash[hash & (LTTNG_ID_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry_rcu(e, head, hlist) {
+ hlist_for_each_entry_rcu_notrace(e, head, hlist) {
if (id == e->id)
return true; /* Found */
}
allocated = true;
}
head = &p->id_hash[hash & (LTTNG_ID_TABLE_SIZE - 1)];
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (id == e->id)
return -EEXIST;
}
* No need of _safe iteration, because we stop traversal as soon
* as we remove the entry.
*/
- lttng_hlist_for_each_entry(e, head, hlist) {
+ hlist_for_each_entry(e, head, hlist) {
if (id == e->id) {
id_tracker_del_node_rcu(e);
return 0;
struct lttng_id_hash_node *e;
struct hlist_node *tmp;
- lttng_hlist_for_each_entry_safe(e, tmp, head, hlist)
+ hlist_for_each_entry_safe(e, tmp, head, hlist)
id_tracker_del_node(e);
}
kfree(p);
+++ /dev/null
-/* SPDX-License-Identifier: GPL-2.0-only
- *
- * wrapper/list.h
- *
- * wrapper around linux/list.h.
- *
- * Copyright (C) 2015 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * This wrapper code is derived from Linux 3.19.2 include/linux/list.h
- * and include/linux/rculist.h, hence the GPLv2 license applied to this
- * file.
- */
-
-#ifndef _LTTNG_WRAPPER_LIST_H
-#define _LTTNG_WRAPPER_LIST_H
-
-#include <linux/list.h>
-#include <linux/rculist.h>
-
-/*
- * return the first or the next element in an RCU protected hlist
- */
-#define lttng_hlist_first_rcu(head) (*((struct hlist_node __rcu **)(&(head)->first)))
-#define lttng_hlist_next_rcu(node) (*((struct hlist_node __rcu **)(&(node)->next)))
-#define lttng_hlist_pprev_rcu(node) (*((struct hlist_node __rcu **)((node)->pprev)))
-
-#define lttng_hlist_entry_safe(ptr, type, member) \
- ({ typeof(ptr) ____ptr = (ptr); \
- ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
- })
-
-/**
- * lttng_hlist_for_each_entry - iterate over list of given type
- * @pos: the type * to use as a loop cursor.
- * @head: the head for your list.
- * @member: the name of the hlist_node within the struct.
- */
-#define lttng_hlist_for_each_entry(pos, head, member) \
- for (pos = lttng_hlist_entry_safe((head)->first, typeof(*(pos)), member);\
- pos; \
- pos = lttng_hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
-
-/**
- * lttng_hlist_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos: the type * to use as a loop cursor.
- * @n: another &struct hlist_node to use as temporary storage
- * @head: the head for your list.
- * @member: the name of the hlist_node within the struct.
- */
-#define lttng_hlist_for_each_entry_safe(pos, n, head, member) \
- for (pos = lttng_hlist_entry_safe((head)->first, typeof(*pos), member);\
- pos && ({ n = pos->member.next; 1; }); \
- pos = lttng_hlist_entry_safe(n, typeof(*pos), member))
-
-#endif /* _LTTNG_WRAPPER_LIST_H */
#include <linux/version.h>
#include <linux/rculist.h>
#include <linux/rcupdate.h>
-#include <wrapper/list.h>
#ifndef rcu_dereference_raw_notrace
#define rcu_dereference_raw_notrace(p) rcu_dereference_raw(p)
&pos->member != (head); \
pos = lttng_list_entry_rcu(pos->member.next, typeof(*pos), member))
-/**
- * lttng_hlist_for_each_entry_rcu - iterate over rcu list of given type (for tracing)
- * @pos: the type * to use as a loop cursor.
- * @head: the head for your list.
- * @member: the name of the hlist_node within the struct.
- *
- * This list-traversal primitive may safely run concurrently with
- * the _rcu list-mutation primitives such as hlist_add_head_rcu()
- * as long as the traversal is guarded by rcu_read_lock().
- *
- * This is the same as hlist_for_each_entry_rcu() except that it does
- * not do any RCU debugging or tracing.
- */
-#define lttng_hlist_for_each_entry_rcu(pos, head, member) \
- for (pos = lttng_hlist_entry_safe (lttng_rcu_dereference(lttng_hlist_first_rcu(head)), \
- typeof(*(pos)), member); \
- pos; \
- pos = lttng_hlist_entry_safe(lttng_rcu_dereference(lttng_hlist_next_rcu( \
- &(pos)->member)), typeof(*(pos)), member))
-
#endif /* _LTTNG_WRAPPER_RCU_H */