@@ -49,7 +49,7 @@ static uint32_t data_seg_sum(uint8_t *data8_ptr,
data_len--;
}
- data16_ptr = (uint16_t *)data8_ptr;
+ data16_ptr = (uint16_t *)(void *)data8_ptr;
/* The following code tries to gain a modest performance enhancement by
* unrolling the normal 16 bits at a time loop eight times. Even
@@ -216,7 +216,7 @@ static inline int odph_process_l3_hdr(odp_packet_t odp_pkt,
ipv6_hdr_ptr = &ipv6_hdr;
}
- addrs_ptr = (uint16_t *)&ipv6_hdr_ptr->src_addr;
+ addrs_ptr = (uint16_t *)(void *)&ipv6_hdr_ptr->src_addr;
addrs_len = 2 * ODPH_IPV6ADDR_LEN;
protocol = ipv6_hdr_ptr->next_hdr;
ipv6_payload_len = odp_be_to_cpu_16(ipv6_hdr_ptr->payload_len);
@@ -148,18 +148,6 @@ align32pow2(uint32_t x)
return x + 1;
}
-/**
- * Returns true if n is a power of 2
- * @param n
- * Number to check
- * @return 1 if true, 0 otherwise
- */
-static inline int
-is_power_of_2(uint32_t n)
-{
- return n && !(n & (n - 1));
-}
-
odph_table_t
odph_cuckoo_table_lookup(const char *name)
{
@@ -209,7 +197,7 @@ odph_cuckoo_table_create(
}
/* Guarantee there's no existing */
- tbl = (odph_cuckoo_table_impl *)odph_cuckoo_table_lookup(name);
+ tbl = (odph_cuckoo_table_impl *)(void *)odph_cuckoo_table_lookup(name);
if (tbl != NULL) {
ODPH_DBG("cuckoo hash table %s already exists\n", name);
return NULL;
@@ -240,7 +228,7 @@ odph_cuckoo_table_create(
/* header of this mem block is the table impl struct,
* then the bucket pool.
*/
- tbl->buckets = (struct cuckoo_table_bucket *)(
+ tbl->buckets = (void *)(
(char *)tbl + impl_size);
/* initialize key-value buffer pool */
@@ -309,17 +297,18 @@ odph_cuckoo_table_create(
int
odph_cuckoo_table_destroy(odph_table_t tbl)
{
- int ret, i, j;
+ int ret;
odph_cuckoo_table_impl *impl = NULL;
char pool_name[ODPH_TABLE_NAME_LEN + 3];
odp_event_t ev;
odp_shm_t shm;
odp_pool_t pool;
+ uint32_t i, j;
if (tbl == NULL)
return -1;
- impl = (odph_cuckoo_table_impl *)tbl;
+ impl = (odph_cuckoo_table_impl *)(void *)tbl;
/* check magic word */
if (impl->magicword != ODPH_CUCKOO_TABLE_MAGIC_WORD) {
@@ -578,11 +567,14 @@ cuckoo_table_add_key_with_hash(
int
odph_cuckoo_table_put_value(odph_table_t tbl, void *key, void *value)
{
+ odph_cuckoo_table_impl *impl;
+ int ret;
+
if ((tbl == NULL) || (key == NULL))
return -EINVAL;
- odph_cuckoo_table_impl *impl = (odph_cuckoo_table_impl *)tbl;
- int ret = cuckoo_table_add_key_with_hash(
+ impl = (odph_cuckoo_table_impl *)(void *)tbl;
+ ret = cuckoo_table_add_key_with_hash(
impl, key, hash(impl, key), value);
if (ret < 0)
@@ -651,17 +643,16 @@ cuckoo_table_lookup_with_hash(
return -ENOENT;
}
-int
-odph_cuckoo_table_get_value(
- odph_table_t tbl, void *key, void *buffer, uint32_t buffer_size)
+int odph_cuckoo_table_get_value(odph_table_t tbl, void *key,
+ void *buffer, uint32_t buffer_size ODP_UNUSED)
{
- if ((tbl == NULL) || (key == NULL))
- return -EINVAL;
-
- odph_cuckoo_table_impl *impl = (odph_cuckoo_table_impl *)tbl;
+ odph_cuckoo_table_impl *impl = (odph_cuckoo_table_impl *)(void *)tbl;
void *tmp = NULL;
int ret;
+ if ((tbl == NULL) || (key == NULL))
+ return -EINVAL;
+
ret = cuckoo_table_lookup_with_hash(impl, key, hash(impl, key), &tmp);
if (ret < 0)
@@ -734,13 +725,13 @@ cuckoo_table_del_key_with_hash(
int
odph_cuckoo_table_remove_value(odph_table_t tbl, void *key)
{
+ odph_cuckoo_table_impl *impl = (void *)tbl;
+ int ret;
+
if ((tbl == NULL) || (key == NULL))
return -EINVAL;
- odph_cuckoo_table_impl *impl = (odph_cuckoo_table_impl *)tbl;
- int ret = cuckoo_table_del_key_with_hash(
- impl, key, hash(impl, key));
-
+ ret = cuckoo_table_del_key_with_hash(impl, key, hash(impl, key));
if (ret < 0)
return -1;
@@ -101,9 +101,9 @@ odph_table_t odph_hash_table_create(const char *name, uint32_t capacity,
* the last part is the element node pool
*/
- tbl->lock_pool = (odp_rwlock_t *)((char *)tbl
+ tbl->lock_pool = (odp_rwlock_t *)(void *)((char *)tbl
+ sizeof(odph_hash_table_imp));
- tbl->list_head_pool = (odph_list_head *)((char *)tbl->lock_pool
+ tbl->list_head_pool = (odph_list_head *)(void *)((char *)tbl->lock_pool
+ ODPH_MAX_BUCKET_NUM * sizeof(odp_rwlock_t));
node_mem = tbl->init_cap - sizeof(odph_hash_table_imp)
@@ -112,8 +112,9 @@ odph_table_t odph_hash_table_create(const char *name, uint32_t capacity,
node_num = node_mem / (sizeof(odph_hash_node) + key_size + value_size);
tbl->hash_node_num = node_num;
- tbl->hash_node_pool = (odph_hash_node *)((char *)tbl->list_head_pool
- + ODPH_MAX_BUCKET_NUM * sizeof(odph_list_head));
+ tbl->hash_node_pool =
+ (odph_hash_node *)(void *)((char *)tbl->list_head_pool
+ + ODPH_MAX_BUCKET_NUM * sizeof(odph_list_head));
/* init every list head and rw lock */
for (i = 0; i < ODPH_MAX_BUCKET_NUM; i++) {
@@ -130,8 +131,9 @@ int odph_hash_table_destroy(odph_table_t table)
int ret;
if (table != NULL) {
- odph_hash_table_imp *hash_tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *hash_tbl;
+ hash_tbl = (odph_hash_table_imp *)(void *)table;
if (hash_tbl->magicword != ODPH_HASH_TABLE_MAGIC_WORD)
return ODPH_FAIL;
@@ -164,7 +166,7 @@ odph_table_t odph_hash_table_lookup(const char *name)
* This hash algorithm is the most simple one, so we choose it as an DEMO
* User can use any other algorithm, like CRC...
*/
-uint16_t odp_key_hash(void *key, uint32_t key_size)
+static uint16_t odp_key_hash(void *key, uint32_t key_size)
{
register uint32_t hash = 0;
uint32_t idx = (key_size == 0 ? 1 : key_size);
@@ -181,18 +183,19 @@ uint16_t odp_key_hash(void *key, uint32_t key_size)
/**
* Get an available node from pool
*/
-odph_hash_node *odp_hashnode_take(odph_table_t table)
+static odph_hash_node *hashnode_take(odph_table_t table)
{
- odph_hash_table_imp *tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *tbl;
uint32_t idx;
odph_hash_node *node;
+ tbl = (odph_hash_table_imp *)(void *)table;
for (idx = 0; idx < tbl->hash_node_num; idx++) {
/** notice: memory of one hash_node is
* not only sizeof(odph_hash_node)
* should add the size of Flexible Array
*/
- node = (odph_hash_node *)((char *)tbl->hash_node_pool
+ node = (odph_hash_node *)(void *)((char *)tbl->hash_node_pool
+ idx * (sizeof(odph_hash_node)
+ tbl->key_size
+ tbl->value_size));
@@ -208,13 +211,15 @@ odph_hash_node *odp_hashnode_take(odph_table_t table)
/**
* Release an node to the pool
*/
-void odp_hashnode_give(odph_table_t table, odph_hash_node *node)
+static void hashnode_give(odph_table_t table, odph_hash_node *node)
{
- odph_hash_table_imp *tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *tbl;
if (node == NULL)
return;
+ tbl = (odph_hash_table_imp *)(void *)table;
+
odph_list_del(&node->list_node);
memset(node, 0,
(sizeof(odph_hash_node) + tbl->key_size + tbl->value_size));
@@ -223,7 +228,7 @@ void odp_hashnode_give(odph_table_t table, odph_hash_node *node)
/* should make sure the input table exists and is available */
int odph_hash_put_value(odph_table_t table, void *key, void *value)
{
- odph_hash_table_imp *tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *tbl;
uint16_t hash = 0;
odph_hash_node *node = NULL;
char *tmp = NULL;
@@ -231,6 +236,7 @@ int odph_hash_put_value(odph_table_t table, void *key, void *value)
if (table == NULL || key == NULL || value == NULL)
return ODPH_FAIL;
+ tbl = (odph_hash_table_imp *)(void *)table;
/* hash value is just the index of the list head in pool */
hash = odp_key_hash(key, tbl->key_size);
@@ -249,7 +255,7 @@ int odph_hash_put_value(odph_table_t table, void *key, void *value)
}
/*if the key is a new one, get a new hash node form the pool */
- node = odp_hashnode_take(table);
+ node = hashnode_take(table);
if (node == NULL) {
odp_rwlock_write_unlock(&tbl->lock_pool[hash]);
return ODPH_FAIL;
@@ -271,11 +277,13 @@ int odph_hash_put_value(odph_table_t table, void *key, void *value)
int odph_hash_get_value(odph_table_t table, void *key, void *buffer,
uint32_t buffer_size)
{
- odph_hash_table_imp *tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *tbl;
uint16_t hash = 0;
odph_hash_node *node;
char *tmp = NULL;
+ tbl = (odph_hash_table_imp *)(void *)table;
+
if (table == NULL || key == NULL || buffer == NULL ||
buffer_size < tbl->value_size)
return ODPH_FAIL;
@@ -308,13 +316,15 @@ int odph_hash_get_value(odph_table_t table, void *key, void *buffer,
/* should make sure the input table exists and is available */
int odph_hash_remove_value(odph_table_t table, void *key)
{
- odph_hash_table_imp *tbl = (odph_hash_table_imp *)table;
+ odph_hash_table_imp *tbl;
uint16_t hash = 0;
odph_hash_node *node;
if (table == NULL || key == NULL)
return ODPH_FAIL;
+ tbl = (odph_hash_table_imp *)(void *)table;
+
/* hash value is just the index of the list head in pool */
hash = odp_key_hash(key, tbl->key_size);
@@ -324,7 +334,7 @@ int odph_hash_remove_value(odph_table_t table, void *key)
list_node)
{
if (memcmp(node->content, key, tbl->key_size) == 0) {
- odp_hashnode_give(table, node);
+ hashnode_give(table, node);
odp_rwlock_write_unlock(&tbl->lock_pool[hash]);
return ODPH_SUCCESS;
}
@@ -60,7 +60,7 @@ typedef struct {
} prefix_entry_t;
#define ENTRY_SIZE (sizeof(prefix_entry_t) + sizeof(odp_buffer_t))
-#define ENTRY_BUFF_ARR(x) ((odp_buffer_t *)((char *)x \
+#define ENTRY_BUFF_ARR(x) ((odp_buffer_t *)(void *)((char *)x \
+ sizeof(prefix_entry_t) * ENTRY_NUM_SUBTREE))
/** @internal trie node struct
@@ -434,16 +434,15 @@ odph_iplookup_table_lookup(const char *name)
return NULL;
}
-odph_table_t
-odph_iplookup_table_create(
- const char *name, uint32_t ODP_IGNORED_1,
- uint32_t ODP_IGNORED_2, uint32_t value_size)
+odph_table_t odph_iplookup_table_create(const char *name,
+ uint32_t p1 ODP_UNUSED,
+ uint32_t p2 ODP_UNUSED,
+ uint32_t value_size)
{
odph_iplookup_table_impl *tbl;
odp_shm_t shm_tbl;
odp_queue_t queue;
odp_queue_param_t qparam;
-
unsigned i;
uint32_t impl_size, l1_size;
char queue_name[ODPH_TABLE_NAME_LEN + 2];
@@ -455,7 +454,7 @@ odph_iplookup_table_create(
}
/* Guarantee there's no existing */
- tbl = (odph_iplookup_table_impl *)odph_iplookup_table_lookup(name);
+ tbl = (void *)odph_iplookup_table_lookup(name);
if (tbl != NULL) {
ODPH_DBG("IP prefix table %s already exists\n", name);
return NULL;
@@ -482,7 +481,7 @@ odph_iplookup_table_create(
/* header of this mem block is the table impl struct,
* then the l1 entries array.
*/
- tbl->l1e = (prefix_entry_t *)((char *)tbl + impl_size);
+ tbl->l1e = (prefix_entry_t *)(void *)((char *)tbl + impl_size);
for (i = 0; i < ENTRY_NUM_L1; i++)
tbl->l1e[i].nexthop = ODP_BUFFER_INVALID;
@@ -528,7 +527,7 @@ odph_iplookup_table_destroy(odph_table_t tbl)
if (tbl == NULL)
return -1;
- impl = (odph_iplookup_table_impl *)tbl;
+ impl = (odph_iplookup_table_impl *)(void *)tbl;
/* check magic word */
if (impl->magicword != ODPH_IP_LOOKUP_TABLE_MAGIC_WORD) {
@@ -664,15 +663,15 @@ prefix_insert_iter(
int
odph_iplookup_table_put_value(odph_table_t tbl, void *key, void *value)
{
- if ((tbl == NULL) || (key == NULL) || (value == NULL))
- return -1;
-
- odph_iplookup_table_impl *impl = (odph_iplookup_table_impl *)tbl;
+ odph_iplookup_table_impl *impl = (void *)tbl;
odph_iplookup_prefix_t *prefix = (odph_iplookup_prefix_t *)key;
prefix_entry_t *l1e = NULL;
odp_buffer_t nexthop = *((odp_buffer_t *)value);
int ret = 0;
+ if ((tbl == NULL) || (key == NULL) || (value == NULL))
+ return -1;
+
if (prefix->cidr == 0)
return -1;
prefix->ip = prefix->ip & (0xffffffff << (IP_LENGTH - prefix->cidr));
@@ -704,18 +703,18 @@ odph_iplookup_table_put_value(odph_table_t tbl, void *key, void *value)
return ret;
}
-int
-odph_iplookup_table_get_value(
- odph_table_t tbl, void *key, void *buffer, uint32_t buffer_size)
+int odph_iplookup_table_get_value(odph_table_t tbl, void *key,
+ void *buffer ODP_UNUSED,
+ uint32_t buffer_size ODP_UNUSED)
{
- if ((tbl == NULL) || (key == NULL) || (buffer == NULL))
- return -EINVAL;
-
- odph_iplookup_table_impl *impl = (odph_iplookup_table_impl *)tbl;
+ odph_iplookup_table_impl *impl = (void *)tbl;
uint32_t ip = *((uint32_t *)key);
prefix_entry_t *entry = &impl->l1e[ip >> 16];
odp_buffer_t *buff = (odp_buffer_t *)buffer;
+ if ((tbl == NULL) || (key == NULL) || (buffer == NULL))
+ return -EINVAL;
+
if (entry == NULL) {
ODPH_DBG("failed to get L1 entry.\n");
return -1;
@@ -880,14 +879,14 @@ prefix_delete_iter(
int
odph_iplookup_table_remove_value(odph_table_t tbl, void *key)
{
- if ((tbl == NULL) || (key == NULL))
- return -EINVAL;
-
- odph_iplookup_table_impl *impl = (odph_iplookup_table_impl *)tbl;
+ odph_iplookup_table_impl *impl = (void *)tbl;
odph_iplookup_prefix_t *prefix = (odph_iplookup_prefix_t *)key;
uint32_t ip = prefix->ip;
uint8_t cidr = prefix->cidr;
+ if ((tbl == NULL) || (key == NULL))
+ return -EINVAL;
+
if (prefix->cidr < 0)
return -EINVAL;
@@ -41,9 +41,10 @@ typedef struct {
*/
odph_table_t odph_linear_table_create(const char *name, uint32_t capacity,
- uint32_t ODP_IGNORED, uint32_t value_size)
+ uint32_t un ODPH_UNUSED,
+ uint32_t value_size)
{
- int idx;
+ uint32_t idx;
uint32_t node_num;
odp_shm_t shmem;
odph_linear_table_imp *tbl;
@@ -90,8 +91,10 @@ odph_table_t odph_linear_table_create(const char *name, uint32_t capacity,
/* initialize rwlock*/
for (idx = 0; idx < tbl->node_sum; idx++) {
- odp_rwlock_t *lock = (odp_rwlock_t *)((char *)tbl->value_array
- + idx * tbl->value_size);
+ odp_rwlock_t *lock;
+
+ lock = (odp_rwlock_t *)(void *)((char *)tbl->value_array
+ + idx * tbl->value_size);
odp_rwlock_init(lock);
}
@@ -106,7 +109,7 @@ int odph_linear_table_destroy(odph_table_t table)
odph_linear_table_imp *linear_tbl = NULL;
if (table != NULL) {
- linear_tbl = (odph_linear_table_imp *)table;
+ linear_tbl = (odph_linear_table_imp *)(void *)table;
/* check magicword, make sure the memory is used by a table */
if (linear_tbl->magicword != ODPH_LINEAR_TABLE_MAGIC_WORD)
@@ -142,9 +145,10 @@ odph_table_t odph_linear_table_lookup(const char *name)
}
/* should make sure the input table exists and is available */
-int odph_lineartable_put_value(odph_table_t table, void *key, void *value)
+static int odph_lineartable_put_value(odph_table_t table,
+ void *key, void *value)
{
- odph_linear_table_imp *tbl = (odph_linear_table_imp *)table;
+ odph_linear_table_imp *tbl;
uint32_t ikey = 0;
void *entry = NULL;
odp_rwlock_t *lock = NULL;
@@ -152,6 +156,7 @@ int odph_lineartable_put_value(odph_table_t table, void *key, void *value)
if (table == NULL || key == NULL || value == NULL)
return ODPH_FAIL;
+ tbl = (odph_linear_table_imp *)(void *)table;
ikey = *(uint32_t *)key;
if (ikey >= tbl->node_sum)
return ODPH_FAIL;
@@ -170,10 +175,11 @@ int odph_lineartable_put_value(odph_table_t table, void *key, void *value)
}
/* should make sure the input table exists and is available */
-int odph_lineartable_get_value(odph_table_t table, void *key, void *buffer,
- uint32_t buffer_size)
+static int odph_lineartable_get_value(odph_table_t table,
+ void *key, void *buffer,
+ uint32_t buffer_size ODPH_UNUSED)
{
- odph_linear_table_imp *tbl = (odph_linear_table_imp *)table;
+ odph_linear_table_imp *tbl;
uint32_t ikey = 0;
void *entry = NULL;
odp_rwlock_t *lock = NULL;
@@ -181,6 +187,7 @@ int odph_lineartable_get_value(odph_table_t table, void *key, void *buffer,
if (table == NULL || key == NULL || buffer == NULL)
return ODPH_FAIL;
+ tbl = (odph_linear_table_imp *)(void *)table;
ikey = *(uint32_t *)key;
if (ikey >= tbl->node_sum)
return ODPH_FAIL;
@@ -419,7 +419,7 @@ int odph_parse_options(int argc, char *argv[],
{0, 0, 0, 0}
};
- static char *helper_short_options = "";
+ static const char *helper_short_options = "";
/* defaults: */
helper_options.proc = false;
After turning on lost CFLAGS for checking errors, following things needs to be corrected to make code compile. Signed-off-by: Maxim Uvarov <maxim.uvarov@linaro.org> --- v2: rebase helper/chksum.c | 4 ++-- helper/cuckootable.c | 49 ++++++++++++++++++++----------------------------- helper/hashtable.c | 42 ++++++++++++++++++++++++++---------------- helper/iplookuptable.c | 47 +++++++++++++++++++++++------------------------ helper/lineartable.c | 27 +++++++++++++++++---------- helper/threads.c | 2 +- 6 files changed, 89 insertions(+), 82 deletions(-) -- 2.11.0.295.gd7dffce