From 049a542207ed694271316782397b78b2e202086a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Wagner?= Date: Thu, 14 Dec 2023 09:44:26 +0000 Subject: Update KMD to r47p0 Provenance: ipdelivery@ad01e50d640910a99224382bb227e6d4de627657 Change-Id: I19ac9bce34a5c5a319c1b4a388e8b037b3dfe6e7 --- mali_kbase/mali_kbase_sync_file.c | 131 ++++++++++++-------------------------- 1 file changed, 41 insertions(+), 90 deletions(-) (limited to 'mali_kbase/mali_kbase_sync_file.c') diff --git a/mali_kbase/mali_kbase_sync_file.c b/mali_kbase/mali_kbase_sync_file.c index e1102ef..ce375d1 100644 --- a/mali_kbase/mali_kbase_sync_file.c +++ b/mali_kbase/mali_kbase_sync_file.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2012-2022 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2012-2023 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software @@ -22,6 +22,9 @@ /* * Code for supporting explicit Linux fences (CONFIG_SYNC_FILE) */ +#include "mali_kbase_sync.h" +#include "mali_kbase_fence.h" +#include "mali_kbase.h" #include #include @@ -33,22 +36,16 @@ #include #include #include -#include "mali_kbase_fence_defs.h" -#include "mali_kbase_sync.h" -#include "mali_kbase_fence.h" -#include "mali_kbase.h" +#include -static const struct file_operations stream_fops = { - .owner = THIS_MODULE -}; +static const struct file_operations stream_fops = { .owner = THIS_MODULE }; int kbase_sync_fence_stream_create(const char *name, int *const out_fd) { if (!out_fd) return -EINVAL; - *out_fd = anon_inode_getfd(name, &stream_fops, NULL, - O_RDONLY | O_CLOEXEC); + *out_fd = anon_inode_getfd(name, &stream_fops, NULL, O_RDONLY | O_CLOEXEC); if (*out_fd < 0) return -EINVAL; @@ -58,14 +55,12 @@ int kbase_sync_fence_stream_create(const char *name, int *const out_fd) #if !MALI_USE_CSF int kbase_sync_fence_out_create(struct kbase_jd_atom *katom, int stream_fd) { -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence; -#else struct dma_fence *fence; -#endif struct sync_file *sync_file; int fd; + CSTD_UNUSED(stream_fd); + fence = kbase_fence_out_new(katom); if (!fence) return -ENOMEM; @@ -96,18 +91,14 @@ int kbase_sync_fence_out_create(struct kbase_jd_atom *katom, int stream_fd) return fd; } - fd_install(fd, sync_file->file); + fd_install((unsigned int)fd, sync_file->file); return fd; } int kbase_sync_fence_in_from_fd(struct kbase_jd_atom *katom, int fd) { -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence = sync_file_get_fence(fd); -#else struct dma_fence *fence = sync_file_get_fence(fd); -#endif lockdep_assert_held(&katom->kctx->jctx.lock); @@ -123,23 +114,18 @@ int kbase_sync_fence_in_from_fd(struct kbase_jd_atom *katom, int fd) int kbase_sync_fence_validate(int fd) { -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence = sync_file_get_fence(fd); -#else struct dma_fence *fence = sync_file_get_fence(fd); -#endif if (!fence) return -EINVAL; dma_fence_put(fence); - return 0; /* valid */ + return 0; } #if !MALI_USE_CSF -enum base_jd_event_code -kbase_sync_fence_out_trigger(struct kbase_jd_atom *katom, int result) +enum base_jd_event_code kbase_sync_fence_out_trigger(struct kbase_jd_atom *katom, int result) { int res; @@ -150,8 +136,7 @@ kbase_sync_fence_out_trigger(struct kbase_jd_atom *katom, int result) res = kbase_fence_out_signal(katom, result); if (unlikely(res < 0)) { - dev_warn(katom->kctx->kbdev->dev, - "fence_signal() failed with %d\n", res); + dev_warn(katom->kctx->kbdev->dev, "fence_signal() failed with %d\n", res); } kbase_sync_fence_out_remove(katom); @@ -159,30 +144,24 @@ kbase_sync_fence_out_trigger(struct kbase_jd_atom *katom, int result) return (result != 0) ? BASE_JD_EVENT_JOB_CANCELLED : BASE_JD_EVENT_DONE; } -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) -static void kbase_fence_wait_callback(struct fence *fence, - struct fence_cb *cb) -#else -static void kbase_fence_wait_callback(struct dma_fence *fence, - struct dma_fence_cb *cb) -#endif +static void kbase_fence_wait_callback(struct dma_fence *fence, struct dma_fence_cb *cb) { - struct kbase_jd_atom *katom = container_of(cb, struct kbase_jd_atom, - dma_fence.fence_cb); + struct kbase_jd_atom *katom = container_of(cb, struct kbase_jd_atom, dma_fence.fence_cb); struct kbase_context *kctx = katom->kctx; + CSTD_UNUSED(fence); + /* Cancel atom if fence is erroneous */ if (dma_fence_is_signaled(katom->dma_fence.fence_in) && #if (KERNEL_VERSION(4, 11, 0) <= LINUX_VERSION_CODE || \ - (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE && \ - KERNEL_VERSION(4, 9, 68) <= LINUX_VERSION_CODE)) + (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE && \ + KERNEL_VERSION(4, 9, 68) <= LINUX_VERSION_CODE)) katom->dma_fence.fence_in->error < 0) #else katom->dma_fence.fence_in->status < 0) #endif katom->event_code = BASE_JD_EVENT_JOB_CANCELLED; - /* To prevent a potential deadlock we schedule the work onto the * job_done_wq workqueue * @@ -197,11 +176,7 @@ static void kbase_fence_wait_callback(struct dma_fence *fence, int kbase_sync_fence_in_wait(struct kbase_jd_atom *katom) { int err; -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence; -#else struct dma_fence *fence; -#endif lockdep_assert_held(&katom->kctx->jctx.lock); @@ -209,8 +184,7 @@ int kbase_sync_fence_in_wait(struct kbase_jd_atom *katom) if (!fence) return 0; /* no input fence to wait for, good to go! */ - err = dma_fence_add_callback(fence, &katom->dma_fence.fence_cb, - kbase_fence_wait_callback); + err = dma_fence_add_callback(fence, &katom->dma_fence.fence_cb, kbase_fence_wait_callback); if (err == -ENOENT) { int fence_status = dma_fence_get_status(fence); @@ -228,8 +202,8 @@ int kbase_sync_fence_in_wait(struct kbase_jd_atom *katom) kbase_sync_fence_in_info_get(katom, &info); dev_warn(katom->kctx->kbdev->dev, - "Unexpected status for fence %s of ctx:%d_%d atom:%d", - info.name, katom->kctx->tgid, katom->kctx->id, + "Unexpected status for fence %s of ctx:%d_%d atom:%d", info.name, + katom->kctx->tgid, katom->kctx->id, kbase_jd_atom_id(katom->kctx, katom)); } @@ -306,10 +280,11 @@ void kbase_sync_fence_in_remove(struct kbase_jd_atom *katom) struct kbase_sync_fence_info info; kbase_sync_fence_in_info_get(katom, &info); - dev_warn(katom->kctx->kbdev->dev, - "Callback was not removed earlier for fence %s of ctx:%d_%d atom:%d", - info.name, katom->kctx->tgid, katom->kctx->id, - kbase_jd_atom_id(katom->kctx, katom)); + dev_warn( + katom->kctx->kbdev->dev, + "Callback was not removed earlier for fence %s of ctx:%d_%d atom:%d", + info.name, katom->kctx->tgid, katom->kctx->id, + kbase_jd_atom_id(katom->kctx, katom)); } } @@ -318,14 +293,9 @@ void kbase_sync_fence_in_remove(struct kbase_jd_atom *katom) } #endif /* !MALI_USE_CSF */ -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) -void kbase_sync_fence_info_get(struct fence *fence, - struct kbase_sync_fence_info *info) -#else -void kbase_sync_fence_info_get(struct dma_fence *fence, - struct kbase_sync_fence_info *info) -#endif +void kbase_sync_fence_info_get(struct dma_fence *fence, struct kbase_sync_fence_info *info) { + int status; info->fence = fence; /* Translate into the following status, with support for error handling: @@ -333,40 +303,26 @@ void kbase_sync_fence_info_get(struct dma_fence *fence, * 0 : active * 1 : signaled */ - if (dma_fence_is_signaled(fence)) { -#if (KERNEL_VERSION(4, 11, 0) <= LINUX_VERSION_CODE || \ - (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE && \ - KERNEL_VERSION(4, 9, 68) <= LINUX_VERSION_CODE)) - int status = fence->error; -#else - int status = fence->status; -#endif - if (status < 0) - info->status = status; /* signaled with error */ - else - info->status = 1; /* signaled with success */ - } else { + status = dma_fence_get_status(fence); + + if (status < 0) + info->status = status; /* signaled with error */ + else if (status > 0) + info->status = 1; /* signaled with success */ + else info->status = 0; /* still active (unsignaled) */ - } #if (KERNEL_VERSION(5, 1, 0) > LINUX_VERSION_CODE) - scnprintf(info->name, sizeof(info->name), "%llu#%u", - fence->context, fence->seqno); + scnprintf(info->name, sizeof(info->name), "%llu#%u", fence->context, fence->seqno); #else - scnprintf(info->name, sizeof(info->name), "%llu#%llu", - fence->context, fence->seqno); + scnprintf(info->name, sizeof(info->name), "%llu#%llu", fence->context, fence->seqno); #endif } #if !MALI_USE_CSF -int kbase_sync_fence_in_info_get(struct kbase_jd_atom *katom, - struct kbase_sync_fence_info *info) +int kbase_sync_fence_in_info_get(struct kbase_jd_atom *katom, struct kbase_sync_fence_info *info) { -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence; -#else struct dma_fence *fence; -#endif fence = kbase_fence_in_get(katom); if (!fence) @@ -379,14 +335,9 @@ int kbase_sync_fence_in_info_get(struct kbase_jd_atom *katom, return 0; } -int kbase_sync_fence_out_info_get(struct kbase_jd_atom *katom, - struct kbase_sync_fence_info *info) +int kbase_sync_fence_out_info_get(struct kbase_jd_atom *katom, struct kbase_sync_fence_info *info) { -#if (KERNEL_VERSION(4, 10, 0) > LINUX_VERSION_CODE) - struct fence *fence; -#else struct dma_fence *fence; -#endif fence = kbase_fence_out_get(katom); if (!fence) @@ -399,11 +350,11 @@ int kbase_sync_fence_out_info_get(struct kbase_jd_atom *katom, return 0; } - #ifdef CONFIG_MALI_FENCE_DEBUG void kbase_sync_fence_in_dump(struct kbase_jd_atom *katom) { /* Not implemented */ + CSTD_UNUSED(katom); } #endif #endif /* !MALI_USE_CSF*/ -- cgit v1.2.3