summaryrefslogtreecommitdiff
path: root/mali_kbase/mali_kbase_mem.c
diff options
context:
space:
mode:
authorSidath Senanayake <sidaths@google.com>2021-06-16 14:36:34 +0100
committerTreeHugger Robot <treehugger-gerrit@google.com>2021-07-23 17:23:53 +0000
commit75593be594927d4cf2b8e0ca3f3f304d6482539e (patch)
tree2260301000f3379b91d05181e29a8c2f96dba399 /mali_kbase/mali_kbase_mem.c
parentbb5eae0a1480d69a1117d0c8e22ef74975a0373a (diff)
downloadgpu-75593be594927d4cf2b8e0ca3f3f304d6482539e.tar.gz
mali_kbase: mem: use mem-pin APIs in >= 5.9 kernels
For >=5.9 kernels, get_user_pages_remote => pin_user_pages_remote put_page => unpin_user_page Bug: 183641831 Bug: 185478741 Test: atest -c -d android.hardware.camera2.cts.ImageReaderTest#testImageReaderPrivateWithProtectedUsageFlag Provenance: https://collaborate.code.arm.com/3220 Signed-off-by: Sidath Senanayake <sidaths@google.com> Change-Id: I2ad5ff7f3b171a61a41fdf2b9ae1f932be53685c
Diffstat (limited to 'mali_kbase/mali_kbase_mem.c')
-rw-r--r--mali_kbase/mali_kbase_mem.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/mali_kbase/mali_kbase_mem.c b/mali_kbase/mali_kbase_mem.c
index 830898f..3944899 100644
--- a/mali_kbase/mali_kbase_mem.c
+++ b/mali_kbase/mali_kbase_mem.c
@@ -4456,6 +4456,15 @@ void kbase_jit_report_update_pressure(struct kbase_context *kctx,
}
#endif /* MALI_JIT_PRESSURE_LIMIT_BASE */
+static void unpin_user_buf_page(struct page *page)
+{
+#if KERNEL_VERSION(5, 9, 0) > LINUX_VERSION_CODE
+ put_page(page);
+#else
+ unpin_user_page(page);
+#endif
+}
+
#if MALI_USE_CSF
static void kbase_jd_user_buf_unpin_pages(struct kbase_mem_phy_alloc *alloc)
{
@@ -4466,7 +4475,7 @@ static void kbase_jd_user_buf_unpin_pages(struct kbase_mem_phy_alloc *alloc)
WARN_ON(alloc->nents != alloc->imported.user_buf.nr_pages);
for (i = 0; i < alloc->nents; i++)
- put_page(pages[i]);
+ unpin_user_buf_page(pages[i]);
}
}
#endif
@@ -4525,11 +4534,10 @@ KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE
reg->flags & KBASE_REG_GPU_WR ? FOLL_WRITE : 0,
pages, NULL, NULL);
#else
- pinned_pages = get_user_pages_remote(mm,
- address,
- alloc->imported.user_buf.nr_pages,
- reg->flags & KBASE_REG_GPU_WR ? FOLL_WRITE : 0,
- pages, NULL, NULL);
+ pinned_pages = pin_user_pages_remote(
+ mm, address, alloc->imported.user_buf.nr_pages,
+ reg->flags & KBASE_REG_GPU_WR ? FOLL_WRITE : 0, pages, NULL,
+ NULL);
#endif
if (pinned_pages <= 0)
@@ -4537,7 +4545,7 @@ KERNEL_VERSION(4, 5, 0) > LINUX_VERSION_CODE
if (pinned_pages != alloc->imported.user_buf.nr_pages) {
for (i = 0; i < pinned_pages; i++)
- put_page(pages[i]);
+ unpin_user_buf_page(pages[i]);
return -ENOMEM;
}
@@ -4613,7 +4621,7 @@ unwind:
}
while (++i < pinned_pages) {
- put_page(pages[i]);
+ unpin_user_buf_page(pages[i]);
pages[i] = NULL;
}
@@ -4643,7 +4651,7 @@ static void kbase_jd_user_buf_unmap(struct kbase_context *kctx,
if (writeable)
set_page_dirty_lock(pages[i]);
#if !MALI_USE_CSF
- put_page(pages[i]);
+ unpin_user_buf_page(pages[i]);
pages[i] = NULL;
#endif