lib: annotate versioned functions

Every implementation of a particular version of given symbol needs to be
marked in its declaration as such (using `__vsym` macro).  This patch
fixes this and also clarifies the documentation about that.

Signed-off-by: Andrzej Ostruszka <aostruszka@marvell.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
This commit is contained in:
Andrzej Ostruszka 2019-11-07 16:03:08 +01:00 committed by Thomas Monjalon
parent 519e6548f7
commit 909dd291f0
7 changed files with 67 additions and 54 deletions

View File

@ -225,6 +225,10 @@ The macros exported are:
fully qualified function ``p``, so that if a symbol becomes versioned, it
can still be mapped back to the public symbol name.
* ``__vsym``: Annotation to be used in a declaration of the internal symbol
``be`` to signal that it is being used as an implementation of a particular
version of symbol ``b``.
Examples of ABI Macro use
^^^^^^^^^^^^^^^^^^^^^^^^^
@ -345,8 +349,9 @@ with the public symbol name
.. code-block:: c
struct rte_acl_ctx *
-struct rte_acl_ctx *
-rte_acl_create(const struct rte_acl_param *param)
+struct rte_acl_ctx * __vsym
+rte_acl_create_v20(const struct rte_acl_param *param)
{
size_t sz;
@ -354,7 +359,8 @@ with the public symbol name
...
Note that the base name of the symbol was kept intact, as this is conducive to
the macros used for versioning symbols. That is our next step, mapping this new
the macros used for versioning symbols and we have annotated the function as an
implementation of versioned symbol. That is our next step, mapping this new
symbol name to the initial symbol name at version node 2.0. Immediately after
the function, we add this line of code
@ -374,7 +380,7 @@ name, with a different suffix, and implement it appropriately
.. code-block:: c
struct rte_acl_ctx *
struct rte_acl_ctx * __vsym
rte_acl_create_v21(const struct rte_acl_param *param, int debug);
{
struct rte_acl_ctx *ctx = rte_acl_create_v20(param);
@ -423,7 +429,7 @@ defined, we add this
.. code-block:: c
struct rte_acl_ctx *
struct rte_acl_ctx * __vsym
rte_acl_create_v21(const struct rte_acl_param *param, int debug)
{
...

View File

@ -32,7 +32,7 @@ EAL_REGISTER_TAILQ(rte_dist_burst_tailq)
/**** Burst Packet APIs called by workers ****/
void
void __vsym
rte_distributor_request_pkt_v1705(struct rte_distributor *d,
unsigned int worker_id, struct rte_mbuf **oldpkt,
unsigned int count)
@ -89,7 +89,7 @@ MAP_STATIC_SYMBOL(void rte_distributor_request_pkt(struct rte_distributor *d,
unsigned int count),
rte_distributor_request_pkt_v1705);
int
int __vsym
rte_distributor_poll_pkt_v1705(struct rte_distributor *d,
unsigned int worker_id, struct rte_mbuf **pkts)
{
@ -134,7 +134,7 @@ MAP_STATIC_SYMBOL(int rte_distributor_poll_pkt(struct rte_distributor *d,
unsigned int worker_id, struct rte_mbuf **pkts),
rte_distributor_poll_pkt_v1705);
int
int __vsym
rte_distributor_get_pkt_v1705(struct rte_distributor *d,
unsigned int worker_id, struct rte_mbuf **pkts,
struct rte_mbuf **oldpkt, unsigned int return_count)
@ -169,7 +169,7 @@ MAP_STATIC_SYMBOL(int rte_distributor_get_pkt(struct rte_distributor *d,
struct rte_mbuf **oldpkt, unsigned int return_count),
rte_distributor_get_pkt_v1705);
int
int __vsym
rte_distributor_return_pkt_v1705(struct rte_distributor *d,
unsigned int worker_id, struct rte_mbuf **oldpkt, int num)
{
@ -359,7 +359,7 @@ release(struct rte_distributor *d, unsigned int wkr)
/* process a set of packets to distribute them to workers */
int
int __vsym
rte_distributor_process_v1705(struct rte_distributor *d,
struct rte_mbuf **mbufs, unsigned int num_mbufs)
{
@ -506,7 +506,7 @@ MAP_STATIC_SYMBOL(int rte_distributor_process(struct rte_distributor *d,
rte_distributor_process_v1705);
/* return to the caller, packets returned from workers */
int
int __vsym
rte_distributor_returned_pkts_v1705(struct rte_distributor *d,
struct rte_mbuf **mbufs, unsigned int max_mbufs)
{
@ -556,7 +556,7 @@ total_outstanding(const struct rte_distributor *d)
* Flush the distributor, so that there are no outstanding packets in flight or
* queued up.
*/
int
int __vsym
rte_distributor_flush_v1705(struct rte_distributor *d)
{
unsigned int flushed;
@ -591,7 +591,7 @@ MAP_STATIC_SYMBOL(int rte_distributor_flush(struct rte_distributor *d),
rte_distributor_flush_v1705);
/* clears the internal returns array in the distributor */
void
void __vsym
rte_distributor_clear_returns_v1705(struct rte_distributor *d)
{
unsigned int wkr;
@ -613,7 +613,7 @@ MAP_STATIC_SYMBOL(void rte_distributor_clear_returns(struct rte_distributor *d),
rte_distributor_clear_returns_v1705);
/* creates a distributor instance */
struct rte_distributor *
struct rte_distributor * __vsym
rte_distributor_create_v1705(const char *name,
unsigned int socket_id,
unsigned int num_workers,

View File

@ -27,7 +27,7 @@ EAL_REGISTER_TAILQ(rte_distributor_tailq)
/**** APIs called by workers ****/
void
void __vsym
rte_distributor_request_pkt_v20(struct rte_distributor_v20 *d,
unsigned worker_id, struct rte_mbuf *oldpkt)
{
@ -43,7 +43,7 @@ rte_distributor_request_pkt_v20(struct rte_distributor_v20 *d,
}
VERSION_SYMBOL(rte_distributor_request_pkt, _v20, 2.0);
struct rte_mbuf *
struct rte_mbuf * __vsym
rte_distributor_poll_pkt_v20(struct rte_distributor_v20 *d,
unsigned worker_id)
{
@ -59,7 +59,7 @@ rte_distributor_poll_pkt_v20(struct rte_distributor_v20 *d,
}
VERSION_SYMBOL(rte_distributor_poll_pkt, _v20, 2.0);
struct rte_mbuf *
struct rte_mbuf * __vsym
rte_distributor_get_pkt_v20(struct rte_distributor_v20 *d,
unsigned worker_id, struct rte_mbuf *oldpkt)
{
@ -71,7 +71,7 @@ rte_distributor_get_pkt_v20(struct rte_distributor_v20 *d,
}
VERSION_SYMBOL(rte_distributor_get_pkt, _v20, 2.0);
int
int __vsym
rte_distributor_return_pkt_v20(struct rte_distributor_v20 *d,
unsigned worker_id, struct rte_mbuf *oldpkt)
{
@ -204,7 +204,7 @@ process_returns(struct rte_distributor_v20 *d)
}
/* process a set of packets to distribute them to workers */
int
int __vsym
rte_distributor_process_v20(struct rte_distributor_v20 *d,
struct rte_mbuf **mbufs, unsigned num_mbufs)
{
@ -321,7 +321,7 @@ rte_distributor_process_v20(struct rte_distributor_v20 *d,
VERSION_SYMBOL(rte_distributor_process, _v20, 2.0);
/* return to the caller, packets returned from workers */
int
int __vsym
rte_distributor_returned_pkts_v20(struct rte_distributor_v20 *d,
struct rte_mbuf **mbufs, unsigned max_mbufs)
{
@ -359,7 +359,7 @@ total_outstanding(const struct rte_distributor_v20 *d)
/* flush the distributor, so that there are no outstanding packets in flight or
* queued up. */
int
int __vsym
rte_distributor_flush_v20(struct rte_distributor_v20 *d)
{
const unsigned flushed = total_outstanding(d);
@ -372,7 +372,7 @@ rte_distributor_flush_v20(struct rte_distributor_v20 *d)
VERSION_SYMBOL(rte_distributor_flush, _v20, 2.0);
/* clears the internal returns array in the distributor */
void
void __vsym
rte_distributor_clear_returns_v20(struct rte_distributor_v20 *d)
{
d->returns.start = d->returns.count = 0;
@ -383,7 +383,7 @@ rte_distributor_clear_returns_v20(struct rte_distributor_v20 *d)
VERSION_SYMBOL(rte_distributor_clear_returns, _v20, 2.0);
/* creates a distributor instance */
struct rte_distributor_v20 *
struct rte_distributor_v20 * __vsym
rte_distributor_create_v20(const char *name,
unsigned socket_id,
unsigned num_workers)

View File

@ -52,6 +52,13 @@
* symbol <b> to the internal symbol <b><e>
*/
#define BIND_DEFAULT_SYMBOL(b, e, n) __asm__(".symver " RTE_STR(b) RTE_STR(e) ", " RTE_STR(b) "@@DPDK_" RTE_STR(n))
/*
* __vsym
* Annotation to be used in declaration of the internal symbol <b><e> to signal
* that it is being used as an implementation of a particular version of symbol
* <b>.
*/
#define __vsym __attribute__((used))
/*

View File

@ -90,7 +90,7 @@ depth_to_range(uint8_t depth)
/*
* Find an existing lpm table and return a pointer to it.
*/
struct rte_lpm_v20 *
struct rte_lpm_v20 * __vsym
rte_lpm_find_existing_v20(const char *name)
{
struct rte_lpm_v20 *l = NULL;
@ -116,7 +116,7 @@ rte_lpm_find_existing_v20(const char *name)
}
VERSION_SYMBOL(rte_lpm_find_existing, _v20, 2.0);
struct rte_lpm *
struct rte_lpm * __vsym
rte_lpm_find_existing_v1604(const char *name)
{
struct rte_lpm *l = NULL;
@ -147,7 +147,7 @@ MAP_STATIC_SYMBOL(struct rte_lpm *rte_lpm_find_existing(const char *name),
/*
* Allocates memory for LPM object
*/
struct rte_lpm_v20 *
struct rte_lpm_v20 * __vsym
rte_lpm_create_v20(const char *name, int socket_id, int max_rules,
__rte_unused int flags)
{
@ -220,7 +220,7 @@ rte_lpm_create_v20(const char *name, int socket_id, int max_rules,
}
VERSION_SYMBOL(rte_lpm_create, _v20, 2.0);
struct rte_lpm *
struct rte_lpm * __vsym
rte_lpm_create_v1604(const char *name, int socket_id,
const struct rte_lpm_config *config)
{
@ -329,7 +329,7 @@ MAP_STATIC_SYMBOL(
/*
* Deallocates memory for given LPM table.
*/
void
void __vsym
rte_lpm_free_v20(struct rte_lpm_v20 *lpm)
{
struct rte_lpm_list *lpm_list;
@ -358,7 +358,7 @@ rte_lpm_free_v20(struct rte_lpm_v20 *lpm)
}
VERSION_SYMBOL(rte_lpm_free, _v20, 2.0);
void
void __vsym
rte_lpm_free_v1604(struct rte_lpm *lpm)
{
struct rte_lpm_list *lpm_list;
@ -1177,7 +1177,7 @@ add_depth_big_v1604(struct rte_lpm *lpm, uint32_t ip_masked, uint8_t depth,
/*
* Add a route
*/
int
int __vsym
rte_lpm_add_v20(struct rte_lpm_v20 *lpm, uint32_t ip, uint8_t depth,
uint8_t next_hop)
{
@ -1218,7 +1218,7 @@ rte_lpm_add_v20(struct rte_lpm_v20 *lpm, uint32_t ip, uint8_t depth,
}
VERSION_SYMBOL(rte_lpm_add, _v20, 2.0);
int
int __vsym
rte_lpm_add_v1604(struct rte_lpm *lpm, uint32_t ip, uint8_t depth,
uint32_t next_hop)
{
@ -1264,7 +1264,7 @@ MAP_STATIC_SYMBOL(int rte_lpm_add(struct rte_lpm *lpm, uint32_t ip,
/*
* Look for a rule in the high-level rules table
*/
int
int __vsym
rte_lpm_is_rule_present_v20(struct rte_lpm_v20 *lpm, uint32_t ip, uint8_t depth,
uint8_t *next_hop)
{
@ -1291,7 +1291,7 @@ uint8_t *next_hop)
}
VERSION_SYMBOL(rte_lpm_is_rule_present, _v20, 2.0);
int
int __vsym
rte_lpm_is_rule_present_v1604(struct rte_lpm *lpm, uint32_t ip, uint8_t depth,
uint32_t *next_hop)
{
@ -1844,7 +1844,7 @@ delete_depth_big_v1604(struct rte_lpm *lpm, uint32_t ip_masked,
/*
* Deletes a rule
*/
int
int __vsym
rte_lpm_delete_v20(struct rte_lpm_v20 *lpm, uint32_t ip, uint8_t depth)
{
int32_t rule_to_delete_index, sub_rule_index;
@ -1898,7 +1898,7 @@ rte_lpm_delete_v20(struct rte_lpm_v20 *lpm, uint32_t ip, uint8_t depth)
}
VERSION_SYMBOL(rte_lpm_delete, _v20, 2.0);
int
int __vsym
rte_lpm_delete_v1604(struct rte_lpm *lpm, uint32_t ip, uint8_t depth)
{
int32_t rule_to_delete_index, sub_rule_index;
@ -1957,7 +1957,7 @@ MAP_STATIC_SYMBOL(int rte_lpm_delete(struct rte_lpm *lpm, uint32_t ip,
/*
* Delete all rules from the LPM table.
*/
void
void __vsym
rte_lpm_delete_all_v20(struct rte_lpm_v20 *lpm)
{
/* Zero rule information. */
@ -1974,7 +1974,7 @@ rte_lpm_delete_all_v20(struct rte_lpm_v20 *lpm)
}
VERSION_SYMBOL(rte_lpm_delete_all, _v20, 2.0);
void
void __vsym
rte_lpm_delete_all_v1604(struct rte_lpm *lpm)
{
/* Zero rule information. */

View File

@ -812,7 +812,7 @@ add_step(struct rte_lpm6 *lpm, struct rte_lpm6_tbl_entry *tbl,
/*
* Add a route
*/
int
int __vsym
rte_lpm6_add_v20(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
uint8_t next_hop)
{
@ -862,7 +862,7 @@ simulate_add(struct rte_lpm6 *lpm, const uint8_t *masked_ip, uint8_t depth)
return 0;
}
int
int __vsym
rte_lpm6_add_v1705(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
uint32_t next_hop)
{
@ -955,7 +955,7 @@ lookup_step(const struct rte_lpm6 *lpm, const struct rte_lpm6_tbl_entry *tbl,
/*
* Looks up an IP
*/
int
int __vsym
rte_lpm6_lookup_v20(const struct rte_lpm6 *lpm, uint8_t *ip, uint8_t *next_hop)
{
uint32_t next_hop32 = 0;
@ -973,7 +973,7 @@ rte_lpm6_lookup_v20(const struct rte_lpm6 *lpm, uint8_t *ip, uint8_t *next_hop)
}
VERSION_SYMBOL(rte_lpm6_lookup, _v20, 2.0);
int
int __vsym
rte_lpm6_lookup_v1705(const struct rte_lpm6 *lpm, uint8_t *ip,
uint32_t *next_hop)
{
@ -1008,7 +1008,7 @@ MAP_STATIC_SYMBOL(int rte_lpm6_lookup(const struct rte_lpm6 *lpm, uint8_t *ip,
/*
* Looks up a group of IP addresses
*/
int
int __vsym
rte_lpm6_lookup_bulk_func_v20(const struct rte_lpm6 *lpm,
uint8_t ips[][RTE_LPM6_IPV6_ADDR_SIZE],
int16_t * next_hops, unsigned n)
@ -1049,7 +1049,7 @@ rte_lpm6_lookup_bulk_func_v20(const struct rte_lpm6 *lpm,
}
VERSION_SYMBOL(rte_lpm6_lookup_bulk_func, _v20, 2.0);
int
int __vsym
rte_lpm6_lookup_bulk_func_v1705(const struct rte_lpm6 *lpm,
uint8_t ips[][RTE_LPM6_IPV6_ADDR_SIZE],
int32_t *next_hops, unsigned int n)
@ -1099,7 +1099,7 @@ MAP_STATIC_SYMBOL(int rte_lpm6_lookup_bulk_func(const struct rte_lpm6 *lpm,
/*
* Look for a rule in the high-level rules table
*/
int
int __vsym
rte_lpm6_is_rule_present_v20(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
uint8_t *next_hop)
{
@ -1119,7 +1119,7 @@ rte_lpm6_is_rule_present_v20(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
}
VERSION_SYMBOL(rte_lpm6_is_rule_present, _v20, 2.0);
int
int __vsym
rte_lpm6_is_rule_present_v1705(struct rte_lpm6 *lpm, uint8_t *ip, uint8_t depth,
uint32_t *next_hop)
{

View File

@ -131,7 +131,7 @@ rte_timer_data_dealloc(uint32_t id)
return 0;
}
void
void __vsym
rte_timer_subsystem_init_v20(void)
{
unsigned lcore_id;
@ -153,7 +153,7 @@ VERSION_SYMBOL(rte_timer_subsystem_init, _v20, 2.0);
* secondary processes should be empty, the zeroth entry can be shared by
* multiple processes.
*/
int
int __vsym
rte_timer_subsystem_init_v1905(void)
{
const struct rte_memzone *mz;
@ -551,7 +551,7 @@ __rte_timer_reset(struct rte_timer *tim, uint64_t expire,
}
/* Reset and start the timer associated with the timer handle tim */
int
int __vsym
rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
enum rte_timer_type type, unsigned int tim_lcore,
rte_timer_cb_t fct, void *arg)
@ -574,7 +574,7 @@ rte_timer_reset_v20(struct rte_timer *tim, uint64_t ticks,
}
VERSION_SYMBOL(rte_timer_reset, _v20, 2.0);
int
int __vsym
rte_timer_reset_v1905(struct rte_timer *tim, uint64_t ticks,
enum rte_timer_type type, unsigned int tim_lcore,
rte_timer_cb_t fct, void *arg)
@ -657,14 +657,14 @@ __rte_timer_stop(struct rte_timer *tim, int local_is_locked,
}
/* Stop the timer associated with the timer handle tim */
int
int __vsym
rte_timer_stop_v20(struct rte_timer *tim)
{
return __rte_timer_stop(tim, 0, &default_timer_data);
}
VERSION_SYMBOL(rte_timer_stop, _v20, 2.0);
int
int __vsym
rte_timer_stop_v1905(struct rte_timer *tim)
{
return rte_timer_alt_stop(default_data_id, tim);
@ -817,14 +817,14 @@ __rte_timer_manage(struct rte_timer_data *timer_data)
priv_timer[lcore_id].running_tim = NULL;
}
void
void __vsym
rte_timer_manage_v20(void)
{
__rte_timer_manage(&default_timer_data);
}
VERSION_SYMBOL(rte_timer_manage, _v20, 2.0);
int
int __vsym
rte_timer_manage_v1905(void)
{
struct rte_timer_data *timer_data;
@ -1074,14 +1074,14 @@ __rte_timer_dump_stats(struct rte_timer_data *timer_data __rte_unused, FILE *f)
#endif
}
void
void __vsym
rte_timer_dump_stats_v20(FILE *f)
{
__rte_timer_dump_stats(&default_timer_data, f);
}
VERSION_SYMBOL(rte_timer_dump_stats, _v20, 2.0);
int
int __vsym
rte_timer_dump_stats_v1905(FILE *f)
{
return rte_timer_alt_dump_stats(default_data_id, f);