From 03145af1eb3045de8c1ea9d4f03396b3550ffcba Mon Sep 17 00:00:00 2001 From: asah Date: Mon, 4 Feb 2019 16:20:20 +0530 Subject: [PATCH] gpu: nvgpu: remove RTLD_GLOBAL flag from libnvgpu-drv.so dlopen for QNX tests currently libnvgpu-drv.so is opened with RTLD_GLOBAL flag which is required for nvgpu common tests but for qnx tests we dont need any symbol from libnvgpu-drv.so (except nvgpu_posix_probe and nvgpu_posix_cleanup which we will eventually remove for qnx) so RTLD_GLOBAL should not be used in case of qnx tests. If RTLD_GLOBAL is used for qnx tests then the symbols from libnvgpu-drv.so will be used instead of from libqnx_mock.so which is wrong. This change uses -Q command line option to make the decision about RTLD_GLOBAL flag After this change qnx unit tests should be run with -Q option and nvgpu common unit tests should be run without it JIRA NVGPU-1352 Change-Id: I759db679f5b95696835c8125c21f95bf35df590c Signed-off-by: asah Reviewed-on: https://git-master.nvidia.com/r/2011271 Reviewed-by: Alex Waterman Reviewed-by: svc-mobile-coverity Reviewed-by: svc-mobile-misra GVS: Gerrit_Virtual_Submit Reviewed-by: Ankur Kishore Reviewed-by: mobile promotions Tested-by: mobile promotions --- userspace/src/nvgpu.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/userspace/src/nvgpu.c b/userspace/src/nvgpu.c index a9b7ced38..53e26ab30 100644 --- a/userspace/src/nvgpu.c +++ b/userspace/src/nvgpu.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -37,14 +37,21 @@ int core_load_nvgpu(struct unit_fw *fw) { const char *msg; + int flag = RTLD_NOW; - /* - * Specify a GLOBAL binding so that subsequently loaded unit tests see - * the nvgpu-drv library. They will of course need it (and will access - * it directly). I.e they will link against nvgpu-drv and this should - * satisfy that linkage. - */ - fw->nvgpu_so = dlopen("libnvgpu-drv.so", RTLD_NOW | RTLD_GLOBAL); + if (fw->args->is_qnx == 0) { + /* + * Specify a GLOBAL binding so that subsequently loaded + * unit tests see the nvgpu-drv library. They will of course + * need it (and will access it directly). I.e they will link + * against nvgpu-drv and this should satisfy that linkage. + */ + flag |= RTLD_GLOBAL; + } + + /* TODO: WAR: remove this dependency of libnvgpu-drv.so for qnx unit + * test, refer NVGPU-1935 for more detail */ + fw->nvgpu_so = dlopen("libnvgpu-drv.so", flag); if (fw->nvgpu_so == NULL) { msg = dlerror();