From f70575805708cabdedea7498aaa3f710fde4d920 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Wed, 31 Jan 2024 03:29:01 +0000 Subject: [PATCH] add lvds1024*800 --- kernel/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c | 72 ++++++++++++++--------------------- 1 files changed, 29 insertions(+), 43 deletions(-) diff --git a/kernel/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c b/kernel/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c index 295441d..14a730d 100644 --- a/kernel/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c +++ b/kernel/drivers/gpu/arm/bifrost/mali_kbase_kinstr_jm.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note /* * - * (C) COPYRIGHT 2019-2021 ARM Limited. All rights reserved. + * (C) COPYRIGHT 2019-2022 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 @@ -45,22 +45,25 @@ #include <linux/slab.h> #include <linux/spinlock.h> #include <linux/version.h> +#include <linux/version_compat_defs.h> #include <linux/wait.h> +/* Explicitly include epoll header for old kernels. Not required from 4.16. */ +#if KERNEL_VERSION(4, 16, 0) > LINUX_VERSION_CODE +#include <uapi/linux/eventpoll.h> +#endif + +/* Define static_assert(). + * + * The macro was introduced in kernel 5.1. But older vendor kernels may define + * it too. + */ #if KERNEL_VERSION(5, 1, 0) <= LINUX_VERSION_CODE #include <linux/build_bug.h> -#else +#elif !defined(static_assert) // Stringify the expression if no message is given. #define static_assert(e, ...) __static_assert(e, #__VA_ARGS__, #e) #define __static_assert(e, msg, ...) _Static_assert(e, msg) -#endif - -#if KERNEL_VERSION(4, 16, 0) >= LINUX_VERSION_CODE -typedef unsigned int __poll_t; -#endif - -#ifndef ENOTSUP -#define ENOTSUP EOPNOTSUPP #endif /* The module printing prefix */ @@ -204,9 +207,8 @@ */ static inline bool reader_changes_is_valid_size(const size_t size) { - typedef struct reader_changes changes_t; - const size_t elem_size = sizeof(*((changes_t *)0)->data); - const size_t size_size = sizeof(((changes_t *)0)->size); + const size_t elem_size = sizeof(*((struct reader_changes *)0)->data); + const size_t size_size = sizeof(((struct reader_changes *)0)->size); const size_t size_max = (1ull << (size_size * 8)) - 1; return is_power_of_2(size) && /* Is a power of two */ @@ -223,11 +225,8 @@ * * Return: * (0, U16_MAX] - the number of data elements allocated - * -EINVAL - a pointer was invalid - * -ENOTSUP - we do not support allocation of the context * -ERANGE - the requested memory size was invalid * -ENOMEM - could not allocate the memory - * -EADDRINUSE - the buffer memory was already allocated */ static int reader_changes_init(struct reader_changes *const changes, const size_t size) @@ -622,31 +621,34 @@ * * Return: * * 0 - no data ready - * * POLLIN - state changes have been buffered - * * -EBADF - the file descriptor did not have an attached reader - * * -EINVAL - the IO control arguments were invalid + * * EPOLLIN | EPOLLRDNORM - state changes have been buffered + * * EPOLLHUP | EPOLLERR - IO control arguments were invalid or the file + * descriptor did not have an attached reader. */ static __poll_t reader_poll(struct file *const file, struct poll_table_struct *const wait) { struct reader *reader; struct reader_changes *changes; + __poll_t mask = 0; if (unlikely(!file || !wait)) - return -EINVAL; + return EPOLLHUP | EPOLLERR; reader = file->private_data; if (unlikely(!reader)) - return -EBADF; + return EPOLLHUP | EPOLLERR; changes = &reader->changes; - if (reader_changes_count(changes) >= changes->threshold) - return POLLIN; + return EPOLLIN | EPOLLRDNORM; poll_wait(file, &reader->wait_queue, wait); - return (reader_changes_count(changes) > 0) ? POLLIN : 0; + if (reader_changes_count(changes) > 0) + mask |= EPOLLIN | EPOLLRDNORM; + + return mask; } /* The file operations virtual function table */ @@ -662,7 +664,7 @@ static const size_t kbase_kinstr_jm_readers_max = 16; /** - * kbasep_kinstr_jm_release() - Invoked when the reference count is dropped + * kbase_kinstr_jm_release() - Invoked when the reference count is dropped * @ref: the context reference count */ static void kbase_kinstr_jm_release(struct kref *const ref) @@ -733,7 +735,7 @@ } /** - * readers_del() - Deletes a reader from the list of readers + * kbase_kinstr_jm_readers_del() - Deletes a reader from the list of readers * @ctx: the instrumentation context * @reader: the reader to delete */ @@ -812,22 +814,6 @@ kbase_kinstr_jm_ref_put(ctx); } -/** - * timestamp() - Retrieves the current monotonic nanoseconds - * Return: monotonic nanoseconds timestamp. - */ -static u64 timestamp(void) -{ - struct timespec ts; - long ns; - - getrawmonotonic(&ts); - ns = ((long)(ts.tv_sec) * NSEC_PER_SEC) + ts.tv_nsec; - if (unlikely(ns < 0)) - return 0; - return ((u64)(ns)); -} - void kbasep_kinstr_jm_atom_state( struct kbase_jd_atom *const katom, const enum kbase_kinstr_jm_reader_atom_state state) @@ -836,7 +822,7 @@ struct kbase_kinstr_jm *const ctx = kctx->kinstr_jm; const u8 id = kbase_jd_atom_id(kctx, katom); struct kbase_kinstr_jm_atom_state_change change = { - .timestamp = timestamp(), .atom = id, .state = state + .timestamp = ktime_get_raw_ns(), .atom = id, .state = state }; struct reader *reader; struct hlist_bl_node *node; -- Gitblit v1.6.2