mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 11:04:51 +03:00
gpu: nvgpu: Add nvgpu_bsearch() wrapper
Add a wrapper nvgpu_bsearch() for a standard binary search. It has two implementations: Linux version calls Linux kernel bsearch() and POSIX/QNX build uses stdlib bsearch(). Change-Id: Ic244df3cf3adb52b2192c175ec9b5dd06bce3ec8 Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2003370 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
a28c753ee6
commit
0f84c9024f
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -22,10 +22,9 @@
|
||||
#ifndef NVGPU_BSEARCH_H
|
||||
#define NVGPU_BSEARCH_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/bsearch.h>
|
||||
#elif defined(__NVGPU_POSIX__)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
#include <nvgpu/types.h>
|
||||
|
||||
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*/
|
||||
|
||||
30
drivers/gpu/nvgpu/os/linux/bsearch.c
Normal file
30
drivers/gpu/nvgpu/os/linux/bsearch.c
Normal file
@@ -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 <nvgpu/bsearch.h>
|
||||
#include <linux/bsearch.h>
|
||||
|
||||
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);
|
||||
}
|
||||
30
drivers/gpu/nvgpu/os/posix/bsearch.c
Normal file
30
drivers/gpu/nvgpu/os/posix/bsearch.c
Normal file
@@ -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 <nvgpu/bsearch.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user