mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-22 09:12:24 +03:00
gpu: nvgpu: fix MISRA 21.6 violation in nvgpu.common.mm.as
Below MISRA 21.6 violation is reported in nvgpu.common.mm.as
${TEGRA_TOP}/kernel/nvgpu/drivers/gpu/nvgpu/common/mm/as.c:79:
misra_violation: Using function "snprintf".
Fix this by replacing snprintf with strncpy.
Add nvgpu_strnadd_u32 function to convert u32 to string
The function supports radix from 2 to 16.
Jira NVGPU-3333
Change-Id: Idee739dfdedeabb74d0d9f7d4cddd798445f0ee1
Signed-off-by: Thomas Fleury <tfleury@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/2117019
GVS: Gerrit_Virtual_Submit
Reviewed-by: Philip Elcan <pelcan@nvidia.com>
Reviewed-by: Vaibhav Kachore <vkachore@nvidia.com>
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
9b2f6925ca
commit
1fd2e43a3f
@@ -28,6 +28,7 @@
|
||||
#include <nvgpu/vm.h>
|
||||
#include <nvgpu/log2.h>
|
||||
#include <nvgpu/gk20a.h>
|
||||
#include <nvgpu/string.h>
|
||||
|
||||
/* dumb allocator... */
|
||||
static int generate_as_share_id(struct gk20a_as *as)
|
||||
@@ -55,6 +56,7 @@ static int gk20a_vm_alloc_share(struct gk20a_as_share *as_share,
|
||||
struct mm_gk20a *mm = &g->mm;
|
||||
struct vm_gk20a *vm;
|
||||
char name[32];
|
||||
char *p;
|
||||
const bool userspace_managed =
|
||||
(flags & NVGPU_AS_ALLOC_USERSPACE_MANAGED) != 0U;
|
||||
const bool unified_va =
|
||||
@@ -76,7 +78,8 @@ static int gk20a_vm_alloc_share(struct gk20a_as_share *as_share,
|
||||
}
|
||||
}
|
||||
|
||||
(void) snprintf(name, sizeof(name), "as_%d", as_share->id);
|
||||
p = strncpy(name, "as_", sizeof(name) - 1);
|
||||
(void) nvgpu_strnadd_u32(p, as_share->id, sizeof(name) - (p-name), 10U);
|
||||
|
||||
vm = nvgpu_vm_init(g, big_page_size,
|
||||
U64(big_page_size) << U64(10),
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
|
||||
#include <nvgpu/string.h>
|
||||
#include <nvgpu/log.h>
|
||||
|
||||
void
|
||||
nvgpu_memcpy(u8 *destb, const u8 *srcb, size_t n)
|
||||
@@ -33,3 +34,46 @@ nvgpu_memcmp(const u8 *b1, const u8 *b2, size_t n)
|
||||
{
|
||||
return memcmp(b1, b2, n);
|
||||
}
|
||||
|
||||
int nvgpu_strnadd_u32(char *dst, const u32 value, size_t size, u32 radix)
|
||||
{
|
||||
int n;
|
||||
u32 v;
|
||||
char *p;
|
||||
u32 digit;
|
||||
|
||||
if (radix < 2U || radix > 16U) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* how many digits do we need ? */
|
||||
n = 0;
|
||||
v = value;
|
||||
do {
|
||||
n++;
|
||||
v = v / radix;
|
||||
} while (v > 0U);
|
||||
|
||||
/* bail out if there is not room for '\0' */
|
||||
if (n >= (int)size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* number of digits (not including '\0') */
|
||||
p = dst + n;
|
||||
|
||||
/* terminate with '\0' */
|
||||
*p = '\0';
|
||||
p--;
|
||||
|
||||
v = value;
|
||||
do {
|
||||
digit = v % radix;
|
||||
*p = "0123456789abdcef"[digit];
|
||||
v = v / radix;
|
||||
p--;
|
||||
}
|
||||
while (v > 0U);
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
@@ -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"),
|
||||
@@ -54,4 +54,13 @@ void nvgpu_memcpy(u8 *destb, const u8 *srcb, size_t n);
|
||||
*/
|
||||
int nvgpu_memcmp(const u8 *b1, const u8 *b2, size_t n);
|
||||
|
||||
/**
|
||||
* nvgpu_strnadd_u32 - formats u32 into null-terminated string
|
||||
*
|
||||
* Returns number of digits added to string (not including '\0')
|
||||
* Returns 0 in case of invalid dst or radix, or insufficient space.
|
||||
* Returns 0 if there was no room to add '\0'
|
||||
*/
|
||||
int nvgpu_strnadd_u32(char *dst, const u32 value, size_t size, u32 radix);
|
||||
|
||||
#endif /* NVGPU_STRING_H */
|
||||
|
||||
Reference in New Issue
Block a user