From 81868a187fa3b217368206f17b19309846e8e7fb Mon Sep 17 00:00:00 2001 From: Debarshi Dutta Date: Fri, 18 Aug 2017 16:22:29 +0530 Subject: gpu: nvgpu: Nvgpu abstraction for linux barriers. construct wrapper nvgpu_* methods to replace mb,rmb,wmb,smp_mb,smp_rmb,smp_wmb,read_barrier_depends and smp_read_barrier_depends. NVGPU-122 Change-Id: I8d24dd70fef5cb0fadaacc15f3ab11531667a0df Signed-off-by: Debarshi Reviewed-on: https://git-master.nvidia.com/r/1541199 Reviewed-by: svccoveritychecker Reviewed-by: svc-mobile-coverity GVS: Gerrit_Virtual_Submit Reviewed-by: Sourab Gupta Reviewed-by: Vijayakumar Subbu --- drivers/gpu/nvgpu/common/mm/bitmap_allocator.c | 5 +++-- drivers/gpu/nvgpu/common/mm/buddy_allocator.c | 5 +++-- drivers/gpu/nvgpu/common/mm/gmmu.c | 13 +++++++------ drivers/gpu/nvgpu/common/mm/lockless_allocator.c | 5 +++-- drivers/gpu/nvgpu/common/pmu/pmu.c | 3 ++- drivers/gpu/nvgpu/common/pmu/pmu_pg.c | 3 ++- 6 files changed, 20 insertions(+), 14 deletions(-) (limited to 'drivers/gpu/nvgpu/common') diff --git a/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c b/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c index eae0475a..274e9c93 100644 --- a/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/bitmap_allocator.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "bitmap_allocator_priv.h" @@ -40,7 +41,7 @@ static int nvgpu_bitmap_alloc_inited(struct nvgpu_allocator *a) struct nvgpu_bitmap_allocator *ba = a->priv; int inited = ba->inited; - rmb(); + nvgpu_smp_rmb(); return inited; } @@ -408,7 +409,7 @@ int nvgpu_bitmap_allocator_init(struct gk20a *g, struct nvgpu_allocator *__a, goto fail; } - wmb(); + nvgpu_smp_wmb(); a->inited = true; #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/nvgpu/common/mm/buddy_allocator.c b/drivers/gpu/nvgpu/common/mm/buddy_allocator.c index 0ef94c10..3e305bb8 100644 --- a/drivers/gpu/nvgpu/common/mm/buddy_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/buddy_allocator.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "gk20a/mm_gk20a.h" #include "gk20a/platform_gk20a.h" @@ -1064,7 +1065,7 @@ static int nvgpu_buddy_alloc_inited(struct nvgpu_allocator *a) struct nvgpu_buddy_allocator *ba = a->priv; int inited = ba->initialized; - rmb(); + nvgpu_smp_rmb(); return inited; } @@ -1289,7 +1290,7 @@ int __nvgpu_buddy_allocator_init(struct gk20a *g, struct nvgpu_allocator *__a, if (err) goto fail; - wmb(); + nvgpu_smp_wmb(); a->initialized = 1; #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/nvgpu/common/mm/gmmu.c b/drivers/gpu/nvgpu/common/mm/gmmu.c index 73dff2c3..7f486d68 100644 --- a/drivers/gpu/nvgpu/common/mm/gmmu.c +++ b/drivers/gpu/nvgpu/common/mm/gmmu.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "gk20a/gk20a.h" #include "gk20a/mm_gk20a.h" @@ -164,8 +165,8 @@ int nvgpu_gmmu_init_page_table(struct vm_gk20a *vm) return err; /* - * One mb() is done after all mapping operations. Don't need individual - * barriers for each PD write. + * One nvgpu_smp_mb() is done after all mapping operations. Don't need + * individual barriers for each PD write. */ vm->pdb.mem->skip_wmb = true; @@ -259,8 +260,8 @@ static int pd_allocate(struct vm_gk20a *vm, } /* - * One mb() is done after all mapping operations. Don't need individual - * barriers for each PD write. + * One nvgpu_smp_mb() is done after all mapping operations. Don't need + * individual barriers for each PD write. */ pd->mem->skip_wmb = true; @@ -714,7 +715,7 @@ static int __nvgpu_gmmu_update_page_table(struct vm_gk20a *vm, attrs); unmap_gmmu_pages(g, &vm->pdb); - mb(); + nvgpu_smp_mb(); __gmmu_dbg(g, attrs, "%-5s Done!", sgt ? "MAP" : "UNMAP"); @@ -983,7 +984,7 @@ int __nvgpu_set_pte(struct gk20a *g, struct vm_gk20a *vm, u64 vaddr, u32 *pte) * There probably also needs to be a TLB invalidate as well but we leave * that to the caller of this function. */ - wmb(); + nvgpu_smp_wmb(); return 0; } diff --git a/drivers/gpu/nvgpu/common/mm/lockless_allocator.c b/drivers/gpu/nvgpu/common/mm/lockless_allocator.c index eeb86095..8f712a14 100644 --- a/drivers/gpu/nvgpu/common/mm/lockless_allocator.c +++ b/drivers/gpu/nvgpu/common/mm/lockless_allocator.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "lockless_allocator_priv.h" @@ -39,7 +40,7 @@ static int nvgpu_lockless_alloc_inited(struct nvgpu_allocator *a) struct nvgpu_lockless_allocator *pa = a->priv; int inited = pa->inited; - rmb(); + nvgpu_smp_rmb(); return inited; } @@ -198,7 +199,7 @@ int nvgpu_lockless_allocator_init(struct gk20a *g, struct nvgpu_allocator *__a, a->flags = flags; nvgpu_atomic_set(&a->nr_allocs, 0); - wmb(); + nvgpu_smp_wmb(); a->inited = true; #ifdef CONFIG_DEBUG_FS diff --git a/drivers/gpu/nvgpu/common/pmu/pmu.c b/drivers/gpu/nvgpu/common/pmu/pmu.c index 58108722..63597d10 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu.c @@ -16,6 +16,7 @@ #include #include #include +#include #include "gk20a/gk20a.h" @@ -394,7 +395,7 @@ void nvgpu_pmu_state_change(struct gk20a *g, u32 pmu_state, } /* make status visible */ - smp_mb(); + nvgpu_smp_mb(); } static int nvgpu_pg_init_task(void *arg) diff --git a/drivers/gpu/nvgpu/common/pmu/pmu_pg.c b/drivers/gpu/nvgpu/common/pmu/pmu_pg.c index 935ae95a..b435f4a7 100644 --- a/drivers/gpu/nvgpu/common/pmu/pmu_pg.c +++ b/drivers/gpu/nvgpu/common/pmu/pmu_pg.c @@ -14,6 +14,7 @@ #include #include #include +#include #include "gk20a/gk20a.h" @@ -84,7 +85,7 @@ static void pmu_handle_pg_elpg_msg(struct gk20a *g, struct pmu_msg *msg, true); WRITE_ONCE(pmu->mscg_stat, PMU_MSCG_DISABLED); /* make status visible */ - smp_mb(); + nvgpu_smp_mb(); } else nvgpu_pmu_state_change(g, PMU_STATE_ELPG_BOOTED, true); -- cgit v1.2.2