From 1543e317f1da31b75942316931e8f491a8920811 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Thu, 04 Jan 2024 10:08:02 +0000
Subject: [PATCH] disable FB
---
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