Line | Count | Source |
1 | | // SPDX-License-Identifier: ISC |
2 | | /* |
3 | | * Copyright (c) 2016-2019 David Lamparter, for NetDEF, Inc. |
4 | | */ |
5 | | |
6 | | #ifndef _FRR_ATOMLIST_H |
7 | | #define _FRR_ATOMLIST_H |
8 | | |
9 | | #include "typesafe.h" |
10 | | #include "frratomic.h" |
11 | | |
12 | | #ifdef __cplusplus |
13 | | extern "C" { |
14 | | #endif |
15 | | |
16 | | /* pointer with lock/deleted/invalid bit in lowest bit |
17 | | * |
18 | | * for atomlist/atomsort, "locked" means "this pointer can't be updated, the |
19 | | * item is being deleted". it is permissible to assume the item will indeed |
20 | | * be deleted (as there are no replace/etc. ops in this). |
21 | | * |
22 | | * in general, lowest 2/3 bits on 32/64bit architectures are available for |
23 | | * uses like this; the only thing that will really break this is putting an |
24 | | * atomlist_item in a struct with "packed" attribute. (it'll break |
25 | | * immediately and consistently.) -- don't do that. |
26 | | * |
27 | | * ATOMPTR_USER is currently unused (and available for atomic hash or skiplist |
28 | | * implementations.) |
29 | | */ |
30 | | |
31 | | /* atomic_atomptr_t may look a bit odd, it's for the sake of C++ compat */ |
32 | | typedef uintptr_t atomptr_t; |
33 | | typedef atomic_uintptr_t atomic_atomptr_t; |
34 | | |
35 | 5.63k | #define ATOMPTR_MASK (UINTPTR_MAX - 3) |
36 | 16 | #define ATOMPTR_LOCK (1) |
37 | | #define ATOMPTR_USER (2) |
38 | 32 | #define ATOMPTR_NULL (0) |
39 | | |
40 | | static inline atomptr_t atomptr_i(void *val) |
41 | 16 | { |
42 | 16 | atomptr_t atomval = (atomptr_t)val; |
43 | | |
44 | 16 | assert(!(atomval & ATOMPTR_LOCK)); |
45 | 16 | return atomval; |
46 | 16 | } Unexecuted instantiation: ospf_main.c:atomptr_i Unexecuted instantiation: frr-ospf-route-map.yang.c:atomptr_i Unexecuted instantiation: ospf_bfd.c:atomptr_i Unexecuted instantiation: ospf_dump.c:atomptr_i Unexecuted instantiation: ospf_dump_api.c:atomptr_i Unexecuted instantiation: ospf_errors.c:atomptr_i Unexecuted instantiation: ospf_interface.c:atomptr_i Unexecuted instantiation: ospf_lsa.c:atomptr_i Unexecuted instantiation: ospf_lsdb.c:atomptr_i Unexecuted instantiation: ospf_neighbor.c:atomptr_i Unexecuted instantiation: ospf_network.c:atomptr_i Unexecuted instantiation: ospf_nsm.c:atomptr_i Unexecuted instantiation: ospf_opaque.c:atomptr_i Unexecuted instantiation: ospf_packet.c:atomptr_i Unexecuted instantiation: ospf_ri.c:atomptr_i Unexecuted instantiation: ospf_routemap.c:atomptr_i Unexecuted instantiation: ospf_routemap_nb.c:atomptr_i Unexecuted instantiation: ospf_routemap_nb_config.c:atomptr_i Unexecuted instantiation: ospf_spf.c:atomptr_i Unexecuted instantiation: ospf_ti_lfa.c:atomptr_i Unexecuted instantiation: ospf_sr.c:atomptr_i Unexecuted instantiation: ospf_te.c:atomptr_i Unexecuted instantiation: ospf_vty.c:atomptr_i Unexecuted instantiation: ospf_zebra.c:atomptr_i Unexecuted instantiation: ospfd.c:atomptr_i Unexecuted instantiation: ospf_gr_helper.c:atomptr_i Unexecuted instantiation: ospf_abr.c:atomptr_i Unexecuted instantiation: ospf_apiserver.c:atomptr_i Unexecuted instantiation: ospf_asbr.c:atomptr_i Unexecuted instantiation: ospf_ase.c:atomptr_i Unexecuted instantiation: ospf_ext.c:atomptr_i Unexecuted instantiation: ospf_flood.c:atomptr_i Unexecuted instantiation: ospf_gr.c:atomptr_i Unexecuted instantiation: ospf_ia.c:atomptr_i Unexecuted instantiation: ospf_ism.c:atomptr_i Unexecuted instantiation: ospf_ldp_sync.c:atomptr_i Unexecuted instantiation: ospf_route.c:atomptr_i Unexecuted instantiation: ospf_api.c:atomptr_i Unexecuted instantiation: affinitymap.c:atomptr_i Unexecuted instantiation: affinitymap_cli.c:atomptr_i Unexecuted instantiation: affinitymap_northbound.c:atomptr_i Unexecuted instantiation: agg_table.c:atomptr_i Line | Count | Source | 41 | 16 | { | 42 | 16 | atomptr_t atomval = (atomptr_t)val; | 43 | | | 44 | 16 | assert(!(atomval & ATOMPTR_LOCK)); | 45 | 16 | return atomval; | 46 | 16 | } |
Unexecuted instantiation: asn.c:atomptr_i Unexecuted instantiation: bfd.c:atomptr_i Unexecuted instantiation: buffer.c:atomptr_i Unexecuted instantiation: command.c:atomptr_i Unexecuted instantiation: command_graph.c:atomptr_i Unexecuted instantiation: command_lex.c:atomptr_i Unexecuted instantiation: command_match.c:atomptr_i Unexecuted instantiation: command_parse.c:atomptr_i Unexecuted instantiation: cspf.c:atomptr_i Unexecuted instantiation: debug.c:atomptr_i Unexecuted instantiation: distribute.c:atomptr_i Unexecuted instantiation: ferr.c:atomptr_i Unexecuted instantiation: filter.c:atomptr_i Unexecuted instantiation: filter_cli.c:atomptr_i Unexecuted instantiation: filter_nb.c:atomptr_i Unexecuted instantiation: flex_algo.c:atomptr_i Unexecuted instantiation: frrcu.c:atomptr_i Unexecuted instantiation: frr_pthread.c:atomptr_i Unexecuted instantiation: grammar_sandbox.c:atomptr_i Unexecuted instantiation: hash.c:atomptr_i Unexecuted instantiation: id_alloc.c:atomptr_i Unexecuted instantiation: if.c:atomptr_i Unexecuted instantiation: if_rmap.c:atomptr_i Unexecuted instantiation: json.c:atomptr_i Unexecuted instantiation: keychain.c:atomptr_i Unexecuted instantiation: ldp_sync.c:atomptr_i Unexecuted instantiation: lib_errors.c:atomptr_i Unexecuted instantiation: lib_vty.c:atomptr_i Unexecuted instantiation: libfrr.c:atomptr_i Unexecuted instantiation: link_state.c:atomptr_i Unexecuted instantiation: log.c:atomptr_i Unexecuted instantiation: log_filter.c:atomptr_i Unexecuted instantiation: log_vty.c:atomptr_i Unexecuted instantiation: memory.c:atomptr_i Unexecuted instantiation: mgmt_be_client.c:atomptr_i Unexecuted instantiation: mgmt_fe_client.c:atomptr_i Unexecuted instantiation: mgmt_msg.c:atomptr_i Unexecuted instantiation: mlag.c:atomptr_i Unexecuted instantiation: srv6.c:atomptr_i Unexecuted instantiation: network.c:atomptr_i Unexecuted instantiation: nexthop.c:atomptr_i Unexecuted instantiation: netns_linux.c:atomptr_i Unexecuted instantiation: nexthop_group.c:atomptr_i Unexecuted instantiation: northbound.c:atomptr_i Unexecuted instantiation: northbound_cli.c:atomptr_i Unexecuted instantiation: northbound_db.c:atomptr_i Unexecuted instantiation: pid_output.c:atomptr_i Unexecuted instantiation: plist.c:atomptr_i Unexecuted instantiation: prefix.c:atomptr_i Unexecuted instantiation: privs.c:atomptr_i Unexecuted instantiation: pullwr.c:atomptr_i Unexecuted instantiation: qobj.c:atomptr_i Unexecuted instantiation: routemap.c:atomptr_i Unexecuted instantiation: routemap_cli.c:atomptr_i Unexecuted instantiation: routemap_northbound.c:atomptr_i Unexecuted instantiation: sbuf.c:atomptr_i Unexecuted instantiation: sigevent.c:atomptr_i Unexecuted instantiation: skiplist.c:atomptr_i Unexecuted instantiation: sockopt.c:atomptr_i Unexecuted instantiation: sockunion.c:atomptr_i Unexecuted instantiation: spf_backoff.c:atomptr_i Unexecuted instantiation: srcdest_table.c:atomptr_i Unexecuted instantiation: stream.c:atomptr_i Unexecuted instantiation: systemd.c:atomptr_i Unexecuted instantiation: table.c:atomptr_i Unexecuted instantiation: termtable.c:atomptr_i Unexecuted instantiation: event.c:atomptr_i Unexecuted instantiation: vrf.c:atomptr_i Unexecuted instantiation: vty.c:atomptr_i Unexecuted instantiation: wheel.c:atomptr_i Unexecuted instantiation: workqueue.c:atomptr_i Unexecuted instantiation: xref.c:atomptr_i Unexecuted instantiation: yang.c:atomptr_i Unexecuted instantiation: yang_translator.c:atomptr_i Unexecuted instantiation: yang_wrappers.c:atomptr_i Unexecuted instantiation: zclient.c:atomptr_i Unexecuted instantiation: zlog.c:atomptr_i Unexecuted instantiation: zlog_5424.c:atomptr_i Unexecuted instantiation: zlog_5424_cli.c:atomptr_i Unexecuted instantiation: zlog_live.c:atomptr_i Unexecuted instantiation: zlog_targets.c:atomptr_i Unexecuted instantiation: routing_nb.c:atomptr_i Unexecuted instantiation: routing_nb_config.c:atomptr_i Unexecuted instantiation: tc.c:atomptr_i Unexecuted instantiation: frr-affinity-map.yang.c:atomptr_i Unexecuted instantiation: frr-filter.yang.c:atomptr_i Unexecuted instantiation: frr-if-rmap.yang.c:atomptr_i Unexecuted instantiation: frr-interface.yang.c:atomptr_i Unexecuted instantiation: frr-route-map.yang.c:atomptr_i Unexecuted instantiation: frr-route-types.yang.c:atomptr_i Unexecuted instantiation: frr-vrf.yang.c:atomptr_i Unexecuted instantiation: frr-routing.yang.c:atomptr_i Unexecuted instantiation: frr-nexthop.yang.c:atomptr_i Unexecuted instantiation: ietf-routing-types.yang.c:atomptr_i Unexecuted instantiation: ietf-interfaces.yang.c:atomptr_i Unexecuted instantiation: ietf-bgp-types.yang.c:atomptr_i Unexecuted instantiation: frr-module-translator.yang.c:atomptr_i Unexecuted instantiation: connected.c:atomptr_i Unexecuted instantiation: if_netlink.c:atomptr_i Unexecuted instantiation: interface.c:atomptr_i Unexecuted instantiation: ioctl.c:atomptr_i Unexecuted instantiation: ipforward_proc.c:atomptr_i Unexecuted instantiation: kernel_netlink.c:atomptr_i Unexecuted instantiation: label_manager.c:atomptr_i Unexecuted instantiation: main.c:atomptr_i Unexecuted instantiation: netconf_netlink.c:atomptr_i Unexecuted instantiation: redistribute.c:atomptr_i Unexecuted instantiation: router-id.c:atomptr_i Unexecuted instantiation: rt_netlink.c:atomptr_i Unexecuted instantiation: rtadv.c:atomptr_i Unexecuted instantiation: rtread_netlink.c:atomptr_i Unexecuted instantiation: rule_netlink.c:atomptr_i Unexecuted instantiation: table_manager.c:atomptr_i Unexecuted instantiation: tc_netlink.c:atomptr_i Unexecuted instantiation: zapi_msg.c:atomptr_i Unexecuted instantiation: zebra_affinitymap.c:atomptr_i Unexecuted instantiation: zebra_dplane.c:atomptr_i Unexecuted instantiation: zebra_errors.c:atomptr_i Unexecuted instantiation: zebra_gr.c:atomptr_i Unexecuted instantiation: zebra_l2.c:atomptr_i Unexecuted instantiation: zebra_l2_bridge_if.c:atomptr_i Unexecuted instantiation: zebra_evpn.c:atomptr_i Unexecuted instantiation: zebra_evpn_mac.c:atomptr_i Unexecuted instantiation: zebra_evpn_neigh.c:atomptr_i Unexecuted instantiation: zebra_mlag.c:atomptr_i Unexecuted instantiation: zebra_mlag_vty.c:atomptr_i Unexecuted instantiation: zebra_mpls.c:atomptr_i Unexecuted instantiation: zebra_mpls_netlink.c:atomptr_i Unexecuted instantiation: zebra_mpls_null.c:atomptr_i Unexecuted instantiation: zebra_mpls_vty.c:atomptr_i Unexecuted instantiation: zebra_srv6.c:atomptr_i Unexecuted instantiation: zebra_srv6_vty.c:atomptr_i Unexecuted instantiation: zebra_mroute.c:atomptr_i Unexecuted instantiation: zebra_nb.c:atomptr_i Unexecuted instantiation: zebra_nb_config.c:atomptr_i Unexecuted instantiation: zebra_nb_rpcs.c:atomptr_i Unexecuted instantiation: zebra_nb_state.c:atomptr_i Unexecuted instantiation: zebra_netns_id.c:atomptr_i Unexecuted instantiation: zebra_netns_notify.c:atomptr_i Unexecuted instantiation: zebra_nhg.c:atomptr_i Unexecuted instantiation: zebra_ns.c:atomptr_i Unexecuted instantiation: zebra_opaque.c:atomptr_i Unexecuted instantiation: zebra_pbr.c:atomptr_i Unexecuted instantiation: zebra_ptm.c:atomptr_i Unexecuted instantiation: zebra_ptm_redistribute.c:atomptr_i Unexecuted instantiation: zebra_pw.c:atomptr_i Unexecuted instantiation: zebra_rib.c:atomptr_i Unexecuted instantiation: zebra_router.c:atomptr_i Unexecuted instantiation: zebra_rnh.c:atomptr_i Unexecuted instantiation: zebra_routemap.c:atomptr_i Unexecuted instantiation: zebra_routemap_nb.c:atomptr_i Unexecuted instantiation: zebra_routemap_nb_config.c:atomptr_i Unexecuted instantiation: zebra_script.c:atomptr_i Unexecuted instantiation: zebra_srte.c:atomptr_i Unexecuted instantiation: zebra_tc.c:atomptr_i Unexecuted instantiation: zebra_vrf.c:atomptr_i Unexecuted instantiation: zebra_vty.c:atomptr_i Unexecuted instantiation: zebra_vxlan.c:atomptr_i Unexecuted instantiation: zebra_vxlan_if.c:atomptr_i Unexecuted instantiation: zebra_evpn_mh.c:atomptr_i Unexecuted instantiation: zebra_neigh.c:atomptr_i Unexecuted instantiation: zserv.c:atomptr_i Unexecuted instantiation: debug_nl.c:atomptr_i Unexecuted instantiation: frr-zebra.yang.c:atomptr_i Unexecuted instantiation: frr-zebra-route-map.yang.c:atomptr_i Unexecuted instantiation: bgp_main.c:atomptr_i Unexecuted instantiation: frr-bgp-types.yang.c:atomptr_i Unexecuted instantiation: frr-bgp.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-common-structure.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-common.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-neighbor.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-peer-group.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-bmp.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-rpki.yang.c:atomptr_i Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-filter.yang.c:atomptr_i Unexecuted instantiation: frr-bgp-route-map.yang.c:atomptr_i Unexecuted instantiation: bgp_attr.c:atomptr_i Unexecuted instantiation: bgp_attr_evpn.c:atomptr_i Unexecuted instantiation: bgp_clist.c:atomptr_i Unexecuted instantiation: bgp_community.c:atomptr_i Unexecuted instantiation: bgp_community_alias.c:atomptr_i Unexecuted instantiation: bgp_debug.c:atomptr_i Unexecuted instantiation: bgp_dump.c:atomptr_i Unexecuted instantiation: bgp_ecommunity.c:atomptr_i Unexecuted instantiation: bgp_errors.c:atomptr_i Unexecuted instantiation: bgp_evpn.c:atomptr_i Unexecuted instantiation: bgp_evpn_mh.c:atomptr_i Unexecuted instantiation: bgp_evpn_vty.c:atomptr_i Unexecuted instantiation: bgp_filter.c:atomptr_i Unexecuted instantiation: bgp_flowspec_vty.c:atomptr_i Unexecuted instantiation: bgp_fsm.c:atomptr_i Unexecuted instantiation: bgp_io.c:atomptr_i Unexecuted instantiation: bgp_keepalives.c:atomptr_i Unexecuted instantiation: bgp_labelpool.c:atomptr_i Unexecuted instantiation: bgp_lcommunity.c:atomptr_i Unexecuted instantiation: bgp_mac.c:atomptr_i Unexecuted instantiation: bgp_mpath.c:atomptr_i Unexecuted instantiation: bgp_mplsvpn.c:atomptr_i Unexecuted instantiation: bgp_network.c:atomptr_i Unexecuted instantiation: bgp_nexthop.c:atomptr_i Unexecuted instantiation: bgp_nht.c:atomptr_i Unexecuted instantiation: bgp_packet.c:atomptr_i Unexecuted instantiation: bgp_pbr.c:atomptr_i Unexecuted instantiation: bgp_rd.c:atomptr_i Unexecuted instantiation: bgp_regex.c:atomptr_i Unexecuted instantiation: bgp_route.c:atomptr_i Unexecuted instantiation: bgp_routemap.c:atomptr_i Unexecuted instantiation: bgp_routemap_nb.c:atomptr_i Unexecuted instantiation: bgp_routemap_nb_config.c:atomptr_i Unexecuted instantiation: bgp_table.c:atomptr_i Unexecuted instantiation: bgp_updgrp.c:atomptr_i Unexecuted instantiation: bgp_updgrp_adv.c:atomptr_i Unexecuted instantiation: bgp_updgrp_packet.c:atomptr_i Unexecuted instantiation: bgp_vpn.c:atomptr_i Unexecuted instantiation: bgp_vty.c:atomptr_i Unexecuted instantiation: bgp_zebra.c:atomptr_i Unexecuted instantiation: bgpd.c:atomptr_i Unexecuted instantiation: bgp_rfapi_cfg.c:atomptr_i Unexecuted instantiation: rfapi_import.c:atomptr_i Unexecuted instantiation: rfapi.c:atomptr_i Unexecuted instantiation: rfapi_ap.c:atomptr_i Unexecuted instantiation: rfapi_encap_tlv.c:atomptr_i Unexecuted instantiation: rfapi_nve_addr.c:atomptr_i Unexecuted instantiation: rfapi_monitor.c:atomptr_i Unexecuted instantiation: rfapi_rib.c:atomptr_i Unexecuted instantiation: rfapi_vty.c:atomptr_i Unexecuted instantiation: vnc_debug.c:atomptr_i Unexecuted instantiation: vnc_export_bgp.c:atomptr_i Unexecuted instantiation: vnc_export_table.c:atomptr_i Unexecuted instantiation: vnc_import_bgp.c:atomptr_i Unexecuted instantiation: vnc_zebra.c:atomptr_i Unexecuted instantiation: bgp_addpath.c:atomptr_i Unexecuted instantiation: bgp_advertise.c:atomptr_i Unexecuted instantiation: bgp_aspath.c:atomptr_i Unexecuted instantiation: bgp_bfd.c:atomptr_i Unexecuted instantiation: bgp_conditional_adv.c:atomptr_i Unexecuted instantiation: bgp_damp.c:atomptr_i Unexecuted instantiation: bgp_encap_tlv.c:atomptr_i Unexecuted instantiation: bgp_flowspec.c:atomptr_i Unexecuted instantiation: bgp_flowspec_util.c:atomptr_i Unexecuted instantiation: bgp_label.c:atomptr_i Unexecuted instantiation: bgp_open.c:atomptr_i Unexecuted instantiation: rfp_example.c:atomptr_i Unexecuted instantiation: pim_addr.c:atomptr_i Unexecuted instantiation: pim_assert.c:atomptr_i Unexecuted instantiation: pim_bfd.c:atomptr_i Unexecuted instantiation: pim_bsm.c:atomptr_i Unexecuted instantiation: pim_cmd_common.c:atomptr_i Unexecuted instantiation: pim_errors.c:atomptr_i Unexecuted instantiation: pim_hello.c:atomptr_i Unexecuted instantiation: pim_iface.c:atomptr_i Unexecuted instantiation: pim_ifchannel.c:atomptr_i Unexecuted instantiation: pim_instance.c:atomptr_i Unexecuted instantiation: pim_join.c:atomptr_i Unexecuted instantiation: pim_jp_agg.c:atomptr_i Unexecuted instantiation: pim_macro.c:atomptr_i Unexecuted instantiation: pim_mroute.c:atomptr_i Unexecuted instantiation: pim_msg.c:atomptr_i Unexecuted instantiation: pim_nb.c:atomptr_i Unexecuted instantiation: pim_nb_config.c:atomptr_i Unexecuted instantiation: pim_neighbor.c:atomptr_i Unexecuted instantiation: pim_nht.c:atomptr_i Unexecuted instantiation: pim_oil.c:atomptr_i Unexecuted instantiation: pim_pim.c:atomptr_i Unexecuted instantiation: pim_routemap.c:atomptr_i Unexecuted instantiation: pim_rp.c:atomptr_i Unexecuted instantiation: pim_rpf.c:atomptr_i Unexecuted instantiation: pim_sock.c:atomptr_i Unexecuted instantiation: pim_ssm.c:atomptr_i Unexecuted instantiation: pim_ssmpingd.c:atomptr_i Unexecuted instantiation: pim_static.c:atomptr_i Unexecuted instantiation: pim_str.c:atomptr_i Unexecuted instantiation: pim_tib.c:atomptr_i Unexecuted instantiation: pim_time.c:atomptr_i Unexecuted instantiation: pim_tlv.c:atomptr_i Unexecuted instantiation: pim_upstream.c:atomptr_i Unexecuted instantiation: pim_util.c:atomptr_i Unexecuted instantiation: pim_vty.c:atomptr_i Unexecuted instantiation: pim_zebra.c:atomptr_i Unexecuted instantiation: pim_zlookup.c:atomptr_i Unexecuted instantiation: pim_vxlan.c:atomptr_i Unexecuted instantiation: pim_register.c:atomptr_i Unexecuted instantiation: pimd.c:atomptr_i Unexecuted instantiation: pim_cmd.c:atomptr_i Unexecuted instantiation: pim_igmp.c:atomptr_i Unexecuted instantiation: pim_igmp_mtrace.c:atomptr_i Unexecuted instantiation: pim_igmpv2.c:atomptr_i Unexecuted instantiation: pim_igmpv3.c:atomptr_i Unexecuted instantiation: pim_main.c:atomptr_i Unexecuted instantiation: pim_mlag.c:atomptr_i Unexecuted instantiation: pim_msdp.c:atomptr_i Unexecuted instantiation: pim_msdp_packet.c:atomptr_i Unexecuted instantiation: pim_msdp_socket.c:atomptr_i Unexecuted instantiation: pim_signals.c:atomptr_i Unexecuted instantiation: pim_zpthread.c:atomptr_i Unexecuted instantiation: frr-pim.yang.c:atomptr_i Unexecuted instantiation: frr-pim-rp.yang.c:atomptr_i Unexecuted instantiation: frr-gmp.yang.c:atomptr_i |
47 | | static inline void *atomptr_p(atomptr_t val) |
48 | 5.63k | { |
49 | 5.63k | return (void *)(val & ATOMPTR_MASK); |
50 | 5.63k | } Unexecuted instantiation: ospf_main.c:atomptr_p Unexecuted instantiation: frr-ospf-route-map.yang.c:atomptr_p Unexecuted instantiation: ospf_bfd.c:atomptr_p Unexecuted instantiation: ospf_dump.c:atomptr_p Unexecuted instantiation: ospf_dump_api.c:atomptr_p Unexecuted instantiation: ospf_errors.c:atomptr_p Unexecuted instantiation: ospf_interface.c:atomptr_p Unexecuted instantiation: ospf_lsa.c:atomptr_p Unexecuted instantiation: ospf_lsdb.c:atomptr_p Unexecuted instantiation: ospf_neighbor.c:atomptr_p Unexecuted instantiation: ospf_network.c:atomptr_p Unexecuted instantiation: ospf_nsm.c:atomptr_p Unexecuted instantiation: ospf_opaque.c:atomptr_p Unexecuted instantiation: ospf_packet.c:atomptr_p Unexecuted instantiation: ospf_ri.c:atomptr_p Unexecuted instantiation: ospf_routemap.c:atomptr_p Unexecuted instantiation: ospf_routemap_nb.c:atomptr_p Unexecuted instantiation: ospf_routemap_nb_config.c:atomptr_p Unexecuted instantiation: ospf_spf.c:atomptr_p Unexecuted instantiation: ospf_ti_lfa.c:atomptr_p Unexecuted instantiation: ospf_sr.c:atomptr_p Unexecuted instantiation: ospf_te.c:atomptr_p Unexecuted instantiation: ospf_vty.c:atomptr_p Unexecuted instantiation: ospf_zebra.c:atomptr_p Unexecuted instantiation: ospfd.c:atomptr_p Unexecuted instantiation: ospf_gr_helper.c:atomptr_p Unexecuted instantiation: ospf_abr.c:atomptr_p Unexecuted instantiation: ospf_apiserver.c:atomptr_p Unexecuted instantiation: ospf_asbr.c:atomptr_p Unexecuted instantiation: ospf_ase.c:atomptr_p Unexecuted instantiation: ospf_ext.c:atomptr_p Unexecuted instantiation: ospf_flood.c:atomptr_p Unexecuted instantiation: ospf_gr.c:atomptr_p Unexecuted instantiation: ospf_ia.c:atomptr_p Unexecuted instantiation: ospf_ism.c:atomptr_p Unexecuted instantiation: ospf_ldp_sync.c:atomptr_p Unexecuted instantiation: ospf_route.c:atomptr_p Unexecuted instantiation: ospf_api.c:atomptr_p Unexecuted instantiation: affinitymap.c:atomptr_p Unexecuted instantiation: affinitymap_cli.c:atomptr_p Unexecuted instantiation: affinitymap_northbound.c:atomptr_p Unexecuted instantiation: agg_table.c:atomptr_p Line | Count | Source | 48 | 32 | { | 49 | | return (void *)(val & ATOMPTR_MASK); | 50 | 32 | } |
Unexecuted instantiation: asn.c:atomptr_p Unexecuted instantiation: bfd.c:atomptr_p Unexecuted instantiation: buffer.c:atomptr_p Unexecuted instantiation: command.c:atomptr_p Unexecuted instantiation: command_graph.c:atomptr_p Unexecuted instantiation: command_lex.c:atomptr_p Unexecuted instantiation: command_match.c:atomptr_p Unexecuted instantiation: command_parse.c:atomptr_p Unexecuted instantiation: cspf.c:atomptr_p Unexecuted instantiation: debug.c:atomptr_p Unexecuted instantiation: distribute.c:atomptr_p Unexecuted instantiation: ferr.c:atomptr_p Unexecuted instantiation: filter.c:atomptr_p Unexecuted instantiation: filter_cli.c:atomptr_p Unexecuted instantiation: filter_nb.c:atomptr_p Unexecuted instantiation: flex_algo.c:atomptr_p Unexecuted instantiation: frrcu.c:atomptr_p Unexecuted instantiation: frr_pthread.c:atomptr_p Unexecuted instantiation: grammar_sandbox.c:atomptr_p Unexecuted instantiation: hash.c:atomptr_p Unexecuted instantiation: id_alloc.c:atomptr_p Unexecuted instantiation: if.c:atomptr_p Unexecuted instantiation: if_rmap.c:atomptr_p Unexecuted instantiation: json.c:atomptr_p Unexecuted instantiation: keychain.c:atomptr_p Unexecuted instantiation: ldp_sync.c:atomptr_p Unexecuted instantiation: lib_errors.c:atomptr_p Unexecuted instantiation: lib_vty.c:atomptr_p Unexecuted instantiation: libfrr.c:atomptr_p Unexecuted instantiation: link_state.c:atomptr_p Unexecuted instantiation: log.c:atomptr_p Unexecuted instantiation: log_filter.c:atomptr_p Unexecuted instantiation: log_vty.c:atomptr_p Unexecuted instantiation: memory.c:atomptr_p Unexecuted instantiation: mgmt_be_client.c:atomptr_p Unexecuted instantiation: mgmt_fe_client.c:atomptr_p Unexecuted instantiation: mgmt_msg.c:atomptr_p Unexecuted instantiation: mlag.c:atomptr_p Unexecuted instantiation: srv6.c:atomptr_p Unexecuted instantiation: network.c:atomptr_p Unexecuted instantiation: nexthop.c:atomptr_p Unexecuted instantiation: netns_linux.c:atomptr_p Unexecuted instantiation: nexthop_group.c:atomptr_p Unexecuted instantiation: northbound.c:atomptr_p Unexecuted instantiation: northbound_cli.c:atomptr_p Unexecuted instantiation: northbound_db.c:atomptr_p Unexecuted instantiation: pid_output.c:atomptr_p Unexecuted instantiation: plist.c:atomptr_p Unexecuted instantiation: prefix.c:atomptr_p Unexecuted instantiation: privs.c:atomptr_p Unexecuted instantiation: pullwr.c:atomptr_p Unexecuted instantiation: qobj.c:atomptr_p Unexecuted instantiation: routemap.c:atomptr_p Unexecuted instantiation: routemap_cli.c:atomptr_p Unexecuted instantiation: routemap_northbound.c:atomptr_p Unexecuted instantiation: sbuf.c:atomptr_p Unexecuted instantiation: sigevent.c:atomptr_p Unexecuted instantiation: skiplist.c:atomptr_p Unexecuted instantiation: sockopt.c:atomptr_p Unexecuted instantiation: sockunion.c:atomptr_p Unexecuted instantiation: spf_backoff.c:atomptr_p Unexecuted instantiation: srcdest_table.c:atomptr_p Unexecuted instantiation: stream.c:atomptr_p Unexecuted instantiation: systemd.c:atomptr_p Unexecuted instantiation: table.c:atomptr_p Unexecuted instantiation: termtable.c:atomptr_p Unexecuted instantiation: event.c:atomptr_p Unexecuted instantiation: vrf.c:atomptr_p Unexecuted instantiation: vty.c:atomptr_p Unexecuted instantiation: wheel.c:atomptr_p Unexecuted instantiation: workqueue.c:atomptr_p Unexecuted instantiation: xref.c:atomptr_p Unexecuted instantiation: yang.c:atomptr_p Unexecuted instantiation: yang_translator.c:atomptr_p Unexecuted instantiation: yang_wrappers.c:atomptr_p Unexecuted instantiation: zclient.c:atomptr_p Line | Count | Source | 48 | 5.60k | { | 49 | | return (void *)(val & ATOMPTR_MASK); | 50 | 5.60k | } |
Unexecuted instantiation: zlog_5424.c:atomptr_p Unexecuted instantiation: zlog_5424_cli.c:atomptr_p Unexecuted instantiation: zlog_live.c:atomptr_p Unexecuted instantiation: zlog_targets.c:atomptr_p Unexecuted instantiation: routing_nb.c:atomptr_p Unexecuted instantiation: routing_nb_config.c:atomptr_p Unexecuted instantiation: tc.c:atomptr_p Unexecuted instantiation: frr-affinity-map.yang.c:atomptr_p Unexecuted instantiation: frr-filter.yang.c:atomptr_p Unexecuted instantiation: frr-if-rmap.yang.c:atomptr_p Unexecuted instantiation: frr-interface.yang.c:atomptr_p Unexecuted instantiation: frr-route-map.yang.c:atomptr_p Unexecuted instantiation: frr-route-types.yang.c:atomptr_p Unexecuted instantiation: frr-vrf.yang.c:atomptr_p Unexecuted instantiation: frr-routing.yang.c:atomptr_p Unexecuted instantiation: frr-nexthop.yang.c:atomptr_p Unexecuted instantiation: ietf-routing-types.yang.c:atomptr_p Unexecuted instantiation: ietf-interfaces.yang.c:atomptr_p Unexecuted instantiation: ietf-bgp-types.yang.c:atomptr_p Unexecuted instantiation: frr-module-translator.yang.c:atomptr_p Unexecuted instantiation: connected.c:atomptr_p Unexecuted instantiation: if_netlink.c:atomptr_p Unexecuted instantiation: interface.c:atomptr_p Unexecuted instantiation: ioctl.c:atomptr_p Unexecuted instantiation: ipforward_proc.c:atomptr_p Unexecuted instantiation: kernel_netlink.c:atomptr_p Unexecuted instantiation: label_manager.c:atomptr_p Unexecuted instantiation: main.c:atomptr_p Unexecuted instantiation: netconf_netlink.c:atomptr_p Unexecuted instantiation: redistribute.c:atomptr_p Unexecuted instantiation: router-id.c:atomptr_p Unexecuted instantiation: rt_netlink.c:atomptr_p Unexecuted instantiation: rtadv.c:atomptr_p Unexecuted instantiation: rtread_netlink.c:atomptr_p Unexecuted instantiation: rule_netlink.c:atomptr_p Unexecuted instantiation: table_manager.c:atomptr_p Unexecuted instantiation: tc_netlink.c:atomptr_p Unexecuted instantiation: zapi_msg.c:atomptr_p Unexecuted instantiation: zebra_affinitymap.c:atomptr_p Unexecuted instantiation: zebra_dplane.c:atomptr_p Unexecuted instantiation: zebra_errors.c:atomptr_p Unexecuted instantiation: zebra_gr.c:atomptr_p Unexecuted instantiation: zebra_l2.c:atomptr_p Unexecuted instantiation: zebra_l2_bridge_if.c:atomptr_p Unexecuted instantiation: zebra_evpn.c:atomptr_p Unexecuted instantiation: zebra_evpn_mac.c:atomptr_p Unexecuted instantiation: zebra_evpn_neigh.c:atomptr_p Unexecuted instantiation: zebra_mlag.c:atomptr_p Unexecuted instantiation: zebra_mlag_vty.c:atomptr_p Unexecuted instantiation: zebra_mpls.c:atomptr_p Unexecuted instantiation: zebra_mpls_netlink.c:atomptr_p Unexecuted instantiation: zebra_mpls_null.c:atomptr_p Unexecuted instantiation: zebra_mpls_vty.c:atomptr_p Unexecuted instantiation: zebra_srv6.c:atomptr_p Unexecuted instantiation: zebra_srv6_vty.c:atomptr_p Unexecuted instantiation: zebra_mroute.c:atomptr_p Unexecuted instantiation: zebra_nb.c:atomptr_p Unexecuted instantiation: zebra_nb_config.c:atomptr_p Unexecuted instantiation: zebra_nb_rpcs.c:atomptr_p Unexecuted instantiation: zebra_nb_state.c:atomptr_p Unexecuted instantiation: zebra_netns_id.c:atomptr_p Unexecuted instantiation: zebra_netns_notify.c:atomptr_p Unexecuted instantiation: zebra_nhg.c:atomptr_p Unexecuted instantiation: zebra_ns.c:atomptr_p Unexecuted instantiation: zebra_opaque.c:atomptr_p Unexecuted instantiation: zebra_pbr.c:atomptr_p Unexecuted instantiation: zebra_ptm.c:atomptr_p Unexecuted instantiation: zebra_ptm_redistribute.c:atomptr_p Unexecuted instantiation: zebra_pw.c:atomptr_p Unexecuted instantiation: zebra_rib.c:atomptr_p Unexecuted instantiation: zebra_router.c:atomptr_p Unexecuted instantiation: zebra_rnh.c:atomptr_p Unexecuted instantiation: zebra_routemap.c:atomptr_p Unexecuted instantiation: zebra_routemap_nb.c:atomptr_p Unexecuted instantiation: zebra_routemap_nb_config.c:atomptr_p Unexecuted instantiation: zebra_script.c:atomptr_p Unexecuted instantiation: zebra_srte.c:atomptr_p Unexecuted instantiation: zebra_tc.c:atomptr_p Unexecuted instantiation: zebra_vrf.c:atomptr_p Unexecuted instantiation: zebra_vty.c:atomptr_p Unexecuted instantiation: zebra_vxlan.c:atomptr_p Unexecuted instantiation: zebra_vxlan_if.c:atomptr_p Unexecuted instantiation: zebra_evpn_mh.c:atomptr_p Unexecuted instantiation: zebra_neigh.c:atomptr_p Unexecuted instantiation: zserv.c:atomptr_p Unexecuted instantiation: debug_nl.c:atomptr_p Unexecuted instantiation: frr-zebra.yang.c:atomptr_p Unexecuted instantiation: frr-zebra-route-map.yang.c:atomptr_p Unexecuted instantiation: bgp_main.c:atomptr_p Unexecuted instantiation: frr-bgp-types.yang.c:atomptr_p Unexecuted instantiation: frr-bgp.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-common-structure.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-common.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-neighbor.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-peer-group.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-bmp.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-rpki.yang.c:atomptr_p Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-filter.yang.c:atomptr_p Unexecuted instantiation: frr-bgp-route-map.yang.c:atomptr_p Unexecuted instantiation: bgp_attr.c:atomptr_p Unexecuted instantiation: bgp_attr_evpn.c:atomptr_p Unexecuted instantiation: bgp_clist.c:atomptr_p Unexecuted instantiation: bgp_community.c:atomptr_p Unexecuted instantiation: bgp_community_alias.c:atomptr_p Unexecuted instantiation: bgp_debug.c:atomptr_p Unexecuted instantiation: bgp_dump.c:atomptr_p Unexecuted instantiation: bgp_ecommunity.c:atomptr_p Unexecuted instantiation: bgp_errors.c:atomptr_p Unexecuted instantiation: bgp_evpn.c:atomptr_p Unexecuted instantiation: bgp_evpn_mh.c:atomptr_p Unexecuted instantiation: bgp_evpn_vty.c:atomptr_p Unexecuted instantiation: bgp_filter.c:atomptr_p Unexecuted instantiation: bgp_flowspec_vty.c:atomptr_p Unexecuted instantiation: bgp_fsm.c:atomptr_p Unexecuted instantiation: bgp_io.c:atomptr_p Unexecuted instantiation: bgp_keepalives.c:atomptr_p Unexecuted instantiation: bgp_labelpool.c:atomptr_p Unexecuted instantiation: bgp_lcommunity.c:atomptr_p Unexecuted instantiation: bgp_mac.c:atomptr_p Unexecuted instantiation: bgp_mpath.c:atomptr_p Unexecuted instantiation: bgp_mplsvpn.c:atomptr_p Unexecuted instantiation: bgp_network.c:atomptr_p Unexecuted instantiation: bgp_nexthop.c:atomptr_p Unexecuted instantiation: bgp_nht.c:atomptr_p Unexecuted instantiation: bgp_packet.c:atomptr_p Unexecuted instantiation: bgp_pbr.c:atomptr_p Unexecuted instantiation: bgp_rd.c:atomptr_p Unexecuted instantiation: bgp_regex.c:atomptr_p Unexecuted instantiation: bgp_route.c:atomptr_p Unexecuted instantiation: bgp_routemap.c:atomptr_p Unexecuted instantiation: bgp_routemap_nb.c:atomptr_p Unexecuted instantiation: bgp_routemap_nb_config.c:atomptr_p Unexecuted instantiation: bgp_table.c:atomptr_p Unexecuted instantiation: bgp_updgrp.c:atomptr_p Unexecuted instantiation: bgp_updgrp_adv.c:atomptr_p Unexecuted instantiation: bgp_updgrp_packet.c:atomptr_p Unexecuted instantiation: bgp_vpn.c:atomptr_p Unexecuted instantiation: bgp_vty.c:atomptr_p Unexecuted instantiation: bgp_zebra.c:atomptr_p Unexecuted instantiation: bgpd.c:atomptr_p Unexecuted instantiation: bgp_rfapi_cfg.c:atomptr_p Unexecuted instantiation: rfapi_import.c:atomptr_p Unexecuted instantiation: rfapi.c:atomptr_p Unexecuted instantiation: rfapi_ap.c:atomptr_p Unexecuted instantiation: rfapi_encap_tlv.c:atomptr_p Unexecuted instantiation: rfapi_nve_addr.c:atomptr_p Unexecuted instantiation: rfapi_monitor.c:atomptr_p Unexecuted instantiation: rfapi_rib.c:atomptr_p Unexecuted instantiation: rfapi_vty.c:atomptr_p Unexecuted instantiation: vnc_debug.c:atomptr_p Unexecuted instantiation: vnc_export_bgp.c:atomptr_p Unexecuted instantiation: vnc_export_table.c:atomptr_p Unexecuted instantiation: vnc_import_bgp.c:atomptr_p Unexecuted instantiation: vnc_zebra.c:atomptr_p Unexecuted instantiation: bgp_addpath.c:atomptr_p Unexecuted instantiation: bgp_advertise.c:atomptr_p Unexecuted instantiation: bgp_aspath.c:atomptr_p Unexecuted instantiation: bgp_bfd.c:atomptr_p Unexecuted instantiation: bgp_conditional_adv.c:atomptr_p Unexecuted instantiation: bgp_damp.c:atomptr_p Unexecuted instantiation: bgp_encap_tlv.c:atomptr_p Unexecuted instantiation: bgp_flowspec.c:atomptr_p Unexecuted instantiation: bgp_flowspec_util.c:atomptr_p Unexecuted instantiation: bgp_label.c:atomptr_p Unexecuted instantiation: bgp_open.c:atomptr_p Unexecuted instantiation: rfp_example.c:atomptr_p Unexecuted instantiation: pim_addr.c:atomptr_p Unexecuted instantiation: pim_assert.c:atomptr_p Unexecuted instantiation: pim_bfd.c:atomptr_p Unexecuted instantiation: pim_bsm.c:atomptr_p Unexecuted instantiation: pim_cmd_common.c:atomptr_p Unexecuted instantiation: pim_errors.c:atomptr_p Unexecuted instantiation: pim_hello.c:atomptr_p Unexecuted instantiation: pim_iface.c:atomptr_p Unexecuted instantiation: pim_ifchannel.c:atomptr_p Unexecuted instantiation: pim_instance.c:atomptr_p Unexecuted instantiation: pim_join.c:atomptr_p Unexecuted instantiation: pim_jp_agg.c:atomptr_p Unexecuted instantiation: pim_macro.c:atomptr_p Unexecuted instantiation: pim_mroute.c:atomptr_p Unexecuted instantiation: pim_msg.c:atomptr_p Unexecuted instantiation: pim_nb.c:atomptr_p Unexecuted instantiation: pim_nb_config.c:atomptr_p Unexecuted instantiation: pim_neighbor.c:atomptr_p Unexecuted instantiation: pim_nht.c:atomptr_p Unexecuted instantiation: pim_oil.c:atomptr_p Unexecuted instantiation: pim_pim.c:atomptr_p Unexecuted instantiation: pim_routemap.c:atomptr_p Unexecuted instantiation: pim_rp.c:atomptr_p Unexecuted instantiation: pim_rpf.c:atomptr_p Unexecuted instantiation: pim_sock.c:atomptr_p Unexecuted instantiation: pim_ssm.c:atomptr_p Unexecuted instantiation: pim_ssmpingd.c:atomptr_p Unexecuted instantiation: pim_static.c:atomptr_p Unexecuted instantiation: pim_str.c:atomptr_p Unexecuted instantiation: pim_tib.c:atomptr_p Unexecuted instantiation: pim_time.c:atomptr_p Unexecuted instantiation: pim_tlv.c:atomptr_p Unexecuted instantiation: pim_upstream.c:atomptr_p Unexecuted instantiation: pim_util.c:atomptr_p Unexecuted instantiation: pim_vty.c:atomptr_p Unexecuted instantiation: pim_zebra.c:atomptr_p Unexecuted instantiation: pim_zlookup.c:atomptr_p Unexecuted instantiation: pim_vxlan.c:atomptr_p Unexecuted instantiation: pim_register.c:atomptr_p Unexecuted instantiation: pimd.c:atomptr_p Unexecuted instantiation: pim_cmd.c:atomptr_p Unexecuted instantiation: pim_igmp.c:atomptr_p Unexecuted instantiation: pim_igmp_mtrace.c:atomptr_p Unexecuted instantiation: pim_igmpv2.c:atomptr_p Unexecuted instantiation: pim_igmpv3.c:atomptr_p Unexecuted instantiation: pim_main.c:atomptr_p Unexecuted instantiation: pim_mlag.c:atomptr_p Unexecuted instantiation: pim_msdp.c:atomptr_p Unexecuted instantiation: pim_msdp_packet.c:atomptr_p Unexecuted instantiation: pim_msdp_socket.c:atomptr_p Unexecuted instantiation: pim_signals.c:atomptr_p Unexecuted instantiation: pim_zpthread.c:atomptr_p Unexecuted instantiation: frr-pim.yang.c:atomptr_p Unexecuted instantiation: frr-pim-rp.yang.c:atomptr_p Unexecuted instantiation: frr-gmp.yang.c:atomptr_p |
51 | | static inline bool atomptr_l(atomptr_t val) |
52 | 16 | { |
53 | 16 | return (bool)(val & ATOMPTR_LOCK); |
54 | 16 | } Unexecuted instantiation: ospf_main.c:atomptr_l Unexecuted instantiation: frr-ospf-route-map.yang.c:atomptr_l Unexecuted instantiation: ospf_bfd.c:atomptr_l Unexecuted instantiation: ospf_dump.c:atomptr_l Unexecuted instantiation: ospf_dump_api.c:atomptr_l Unexecuted instantiation: ospf_errors.c:atomptr_l Unexecuted instantiation: ospf_interface.c:atomptr_l Unexecuted instantiation: ospf_lsa.c:atomptr_l Unexecuted instantiation: ospf_lsdb.c:atomptr_l Unexecuted instantiation: ospf_neighbor.c:atomptr_l Unexecuted instantiation: ospf_network.c:atomptr_l Unexecuted instantiation: ospf_nsm.c:atomptr_l Unexecuted instantiation: ospf_opaque.c:atomptr_l Unexecuted instantiation: ospf_packet.c:atomptr_l Unexecuted instantiation: ospf_ri.c:atomptr_l Unexecuted instantiation: ospf_routemap.c:atomptr_l Unexecuted instantiation: ospf_routemap_nb.c:atomptr_l Unexecuted instantiation: ospf_routemap_nb_config.c:atomptr_l Unexecuted instantiation: ospf_spf.c:atomptr_l Unexecuted instantiation: ospf_ti_lfa.c:atomptr_l Unexecuted instantiation: ospf_sr.c:atomptr_l Unexecuted instantiation: ospf_te.c:atomptr_l Unexecuted instantiation: ospf_vty.c:atomptr_l Unexecuted instantiation: ospf_zebra.c:atomptr_l Unexecuted instantiation: ospfd.c:atomptr_l Unexecuted instantiation: ospf_gr_helper.c:atomptr_l Unexecuted instantiation: ospf_abr.c:atomptr_l Unexecuted instantiation: ospf_apiserver.c:atomptr_l Unexecuted instantiation: ospf_asbr.c:atomptr_l Unexecuted instantiation: ospf_ase.c:atomptr_l Unexecuted instantiation: ospf_ext.c:atomptr_l Unexecuted instantiation: ospf_flood.c:atomptr_l Unexecuted instantiation: ospf_gr.c:atomptr_l Unexecuted instantiation: ospf_ia.c:atomptr_l Unexecuted instantiation: ospf_ism.c:atomptr_l Unexecuted instantiation: ospf_ldp_sync.c:atomptr_l Unexecuted instantiation: ospf_route.c:atomptr_l Unexecuted instantiation: ospf_api.c:atomptr_l Unexecuted instantiation: affinitymap.c:atomptr_l Unexecuted instantiation: affinitymap_cli.c:atomptr_l Unexecuted instantiation: affinitymap_northbound.c:atomptr_l Unexecuted instantiation: agg_table.c:atomptr_l Line | Count | Source | 52 | 16 | { | 53 | 16 | return (bool)(val & ATOMPTR_LOCK); | 54 | 16 | } |
Unexecuted instantiation: asn.c:atomptr_l Unexecuted instantiation: bfd.c:atomptr_l Unexecuted instantiation: buffer.c:atomptr_l Unexecuted instantiation: command.c:atomptr_l Unexecuted instantiation: command_graph.c:atomptr_l Unexecuted instantiation: command_lex.c:atomptr_l Unexecuted instantiation: command_match.c:atomptr_l Unexecuted instantiation: command_parse.c:atomptr_l Unexecuted instantiation: cspf.c:atomptr_l Unexecuted instantiation: debug.c:atomptr_l Unexecuted instantiation: distribute.c:atomptr_l Unexecuted instantiation: ferr.c:atomptr_l Unexecuted instantiation: filter.c:atomptr_l Unexecuted instantiation: filter_cli.c:atomptr_l Unexecuted instantiation: filter_nb.c:atomptr_l Unexecuted instantiation: flex_algo.c:atomptr_l Unexecuted instantiation: frrcu.c:atomptr_l Unexecuted instantiation: frr_pthread.c:atomptr_l Unexecuted instantiation: grammar_sandbox.c:atomptr_l Unexecuted instantiation: hash.c:atomptr_l Unexecuted instantiation: id_alloc.c:atomptr_l Unexecuted instantiation: if.c:atomptr_l Unexecuted instantiation: if_rmap.c:atomptr_l Unexecuted instantiation: json.c:atomptr_l Unexecuted instantiation: keychain.c:atomptr_l Unexecuted instantiation: ldp_sync.c:atomptr_l Unexecuted instantiation: lib_errors.c:atomptr_l Unexecuted instantiation: lib_vty.c:atomptr_l Unexecuted instantiation: libfrr.c:atomptr_l Unexecuted instantiation: link_state.c:atomptr_l Unexecuted instantiation: log.c:atomptr_l Unexecuted instantiation: log_filter.c:atomptr_l Unexecuted instantiation: log_vty.c:atomptr_l Unexecuted instantiation: memory.c:atomptr_l Unexecuted instantiation: mgmt_be_client.c:atomptr_l Unexecuted instantiation: mgmt_fe_client.c:atomptr_l Unexecuted instantiation: mgmt_msg.c:atomptr_l Unexecuted instantiation: mlag.c:atomptr_l Unexecuted instantiation: srv6.c:atomptr_l Unexecuted instantiation: network.c:atomptr_l Unexecuted instantiation: nexthop.c:atomptr_l Unexecuted instantiation: netns_linux.c:atomptr_l Unexecuted instantiation: nexthop_group.c:atomptr_l Unexecuted instantiation: northbound.c:atomptr_l Unexecuted instantiation: northbound_cli.c:atomptr_l Unexecuted instantiation: northbound_db.c:atomptr_l Unexecuted instantiation: pid_output.c:atomptr_l Unexecuted instantiation: plist.c:atomptr_l Unexecuted instantiation: prefix.c:atomptr_l Unexecuted instantiation: privs.c:atomptr_l Unexecuted instantiation: pullwr.c:atomptr_l Unexecuted instantiation: qobj.c:atomptr_l Unexecuted instantiation: routemap.c:atomptr_l Unexecuted instantiation: routemap_cli.c:atomptr_l Unexecuted instantiation: routemap_northbound.c:atomptr_l Unexecuted instantiation: sbuf.c:atomptr_l Unexecuted instantiation: sigevent.c:atomptr_l Unexecuted instantiation: skiplist.c:atomptr_l Unexecuted instantiation: sockopt.c:atomptr_l Unexecuted instantiation: sockunion.c:atomptr_l Unexecuted instantiation: spf_backoff.c:atomptr_l Unexecuted instantiation: srcdest_table.c:atomptr_l Unexecuted instantiation: stream.c:atomptr_l Unexecuted instantiation: systemd.c:atomptr_l Unexecuted instantiation: table.c:atomptr_l Unexecuted instantiation: termtable.c:atomptr_l Unexecuted instantiation: event.c:atomptr_l Unexecuted instantiation: vrf.c:atomptr_l Unexecuted instantiation: vty.c:atomptr_l Unexecuted instantiation: wheel.c:atomptr_l Unexecuted instantiation: workqueue.c:atomptr_l Unexecuted instantiation: xref.c:atomptr_l Unexecuted instantiation: yang.c:atomptr_l Unexecuted instantiation: yang_translator.c:atomptr_l Unexecuted instantiation: yang_wrappers.c:atomptr_l Unexecuted instantiation: zclient.c:atomptr_l Unexecuted instantiation: zlog.c:atomptr_l Unexecuted instantiation: zlog_5424.c:atomptr_l Unexecuted instantiation: zlog_5424_cli.c:atomptr_l Unexecuted instantiation: zlog_live.c:atomptr_l Unexecuted instantiation: zlog_targets.c:atomptr_l Unexecuted instantiation: routing_nb.c:atomptr_l Unexecuted instantiation: routing_nb_config.c:atomptr_l Unexecuted instantiation: tc.c:atomptr_l Unexecuted instantiation: frr-affinity-map.yang.c:atomptr_l Unexecuted instantiation: frr-filter.yang.c:atomptr_l Unexecuted instantiation: frr-if-rmap.yang.c:atomptr_l Unexecuted instantiation: frr-interface.yang.c:atomptr_l Unexecuted instantiation: frr-route-map.yang.c:atomptr_l Unexecuted instantiation: frr-route-types.yang.c:atomptr_l Unexecuted instantiation: frr-vrf.yang.c:atomptr_l Unexecuted instantiation: frr-routing.yang.c:atomptr_l Unexecuted instantiation: frr-nexthop.yang.c:atomptr_l Unexecuted instantiation: ietf-routing-types.yang.c:atomptr_l Unexecuted instantiation: ietf-interfaces.yang.c:atomptr_l Unexecuted instantiation: ietf-bgp-types.yang.c:atomptr_l Unexecuted instantiation: frr-module-translator.yang.c:atomptr_l Unexecuted instantiation: connected.c:atomptr_l Unexecuted instantiation: if_netlink.c:atomptr_l Unexecuted instantiation: interface.c:atomptr_l Unexecuted instantiation: ioctl.c:atomptr_l Unexecuted instantiation: ipforward_proc.c:atomptr_l Unexecuted instantiation: kernel_netlink.c:atomptr_l Unexecuted instantiation: label_manager.c:atomptr_l Unexecuted instantiation: main.c:atomptr_l Unexecuted instantiation: netconf_netlink.c:atomptr_l Unexecuted instantiation: redistribute.c:atomptr_l Unexecuted instantiation: router-id.c:atomptr_l Unexecuted instantiation: rt_netlink.c:atomptr_l Unexecuted instantiation: rtadv.c:atomptr_l Unexecuted instantiation: rtread_netlink.c:atomptr_l Unexecuted instantiation: rule_netlink.c:atomptr_l Unexecuted instantiation: table_manager.c:atomptr_l Unexecuted instantiation: tc_netlink.c:atomptr_l Unexecuted instantiation: zapi_msg.c:atomptr_l Unexecuted instantiation: zebra_affinitymap.c:atomptr_l Unexecuted instantiation: zebra_dplane.c:atomptr_l Unexecuted instantiation: zebra_errors.c:atomptr_l Unexecuted instantiation: zebra_gr.c:atomptr_l Unexecuted instantiation: zebra_l2.c:atomptr_l Unexecuted instantiation: zebra_l2_bridge_if.c:atomptr_l Unexecuted instantiation: zebra_evpn.c:atomptr_l Unexecuted instantiation: zebra_evpn_mac.c:atomptr_l Unexecuted instantiation: zebra_evpn_neigh.c:atomptr_l Unexecuted instantiation: zebra_mlag.c:atomptr_l Unexecuted instantiation: zebra_mlag_vty.c:atomptr_l Unexecuted instantiation: zebra_mpls.c:atomptr_l Unexecuted instantiation: zebra_mpls_netlink.c:atomptr_l Unexecuted instantiation: zebra_mpls_null.c:atomptr_l Unexecuted instantiation: zebra_mpls_vty.c:atomptr_l Unexecuted instantiation: zebra_srv6.c:atomptr_l Unexecuted instantiation: zebra_srv6_vty.c:atomptr_l Unexecuted instantiation: zebra_mroute.c:atomptr_l Unexecuted instantiation: zebra_nb.c:atomptr_l Unexecuted instantiation: zebra_nb_config.c:atomptr_l Unexecuted instantiation: zebra_nb_rpcs.c:atomptr_l Unexecuted instantiation: zebra_nb_state.c:atomptr_l Unexecuted instantiation: zebra_netns_id.c:atomptr_l Unexecuted instantiation: zebra_netns_notify.c:atomptr_l Unexecuted instantiation: zebra_nhg.c:atomptr_l Unexecuted instantiation: zebra_ns.c:atomptr_l Unexecuted instantiation: zebra_opaque.c:atomptr_l Unexecuted instantiation: zebra_pbr.c:atomptr_l Unexecuted instantiation: zebra_ptm.c:atomptr_l Unexecuted instantiation: zebra_ptm_redistribute.c:atomptr_l Unexecuted instantiation: zebra_pw.c:atomptr_l Unexecuted instantiation: zebra_rib.c:atomptr_l Unexecuted instantiation: zebra_router.c:atomptr_l Unexecuted instantiation: zebra_rnh.c:atomptr_l Unexecuted instantiation: zebra_routemap.c:atomptr_l Unexecuted instantiation: zebra_routemap_nb.c:atomptr_l Unexecuted instantiation: zebra_routemap_nb_config.c:atomptr_l Unexecuted instantiation: zebra_script.c:atomptr_l Unexecuted instantiation: zebra_srte.c:atomptr_l Unexecuted instantiation: zebra_tc.c:atomptr_l Unexecuted instantiation: zebra_vrf.c:atomptr_l Unexecuted instantiation: zebra_vty.c:atomptr_l Unexecuted instantiation: zebra_vxlan.c:atomptr_l Unexecuted instantiation: zebra_vxlan_if.c:atomptr_l Unexecuted instantiation: zebra_evpn_mh.c:atomptr_l Unexecuted instantiation: zebra_neigh.c:atomptr_l Unexecuted instantiation: zserv.c:atomptr_l Unexecuted instantiation: debug_nl.c:atomptr_l Unexecuted instantiation: frr-zebra.yang.c:atomptr_l Unexecuted instantiation: frr-zebra-route-map.yang.c:atomptr_l Unexecuted instantiation: bgp_main.c:atomptr_l Unexecuted instantiation: frr-bgp-types.yang.c:atomptr_l Unexecuted instantiation: frr-bgp.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-common-structure.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-common.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-neighbor.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-peer-group.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-bmp.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-rpki.yang.c:atomptr_l Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-filter.yang.c:atomptr_l Unexecuted instantiation: frr-bgp-route-map.yang.c:atomptr_l Unexecuted instantiation: bgp_attr.c:atomptr_l Unexecuted instantiation: bgp_attr_evpn.c:atomptr_l Unexecuted instantiation: bgp_clist.c:atomptr_l Unexecuted instantiation: bgp_community.c:atomptr_l Unexecuted instantiation: bgp_community_alias.c:atomptr_l Unexecuted instantiation: bgp_debug.c:atomptr_l Unexecuted instantiation: bgp_dump.c:atomptr_l Unexecuted instantiation: bgp_ecommunity.c:atomptr_l Unexecuted instantiation: bgp_errors.c:atomptr_l Unexecuted instantiation: bgp_evpn.c:atomptr_l Unexecuted instantiation: bgp_evpn_mh.c:atomptr_l Unexecuted instantiation: bgp_evpn_vty.c:atomptr_l Unexecuted instantiation: bgp_filter.c:atomptr_l Unexecuted instantiation: bgp_flowspec_vty.c:atomptr_l Unexecuted instantiation: bgp_fsm.c:atomptr_l Unexecuted instantiation: bgp_io.c:atomptr_l Unexecuted instantiation: bgp_keepalives.c:atomptr_l Unexecuted instantiation: bgp_labelpool.c:atomptr_l Unexecuted instantiation: bgp_lcommunity.c:atomptr_l Unexecuted instantiation: bgp_mac.c:atomptr_l Unexecuted instantiation: bgp_mpath.c:atomptr_l Unexecuted instantiation: bgp_mplsvpn.c:atomptr_l Unexecuted instantiation: bgp_network.c:atomptr_l Unexecuted instantiation: bgp_nexthop.c:atomptr_l Unexecuted instantiation: bgp_nht.c:atomptr_l Unexecuted instantiation: bgp_packet.c:atomptr_l Unexecuted instantiation: bgp_pbr.c:atomptr_l Unexecuted instantiation: bgp_rd.c:atomptr_l Unexecuted instantiation: bgp_regex.c:atomptr_l Unexecuted instantiation: bgp_route.c:atomptr_l Unexecuted instantiation: bgp_routemap.c:atomptr_l Unexecuted instantiation: bgp_routemap_nb.c:atomptr_l Unexecuted instantiation: bgp_routemap_nb_config.c:atomptr_l Unexecuted instantiation: bgp_table.c:atomptr_l Unexecuted instantiation: bgp_updgrp.c:atomptr_l Unexecuted instantiation: bgp_updgrp_adv.c:atomptr_l Unexecuted instantiation: bgp_updgrp_packet.c:atomptr_l Unexecuted instantiation: bgp_vpn.c:atomptr_l Unexecuted instantiation: bgp_vty.c:atomptr_l Unexecuted instantiation: bgp_zebra.c:atomptr_l Unexecuted instantiation: bgpd.c:atomptr_l Unexecuted instantiation: bgp_rfapi_cfg.c:atomptr_l Unexecuted instantiation: rfapi_import.c:atomptr_l Unexecuted instantiation: rfapi.c:atomptr_l Unexecuted instantiation: rfapi_ap.c:atomptr_l Unexecuted instantiation: rfapi_encap_tlv.c:atomptr_l Unexecuted instantiation: rfapi_nve_addr.c:atomptr_l Unexecuted instantiation: rfapi_monitor.c:atomptr_l Unexecuted instantiation: rfapi_rib.c:atomptr_l Unexecuted instantiation: rfapi_vty.c:atomptr_l Unexecuted instantiation: vnc_debug.c:atomptr_l Unexecuted instantiation: vnc_export_bgp.c:atomptr_l Unexecuted instantiation: vnc_export_table.c:atomptr_l Unexecuted instantiation: vnc_import_bgp.c:atomptr_l Unexecuted instantiation: vnc_zebra.c:atomptr_l Unexecuted instantiation: bgp_addpath.c:atomptr_l Unexecuted instantiation: bgp_advertise.c:atomptr_l Unexecuted instantiation: bgp_aspath.c:atomptr_l Unexecuted instantiation: bgp_bfd.c:atomptr_l Unexecuted instantiation: bgp_conditional_adv.c:atomptr_l Unexecuted instantiation: bgp_damp.c:atomptr_l Unexecuted instantiation: bgp_encap_tlv.c:atomptr_l Unexecuted instantiation: bgp_flowspec.c:atomptr_l Unexecuted instantiation: bgp_flowspec_util.c:atomptr_l Unexecuted instantiation: bgp_label.c:atomptr_l Unexecuted instantiation: bgp_open.c:atomptr_l Unexecuted instantiation: rfp_example.c:atomptr_l Unexecuted instantiation: pim_addr.c:atomptr_l Unexecuted instantiation: pim_assert.c:atomptr_l Unexecuted instantiation: pim_bfd.c:atomptr_l Unexecuted instantiation: pim_bsm.c:atomptr_l Unexecuted instantiation: pim_cmd_common.c:atomptr_l Unexecuted instantiation: pim_errors.c:atomptr_l Unexecuted instantiation: pim_hello.c:atomptr_l Unexecuted instantiation: pim_iface.c:atomptr_l Unexecuted instantiation: pim_ifchannel.c:atomptr_l Unexecuted instantiation: pim_instance.c:atomptr_l Unexecuted instantiation: pim_join.c:atomptr_l Unexecuted instantiation: pim_jp_agg.c:atomptr_l Unexecuted instantiation: pim_macro.c:atomptr_l Unexecuted instantiation: pim_mroute.c:atomptr_l Unexecuted instantiation: pim_msg.c:atomptr_l Unexecuted instantiation: pim_nb.c:atomptr_l Unexecuted instantiation: pim_nb_config.c:atomptr_l Unexecuted instantiation: pim_neighbor.c:atomptr_l Unexecuted instantiation: pim_nht.c:atomptr_l Unexecuted instantiation: pim_oil.c:atomptr_l Unexecuted instantiation: pim_pim.c:atomptr_l Unexecuted instantiation: pim_routemap.c:atomptr_l Unexecuted instantiation: pim_rp.c:atomptr_l Unexecuted instantiation: pim_rpf.c:atomptr_l Unexecuted instantiation: pim_sock.c:atomptr_l Unexecuted instantiation: pim_ssm.c:atomptr_l Unexecuted instantiation: pim_ssmpingd.c:atomptr_l Unexecuted instantiation: pim_static.c:atomptr_l Unexecuted instantiation: pim_str.c:atomptr_l Unexecuted instantiation: pim_tib.c:atomptr_l Unexecuted instantiation: pim_time.c:atomptr_l Unexecuted instantiation: pim_tlv.c:atomptr_l Unexecuted instantiation: pim_upstream.c:atomptr_l Unexecuted instantiation: pim_util.c:atomptr_l Unexecuted instantiation: pim_vty.c:atomptr_l Unexecuted instantiation: pim_zebra.c:atomptr_l Unexecuted instantiation: pim_zlookup.c:atomptr_l Unexecuted instantiation: pim_vxlan.c:atomptr_l Unexecuted instantiation: pim_register.c:atomptr_l Unexecuted instantiation: pimd.c:atomptr_l Unexecuted instantiation: pim_cmd.c:atomptr_l Unexecuted instantiation: pim_igmp.c:atomptr_l Unexecuted instantiation: pim_igmp_mtrace.c:atomptr_l Unexecuted instantiation: pim_igmpv2.c:atomptr_l Unexecuted instantiation: pim_igmpv3.c:atomptr_l Unexecuted instantiation: pim_main.c:atomptr_l Unexecuted instantiation: pim_mlag.c:atomptr_l Unexecuted instantiation: pim_msdp.c:atomptr_l Unexecuted instantiation: pim_msdp_packet.c:atomptr_l Unexecuted instantiation: pim_msdp_socket.c:atomptr_l Unexecuted instantiation: pim_signals.c:atomptr_l Unexecuted instantiation: pim_zpthread.c:atomptr_l Unexecuted instantiation: frr-pim.yang.c:atomptr_l Unexecuted instantiation: frr-pim-rp.yang.c:atomptr_l Unexecuted instantiation: frr-gmp.yang.c:atomptr_l |
55 | | static inline bool atomptr_u(atomptr_t val) |
56 | 0 | { |
57 | 0 | return (bool)(val & ATOMPTR_USER); |
58 | 0 | } Unexecuted instantiation: ospf_main.c:atomptr_u Unexecuted instantiation: frr-ospf-route-map.yang.c:atomptr_u Unexecuted instantiation: ospf_bfd.c:atomptr_u Unexecuted instantiation: ospf_dump.c:atomptr_u Unexecuted instantiation: ospf_dump_api.c:atomptr_u Unexecuted instantiation: ospf_errors.c:atomptr_u Unexecuted instantiation: ospf_interface.c:atomptr_u Unexecuted instantiation: ospf_lsa.c:atomptr_u Unexecuted instantiation: ospf_lsdb.c:atomptr_u Unexecuted instantiation: ospf_neighbor.c:atomptr_u Unexecuted instantiation: ospf_network.c:atomptr_u Unexecuted instantiation: ospf_nsm.c:atomptr_u Unexecuted instantiation: ospf_opaque.c:atomptr_u Unexecuted instantiation: ospf_packet.c:atomptr_u Unexecuted instantiation: ospf_ri.c:atomptr_u Unexecuted instantiation: ospf_routemap.c:atomptr_u Unexecuted instantiation: ospf_routemap_nb.c:atomptr_u Unexecuted instantiation: ospf_routemap_nb_config.c:atomptr_u Unexecuted instantiation: ospf_spf.c:atomptr_u Unexecuted instantiation: ospf_ti_lfa.c:atomptr_u Unexecuted instantiation: ospf_sr.c:atomptr_u Unexecuted instantiation: ospf_te.c:atomptr_u Unexecuted instantiation: ospf_vty.c:atomptr_u Unexecuted instantiation: ospf_zebra.c:atomptr_u Unexecuted instantiation: ospfd.c:atomptr_u Unexecuted instantiation: ospf_gr_helper.c:atomptr_u Unexecuted instantiation: ospf_abr.c:atomptr_u Unexecuted instantiation: ospf_apiserver.c:atomptr_u Unexecuted instantiation: ospf_asbr.c:atomptr_u Unexecuted instantiation: ospf_ase.c:atomptr_u Unexecuted instantiation: ospf_ext.c:atomptr_u Unexecuted instantiation: ospf_flood.c:atomptr_u Unexecuted instantiation: ospf_gr.c:atomptr_u Unexecuted instantiation: ospf_ia.c:atomptr_u Unexecuted instantiation: ospf_ism.c:atomptr_u Unexecuted instantiation: ospf_ldp_sync.c:atomptr_u Unexecuted instantiation: ospf_route.c:atomptr_u Unexecuted instantiation: ospf_api.c:atomptr_u Unexecuted instantiation: affinitymap.c:atomptr_u Unexecuted instantiation: affinitymap_cli.c:atomptr_u Unexecuted instantiation: affinitymap_northbound.c:atomptr_u Unexecuted instantiation: agg_table.c:atomptr_u Unexecuted instantiation: atomlist.c:atomptr_u Unexecuted instantiation: asn.c:atomptr_u Unexecuted instantiation: bfd.c:atomptr_u Unexecuted instantiation: buffer.c:atomptr_u Unexecuted instantiation: command.c:atomptr_u Unexecuted instantiation: command_graph.c:atomptr_u Unexecuted instantiation: command_lex.c:atomptr_u Unexecuted instantiation: command_match.c:atomptr_u Unexecuted instantiation: command_parse.c:atomptr_u Unexecuted instantiation: cspf.c:atomptr_u Unexecuted instantiation: debug.c:atomptr_u Unexecuted instantiation: distribute.c:atomptr_u Unexecuted instantiation: ferr.c:atomptr_u Unexecuted instantiation: filter.c:atomptr_u Unexecuted instantiation: filter_cli.c:atomptr_u Unexecuted instantiation: filter_nb.c:atomptr_u Unexecuted instantiation: flex_algo.c:atomptr_u Unexecuted instantiation: frrcu.c:atomptr_u Unexecuted instantiation: frr_pthread.c:atomptr_u Unexecuted instantiation: grammar_sandbox.c:atomptr_u Unexecuted instantiation: hash.c:atomptr_u Unexecuted instantiation: id_alloc.c:atomptr_u Unexecuted instantiation: if.c:atomptr_u Unexecuted instantiation: if_rmap.c:atomptr_u Unexecuted instantiation: json.c:atomptr_u Unexecuted instantiation: keychain.c:atomptr_u Unexecuted instantiation: ldp_sync.c:atomptr_u Unexecuted instantiation: lib_errors.c:atomptr_u Unexecuted instantiation: lib_vty.c:atomptr_u Unexecuted instantiation: libfrr.c:atomptr_u Unexecuted instantiation: link_state.c:atomptr_u Unexecuted instantiation: log.c:atomptr_u Unexecuted instantiation: log_filter.c:atomptr_u Unexecuted instantiation: log_vty.c:atomptr_u Unexecuted instantiation: memory.c:atomptr_u Unexecuted instantiation: mgmt_be_client.c:atomptr_u Unexecuted instantiation: mgmt_fe_client.c:atomptr_u Unexecuted instantiation: mgmt_msg.c:atomptr_u Unexecuted instantiation: mlag.c:atomptr_u Unexecuted instantiation: srv6.c:atomptr_u Unexecuted instantiation: network.c:atomptr_u Unexecuted instantiation: nexthop.c:atomptr_u Unexecuted instantiation: netns_linux.c:atomptr_u Unexecuted instantiation: nexthop_group.c:atomptr_u Unexecuted instantiation: northbound.c:atomptr_u Unexecuted instantiation: northbound_cli.c:atomptr_u Unexecuted instantiation: northbound_db.c:atomptr_u Unexecuted instantiation: pid_output.c:atomptr_u Unexecuted instantiation: plist.c:atomptr_u Unexecuted instantiation: prefix.c:atomptr_u Unexecuted instantiation: privs.c:atomptr_u Unexecuted instantiation: pullwr.c:atomptr_u Unexecuted instantiation: qobj.c:atomptr_u Unexecuted instantiation: routemap.c:atomptr_u Unexecuted instantiation: routemap_cli.c:atomptr_u Unexecuted instantiation: routemap_northbound.c:atomptr_u Unexecuted instantiation: sbuf.c:atomptr_u Unexecuted instantiation: sigevent.c:atomptr_u Unexecuted instantiation: skiplist.c:atomptr_u Unexecuted instantiation: sockopt.c:atomptr_u Unexecuted instantiation: sockunion.c:atomptr_u Unexecuted instantiation: spf_backoff.c:atomptr_u Unexecuted instantiation: srcdest_table.c:atomptr_u Unexecuted instantiation: stream.c:atomptr_u Unexecuted instantiation: systemd.c:atomptr_u Unexecuted instantiation: table.c:atomptr_u Unexecuted instantiation: termtable.c:atomptr_u Unexecuted instantiation: event.c:atomptr_u Unexecuted instantiation: vrf.c:atomptr_u Unexecuted instantiation: vty.c:atomptr_u Unexecuted instantiation: wheel.c:atomptr_u Unexecuted instantiation: workqueue.c:atomptr_u Unexecuted instantiation: xref.c:atomptr_u Unexecuted instantiation: yang.c:atomptr_u Unexecuted instantiation: yang_translator.c:atomptr_u Unexecuted instantiation: yang_wrappers.c:atomptr_u Unexecuted instantiation: zclient.c:atomptr_u Unexecuted instantiation: zlog.c:atomptr_u Unexecuted instantiation: zlog_5424.c:atomptr_u Unexecuted instantiation: zlog_5424_cli.c:atomptr_u Unexecuted instantiation: zlog_live.c:atomptr_u Unexecuted instantiation: zlog_targets.c:atomptr_u Unexecuted instantiation: routing_nb.c:atomptr_u Unexecuted instantiation: routing_nb_config.c:atomptr_u Unexecuted instantiation: tc.c:atomptr_u Unexecuted instantiation: frr-affinity-map.yang.c:atomptr_u Unexecuted instantiation: frr-filter.yang.c:atomptr_u Unexecuted instantiation: frr-if-rmap.yang.c:atomptr_u Unexecuted instantiation: frr-interface.yang.c:atomptr_u Unexecuted instantiation: frr-route-map.yang.c:atomptr_u Unexecuted instantiation: frr-route-types.yang.c:atomptr_u Unexecuted instantiation: frr-vrf.yang.c:atomptr_u Unexecuted instantiation: frr-routing.yang.c:atomptr_u Unexecuted instantiation: frr-nexthop.yang.c:atomptr_u Unexecuted instantiation: ietf-routing-types.yang.c:atomptr_u Unexecuted instantiation: ietf-interfaces.yang.c:atomptr_u Unexecuted instantiation: ietf-bgp-types.yang.c:atomptr_u Unexecuted instantiation: frr-module-translator.yang.c:atomptr_u Unexecuted instantiation: connected.c:atomptr_u Unexecuted instantiation: if_netlink.c:atomptr_u Unexecuted instantiation: interface.c:atomptr_u Unexecuted instantiation: ioctl.c:atomptr_u Unexecuted instantiation: ipforward_proc.c:atomptr_u Unexecuted instantiation: kernel_netlink.c:atomptr_u Unexecuted instantiation: label_manager.c:atomptr_u Unexecuted instantiation: main.c:atomptr_u Unexecuted instantiation: netconf_netlink.c:atomptr_u Unexecuted instantiation: redistribute.c:atomptr_u Unexecuted instantiation: router-id.c:atomptr_u Unexecuted instantiation: rt_netlink.c:atomptr_u Unexecuted instantiation: rtadv.c:atomptr_u Unexecuted instantiation: rtread_netlink.c:atomptr_u Unexecuted instantiation: rule_netlink.c:atomptr_u Unexecuted instantiation: table_manager.c:atomptr_u Unexecuted instantiation: tc_netlink.c:atomptr_u Unexecuted instantiation: zapi_msg.c:atomptr_u Unexecuted instantiation: zebra_affinitymap.c:atomptr_u Unexecuted instantiation: zebra_dplane.c:atomptr_u Unexecuted instantiation: zebra_errors.c:atomptr_u Unexecuted instantiation: zebra_gr.c:atomptr_u Unexecuted instantiation: zebra_l2.c:atomptr_u Unexecuted instantiation: zebra_l2_bridge_if.c:atomptr_u Unexecuted instantiation: zebra_evpn.c:atomptr_u Unexecuted instantiation: zebra_evpn_mac.c:atomptr_u Unexecuted instantiation: zebra_evpn_neigh.c:atomptr_u Unexecuted instantiation: zebra_mlag.c:atomptr_u Unexecuted instantiation: zebra_mlag_vty.c:atomptr_u Unexecuted instantiation: zebra_mpls.c:atomptr_u Unexecuted instantiation: zebra_mpls_netlink.c:atomptr_u Unexecuted instantiation: zebra_mpls_null.c:atomptr_u Unexecuted instantiation: zebra_mpls_vty.c:atomptr_u Unexecuted instantiation: zebra_srv6.c:atomptr_u Unexecuted instantiation: zebra_srv6_vty.c:atomptr_u Unexecuted instantiation: zebra_mroute.c:atomptr_u Unexecuted instantiation: zebra_nb.c:atomptr_u Unexecuted instantiation: zebra_nb_config.c:atomptr_u Unexecuted instantiation: zebra_nb_rpcs.c:atomptr_u Unexecuted instantiation: zebra_nb_state.c:atomptr_u Unexecuted instantiation: zebra_netns_id.c:atomptr_u Unexecuted instantiation: zebra_netns_notify.c:atomptr_u Unexecuted instantiation: zebra_nhg.c:atomptr_u Unexecuted instantiation: zebra_ns.c:atomptr_u Unexecuted instantiation: zebra_opaque.c:atomptr_u Unexecuted instantiation: zebra_pbr.c:atomptr_u Unexecuted instantiation: zebra_ptm.c:atomptr_u Unexecuted instantiation: zebra_ptm_redistribute.c:atomptr_u Unexecuted instantiation: zebra_pw.c:atomptr_u Unexecuted instantiation: zebra_rib.c:atomptr_u Unexecuted instantiation: zebra_router.c:atomptr_u Unexecuted instantiation: zebra_rnh.c:atomptr_u Unexecuted instantiation: zebra_routemap.c:atomptr_u Unexecuted instantiation: zebra_routemap_nb.c:atomptr_u Unexecuted instantiation: zebra_routemap_nb_config.c:atomptr_u Unexecuted instantiation: zebra_script.c:atomptr_u Unexecuted instantiation: zebra_srte.c:atomptr_u Unexecuted instantiation: zebra_tc.c:atomptr_u Unexecuted instantiation: zebra_vrf.c:atomptr_u Unexecuted instantiation: zebra_vty.c:atomptr_u Unexecuted instantiation: zebra_vxlan.c:atomptr_u Unexecuted instantiation: zebra_vxlan_if.c:atomptr_u Unexecuted instantiation: zebra_evpn_mh.c:atomptr_u Unexecuted instantiation: zebra_neigh.c:atomptr_u Unexecuted instantiation: zserv.c:atomptr_u Unexecuted instantiation: debug_nl.c:atomptr_u Unexecuted instantiation: frr-zebra.yang.c:atomptr_u Unexecuted instantiation: frr-zebra-route-map.yang.c:atomptr_u Unexecuted instantiation: bgp_main.c:atomptr_u Unexecuted instantiation: frr-bgp-types.yang.c:atomptr_u Unexecuted instantiation: frr-bgp.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-common-structure.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-common.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-common-multiprotocol.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-neighbor.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-peer-group.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-bmp.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-rpki.yang.c:atomptr_u Unexecuted instantiation: frr-deviations-bgp-datacenter.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-filter.yang.c:atomptr_u Unexecuted instantiation: frr-bgp-route-map.yang.c:atomptr_u Unexecuted instantiation: bgp_attr.c:atomptr_u Unexecuted instantiation: bgp_attr_evpn.c:atomptr_u Unexecuted instantiation: bgp_clist.c:atomptr_u Unexecuted instantiation: bgp_community.c:atomptr_u Unexecuted instantiation: bgp_community_alias.c:atomptr_u Unexecuted instantiation: bgp_debug.c:atomptr_u Unexecuted instantiation: bgp_dump.c:atomptr_u Unexecuted instantiation: bgp_ecommunity.c:atomptr_u Unexecuted instantiation: bgp_errors.c:atomptr_u Unexecuted instantiation: bgp_evpn.c:atomptr_u Unexecuted instantiation: bgp_evpn_mh.c:atomptr_u Unexecuted instantiation: bgp_evpn_vty.c:atomptr_u Unexecuted instantiation: bgp_filter.c:atomptr_u Unexecuted instantiation: bgp_flowspec_vty.c:atomptr_u Unexecuted instantiation: bgp_fsm.c:atomptr_u Unexecuted instantiation: bgp_io.c:atomptr_u Unexecuted instantiation: bgp_keepalives.c:atomptr_u Unexecuted instantiation: bgp_labelpool.c:atomptr_u Unexecuted instantiation: bgp_lcommunity.c:atomptr_u Unexecuted instantiation: bgp_mac.c:atomptr_u Unexecuted instantiation: bgp_mpath.c:atomptr_u Unexecuted instantiation: bgp_mplsvpn.c:atomptr_u Unexecuted instantiation: bgp_network.c:atomptr_u Unexecuted instantiation: bgp_nexthop.c:atomptr_u Unexecuted instantiation: bgp_nht.c:atomptr_u Unexecuted instantiation: bgp_packet.c:atomptr_u Unexecuted instantiation: bgp_pbr.c:atomptr_u Unexecuted instantiation: bgp_rd.c:atomptr_u Unexecuted instantiation: bgp_regex.c:atomptr_u Unexecuted instantiation: bgp_route.c:atomptr_u Unexecuted instantiation: bgp_routemap.c:atomptr_u Unexecuted instantiation: bgp_routemap_nb.c:atomptr_u Unexecuted instantiation: bgp_routemap_nb_config.c:atomptr_u Unexecuted instantiation: bgp_table.c:atomptr_u Unexecuted instantiation: bgp_updgrp.c:atomptr_u Unexecuted instantiation: bgp_updgrp_adv.c:atomptr_u Unexecuted instantiation: bgp_updgrp_packet.c:atomptr_u Unexecuted instantiation: bgp_vpn.c:atomptr_u Unexecuted instantiation: bgp_vty.c:atomptr_u Unexecuted instantiation: bgp_zebra.c:atomptr_u Unexecuted instantiation: bgpd.c:atomptr_u Unexecuted instantiation: bgp_rfapi_cfg.c:atomptr_u Unexecuted instantiation: rfapi_import.c:atomptr_u Unexecuted instantiation: rfapi.c:atomptr_u Unexecuted instantiation: rfapi_ap.c:atomptr_u Unexecuted instantiation: rfapi_encap_tlv.c:atomptr_u Unexecuted instantiation: rfapi_nve_addr.c:atomptr_u Unexecuted instantiation: rfapi_monitor.c:atomptr_u Unexecuted instantiation: rfapi_rib.c:atomptr_u Unexecuted instantiation: rfapi_vty.c:atomptr_u Unexecuted instantiation: vnc_debug.c:atomptr_u Unexecuted instantiation: vnc_export_bgp.c:atomptr_u Unexecuted instantiation: vnc_export_table.c:atomptr_u Unexecuted instantiation: vnc_import_bgp.c:atomptr_u Unexecuted instantiation: vnc_zebra.c:atomptr_u Unexecuted instantiation: bgp_addpath.c:atomptr_u Unexecuted instantiation: bgp_advertise.c:atomptr_u Unexecuted instantiation: bgp_aspath.c:atomptr_u Unexecuted instantiation: bgp_bfd.c:atomptr_u Unexecuted instantiation: bgp_conditional_adv.c:atomptr_u Unexecuted instantiation: bgp_damp.c:atomptr_u Unexecuted instantiation: bgp_encap_tlv.c:atomptr_u Unexecuted instantiation: bgp_flowspec.c:atomptr_u Unexecuted instantiation: bgp_flowspec_util.c:atomptr_u Unexecuted instantiation: bgp_label.c:atomptr_u Unexecuted instantiation: bgp_open.c:atomptr_u Unexecuted instantiation: rfp_example.c:atomptr_u Unexecuted instantiation: pim_addr.c:atomptr_u Unexecuted instantiation: pim_assert.c:atomptr_u Unexecuted instantiation: pim_bfd.c:atomptr_u Unexecuted instantiation: pim_bsm.c:atomptr_u Unexecuted instantiation: pim_cmd_common.c:atomptr_u Unexecuted instantiation: pim_errors.c:atomptr_u Unexecuted instantiation: pim_hello.c:atomptr_u Unexecuted instantiation: pim_iface.c:atomptr_u Unexecuted instantiation: pim_ifchannel.c:atomptr_u Unexecuted instantiation: pim_instance.c:atomptr_u Unexecuted instantiation: pim_join.c:atomptr_u Unexecuted instantiation: pim_jp_agg.c:atomptr_u Unexecuted instantiation: pim_macro.c:atomptr_u Unexecuted instantiation: pim_mroute.c:atomptr_u Unexecuted instantiation: pim_msg.c:atomptr_u Unexecuted instantiation: pim_nb.c:atomptr_u Unexecuted instantiation: pim_nb_config.c:atomptr_u Unexecuted instantiation: pim_neighbor.c:atomptr_u Unexecuted instantiation: pim_nht.c:atomptr_u Unexecuted instantiation: pim_oil.c:atomptr_u Unexecuted instantiation: pim_pim.c:atomptr_u Unexecuted instantiation: pim_routemap.c:atomptr_u Unexecuted instantiation: pim_rp.c:atomptr_u Unexecuted instantiation: pim_rpf.c:atomptr_u Unexecuted instantiation: pim_sock.c:atomptr_u Unexecuted instantiation: pim_ssm.c:atomptr_u Unexecuted instantiation: pim_ssmpingd.c:atomptr_u Unexecuted instantiation: pim_static.c:atomptr_u Unexecuted instantiation: pim_str.c:atomptr_u Unexecuted instantiation: pim_tib.c:atomptr_u Unexecuted instantiation: pim_time.c:atomptr_u Unexecuted instantiation: pim_tlv.c:atomptr_u Unexecuted instantiation: pim_upstream.c:atomptr_u Unexecuted instantiation: pim_util.c:atomptr_u Unexecuted instantiation: pim_vty.c:atomptr_u Unexecuted instantiation: pim_zebra.c:atomptr_u Unexecuted instantiation: pim_zlookup.c:atomptr_u Unexecuted instantiation: pim_vxlan.c:atomptr_u Unexecuted instantiation: pim_register.c:atomptr_u Unexecuted instantiation: pimd.c:atomptr_u Unexecuted instantiation: pim_cmd.c:atomptr_u Unexecuted instantiation: pim_igmp.c:atomptr_u Unexecuted instantiation: pim_igmp_mtrace.c:atomptr_u Unexecuted instantiation: pim_igmpv2.c:atomptr_u Unexecuted instantiation: pim_igmpv3.c:atomptr_u Unexecuted instantiation: pim_main.c:atomptr_u Unexecuted instantiation: pim_mlag.c:atomptr_u Unexecuted instantiation: pim_msdp.c:atomptr_u Unexecuted instantiation: pim_msdp_packet.c:atomptr_u Unexecuted instantiation: pim_msdp_socket.c:atomptr_u Unexecuted instantiation: pim_signals.c:atomptr_u Unexecuted instantiation: pim_zpthread.c:atomptr_u Unexecuted instantiation: frr-pim.yang.c:atomptr_u Unexecuted instantiation: frr-pim-rp.yang.c:atomptr_u Unexecuted instantiation: frr-gmp.yang.c:atomptr_u |
59 | | |
60 | | |
61 | | /* the problem with, find(), find_gteq() and find_lt() on atomic lists is that |
62 | | * they're neither an "acquire" nor a "release" operation; the element that |
63 | | * was found is still on the list and doesn't change ownership. Therefore, |
64 | | * an atomic transition in ownership state can't be implemented. |
65 | | * |
66 | | * Contrast this with add() or pop(): both function calls atomically transfer |
67 | | * ownership of an item to or from the list, which makes them "acquire" / |
68 | | * "release" operations. |
69 | | * |
70 | | * What can be implemented atomically is a "find_pop()", i.e. try to locate an |
71 | | * item and atomically try to remove it if found. It's not currently |
72 | | * implemented but can be added when needed. |
73 | | * |
74 | | * Either way - for find(), generally speaking, if you need to use find() on |
75 | | * a list then the whole thing probably isn't well-suited to atomic |
76 | | * implementation and you'll need to have extra locks around to make it work |
77 | | * correctly. |
78 | | */ |
79 | | #ifdef WNO_ATOMLIST_UNSAFE_FIND |
80 | | # define atomic_find_warn |
81 | | #else |
82 | | # define atomic_find_warn __attribute__((_DEPRECATED( \ |
83 | | "WARNING: find() on atomic lists cannot be atomic by principle; " \ |
84 | | "check code to make sure usage pattern is OK and if it is, use " \ |
85 | | "#define WNO_ATOMLIST_UNSAFE_FIND"))) |
86 | | #endif |
87 | | |
88 | | |
89 | | /* single-linked list, unsorted/arbitrary. |
90 | | * can be used as queue with add_tail / pop |
91 | | * |
92 | | * all operations are lock-free, but not necessarily wait-free. this means |
93 | | * that there is no state where the system as a whole stops making process, |
94 | | * but it *is* possible that a *particular* thread is delayed by some time. |
95 | | * |
96 | | * the only way for this to happen is for other threads to continuously make |
97 | | * updates. an inactive / blocked / deadlocked other thread cannot cause such |
98 | | * delays, and to cause such delays a thread must be heavily hitting the list - |
99 | | * it's a rather theoretical concern. |
100 | | */ |
101 | | |
102 | | /* don't use these structs directly */ |
103 | | struct atomlist_item { |
104 | | atomic_uintptr_t next; |
105 | | }; |
106 | 16 | #define atomlist_itemp(val) ((struct atomlist_item *)atomptr_p(val)) |
107 | | |
108 | | struct atomlist_head { |
109 | | atomic_uintptr_t first, last; |
110 | | atomic_size_t count; |
111 | | }; |
112 | | |
113 | | /* use as: |
114 | | * |
115 | | * PREDECL_ATOMLIST(namelist); |
116 | | * struct name { |
117 | | * struct namelist_item nlitem; |
118 | | * } |
119 | | * DECLARE_ATOMLIST(namelist, struct name, nlitem); |
120 | | */ |
121 | | #define PREDECL_ATOMLIST(prefix) \ |
122 | | struct prefix ## _head { struct atomlist_head ah; }; \ |
123 | | struct prefix ## _item { struct atomlist_item ai; }; \ |
124 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
125 | | |
126 | | #define INIT_ATOMLIST(var) { } |
127 | | |
128 | | #define DECLARE_ATOMLIST(prefix, type, field) \ |
129 | 0 | macro_inline void prefix ## _add_head(struct prefix##_head *h, type *item) \ |
130 | 0 | { atomlist_add_head(&h->ah, &item->field.ai); } \Unexecuted instantiation: frrcu.c:rcu_heads_add_head Unexecuted instantiation: frrcu.c:rcu_threads_add_head Unexecuted instantiation: zlog.c:zlog_targets_add_head |
131 | 16 | macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item) \ |
132 | 16 | { atomlist_add_tail(&h->ah, &item->field.ai); } \frrcu.c:rcu_threads_add_tail Line | Count | Source | 131 | 8 | macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item) \ | 132 | 8 | { atomlist_add_tail(&h->ah, &item->field.ai); } \ |
Unexecuted instantiation: frrcu.c:rcu_heads_add_tail zlog.c:zlog_targets_add_tail Line | Count | Source | 131 | 8 | macro_inline void prefix ## _add_tail(struct prefix##_head *h, type *item) \ | 132 | 8 | { atomlist_add_tail(&h->ah, &item->field.ai); } \ |
|
133 | | macro_inline void prefix ## _del_hint(struct prefix##_head *h, type *item, \ |
134 | 0 | atomic_atomptr_t *hint) \ |
135 | 0 | { atomlist_del_hint(&h->ah, &item->field.ai, hint); } \Unexecuted instantiation: frrcu.c:rcu_heads_del_hint Unexecuted instantiation: frrcu.c:rcu_threads_del_hint Unexecuted instantiation: zlog.c:zlog_targets_del_hint |
136 | 0 | macro_inline type *prefix ## _del(struct prefix##_head *h, type *item) \ |
137 | 0 | { atomlist_del_hint(&h->ah, &item->field.ai, NULL); \ |
138 | 0 | /* TODO: Return NULL if not found */ \ |
139 | 0 | return item; } \ |
140 | 0 | macro_inline type *prefix ## _pop(struct prefix##_head *h) \ |
141 | 0 | { char *p = (char *)atomlist_pop(&h->ah); \ |
142 | 0 | return p ? (type *)(p - offsetof(type, field)) : NULL; } \ Unexecuted instantiation: frrcu.c:rcu_threads_pop Unexecuted instantiation: zlog.c:zlog_targets_pop |
143 | 3.73k | macro_inline type *prefix ## _first(struct prefix##_head *h) \ |
144 | 3.73k | { char *p = atomptr_p(atomic_load_explicit(&h->ah.first, \ |
145 | 3.73k | memory_order_acquire)); \ |
146 | 3.73k | return p ? (type *)(p - offsetof(type, field)) : NULL; } \ |
147 | 1.86k | macro_inline type *prefix ## _next(struct prefix##_head *h, type *item) \ |
148 | 1.86k | { char *p = atomptr_p(atomic_load_explicit(&item->field.ai.next, \ |
149 | 1.86k | memory_order_acquire)); \ |
150 | 1.86k | return p ? (type *)(p - offsetof(type, field)) : NULL; } \ |
151 | 3.73k | macro_inline type *prefix ## _next_safe(struct prefix##_head *h, type *item) \ |
152 | 3.73k | { return item ? prefix##_next(h, item) : NULL; } \Unexecuted instantiation: frrcu.c:rcu_heads_next_safe Unexecuted instantiation: frrcu.c:rcu_threads_next_safe |
153 | 0 | macro_inline size_t prefix ## _count(struct prefix##_head *h) \ |
154 | 0 | { return atomic_load_explicit(&h->ah.count, memory_order_relaxed); } \Unexecuted instantiation: frrcu.c:rcu_heads_count Unexecuted instantiation: zlog.c:zlog_targets_count |
155 | 0 | macro_inline void prefix ## _init(struct prefix##_head *h) \ |
156 | 0 | { \ |
157 | 0 | memset(h, 0, sizeof(*h)); \ |
158 | 0 | } \ Unexecuted instantiation: frrcu.c:rcu_heads_init Unexecuted instantiation: frrcu.c:rcu_threads_init Unexecuted instantiation: zlog.c:zlog_targets_init |
159 | 0 | macro_inline void prefix ## _fini(struct prefix##_head *h) \ |
160 | 0 | { \ |
161 | 0 | assert(prefix ## _count(h) == 0); \ |
162 | 0 | memset(h, 0, sizeof(*h)); \ |
163 | 0 | } \ Unexecuted instantiation: frrcu.c:rcu_heads_fini Unexecuted instantiation: frrcu.c:rcu_threads_fini Unexecuted instantiation: zlog.c:zlog_targets_fini |
164 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
165 | | |
166 | | /* add_head: |
167 | | * - contention on ->first pointer |
168 | | * - return implies completion |
169 | | */ |
170 | | void atomlist_add_head(struct atomlist_head *h, struct atomlist_item *item); |
171 | | |
172 | | /* add_tail: |
173 | | * - concurrent add_tail can cause wait but has progress guarantee |
174 | | * - return does NOT imply completion. completion is only guaranteed after |
175 | | * all other add_tail operations that started before this add_tail have |
176 | | * completed as well. |
177 | | */ |
178 | | void atomlist_add_tail(struct atomlist_head *h, struct atomlist_item *item); |
179 | | |
180 | | /* del/del_hint: |
181 | | * |
182 | | * OWNER MUST HOLD REFERENCE ON ITEM TO BE DELETED, ENSURING NO OTHER THREAD |
183 | | * WILL TRY TO DELETE THE SAME ITEM. DELETING INCLUDES pop(). |
184 | | * |
185 | | * as with all deletions, threads that started reading earlier may still hold |
186 | | * pointers to the deleted item. completion is however guaranteed for all |
187 | | * reads starting later. |
188 | | */ |
189 | | void atomlist_del_hint(struct atomlist_head *h, struct atomlist_item *item, |
190 | | atomic_atomptr_t *hint); |
191 | | |
192 | | /* pop: |
193 | | * |
194 | | * as with all deletions, threads that started reading earlier may still hold |
195 | | * pointers to the deleted item. completion is however guaranteed for all |
196 | | * reads starting later. |
197 | | */ |
198 | | struct atomlist_item *atomlist_pop(struct atomlist_head *h); |
199 | | |
200 | | |
201 | | |
202 | | struct atomsort_item { |
203 | | atomic_atomptr_t next; |
204 | | }; |
205 | 0 | #define atomsort_itemp(val) ((struct atomsort_item *)atomptr_p(val)) |
206 | | |
207 | | struct atomsort_head { |
208 | | atomic_atomptr_t first; |
209 | | atomic_size_t count; |
210 | | }; |
211 | | |
212 | | #define _PREDECL_ATOMSORT(prefix) \ |
213 | | struct prefix ## _head { struct atomsort_head ah; }; \ |
214 | | struct prefix ## _item { struct atomsort_item ai; }; \ |
215 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
216 | | |
217 | | #define INIT_ATOMSORT_UNIQ(var) { } |
218 | | #define INIT_ATOMSORT_NONUNIQ(var) { } |
219 | | |
220 | | #define _DECLARE_ATOMSORT(prefix, type, field, cmpfn_nuq, cmpfn_uq) \ |
221 | | macro_inline void prefix ## _init(struct prefix##_head *h) \ |
222 | | { \ |
223 | | memset(h, 0, sizeof(*h)); \ |
224 | | } \ |
225 | | macro_inline void prefix ## _fini(struct prefix##_head *h) \ |
226 | | { \ |
227 | | assert(h->ah.count == 0); \ |
228 | | memset(h, 0, sizeof(*h)); \ |
229 | | } \ |
230 | | macro_inline type *prefix ## _add(struct prefix##_head *h, type *item) \ |
231 | | { \ |
232 | | struct atomsort_item *p; \ |
233 | | p = atomsort_add(&h->ah, &item->field.ai, cmpfn_uq); \ |
234 | | return container_of_null(p, type, field.ai); \ |
235 | | } \ |
236 | | macro_inline type *prefix ## _first(struct prefix##_head *h) \ |
237 | | { \ |
238 | | struct atomsort_item *p; \ |
239 | | p = atomptr_p(atomic_load_explicit(&h->ah.first, \ |
240 | | memory_order_acquire)); \ |
241 | | return container_of_null(p, type, field.ai); \ |
242 | | } \ |
243 | | macro_inline type *prefix ## _next(struct prefix##_head *h, type *item) \ |
244 | | { \ |
245 | | struct atomsort_item *p; \ |
246 | | p = atomptr_p(atomic_load_explicit(&item->field.ai.next, \ |
247 | | memory_order_acquire)); \ |
248 | | return container_of_null(p, type, field.ai); \ |
249 | | } \ |
250 | | macro_inline type *prefix ## _next_safe(struct prefix##_head *h, type *item) \ |
251 | | { \ |
252 | | return item ? prefix##_next(h, item) : NULL; \ |
253 | | } \ |
254 | | atomic_find_warn \ |
255 | | macro_inline type *prefix ## _find_gteq(struct prefix##_head *h, \ |
256 | | const type *item) \ |
257 | | { \ |
258 | | type *p = prefix ## _first(h); \ |
259 | | while (p && cmpfn_nuq(&p->field.ai, &item->field.ai) < 0) \ |
260 | | p = prefix ## _next(h, p); \ |
261 | | return p; \ |
262 | | } \ |
263 | | atomic_find_warn \ |
264 | | macro_inline type *prefix ## _find_lt(struct prefix##_head *h, \ |
265 | | const type *item) \ |
266 | | { \ |
267 | | type *p = prefix ## _first(h), *prev = NULL; \ |
268 | | while (p && cmpfn_nuq(&p->field.ai, &item->field.ai) < 0) \ |
269 | | p = prefix ## _next(h, (prev = p)); \ |
270 | | return prev; \ |
271 | | } \ |
272 | | macro_inline void prefix ## _del_hint(struct prefix##_head *h, type *item, \ |
273 | | atomic_atomptr_t *hint) \ |
274 | | { \ |
275 | | atomsort_del_hint(&h->ah, &item->field.ai, hint); \ |
276 | | } \ |
277 | | macro_inline type *prefix ## _del(struct prefix##_head *h, type *item) \ |
278 | | { \ |
279 | | atomsort_del_hint(&h->ah, &item->field.ai, NULL); \ |
280 | | /* TODO: Return NULL if not found */ \ |
281 | | return item; \ |
282 | | } \ |
283 | | macro_inline size_t prefix ## _count(struct prefix##_head *h) \ |
284 | | { \ |
285 | | return atomic_load_explicit(&h->ah.count, memory_order_relaxed); \ |
286 | | } \ |
287 | | macro_inline type *prefix ## _pop(struct prefix##_head *h) \ |
288 | | { \ |
289 | | struct atomsort_item *p = atomsort_pop(&h->ah); \ |
290 | | return p ? container_of(p, type, field.ai) : NULL; \ |
291 | | } \ |
292 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
293 | | |
294 | | #define PREDECL_ATOMSORT_UNIQ(prefix) \ |
295 | | _PREDECL_ATOMSORT(prefix) |
296 | | #define DECLARE_ATOMSORT_UNIQ(prefix, type, field, cmpfn) \ |
297 | | \ |
298 | | macro_inline int prefix ## __cmp(const struct atomsort_item *a, \ |
299 | | const struct atomsort_item *b) \ |
300 | | { \ |
301 | | return cmpfn(container_of(a, type, field.ai), \ |
302 | | container_of(b, type, field.ai)); \ |
303 | | } \ |
304 | | \ |
305 | | _DECLARE_ATOMSORT(prefix, type, field, \ |
306 | | prefix ## __cmp, prefix ## __cmp); \ |
307 | | \ |
308 | | atomic_find_warn \ |
309 | | macro_inline type *prefix ## _find(struct prefix##_head *h, const type *item) \ |
310 | | { \ |
311 | | type *p = prefix ## _first(h); \ |
312 | | int cmpval = 0; \ |
313 | | while (p && (cmpval = cmpfn(p, item)) < 0) \ |
314 | | p = prefix ## _next(h, p); \ |
315 | | if (!p || cmpval > 0) \ |
316 | | return NULL; \ |
317 | | return p; \ |
318 | | } \ |
319 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
320 | | |
321 | | #define PREDECL_ATOMSORT_NONUNIQ(prefix) \ |
322 | | _PREDECL_ATOMSORT(prefix) |
323 | | #define DECLARE_ATOMSORT_NONUNIQ(prefix, type, field, cmpfn) \ |
324 | | \ |
325 | | macro_inline int prefix ## __cmp(const struct atomsort_item *a, \ |
326 | | const struct atomsort_item *b) \ |
327 | | { \ |
328 | | return cmpfn(container_of(a, type, field.ai), \ |
329 | | container_of(b, type, field.ai)); \ |
330 | | } \ |
331 | | macro_inline int prefix ## __cmp_uq(const struct atomsort_item *a, \ |
332 | | const struct atomsort_item *b) \ |
333 | | { \ |
334 | | int cmpval = cmpfn(container_of(a, type, field.ai), \ |
335 | | container_of(b, type, field.ai)); \ |
336 | | if (cmpval) \ |
337 | | return cmpval; \ |
338 | | if (a < b) \ |
339 | | return -1; \ |
340 | | if (a > b) \ |
341 | | return 1; \ |
342 | | return 0; \ |
343 | | } \ |
344 | | \ |
345 | | _DECLARE_ATOMSORT(prefix, type, field, \ |
346 | | prefix ## __cmp, prefix ## __cmp_uq); \ |
347 | | MACRO_REQUIRE_SEMICOLON() /* end */ |
348 | | |
349 | | struct atomsort_item *atomsort_add(struct atomsort_head *h, |
350 | | struct atomsort_item *item, int (*cmpfn)( |
351 | | const struct atomsort_item *, |
352 | | const struct atomsort_item *)); |
353 | | |
354 | | void atomsort_del_hint(struct atomsort_head *h, |
355 | | struct atomsort_item *item, atomic_atomptr_t *hint); |
356 | | |
357 | | struct atomsort_item *atomsort_pop(struct atomsort_head *h); |
358 | | |
359 | | #ifdef __cplusplus |
360 | | } |
361 | | #endif |
362 | | |
363 | | #endif /* _FRR_ATOMLIST_H */ |