summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaffaele Aquilone <raffaele.aquilone@arm.com>2024-03-19 08:28:01 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-03-19 08:28:01 +0000
commit10cee2ea3b7ca2089ac98fbe16ef1110e2298003 (patch)
treef6021c7e55cb29587a5d807e1e3e524bd5985d51
parentfcb9707c2a69ecadfac37655b1d2c0a6679f8db4 (diff)
parent4e0eb5e1859ca3adf11a93a7665811facef6616d (diff)
downloadgpu-android-gs-lynx-5.10-android15-beta.tar.gz
Original change: https://partner-android-review.googlesource.com/c/kernel/private/google-modules/gpu/+/2768574 Change-Id: I8114200161716909e896b119eea74ddec51f0409 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--mali_kbase/mali_kbase_mem.c11
-rw-r--r--mali_kbase/mali_kbase_mem.h5
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);