> -----Original Message----- > From: EXT Maxim Uvarov [mailto:maxim.uva...@linaro.org] > Sent: Tuesday, December 08, 2015 10:44 AM > To: Savolainen, Petri (Nokia - FI/Espoo); lng-odp@lists.linaro.org > Subject: Re: [lng-odp] [API-NEXT PATCHv2] linux-generic: tm: use > odp_hash_crc32c() api to avoid arch issues > > On 12/08/2015 10:50, Savolainen, Petri (Nokia - FI/Espoo) wrote: > > Bill, > > > > hash_tbl_entry is now uintptr_t, which is 64 bits on a 64 bit build and > 32 bits on a 32 bit build. These shifts and all other lines that expect > that hash_tbl_entry (pointer size) is 64 bits should be updated also. > > > > -Petri > > > > Yes, that is what I said before. For now we can go with simple using 64 > bit hash entries for 32 bit case also. > Where 6 upper bits will be for defining first or secondary hash and it's > size. And all lower 32 for address pointer. > I.e. 26 bits will be lost. > > #define PRIMARY_HASH_TBL_SIZE (16 * 1024) > 26 * PRIMARY_HASH_TBL_SIZE = 425984 = 53248 bytes = 13 pages; > > #define SECONDARY_HASH_TBL_SIZE 128 > 26 * SECONDARY_HASH_TBL_SIZE = 3328 = 416 bytes > > So we lost for 32 bits some memory but code has to work in the same way > as for 64 bits. > After that if memory efficient fix will be needed for somebody than he > can fix it. > Or we will reuse some odp hash table api instead of odp_name_table.c. > > So for now I would do quick fix with some comment that there is unused > memory for 32 bit case. > > --- a/platform/linux-generic/odp_name_table.c > +++ b/platform/linux-generic/odp_name_table.c > @@ -93,7 +93,7 @@ typedef struct { > * NOT zero then this values points to a (linked list of) > name_table_entry_t > * records AND the bottom 6 bits are the length of this list. > */ > -typedef uintptr_t hash_tbl_entry_t; > +typedef uint64_t hash_tbl_entry_t; > > > BR, > Maxim.
odp_name_table.c: In function 'make_hash_tbl_entry': odp_name_table.c:570:20: error: cast from pointer to integer of different size [-Werror=pointer-to-int-cast] hash_tbl_entry = (hash_tbl_entry_t)name_tbl_entry; static hash_tbl_entry_t make_hash_tbl_entry(name_tbl_entry_t *name_tbl_entry, uint32_t entry_cnt) { hash_tbl_entry_t hash_tbl_entry; uint32_t new_entry_cnt; new_entry_cnt = MIN(entry_cnt + 1, 0x3F); hash_tbl_entry = (hash_tbl_entry_t)(uintptr_t)name_tbl_entry; hash_tbl_entry &= ~0x3F; hash_tbl_entry |= new_entry_cnt; return hash_tbl_entry; } And compiler is still happy with the casts? Maybe the casting issue was actually caused by removal of the uintptr_t cast above. -Petri _______________________________________________ lng-odp mailing list lng-odp@lists.linaro.org https://lists.linaro.org/mailman/listinfo/lng-odp