mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-25 11:04:51 +03:00
gpu: nvgpu: fix CERT-C violations in atomic unit
CON40-C mandates that an atomic variable should not be referred twice in an expression. Fix violation of CON40-C in atomic unit. Jira NVGPU-3606 Change-Id: Ia3dfedf1e06d067a5c6f79ed89ccbbb11f4f092a Signed-off-by: ajesh <akv@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/2149466 Reviewed-by: Philip Elcan <pelcan@nvidia.com> Reviewed-by: Alex Waterman <alexw@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Ankur Kishore <ankkishore@nvidia.com> Reviewed-by: Vijayakumar Subbu <vsubbu@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
@@ -86,20 +86,6 @@ typedef struct __nvgpu_posix_atomic64 {
|
||||
|
||||
#define NVGPU_POSIX_ATOMIC_XCHG(v, new) atomic_exchange(&((v)->v), (new))
|
||||
|
||||
#define NVGPU_POSIX_ATOMIC_ADD_UNLESS(v, a, u) \
|
||||
({ \
|
||||
typeof((v)->v) old; \
|
||||
\
|
||||
do { \
|
||||
old = atomic_load(&((v)->v)); \
|
||||
if (old == (u)) { \
|
||||
break; \
|
||||
} \
|
||||
} while (!atomic_compare_exchange_strong(&((v)->v), \
|
||||
&old, old + (a))); \
|
||||
old; \
|
||||
})
|
||||
|
||||
static inline void nvgpu_atomic_set_impl(nvgpu_atomic_t *v, int i)
|
||||
{
|
||||
NVGPU_POSIX_ATOMIC_SET(v, i);
|
||||
@@ -177,7 +163,16 @@ static inline int nvgpu_atomic_add_return_impl(int i, nvgpu_atomic_t *v)
|
||||
|
||||
static inline int nvgpu_atomic_add_unless_impl(nvgpu_atomic_t *v, int a, int u)
|
||||
{
|
||||
return NVGPU_POSIX_ATOMIC_ADD_UNLESS(v, a, u);
|
||||
int old;
|
||||
|
||||
do {
|
||||
old = NVGPU_POSIX_ATOMIC_READ(v);
|
||||
if (old == (u)) {
|
||||
break;
|
||||
}
|
||||
} while (!atomic_compare_exchange_strong(&((v)->v), &old, old + (a)));
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
static inline void nvgpu_atomic64_set_impl(nvgpu_atomic64_t *v, long i)
|
||||
@@ -203,7 +198,16 @@ static inline long nvgpu_atomic64_add_return_impl(long x, nvgpu_atomic64_t *v)
|
||||
static inline long nvgpu_atomic64_add_unless_impl(nvgpu_atomic64_t *v, long a,
|
||||
long u)
|
||||
{
|
||||
return NVGPU_POSIX_ATOMIC_ADD_UNLESS(v, a, u);
|
||||
long old;
|
||||
|
||||
do {
|
||||
old = NVGPU_POSIX_ATOMIC_READ(v);
|
||||
if (old == (u)) {
|
||||
break;
|
||||
}
|
||||
} while (!atomic_compare_exchange_strong(&((v)->v), &old, old + (a)));
|
||||
|
||||
return old;
|
||||
}
|
||||
|
||||
static inline void nvgpu_atomic64_inc_impl(nvgpu_atomic64_t *v)
|
||||
|
||||
Reference in New Issue
Block a user