[15/15] eal/linux: use gettid(2) for debug message in sigbus_handler
Checks
Commit Message
There is no guarantee that pthread_self() returns the thread id or that
pthread_t is an integer. Use gettid(2) to get the kernel thread id
instead.
This fixes the following warning when building with musl libc:
../lib/librte_eal/linuxapp/eal/eal_dev.c: In function 'sigbus_handler':
../lib/librte_eal/linuxapp/eal/eal_dev.c:70:3: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
(int)pthread_self(), info->si_addr);
^
Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
---
This is not reallly a compile error, but the warning looked a bit scary, and
code looked wrong, so I fixed it.
lib/librte_eal/linuxapp/eal/eal_dev.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
Comments
On Mon, 11 Mar 2019 18:37:02 +0100
Natanael Copa <ncopa@alpinelinux.org> wrote:
> +#if !defined(__GLIBC__)
> +#include <sys/syscall.h>
> +#define gettid() syscall(SYS_gettid)
> +#endif
> +
I though glibc didn't want to expose thread id.
Personally, I would just drop the thread from the log message since it is
not that useful anyway.
@@ -7,6 +7,7 @@
#include <fcntl.h>
#include <signal.h>
#include <sys/socket.h>
+#include <sys/types.h>
#include <linux/netlink.h>
#include <rte_string_fns.h>
@@ -30,6 +31,11 @@ static bool hotplug_handle;
#define EAL_UEV_MSG_LEN 4096
#define EAL_UEV_MSG_ELEM_LEN 128
+#if !defined(__GLIBC__)
+#include <sys/syscall.h>
+#define gettid() syscall(SYS_gettid)
+#endif
+
/*
* spinlock for device hot-unplug failure handling. If it try to access bus or
* device, such as handle sigbus on bus or handle memory failure for device
@@ -67,7 +73,7 @@ static void sigbus_handler(int signum, siginfo_t *info,
int ret;
RTE_LOG(DEBUG, EAL, "Thread[%d] catch SIGBUS, fault address:%p\n",
- (int)pthread_self(), info->si_addr);
+ (int)gettid(), info->si_addr);
rte_spinlock_lock(&failure_handle_lock);
ret = rte_bus_sigbus_handler(info->si_addr);