diff --git a/drivers/gpu/nvgpu/Makefile b/drivers/gpu/nvgpu/Makefile index cceecf68b..bef21f5ff 100644 --- a/drivers/gpu/nvgpu/Makefile +++ b/drivers/gpu/nvgpu/Makefile @@ -183,7 +183,8 @@ nvgpu-y += \ os/linux/dt.o \ os/linux/ecc_sysfs.o \ os/linux/ltc.o \ - os/linux/os_ops_tu104.o + os/linux/os_ops_tu104.o \ + os/linux/bsearch.o nvgpu-$(CONFIG_GK20A_VIDMEM) += \ os/linux/dmabuf_vidmem.o diff --git a/drivers/gpu/nvgpu/Makefile.sources b/drivers/gpu/nvgpu/Makefile.sources index 88d8528a4..b54502970 100644 --- a/drivers/gpu/nvgpu/Makefile.sources +++ b/drivers/gpu/nvgpu/Makefile.sources @@ -56,6 +56,7 @@ endif # POSIX sources shared between the POSIX and QNX builds. srcs += os/posix/bug.c \ + os/posix/bsearch.c srcs += common/sim.c \ common/sim_pci.c \ diff --git a/drivers/gpu/nvgpu/common/regops/regops.c b/drivers/gpu/nvgpu/common/regops/regops.c index 4cf716533..4bd953d9d 100644 --- a/drivers/gpu/nvgpu/common/regops/regops.c +++ b/drivers/gpu/nvgpu/common/regops/regops.c @@ -280,7 +280,7 @@ static bool check_whitelists(struct gk20a *g, if (op->type == REGOP(TYPE_GLOBAL)) { /* search global list */ valid = (g->ops.regops.get_global_whitelist_ranges != NULL) && - (bsearch(&offset, + (nvgpu_bsearch(&offset, g->ops.regops.get_global_whitelist_ranges(), g->ops.regops.get_global_whitelist_ranges_count(), sizeof(*g->ops.regops.get_global_whitelist_ranges()), @@ -290,7 +290,7 @@ static bool check_whitelists(struct gk20a *g, if ((!valid) && (!is_profiler)) { /* binary search context list */ valid = (g->ops.regops.get_context_whitelist_ranges != NULL) && - (bsearch(&offset, + (nvgpu_bsearch(&offset, g->ops.regops.get_context_whitelist_ranges(), g->ops.regops.get_context_whitelist_ranges_count(), sizeof(*g->ops.regops.get_context_whitelist_ranges()), @@ -307,7 +307,7 @@ static bool check_whitelists(struct gk20a *g, } else if (op->type == REGOP(TYPE_GR_CTX)) { /* binary search context list */ valid = (g->ops.regops.get_context_whitelist_ranges != NULL) && - (bsearch(&offset, + (nvgpu_bsearch(&offset, g->ops.regops.get_context_whitelist_ranges(), g->ops.regops.get_context_whitelist_ranges_count(), sizeof(*g->ops.regops.get_context_whitelist_ranges()), @@ -447,7 +447,7 @@ static bool validate_reg_ops(struct gk20a *g, /* exported for tools like cyclestats, etc */ bool is_bar0_global_offset_whitelisted_gk20a(struct gk20a *g, u32 offset) { - bool valid = bsearch(&offset, + bool valid = nvgpu_bsearch(&offset, g->ops.regops.get_global_whitelist_ranges(), g->ops.regops.get_global_whitelist_ranges_count(), sizeof(*g->ops.regops.get_global_whitelist_ranges()), diff --git a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c index 01143fa1e..2454c1339 100644 --- a/drivers/gpu/nvgpu/gk20a/gr_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/gr_gk20a.c @@ -7233,7 +7233,7 @@ static int gr_gk20a_find_priv_offset_in_pm_buffer(struct gk20a *g, count = gr->ctx_vars.hwpm_ctxsw_buffer_offset_map_count; map_key.addr = addr; - result = bsearch(&map_key, map, count, sizeof(*map), map_cmp); + result = nvgpu_bsearch(&map_key, map, count, sizeof(*map), map_cmp); if (result != NULL) { *priv_offset = result->offset; diff --git a/drivers/gpu/nvgpu/include/nvgpu/bsearch.h b/drivers/gpu/nvgpu/include/nvgpu/bsearch.h index 46a2d0497..148bf2e08 100644 --- a/drivers/gpu/nvgpu/include/nvgpu/bsearch.h +++ b/drivers/gpu/nvgpu/include/nvgpu/bsearch.h @@ -22,10 +22,9 @@ #ifndef NVGPU_BSEARCH_H #define NVGPU_BSEARCH_H -#ifdef __KERNEL__ -#include -#elif defined(__NVGPU_POSIX__) -#include -#endif +#include + +void *nvgpu_bsearch(const void *key, const void *base, size_t nitems, size_t size, + int (*compar)(const void *a, const void *b)); #endif /*NVGPU_BSEARCH_H*/ diff --git a/drivers/gpu/nvgpu/os/linux/bsearch.c b/drivers/gpu/nvgpu/os/linux/bsearch.c new file mode 100644 index 000000000..d41fb70f5 --- /dev/null +++ b/drivers/gpu/nvgpu/os/linux/bsearch.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 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"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +void *nvgpu_bsearch(const void *key, const void *base, size_t nitems, size_t size, + int (*compar)(const void *a, const void *b)) +{ + return bsearch(key, base, nitems, size, compar); +} diff --git a/drivers/gpu/nvgpu/os/posix/bsearch.c b/drivers/gpu/nvgpu/os/posix/bsearch.c new file mode 100644 index 000000000..7c4f1c5b3 --- /dev/null +++ b/drivers/gpu/nvgpu/os/posix/bsearch.c @@ -0,0 +1,30 @@ +/* + * Copyright (c) 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"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include + +void *nvgpu_bsearch(const void *key, const void *base, size_t nitems, size_t size, + int (*compar)(const void *a, const void *b)) +{ + return bsearch(key, base, nitems, size, compar); +}