Commit Graph

4 Commits

Author SHA1 Message Date
Harald Welte 7fc88b3248 log2.h: Avoid redefining __always_inline
/build/deps/install/stow/libosmocore/include/osmocom/core/log2.h:10:0: error: "__always_inline" redefined [-Werror]
 #define __always_inline               inline __attribute__((always_inline))
/usr/include/x86_64-linux-gnu/sys/cdefs.h:311:0: note: this is the location of the previous definition
 # define __always_inline __inline __attribute__ ((__always_inline__))

Change-Id: I738d2a72f835a29e30b8ba20456e5c4c9aa844c9
2020-12-06 15:45:52 +01:00
Harald Welte c172d9fe8d log2.h: Use uintXX_t instead of kernel specific types
Change-Id: Ieb872551bdbe514f2c77f9aeb2b9ee42f6573909
2020-12-06 15:14:35 +01:00
Harald Welte 622cda3802 hash/log2: Add generic implementations of fls() and fls64()
When importing the hashtable code in I8ef73a62fe9846ce45058eb21cf999dd3eed5741
I didn't import actual implementations of the fls() and fls64()
implementations, as at least gcc-10 was smart enough to detect
we only use it on constant types and hence the computation can happen
at build time via const_ilog2()

However, in our jenkins build verification' this doesn't appear to
happen, as we get below errors:

/build/deps/install/stow/libosmocore/include/osmocom/core/log2.h: In function ‘__ilog2_u32’:
/build/deps/install/stow/libosmocore/include/osmocom/core/log2.h:20:9: error: implicit declaration of function ‘fls’ [-Werror=implicit-function-declaration]
  return fls(n) - 1;
         ^~~
/build/deps/install/stow/libosmocore/include/osmocom/core/log2.h: In function ‘__ilog2_u64’:
/build/deps/install/stow/libosmocore/include/osmocom/core/log2.h:28:9: error: implicit declaration of function ‘fls64’ [-Werror=implicit-function-declaration]
  return fls64(n) - 1;
         ^~~~~

Let's provide some generic implementations for this case.  If needed
one could also introduce architecture-specific assembly implementations
like in the Linux kernel, but so far we managed to keep libosmocore free
of any assembly tweaks.

Change-Id: Ifa4898eb66c8d949618edd47961b7a0330ed35b5
2020-12-06 14:40:55 +01:00
Harald Welte 7101ca2751 Add hlist and hashtable from Linux kernel
For more than a decade we've used the linuxlist.h for double-linked
lists.  Let's also add the hlist (double-linked lists with single
pointer sized head, and the hashtable that builds on top of it.

This reflects the versions included in Linux 5.8 with some modifications
to make them build in userspace (remove RCU versions, adjust for
userspace include files and types, convert to doxygen).

Change-Id: I8ef73a62fe9846ce45058eb21cf999dd3eed5741
2020-12-05 11:39:42 +01:00