From 10f55ae0997f28b138452bb6defee2182e166543 Mon Sep 17 00:00:00 2001 From: "Paul E. McKenney" Date: Thu, 14 Mar 2013 10:11:53 -0400 Subject: [PATCH] Add urcu-api-list.sh script Signed-off-by: Mathieu Desnoyers --- Makefile.am | 3 +- scripts/urcu-api-list.sh | 233 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 235 insertions(+), 1 deletion(-) create mode 100755 scripts/urcu-api-list.sh diff --git a/Makefile.am b/Makefile.am index 0a4d357..d95eca4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -30,7 +30,8 @@ EXTRA_DIST = $(top_srcdir)/urcu/arch/*.h $(top_srcdir)/urcu/uatomic/*.h \ LICENSE compat_arch_x86.c \ urcu-call-rcu-impl.h urcu-defer-impl.h \ rculfhash-internal.h \ - $(top_srcdir)/tests/*.sh + $(top_srcdir)/tests/*.sh \ + $(top_srcdir)/scripts/*.sh if COMPAT_ARCH COMPAT=compat_arch_@ARCHTYPE@.c diff --git a/scripts/urcu-api-list.sh b/scripts/urcu-api-list.sh new file mode 100755 index 0000000..5517155 --- /dev/null +++ b/scripts/urcu-api-list.sh @@ -0,0 +1,233 @@ +#!/bin/sh +# +# Run in userspace-rcu git archive. Prints out a list of API members +# and the version in which they were introduced. You need to list all +# the API members immediately below. Depends on "cscope". +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Copyright (C) IBM Corporation, 2013 +# +# Authors: Paul E. McKenney + +api="caa_container_of \ + caa_likely \ + caa_max \ + caa_unlikely \ + call_rcu \ + call_rcu_after_fork_child \ + call_rcu_after_fork_parent \ + call_rcu_before_fork \ + call_rcu_data_free \ + cds_hlist_add_head \ + cds_hlist_add_head_rcu \ + cds_hlist_del \ + cds_hlist_del_rcu \ + cds_hlist_entry \ + cds_hlist_for_each_entry \ + cds_hlist_for_each_entry_rcu \ + cds_hlist_for_each_entry_safe \ + CDS_INIT_HLIST_HEAD \ + CDS_INIT_LIST_HEAD \ + cds_lfht_add \ + cds_lfht_add_replace \ + cds_lfht_add_unique \ + cds_lfht_count_nodes \ + cds_lfht_del \ + cds_lfht_destroy \ + cds_lfht_first \ + cds_lfht_for_each \ + cds_lfht_for_each_duplicate \ + cds_lfht_for_each_entry \ + cds_lfht_for_each_entry_duplicate \ + cds_lfht_is_node_deleted \ + cds_lfht_iter_get_node \ + cds_lfht_lookup \ + cds_lfht_new \ + cds_lfht_next \ + cds_lfht_next_duplicate \ + cds_lfht_replace \ + cds_lfht_resize \ + cds_lfq_dequeue_rcu \ + cds_lfq_destroy_rcu \ + cds_lfq_enqueue_rcu \ + cds_lfq_init_rcu \ + cds_lfq_node_init_rcu \ + cds_lfs_empty \ + cds_lfs_for_each \ + cds_lfs_for_each_safe \ + cds_lfs_init \ + cds_lfs_node_init \ + __cds_lfs_pop \ + __cds_lfs_pop_all \ + cds_lfs_pop_all_blocking \ + cds_lfs_pop_blocking \ + cds_lfs_pop_lock \ + cds_lfs_pop_unlock \ + cds_lfs_push \ + cds_list_add \ + cds_list_add_rcu \ + cds_list_add_tail \ + cds_list_del \ + cds_list_del_init \ + cds_list_del_rcu \ + cds_list_empty \ + cds_list_entry \ + cds_list_first_entry \ + cds_list_for_each \ + cds_list_for_each_entry \ + cds_list_for_each_entry_rcu \ + cds_list_for_each_entry_reverse \ + cds_list_for_each_prev \ + cds_list_for_each_prev_safe \ + cds_list_for_each_rcu \ + cds_list_for_each_safe \ + CDS_LIST_HEAD \ + CDS_LIST_HEAD_INIT \ + cds_list_move \ + cds_list_replace \ + cds_list_replace_init \ + cds_list_replace_rcu \ + cds_list_splice \ + __cds_wfcq_dequeue_blocking \ + cds_wfcq_dequeue_blocking \ + cds_wfcq_dequeue_lock \ + __cds_wfcq_dequeue_nonblocking \ + cds_wfcq_dequeue_unlock \ + cds_wfcq_empty \ + cds_wfcq_enqueue \ + __cds_wfcq_first_blocking \ + __cds_wfcq_first_nonblocking \ + __cds_wfcq_for_each_blocking \ + __cds_wfcq_for_each_blocking_safe \ + cds_wfcq_init \ + __cds_wfcq_next_blocking \ + __cds_wfcq_next_nonblocking \ + cds_wfcq_node_init \ + __cds_wfcq_splice_blocking \ + cds_wfcq_splice_blocking \ + __cds_wfcq_splice_nonblocking \ + cds_wfs_empty \ + cds_wfs_first \ + cds_wfs_for_each_blocking \ + cds_wfs_for_each_blocking_safe \ + cds_wfs_init \ + cds_wfs_next_blocking \ + cds_wfs_next_nonblocking \ + cds_wfs_node_init \ + __cds_wfs_pop_all \ + cds_wfs_pop_all_blocking \ + __cds_wfs_pop_blocking \ + cds_wfs_pop_blocking \ + cds_wfs_pop_lock \ + __cds_wfs_pop_nonblocking \ + cds_wfs_pop_unlock \ + cds_wfs_push \ + CMM_ACCESS_ONCE \ + cmm_barrier \ + CMM_LOAD_SHARED \ + cmm_smp_mb \ + cmm_smp_mb__after_uatomic_add \ + cmm_smp_mb__after_uatomic_and \ + cmm_smp_mb__after_uatomic_dec \ + cmm_smp_mb__after_uatomic_inc \ + cmm_smp_mb__after_uatomic_or \ + cmm_smp_mb__before_uatomic_add \ + cmm_smp_mb__before_uatomic_and \ + cmm_smp_mb__before_uatomic_dec \ + cmm_smp_mb__before_uatomic_inc \ + cmm_smp_mb__before_uatomic_or \ + cmm_smp_rmb \ + cmm_smp_wmb \ + CMM_STORE_SHARED \ + create_all_cpu_call_rcu_data \ + create_call_rcu_data \ + DECLARE_URCU_TLS \ + defer_rcu \ + DEFINE_URCU_TLS \ + free_all_cpu_call_rcu_data \ + get_call_rcu_data \ + get_call_rcu_thread \ + get_cpu_call_rcu_data \ + get_default_call_rcu_data \ + get_thread_call_rcu_data \ + rcu_assign_pointer \ + rcu_cmpxchg_pointer \ + rcu_dereference \ + rcu_exit \ + rcu_init \ + rcu_quiescent_state \ + rcu_read_lock \ + rcu_read_unlock \ + rcu_register_thread \ + rcu_set_pointer \ + rcu_thread_offline \ + rcu_thread_online \ + rcu_unregister_thread \ + rcu_xchg_pointer \ + set_cpu_call_rcu_data \ + set_thread_call_rcu_data \ + synchronize_rcu \ + uatomic_add \ + uatomic_add_return \ + uatomic_and \ + uatomic_cmpxchg \ + uatomic_dec \ + uatomic_inc \ + uatomic_or \ + uatomic_read \ + uatomic_set \ + uatomic_xchg \ + URCU_TLS" + +T=/tmp/urcu-api-list.sh.$$ +trap 'rm -rf $T' 0 +mkdir $T + +git remote update 1>&2 +git reset --hard origin/master 1>&2 +git branch -f master 1>&2 +tags=`git tag -l` +lasttag="init" +mkdir $T/init + +for tag in $tags master +do + mkdir $T/$tag + git reset --hard $tag 1>&2 + rm -rf cscope.* tests + find . \( -name SCCS -prune \) -o \( -name .git -prune \) -o \( -name '*.[h]' -print \) | grep -v -e '-impl\.h$' | cscope -bkq -i - + for i in $api + do + cscope -d -L -0 $i > $T/$tag/$i + if test -s $T/$tag/$i + then + : + else + rm $T/$tag/$i + fi + done + # The call_rcu() preceding v0.6.0 is to be ignored + if test -d $T/v0.6.0 + then + : + else + rm $T/$tag/call_rcu + fi + ( ls $T/$tag; ls $T/$lasttag ) | sort | uniq -u | + awk -v tag=$tag '{ print "" $1 "" tag "" }' + lasttag=$tag +done + -- 2.34.1