diff options
author | Raffaele Aquilone <raffaele.aquilone@arm.com> | 2024-03-14 12:50:09 +0100 |
---|---|---|
committer | Michael Stokes <mjstokes@google.com> | 2024-03-19 08:11:42 +0000 |
commit | 4e0eb5e1859ca3adf11a93a7665811facef6616d (patch) | |
tree | 76fc0f0076f31003adabd7b3f6ed19bcb1bc6c58 | |
parent | 0f87558146392c9f46282a2c3862c6d6f792aeee (diff) | |
download | gpu-4e0eb5e1859ca3adf11a93a7665811facef6616d.tar.gz |
GPUCORE-41458android-14.0.0_r0.97android-14.0.0_r0.96android-14.0.0_r0.95android-14.0.0_r0.94android-14.0.0_r0.93android-14.0.0_r0.92android-14.0.0_r0.105android-14.0.0_r0.104android-14.0.0_r0.103android-14.0.0_r0.102android-14.0.0_r0.101android-gs-tangorpro-5.10-android14-qpr3android-gs-raviole-5.10-android14-qpr3android-gs-pantah-5.10-android14-qpr3android-gs-lynx-5.10-android14-qpr3android-gs-felix-5.10-android14-qpr3android-gs-bluejay-5.10-android14-qpr3
Bug: 329096276
Provenance: https://code.ipdelivery.arm.com/c/GPU/mali-ddk/+/6509
Change-Id: Ib283b858b8622380d876b00f9d743e8375f82627
Signed-off-by: Michael Stokes <mjstokes@google.com>
-rw-r--r-- | mali_kbase/mali_kbase_mem.c | 11 | ||||
-rw-r--r-- | mali_kbase/mali_kbase_mem.h | 5 |
2 files changed, 13 insertions, 3 deletions
diff --git a/mali_kbase/mali_kbase_mem.c b/mali_kbase/mali_kbase_mem.c index afc5a30..c3eb2cc 100644 --- a/mali_kbase/mali_kbase_mem.c +++ b/mali_kbase/mali_kbase_mem.c @@ -526,15 +526,20 @@ int kbase_gpu_munmap(struct kbase_context *kctx, struct kbase_va_region *reg) switch (alloc->imported.user_buf.state) { case KBASE_USER_BUF_STATE_GPU_MAPPED: { alloc->imported.user_buf.current_mapping_usage_count = 0; - kbase_user_buf_from_gpu_mapped_to_empty(kctx, reg); + kbase_mem_phy_alloc_ref_read(alloc) ? + kbase_user_buf_from_gpu_mapped_to_pinned(kctx, reg) : + kbase_user_buf_from_gpu_mapped_to_empty(kctx, reg); break; } case KBASE_USER_BUF_STATE_DMA_MAPPED: { - kbase_user_buf_from_dma_mapped_to_empty(kctx, reg); + kbase_mem_phy_alloc_ref_read(alloc) ? + kbase_user_buf_from_dma_mapped_to_pinned(kctx, reg) : + kbase_user_buf_from_dma_mapped_to_empty(kctx, reg); break; } case KBASE_USER_BUF_STATE_PINNED: { - kbase_user_buf_from_pinned_to_empty(kctx, reg); + if (!kbase_mem_phy_alloc_ref_read(alloc)) + kbase_user_buf_from_pinned_to_empty(kctx, reg); break; } case KBASE_USER_BUF_STATE_EMPTY: { diff --git a/mali_kbase/mali_kbase_mem.h b/mali_kbase/mali_kbase_mem.h index 739c7dc..371d788 100644 --- a/mali_kbase/mali_kbase_mem.h +++ b/mali_kbase/mali_kbase_mem.h @@ -589,6 +589,11 @@ int kbase_mem_init(struct kbase_device *kbdev); void kbase_mem_halt(struct kbase_device *kbdev); void kbase_mem_term(struct kbase_device *kbdev); +static inline unsigned int kbase_mem_phy_alloc_ref_read(struct kbase_mem_phy_alloc *alloc) +{ + return kref_read(&alloc->kref); +} + static inline struct kbase_mem_phy_alloc *kbase_mem_phy_alloc_get(struct kbase_mem_phy_alloc *alloc) { kref_get(&alloc->kref); |