| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/09 13:06 | flow | patch-triage |
1mArgs:null Results: {
"EnableConfigs": [
"DRM",
"EVENTFD"
],
"FocusSymbols": [
"drm_syncobj_eventfd_ioctl",
"eventfd_ctx_put"
],
"KMSANReasoning": "The patch introduces a cleanup attribute helper `DEFINE_FREE(eventfd, ...)` and updates `drm_syncobj_eventfd_ioctl()` to use automatic cleanup (`__free(eventfd)`) along with `no_free_ptr()`, and adds a NULL check to `eventfd_ctx_put()`.\n\nThere are no uninitialized variables, uninitialized struct reads, or information leaks to userspace introduced or affected by these changes. Any potential bugs in this refactoring would pertain to reference counting, lifetime management, or resource cleanup (e.g. use-after-free or double-free), which are handled by KASAN and standard kernel debug tools. Therefore, a dedicated KMSAN fuzzing session is not justified.",
"NeedsKMSAN": false,
"Reasoning": "The patch introduces a NULL check in eventfd_ctx_put(), defines a __free(eventfd) cleanup handler, and refactors resource lifecycle handling in the reachable DRM ioctl handler drm_syncobj_eventfd_ioctl(). Fuzzing will test whether the altered reference counting and cleanup flow in drm_syncobj_eventfd_ioctl behave correctly.",
"WorthFuzzing": true
} |
| 1/1 | 2026/09/09 13:06 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit e7339f9d3ba40ac063cbeb9e1e518f518e2e1b63\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Wed Sep 9 13:06:20 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c\nindex c23a5de27effa..261d5606e8bd8 100644\n--- a/drivers/gpu/drm/drm_syncobj.c\n+++ b/drivers/gpu/drm/drm_syncobj.c\n@@ -1462,9 +1462,9 @@ int\n drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\n \t\t\t struct drm_file *file_private)\n {\n+\tstruct eventfd_ctx *ev_fd_ctx __free(eventfd) = NULL;\n \tstruct drm_syncobj_eventfd *args = data;\n \tstruct drm_syncobj *syncobj;\n-\tstruct eventfd_ctx *ev_fd_ctx;\n \tstruct syncobj_eventfd_entry *entry;\n \tint ret;\n \n@@ -1484,16 +1484,17 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\n \tev_fd_ctx = eventfd_ctx_fdget(args-\u003efd);\n \tif (IS_ERR(ev_fd_ctx)) {\n \t\tret = PTR_ERR(ev_fd_ctx);\n+\t\tev_fd_ctx = NULL;\n \t\tgoto err_fdget;\n \t}\n \n \tentry = kzalloc_obj(*entry);\n \tif (!entry) {\n \t\tret = -ENOMEM;\n-\t\tgoto err_kzalloc;\n+\t\tgoto err_fdget;\n \t}\n \tentry-\u003esyncobj = syncobj;\n-\tentry-\u003eev_fd_ctx = ev_fd_ctx;\n+\tentry-\u003eev_fd_ctx = no_free_ptr(ev_fd_ctx);\n \tentry-\u003epoint = args-\u003epoint;\n \tentry-\u003eflags = args-\u003eflags;\n \n@@ -1502,8 +1503,6 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\n \n \treturn 0;\n \n-err_kzalloc:\n-\teventfd_ctx_put(ev_fd_ctx);\n err_fdget:\n \tdrm_syncobj_put(syncobj);\n \treturn ret;\ndiff --git a/fs/eventfd.c b/fs/eventfd.c\nindex 9d33a02757d52..24111a16284f1 100644\n--- a/fs/eventfd.c\n+++ b/fs/eventfd.c\n@@ -102,6 +102,9 @@ static void eventfd_free(struct kref *kref)\n */\n void eventfd_ctx_put(struct eventfd_ctx *ctx)\n {\n+\tif (!ctx)\n+\t\treturn;\n+\n \tkref_put(\u0026ctx-\u003ekref, eventfd_free);\n }\n EXPORT_SYMBOL_GPL(eventfd_ctx_put);\ndiff --git a/include/linux/eventfd.h b/include/linux/eventfd.h\nindex e32bee4345fb9..689358c2b0ae7 100644\n--- a/include/linux/eventfd.h\n+++ b/include/linux/eventfd.h\n@@ -10,6 +10,7 @@\n #define _LINUX_EVENTFD_H\n \n #include \u003clinux/wait.h\u003e\n+#include \u003clinux/cleanup.h\u003e\n #include \u003clinux/err.h\u003e\n #include \u003clinux/percpu-defs.h\u003e\n #include \u003clinux/percpu.h\u003e\n@@ -89,5 +90,7 @@ static inline void eventfd_signal(struct eventfd_ctx *ctx)\n \teventfd_signal_mask(ctx, 0);\n }\n \n+DEFINE_FREE(eventfd, struct eventfd_ctx *, eventfd_ctx_put(_T))\n+\n #endif /* _LINUX_EVENTFD_H */\n \n"
} |
| 2/1 | 2026/09/09 13:06 | agent | patch-evaluator |
1mModel:core Args: null Results: {
"EnableConfigs": [
"DRM",
"EVENTFD"
],
"FocusSymbols": [
"drm_syncobj_eventfd_ioctl",
"eventfd_ctx_put"
],
"Reasoning": "The patch introduces a NULL check in eventfd_ctx_put(), defines a __free(eventfd) cleanup handler, and refactors resource lifecycle handling in the reachable DRM ioctl handler drm_syncobj_eventfd_ioctl(). Fuzzing will test whether the altered reference counting and cleanup flow in drm_syncobj_eventfd_ioctl behave correctly.",
"WorthFuzzing": true
}Instruction: You are an expert Linux kernel maintainer and security engineer.
Your job is to review a provided patch series and evaluate whether it warrants fuzzing with syzkaller.
IMPORTANT: The changes have ALREADY been applied and committed as the HEAD commit in
your workspace. Do NOT rely on internal assumptions. You must actively use your code access
tools to inspect the actual source code, callers, and surrounding context.
================================================================================
1. CORE TRIAGE PHILOSOPHY
================================================================================
The goal of patch fuzzing is to discover crashes, regressions, exposed latent bugs,
and newly triggered assertions introduced by the patch series.
- REACHABILITY IS THE PRIMARY GATE:
Fuzzing can only discover bugs in code that can actually execute in standard virtualized
environments (GCE or QEMU, utilizing software-emulated devices like USB gadgets, netdev, tun/tap).
If the modified code is structurally unreachable (see Section 2), it MUST NOT be fuzzed,
regardless of whether it adds assertions or complex logic.
- DO NOT BLINDLY TRUST "NO FUNCTIONAL CHANGE" (NFCI) OR "REFACTORING" CLAIMS:
Patch authors routinely label changes as "cleanups", "refactorings", or state
"No functional change intended". Do NOT take these claims at face value.
Code refactorings that rearrange logic, introduce helper functions, or alter state management
in core subsystems frequently introduce subtle semantic shifts or uncover latent kernel bugs.
If reachable executable code is modified or refactored, it MUST be fuzzed.
- NEW OR MODIFIED ASSERTIONS IN REACHABLE CODE MUST BE FUZZED:
When a patch introduces or modifies runtime checks or assertions (e.g., WARN_ON*, VM_WARN_ON*,
BUG_ON*, lockdep_assert*) in reachable code paths, it enforces new or stricter invariants.
Even if the author believes the invariant always holds, fuzzing is essential to verify whether
an unusual sequence of operations can violate it.
================================================================================
2. WHEN TO RETURN WorthFuzzing=false (NEGATIVE CRITERIA)
================================================================================
Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories:
- Non-kernel and non-executable changes:
* Modifications to Documentation/, comments, or spelling fixes.
* User-space directories, self-tests, samples, or scripts (e.g., tools/, samples/, scripts/, usr/)
that do not affect the compiled kernel image (vmlinux) or kernel modules.
* Purely decorative logging (e.g., message strings in pr_err, printk, dev_info) or tracepoints
that do not alter control flow or data structures.
* Build system or Kconfig changes that do not alter compiled C logic.
- Structurally unreachable hardware:
* Vendor-specific PCIe switches, SmartNICs, or GPU drivers (e.g., mlxsw, pds_core, qed,
ionic, amdgpu) requiring physical ASIC/PCIe cards not emulated in standard QEMU.
- Unreachable execution paths:
* Driver teardown callbacks (.remove, .shutdown, pci_unregister_driver) executed only during
physical PCI hot-unplug or manual sysfs driver unbinding.
* Code paths exclusive to architectures other than the target architecture.
================================================================================
3. WHEN TO RETURN WorthFuzzing=true (POSITIVE CRITERIA)
================================================================================
Return WorthFuzzing=true whenever the patch touches reachable executable code, including:
- Core Subsystems:
* Any logic modifications in memory management (mm/), synchronization/locking (kernel/locking/),
BPF, scheduler, core networking, VFS, or syscall handling.
- Refactorings and Code Cleanups:
* Any restructuring of reachable data structures, helper abstractions, or algorithm flows.
- Runtime Assertions and Defensive Checks:
* Any introduction or alteration of assertions (WARN_ON*, VM_WARN_ON*, BUG_ON*, etc.) in reachable paths.
- Reachable Drivers and Protocols:
* Drivers accessible via virtual buses (virtio, USB gadget, loopback, netlink, binder, sockets, etc.).
================================================================================
4. EXTRACTING FocusSymbols (PREVENTING DILUTION)
================================================================================
When WorthFuzzing=true, you must extract specific kernel functions into FocusSymbols to guide the fuzzer:
- AVOID UBIQUITOUS LIFECYCLE HOT-PATHS:
Do NOT list generic, ubiquitous functions called by almost every program in the corpus
(including, but not limited to: general memory allocators and deallocators, page fault
and trap handlers, or core synchronization primitives; this is not an exhaustive list).
Listing ubiquitous functions causes the fuzzer to classify thousands of unrelated tests as "focused",
which severely dilutes fuzzing effort away from the actual changes.
- TARGET SPECIFIC FEATURE LOGIC AND ENTRYPOINTS:
List functions that specifically implement the logic being added or altered, or direct API entrypoints
for the subsystem feature under review.
- HANDLING STATIC INLINE FUNCTIONS IN HEADERS (.h):
Compiler-inlined static functions (such as static inlines in mm/*.h or include/linux/*.h) lack
distinct symbol addresses in vmlinux and cannot be targeted directly by symbol coverage filters.
If the changes are primarily in static inline helpers, identify non-static, feature-specific caller
functions in .c files that exercise them (avoiding ubiquitous lifecycle wrappers).
================================================================================
5. IDENTIFYING EnableConfigs
================================================================================
Identify any specific CONFIG_ options required to properly compile and reach the modified code:
- Inspect Kconfig files and #ifdef guards; do not make assumptions.
- Check "depends on" lines in Kconfig to include any non-standard parent subsystem configs needed.
- Strip any 'CONFIG_' prefix (e.g., return "NET_IPV4" instead of "CONFIG_NET_IPV4").
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit e7339f9d3ba40ac063cbeb9e1e518f518e2e1b63
Author: syz-cluster <triage@syzkaller.com>
Date: Wed Sep 9 13:06:20 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index c23a5de27effa..261d5606e8bd8 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -1462,9 +1462,9 @@ int
drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_private)
{
+ struct eventfd_ctx *ev_fd_ctx __free(eventfd) = NULL;
struct drm_syncobj_eventfd *args = data;
struct drm_syncobj *syncobj;
- struct eventfd_ctx *ev_fd_ctx;
struct syncobj_eventfd_entry *entry;
int ret;
@@ -1484,16 +1484,17 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
ev_fd_ctx = eventfd_ctx_fdget(args->fd);
if (IS_ERR(ev_fd_ctx)) {
ret = PTR_ERR(ev_fd_ctx);
+ ev_fd_ctx = NULL;
goto err_fdget;
}
entry = kzalloc_obj(*entry);
if (!entry) {
ret = -ENOMEM;
- goto err_kzalloc;
+ goto err_fdget;
}
entry->syncobj = syncobj;
- entry->ev_fd_ctx = ev_fd_ctx;
+ entry->ev_fd_ctx = no_free_ptr(ev_fd_ctx);
entry->point = args->point;
entry->flags = args->flags;
@@ -1502,8 +1503,6 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
return 0;
-err_kzalloc:
- eventfd_ctx_put(ev_fd_ctx);
err_fdget:
drm_syncobj_put(syncobj);
return ret;
diff --git a/fs/eventfd.c b/fs/eventfd.c
index 9d33a02757d52..24111a16284f1 100644
--- a/fs/eventfd.c
+++ b/fs/eventfd.c
@@ -102,6 +102,9 @@ static void eventfd_free(struct kref *kref)
*/
void eventfd_ctx_put(struct eventfd_ctx *ctx)
{
+ if (!ctx)
+ return;
+
kref_put(&ctx->kref, eventfd_free);
}
EXPORT_SYMBOL_GPL(eventfd_ctx_put);
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h
index e32bee4345fb9..689358c2b0ae7 100644
--- a/include/linux/eventfd.h
+++ b/include/linux/eventfd.h
@@ -10,6 +10,7 @@
#define _LINUX_EVENTFD_H
#include <linux/wait.h>
+#include <linux/cleanup.h>
#include <linux/err.h>
#include <linux/percpu-defs.h>
#include <linux/percpu.h>
@@ -89,5 +90,7 @@ static inline void eventfd_signal(struct eventfd_ctx *ctx)
eventfd_signal_mask(ctx, 0);
}
+DEFINE_FREE(eventfd, struct eventfd_ctx *, eventfd_ctx_put(_T))
+
#endif /* _LINUX_EVENTFD_H */
|
| 3/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 3668 output: 32 thoughts: 378 Thoughts: **My Assessment of the Patch** Okay, let's break this patch down. The focus here seems to be on cleanup and resource management, specifically relating to `eventfd` contexts within the DRM syncobj framework. I'm seeing changes across three files: `drivers/gpu/drm/drm_syncobj.c`, `fs/eventfd.c`, and `include/linux/eventfd.h`. First, the `eventfd.c` change is straightforward – a null check in `eventfd_ctx_put`. Good defensive programming, always a good idea. The header file introduces a `DEFINE_FREE` macro for `eventfd`, essentially automating the cleanup process with `eventfd_ctx_put`. This is a useful abstraction and likely improves code readability and maintainability. The meat of the changes, however, seem to be in `drm_syncobj.c`, specifically within `drm_syncobj_eventfd_ioctl`. We're using the `__free(eventfd)` attribute for cleanup of `ev_fd_ctx`, and `ev_fd_ctx` is explicitly set to `NULL` when an error is encountered. This looks like a clear attempt to ensure that the eventfd context is released properly in all code paths, especially error paths. The removal of the manual `eventfd_ctx_put` and the `err_kzalloc` label further reinforce this cleanup-focused approach. The `no_free_ptr` usage when assigning to `entry->ev_fd_ctx` is interesting; it suggests that the ownership and lifetime management of `ev_fd_ctx` is carefully handled. Now, let's step back and consider the broader context. We're talking about DRM syncobj, which is part of the DRM core and exposed via the usual DRM device ioctls. This means accessibility is via devices like `/dev/dri/card*`, `/dev/dri/renderD*`, and even through mock devices like `vgem` or `vkms`. Given the nature of those interfaces, syzkaller tests the DRM ioctls heavily, including `DRM_IOCTL_SYNCOBJ_EVENTFD`. `eventfd` itself is a core kernel feature. So, I'm going to run a few quick `grep` searches and Kconfig checks to confirm the dependencies and symbols at play here. This patch seems sound at first glance, but I need to verify that everything is as expected. This looks like a solid contribution improving error handling and resource management, specifically by employing more modern tools to do so. |
| 4/2 | 2026/09/09 13:06 | tool | grepper |
0mArgs:{
"Expression": "CONFIG_DRM|config DRM",
"PathPrefix": "drivers/gpu/drm"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 8419 lines.\nUse more precise expression if possible.\n\ndrivers/gpu/drm/Kconfig-7-#\ndrivers/gpu/drm/Kconfig:8:menuconfig DRM\ndrivers/gpu/drm/Kconfig-9-\ttristate \"Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)\"\n--\ndrivers/gpu/drm/Kconfig=34=if DRM\ndrivers/gpu/drm/Kconfig-35-\ndrivers/gpu/drm/Kconfig:36:config DRM_MIPI_DBI\ndrivers/gpu/drm/Kconfig-37-\ttristate\n--\ndrivers/gpu/drm/Kconfig-40-\ndrivers/gpu/drm/Kconfig:41:config DRM_MIPI_DSI\ndrivers/gpu/drm/Kconfig-42-\tbool\n--\ndrivers/gpu/drm/Kconfig-44-\ndrivers/gpu/drm/Kconfig:45:config DRM_KMS_HELPER\ndrivers/gpu/drm/Kconfig-46-\ttristate\n--\ndrivers/gpu/drm/Kconfig-51-\ndrivers/gpu/drm/Kconfig:52:config DRM_DRAW\ndrivers/gpu/drm/Kconfig-53-\tbool\n--\ndrivers/gpu/drm/Kconfig-55-\ndrivers/gpu/drm/Kconfig:56:config DRM_PANIC\ndrivers/gpu/drm/Kconfig-57-\tbool \"Display a user-friendly message when a kernel panic occurs\"\n--\ndrivers/gpu/drm/Kconfig-68-\ndrivers/gpu/drm/Kconfig:69:config DRM_PANIC_FOREGROUND_COLOR\ndrivers/gpu/drm/Kconfig-70-\thex \"Drm panic screen foreground color, in RGB\"\n--\ndrivers/gpu/drm/Kconfig-73-\ndrivers/gpu/drm/Kconfig:74:config DRM_PANIC_BACKGROUND_COLOR\ndrivers/gpu/drm/Kconfig-75-\thex \"Drm panic screen background color, in RGB\"\n--\ndrivers/gpu/drm/Kconfig-78-\ndrivers/gpu/drm/Kconfig:79:config DRM_PANIC_DEBUG\ndrivers/gpu/drm/Kconfig-80-\tbool \"Add a debug fs entry to trigger drm_panic\"\n--\ndrivers/gpu/drm/Kconfig-87-\ndrivers/gpu/drm/Kconfig:88:config DRM_PANIC_SCREEN\ndrivers/gpu/drm/Kconfig-89-\tstring \"Panic screen formatter\"\n--\ndrivers/gpu/drm/Kconfig-100-\ndrivers/gpu/drm/Kconfig:101:config DRM_PANIC_SCREEN_QR_CODE\ndrivers/gpu/drm/Kconfig-102-\tbool \"Add a panic screen with a QR code\"\n--\ndrivers/gpu/drm/Kconfig-111-\ndrivers/gpu/drm/Kconfig:112:config DRM_PANIC_SCREEN_QR_CODE_URL\ndrivers/gpu/drm/Kconfig-113-\tstring \"Base URL of the QR code in the panic screen\"\n--\ndrivers/gpu/drm/Kconfig-122-\ndrivers/gpu/drm/Kconfig:123:config DRM_PANIC_SCREEN_QR_VERSION\ndrivers/gpu/drm/Kconfig-124-\tint \"Maximum version (size) of the QR code.\"\n--\ndrivers/gpu/drm/Kconfig-132-\ndrivers/gpu/drm/Kconfig:133:config DRM_RAS\ndrivers/gpu/drm/Kconfig-134-\tbool \"DRM RAS support\"\n--\ndrivers/gpu/drm/Kconfig-142-\ndrivers/gpu/drm/Kconfig:143:config DRM_DEBUG_DP_MST_TOPOLOGY_REFS\ndrivers/gpu/drm/Kconfig-144- bool \"Enable refcount backtrace history in the DP MST helpers\"\n--\ndrivers/gpu/drm/Kconfig-157-\ndrivers/gpu/drm/Kconfig:158:config DRM_DEBUG_MODESET_LOCK\ndrivers/gpu/drm/Kconfig-159-\tbool \"Enable backtrace history for lock contention\"\n--\ndrivers/gpu/drm/Kconfig-172-\ndrivers/gpu/drm/Kconfig:173:config DRM_CLIENT\ndrivers/gpu/drm/Kconfig-174-\tbool\n--\ndrivers/gpu/drm/Kconfig=182=source \"drivers/gpu/drm/clients/Kconfig\"\ndrivers/gpu/drm/Kconfig-183-\ndrivers/gpu/drm/Kconfig:184:config DRM_LOAD_EDID_FIRMWARE\ndrivers/gpu/drm/Kconfig-185-\tbool \"Allow to specify an EDID data set instead of probing for it\"\n--\ndrivers/gpu/drm/Kconfig=196=source \"drivers/gpu/drm/display/Kconfig\"\ndrivers/gpu/drm/Kconfig-197-\ndrivers/gpu/drm/Kconfig:198:config DRM_TTM\ndrivers/gpu/drm/Kconfig-199-\ttristate\n--\ndrivers/gpu/drm/Kconfig-206-\ndrivers/gpu/drm/Kconfig:207:config DRM_EXEC\ndrivers/gpu/drm/Kconfig-208-\ttristate\n--\ndrivers/gpu/drm/Kconfig-212-\ndrivers/gpu/drm/Kconfig:213:config DRM_GPUVM\ndrivers/gpu/drm/Kconfig-214-\ttristate\n--\ndrivers/gpu/drm/Kconfig=221=config RUST_DRM_GPUVM\n--\ndrivers/gpu/drm/Kconfig-227-\ndrivers/gpu/drm/Kconfig:228:config DRM_GPUSVM\ndrivers/gpu/drm/Kconfig-229-\ttristate\n--\ndrivers/gpu/drm/Kconfig-236-\ndrivers/gpu/drm/Kconfig:237:config DRM_BUDDY\ndrivers/gpu/drm/Kconfig-238-\ttristate\n--\ndrivers/gpu/drm/Kconfig-243-\ndrivers/gpu/drm/Kconfig:244:config DRM_VRAM_HELPER\ndrivers/gpu/drm/Kconfig-245-\ttristate\n--\ndrivers/gpu/drm/Kconfig-249-\ndrivers/gpu/drm/Kconfig:250:config DRM_TTM_HELPER\ndrivers/gpu/drm/Kconfig-251-\ttristate\n--\ndrivers/gpu/drm/Kconfig-259-\ndrivers/gpu/drm/Kconfig:260:config DRM_GEM_DMA_HELPER\ndrivers/gpu/drm/Kconfig-261-\ttristate\n--\ndrivers/gpu/drm/Kconfig-268-\ndrivers/gpu/drm/Kconfig:269:config DRM_GEM_SHMEM_HELPER\ndrivers/gpu/drm/Kconfig-270-\ttristate\n--\ndrivers/gpu/drm/Kconfig=278=config RUST_DRM_GEM_SHMEM_HELPER\n--\ndrivers/gpu/drm/Kconfig-284-\ndrivers/gpu/drm/Kconfig:285:config DRM_SUBALLOC_HELPER\ndrivers/gpu/drm/Kconfig-286-\ttristate\n--\ndrivers/gpu/drm/Kconfig-288-\ndrivers/gpu/drm/Kconfig:289:config DRM_SCHED\ndrivers/gpu/drm/Kconfig-290-\ttristate\n--\ndrivers/gpu/drm/Kconfig-293-# Separate option as not all DRM drivers use it\ndrivers/gpu/drm/Kconfig:294:config DRM_PANEL_BACKLIGHT_QUIRKS\ndrivers/gpu/drm/Kconfig-295-\ttristate\ndrivers/gpu/drm/Kconfig-296-\ndrivers/gpu/drm/Kconfig:297:config DRM_PRIVACY_SCREEN\ndrivers/gpu/drm/Kconfig-298-\tbool\n--\ndrivers/gpu/drm/Kconfig=368=endif\n--\ndrivers/gpu/drm/Kconfig-370-# Separate option because drm_panel_orientation_quirks.c is shared with fbdev\ndrivers/gpu/drm/Kconfig:371:config DRM_PANEL_ORIENTATION_QUIRKS\ndrivers/gpu/drm/Kconfig-372-\ttristate\n--\ndrivers/gpu/drm/Kconfig.debug:1:config DRM_USE_DYNAMIC_DEBUG\ndrivers/gpu/drm/Kconfig.debug-2-\tbool \"use dynamic debug to implement drm.debug\"\n--\ndrivers/gpu/drm/Kconfig.debug-13-\ndrivers/gpu/drm/Kconfig.debug:14:config DRM_WERROR\ndrivers/gpu/drm/Kconfig.debug-15-\tbool \"Compile the drm subsystem with warnings as errors\"\n--\ndrivers/gpu/drm/Kconfig.debug-27-\ndrivers/gpu/drm/Kconfig.debug:28:config DRM_HEADER_TEST\ndrivers/gpu/drm/Kconfig.debug-29-\tbool \"Ensure DRM headers are self-contained and pass kernel-doc\"\n--\ndrivers/gpu/drm/Kconfig.debug-38-\ndrivers/gpu/drm/Kconfig.debug:39:config DRM_DEBUG_MM\ndrivers/gpu/drm/Kconfig.debug-40-\tbool \"Insert extra checks and debug info into the DRM range managers\"\n--\ndrivers/gpu/drm/Kconfig.debug-52-\ndrivers/gpu/drm/Kconfig.debug:53:config DRM_KUNIT_TEST_HELPERS\ndrivers/gpu/drm/Kconfig.debug-54-\ttristate\n--\ndrivers/gpu/drm/Kconfig.debug-59-\ndrivers/gpu/drm/Kconfig.debug:60:config DRM_KUNIT_TEST\ndrivers/gpu/drm/Kconfig.debug-61-\ttristate \"KUnit tests for DRM\" if !KUNIT_ALL_TESTS\n--\ndrivers/gpu/drm/Kconfig.debug-85-\ndrivers/gpu/drm/Kconfig.debug:86:config DRM_TTM_KUNIT_TEST\ndrivers/gpu/drm/Kconfig.debug-87-\ttristate \"KUnit tests for TTM\" if !KUNIT_ALL_TESTS\n--\ndrivers/gpu/drm/Kconfig.debug-101-\ndrivers/gpu/drm/Kconfig.debug:102:config DRM_SCHED_KUNIT_TEST\ndrivers/gpu/drm/Kconfig.debug-103-\ttristate \"KUnit tests for the DRM scheduler\" if !KUNIT_ALL_TESTS\n--\ndrivers/gpu/drm/Kconfig.debug-113-\ndrivers/gpu/drm/Kconfig.debug:114:config DRM_EXPORT_FOR_TESTS\ndrivers/gpu/drm/Kconfig.debug-115-\tbool\n--\ndrivers/gpu/drm/Makefile-5-\ndrivers/gpu/drm/Makefile:6:CFLAGS-$(CONFIG_DRM_USE_DYNAMIC_DEBUG)\t+= -DDYNAMIC_DEBUG_MODULE\ndrivers/gpu/drm/Makefile-7-\n--\ndrivers/gpu/drm/Makefile=29=endif\n--\ndrivers/gpu/drm/Makefile-32-# Enable -Werror in CI and development\ndrivers/gpu/drm/Makefile:33:subdir-ccflags-$(CONFIG_DRM_WERROR) += -Werror\ndrivers/gpu/drm/Makefile-34-\ndrivers/gpu/drm/Makefile=35=drm-y := \\\n--\ndrivers/gpu/drm/Makefile-75-\tdrm_writeback.o\ndrivers/gpu/drm/Makefile:76:drm-$(CONFIG_DRM_CLIENT) += \\\ndrivers/gpu/drm/Makefile-77-\tdrm_client.o \\\n--\ndrivers/gpu/drm/Makefile=81=drm-$(CONFIG_COMPAT) += drm_ioc32.o\ndrivers/gpu/drm/Makefile:82:drm-$(CONFIG_DRM_PANEL) += drm_panel.o\ndrivers/gpu/drm/Makefile-83-drm-$(CONFIG_OF) += drm_of.o\n--\ndrivers/gpu/drm/Makefile=85=drm-$(CONFIG_DEBUG_FS) += \\\n--\ndrivers/gpu/drm/Makefile-87-\tdrm_debugfs_crc.o\ndrivers/gpu/drm/Makefile:88:drm-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o\ndrivers/gpu/drm/Makefile:89:drm-$(CONFIG_DRM_PRIVACY_SCREEN) += \\\ndrivers/gpu/drm/Makefile-90-\tdrm_privacy_screen.o \\\ndrivers/gpu/drm/Makefile-91-\tdrm_privacy_screen_x86.o\ndrivers/gpu/drm/Makefile:92:drm-$(CONFIG_DRM_ACCEL) += ../../accel/drm_accel.o\ndrivers/gpu/drm/Makefile:93:drm-$(CONFIG_DRM_PANIC) += drm_panic.o\ndrivers/gpu/drm/Makefile:94:drm-$(CONFIG_DRM_DRAW) += drm_draw.o\ndrivers/gpu/drm/Makefile:95:drm-$(CONFIG_DRM_PANIC_SCREEN_QR_CODE) += drm_panic_qr.o\ndrivers/gpu/drm/Makefile:96:drm-$(CONFIG_DRM_RAS) += drm_ras.o drm_ras_nl.o drm_ras_genl_family.o\ndrivers/gpu/drm/Makefile:97:obj-$(CONFIG_DRM)\t+= drm.o\ndrivers/gpu/drm/Makefile-98-\ndrivers/gpu/drm/Makefile:99:obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o\ndrivers/gpu/drm/Makefile:100:obj-$(CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS) += drm_panel_backlight_quirks.o\ndrivers/gpu/drm/Makefile-101-\n--\ndrivers/gpu/drm/Makefile-105-#\ndrivers/gpu/drm/Makefile:106:obj-$(CONFIG_DRM_EXEC) += drm_exec.o\ndrivers/gpu/drm/Makefile:107:obj-$(CONFIG_DRM_GPUVM) += drm_gpuvm.o\ndrivers/gpu/drm/Makefile-108-\n--\ndrivers/gpu/drm/Makefile=111=drm_gpusvm_helper-$(CONFIG_ZONE_DEVICE) += \\\n--\ndrivers/gpu/drm/Makefile-114-\ndrivers/gpu/drm/Makefile:115:obj-$(CONFIG_DRM_GPUSVM) += drm_gpusvm_helper.o\ndrivers/gpu/drm/Makefile-116-\ndrivers/gpu/drm/Makefile:117:obj-$(CONFIG_DRM_BUDDY) += drm_buddy.o\ndrivers/gpu/drm/Makefile-118-\ndrivers/gpu/drm/Makefile=119=drm_dma_helper-y := drm_gem_dma_helper.o\ndrivers/gpu/drm/Makefile:120:drm_dma_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fbdev_dma.o\ndrivers/gpu/drm/Makefile:121:drm_dma_helper-$(CONFIG_DRM_KMS_HELPER) += drm_fb_dma_helper.o\ndrivers/gpu/drm/Makefile:122:obj-$(CONFIG_DRM_GEM_DMA_HELPER) += drm_dma_helper.o\ndrivers/gpu/drm/Makefile-123-\ndrivers/gpu/drm/Makefile=124=drm_shmem_helper-y := drm_gem_shmem_helper.o\ndrivers/gpu/drm/Makefile:125:drm_shmem_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fbdev_shmem.o\ndrivers/gpu/drm/Makefile:126:obj-$(CONFIG_DRM_GEM_SHMEM_HELPER) += drm_shmem_helper.o\ndrivers/gpu/drm/Makefile-127-\ndrivers/gpu/drm/Makefile=128=drm_suballoc_helper-y := drm_suballoc.o\ndrivers/gpu/drm/Makefile:129:obj-$(CONFIG_DRM_SUBALLOC_HELPER) += drm_suballoc_helper.o\ndrivers/gpu/drm/Makefile-130-\ndrivers/gpu/drm/Makefile=131=drm_vram_helper-y := drm_gem_vram_helper.o\ndrivers/gpu/drm/Makefile:132:obj-$(CONFIG_DRM_VRAM_HELPER) += drm_vram_helper.o\ndrivers/gpu/drm/Makefile-133-\ndrivers/gpu/drm/Makefile=134=drm_ttm_helper-y := drm_gem_ttm_helper.o\ndrivers/gpu/drm/Makefile:135:drm_ttm_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fbdev_ttm.o\ndrivers/gpu/drm/Makefile:136:obj-$(CONFIG_DRM_TTM_HELPER) += drm_ttm_helper.o\ndrivers/gpu/drm/Makefile-137-\n--\ndrivers/gpu/drm/Makefile=142=drm_kms_helper-y := \\\n--\ndrivers/gpu/drm/Makefile-158-\tdrm_vblank_helper.o\ndrivers/gpu/drm/Makefile:159:drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o\ndrivers/gpu/drm/Makefile:160:drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o\ndrivers/gpu/drm/Makefile:161:obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o\ndrivers/gpu/drm/Makefile-162-\n--\ndrivers/gpu/drm/Makefile=167=obj-y\t\t\t+= tests/\ndrivers/gpu/drm/Makefile-168-\ndrivers/gpu/drm/Makefile:169:obj-$(CONFIG_DRM_MIPI_DBI) += drm_mipi_dbi.o\ndrivers/gpu/drm/Makefile:170:obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o\ndrivers/gpu/drm/Makefile-171-obj-y\t\t\t+= arm/\n--\ndrivers/gpu/drm/Makefile=173=obj-y\t\t\t+= display/\ndrivers/gpu/drm/Makefile:174:obj-$(CONFIG_DRM_TTM)\t+= ttm/\ndrivers/gpu/drm/Makefile:175:obj-$(CONFIG_DRM_SCHED)\t+= scheduler/\ndrivers/gpu/drm/Makefile:176:obj-$(CONFIG_DRM_RADEON)+= radeon/\ndrivers/gpu/drm/Makefile:177:obj-$(CONFIG_DRM_AMDGPU)+= amd/amdgpu/\ndrivers/gpu/drm/Makefile:178:obj-$(CONFIG_DRM_AMDGPU)+= amd/amdxcp/\ndrivers/gpu/drm/Makefile:179:obj-$(CONFIG_DRM_I915)\t+= i915/\ndrivers/gpu/drm/Makefile:180:obj-$(CONFIG_DRM_XE)\t+= xe/\ndrivers/gpu/drm/Makefile:181:obj-$(CONFIG_DRM_KMB_DISPLAY) += kmb/\ndrivers/gpu/drm/Makefile:182:obj-$(CONFIG_DRM_MGAG200) += mgag200/\ndrivers/gpu/drm/Makefile:183:obj-$(CONFIG_DRM_V3D) += v3d/\ndrivers/gpu/drm/Makefile:184:obj-$(CONFIG_DRM_VC4) += vc4/\ndrivers/gpu/drm/Makefile:185:obj-$(CONFIG_DRM_VMWGFX)+= vmwgfx/\ndrivers/gpu/drm/Makefile:186:obj-$(CONFIG_DRM_VGEM)\t+= vgem/\ndrivers/gpu/drm/Makefile:187:obj-$(CONFIG_DRM_VKMS)\t+= vkms/\ndrivers/gpu/drm/Makefile:188:obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/\ndrivers/gpu/drm/Makefile-189-# nova-drm is built from drivers/gpu/Makefile together with nova-core.\ndrivers/gpu/drm/Makefile:190:obj-$(CONFIG_DRM_EXYNOS) +=exynos/\ndrivers/gpu/drm/Makefile:191:obj-$(CONFIG_DRM_ROCKCHIP) +=rockchip/\ndrivers/gpu/drm/Makefile:192:obj-$(CONFIG_DRM_GMA500) += gma500/\ndrivers/gpu/drm/Makefile:193:obj-$(CONFIG_DRM_UDL) += udl/\ndrivers/gpu/drm/Makefile:194:obj-$(CONFIG_DRM_AST) += ast/\ndrivers/gpu/drm/Makefile:195:obj-$(CONFIG_DRM_ARMADA) += armada/\ndrivers/gpu/drm/Makefile:196:obj-$(CONFIG_DRM_ATMEL_HLCDC)\t+= atmel-hlcdc/\ndrivers/gpu/drm/Makefile-197-obj-y\t\t\t+= renesas/\ndrivers/gpu/drm/Makefile=198=obj-y\t\t\t+= omapdrm/\ndrivers/gpu/drm/Makefile:199:obj-$(CONFIG_DRM_SUN4I) += sun4i/\ndrivers/gpu/drm/Makefile-200-obj-y\t\t\t+= tilcdc/\ndrivers/gpu/drm/Makefile:201:obj-$(CONFIG_DRM_QXL) += qxl/\ndrivers/gpu/drm/Makefile:202:obj-$(CONFIG_DRM_VIRTIO_GPU) += virtio/\ndrivers/gpu/drm/Makefile:203:obj-$(CONFIG_DRM_MSM) += msm/\ndrivers/gpu/drm/Makefile:204:obj-$(CONFIG_DRM_TEGRA) += tegra/\ndrivers/gpu/drm/Makefile:205:obj-$(CONFIG_DRM_STM) += stm/\ndrivers/gpu/drm/Makefile:206:obj-$(CONFIG_DRM_STI) += sti/\ndrivers/gpu/drm/Makefile-207-obj-y \t\t\t+= imx/\ndrivers/gpu/drm/Makefile:208:obj-$(CONFIG_DRM_INGENIC) += ingenic/\ndrivers/gpu/drm/Makefile:209:obj-$(CONFIG_DRM_LOGICVC) += logicvc/\ndrivers/gpu/drm/Makefile:210:obj-$(CONFIG_DRM_MEDIATEK) += mediatek/\ndrivers/gpu/drm/Makefile:211:obj-$(CONFIG_DRM_MESON)\t+= meson/\ndrivers/gpu/drm/Makefile-212-obj-y\t\t\t+= panel/\ndrivers/gpu/drm/Makefile=213=obj-y\t\t\t+= bridge/\ndrivers/gpu/drm/Makefile:214:obj-$(CONFIG_DRM_FSL_DCU) += fsl-dcu/\ndrivers/gpu/drm/Makefile:215:obj-$(CONFIG_DRM_ETNAVIV) += etnaviv/\ndrivers/gpu/drm/Makefile-216-obj-y\t\t\t+= hisilicon/\n--\ndrivers/gpu/drm/Makefile=219=obj-y\t\t\t+= tiny/\ndrivers/gpu/drm/Makefile:220:obj-$(CONFIG_DRM_PL111) += pl111/\ndrivers/gpu/drm/Makefile:221:obj-$(CONFIG_DRM_TVE200) += tve200/\ndrivers/gpu/drm/Makefile:222:obj-$(CONFIG_DRM_ADP) += adp/\ndrivers/gpu/drm/Makefile:223:obj-$(CONFIG_DRM_XEN) += xen/\ndrivers/gpu/drm/Makefile:224:obj-$(CONFIG_DRM_VBOXVIDEO) += vboxvideo/\ndrivers/gpu/drm/Makefile:225:obj-$(CONFIG_DRM_LIMA) += lima/\ndrivers/gpu/drm/Makefile:226:obj-$(CONFIG_DRM_PANFROST) += panfrost/\ndrivers/gpu/drm/Makefile:227:obj-$(CONFIG_DRM_PANTHOR) += panthor/\ndrivers/gpu/drm/Makefile:228:obj-$(CONFIG_DRM_TYR) += tyr/\ndrivers/gpu/drm/Makefile:229:obj-$(CONFIG_DRM_ASPEED_GFX) += aspeed/\ndrivers/gpu/drm/Makefile:230:obj-$(CONFIG_DRM_MCDE) += mcde/\ndrivers/gpu/drm/Makefile:231:obj-$(CONFIG_DRM_TIDSS) += tidss/\ndrivers/gpu/drm/Makefile-232-obj-y\t\t\t+= xlnx/\ndrivers/gpu/drm/Makefile=233=obj-y\t\t\t+= gud/\ndrivers/gpu/drm/Makefile:234:obj-$(CONFIG_DRM_HYPERV) += hyperv/\ndrivers/gpu/drm/Makefile-235-obj-y\t\t\t+= sitronix/\ndrivers/gpu/drm/Makefile=236=obj-y\t\t\t+= solomon/\ndrivers/gpu/drm/Makefile:237:obj-$(CONFIG_DRM_SPRD) += sprd/\ndrivers/gpu/drm/Makefile:238:obj-$(CONFIG_DRM_LOONGSON) += loongson/\ndrivers/gpu/drm/Makefile:239:obj-$(CONFIG_DRM_POWERVR) += imagination/\ndrivers/gpu/drm/Makefile:240:obj-$(CONFIG_DRM_VERISILICON_DC) += verisilicon/\ndrivers/gpu/drm/Makefile-241-\n--\ndrivers/gpu/drm/Makefile=243=hdrtest-files := \\\n--\ndrivers/gpu/drm/Makefile-246-\ndrivers/gpu/drm/Makefile:247:always-$(CONFIG_DRM_HEADER_TEST) += \\\ndrivers/gpu/drm/Makefile-248-\t$(patsubst %.h,%.hdrtest, $(hdrtest-files))\n--\ndrivers/gpu/drm/Makefile=251=quiet_cmd_hdrtest = HDRTEST $(patsubst %.hdrtest,%.h,$@)\n--\ndrivers/gpu/drm/Makefile-253-\t\t$(CC) $(c_flags) -fsyntax-only -x c /dev/null -include $\u003c -include $\u003c; \\\ndrivers/gpu/drm/Makefile:254:\t\t PYTHONDONTWRITEBYTECODE=1 $(PYTHON3) $(KERNELDOC) -none $(if $(CONFIG_WERROR)$(CONFIG_DRM_WERROR),-Werror) $\u003c; \\\ndrivers/gpu/drm/Makefile-255-\t\ttouch $@\n--\ndrivers/gpu/drm/adp/Kconfig-1-# SPDX-License-Identifier: GPL-2.0-only OR MIT\ndrivers/gpu/drm/adp/Kconfig:2:config DRM_ADP\ndrivers/gpu/drm/adp/Kconfig-3-\ttristate \"DRM Support for pre-DCP Apple display controllers\"\n--\ndrivers/gpu/drm/adp/Makefile=4=adpdrm-mipi-y := adp-mipi.o\ndrivers/gpu/drm/adp/Makefile:5:obj-$(CONFIG_DRM_ADP) += adpdrm.o adpdrm-mipi.o\n--\ndrivers/gpu/drm/amd/acp/Kconfig=2=menu \"ACP (Audio CoProcessor) Configuration\"\n--\ndrivers/gpu/drm/amd/acp/Kconfig-4-\ndrivers/gpu/drm/amd/acp/Kconfig:5:config DRM_AMD_ACP\ndrivers/gpu/drm/amd/acp/Kconfig-6-\tbool \"Enable AMD Audio CoProcessor IP support\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-2-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:3:config DRM_AMDGPU\ndrivers/gpu/drm/amd/amdgpu/Kconfig-4-\ttristate \"AMD GPU\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-40-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:41:config DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/Kconfig-42-\tbool \"Enable amdgpu support for SI parts\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-55-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:56:config DRM_AMDGPU_CIK\ndrivers/gpu/drm/amd/amdgpu/Kconfig-57-\tbool \"Enable amdgpu support for CIK parts\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-74-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:75:config DRM_AMDGPU_USERPTR\ndrivers/gpu/drm/amd/amdgpu/Kconfig-76-\tbool \"Always enable userptr write support\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-83-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:84:config DRM_AMD_ISP\ndrivers/gpu/drm/amd/amdgpu/Kconfig-85-\tbool \"Enable AMD Image Signal Processor IP support\"\n--\ndrivers/gpu/drm/amd/amdgpu/Kconfig-94-\ndrivers/gpu/drm/amd/amdgpu/Kconfig:95:config DRM_AMDGPU_WERROR\ndrivers/gpu/drm/amd/amdgpu/Kconfig-96-\tbool \"Force the compiler to throw an error instead of a warning when compiling\"\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=48=subdir-ccflags-y += -Wno-override-init\ndrivers/gpu/drm/amd/amdgpu/Makefile:49:subdir-ccflags-$(CONFIG_DRM_AMDGPU_WERROR) += -Werror\ndrivers/gpu/drm/amd/amdgpu/Makefile-50-\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=79=amdgpu-$(CONFIG_PERF_EVENTS) += amdgpu_pmu.o\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile-81-# add asic specific block\ndrivers/gpu/drm/amd/amdgpu/Makefile:82:amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o \\\ndrivers/gpu/drm/amd/amdgpu/Makefile-83-\tdce_v8_0.o gfx_v7_0.o cik_sdma.o uvd_v4_2.o vce_v2_0.o\ndrivers/gpu/drm/amd/amdgpu/Makefile-84-\ndrivers/gpu/drm/amd/amdgpu/Makefile:85:amdgpu-$(CONFIG_DRM_AMDGPU_SI)+= si.o gmc_v6_0.o gfx_v6_0.o si_ih.o si_dma.o dce_v6_0.o \\\ndrivers/gpu/drm/amd/amdgpu/Makefile-86-\tuvd_v3_1.o vce_v1_0.o\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=285=amdgpu-y += \\\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile-298-\ndrivers/gpu/drm/amd/amdgpu/Makefile:299:ifneq ($(CONFIG_DRM_AMDGPU_CIK),)\ndrivers/gpu/drm/amd/amdgpu/Makefile-300-amdgpu-y += amdgpu_amdkfd_gfx_v7.o\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=309=amdgpu-y += amdgpu_job.o\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile-311-# ACP componet\ndrivers/gpu/drm/amd/amdgpu/Makefile:312:ifneq ($(CONFIG_DRM_AMD_ACP),)\ndrivers/gpu/drm/amd/amdgpu/Makefile-313-amdgpu-y += amdgpu_acp.o\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=328=amdgpu-y += $(AMD_POWERPLAY_FILES)\ndrivers/gpu/drm/amd/amdgpu/Makefile-329-\ndrivers/gpu/drm/amd/amdgpu/Makefile:330:ifneq ($(CONFIG_DRM_AMD_DC),)\ndrivers/gpu/drm/amd/amdgpu/Makefile-331-\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=337=endif\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile-339-# add isp block\ndrivers/gpu/drm/amd/amdgpu/Makefile:340:ifneq ($(CONFIG_DRM_AMD_ISP),)\ndrivers/gpu/drm/amd/amdgpu/Makefile-341-amdgpu-y += \\\n--\ndrivers/gpu/drm/amd/amdgpu/Makefile=350=amdgpu-y += $(AMD_GPU_RAS_FILES)\ndrivers/gpu/drm/amd/amdgpu/Makefile-351-\ndrivers/gpu/drm/amd/amdgpu/Makefile:352:obj-$(CONFIG_DRM_AMDGPU)+= amdgpu.o\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-118-#include \"amdgpu_acpi.h\"\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h:119:#if defined(CONFIG_DRM_AMD_ISP)\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-120-#include \"amdgpu_isp.h\"\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h=244=extern int amdgpu_reset_method;\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-245-\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h:246:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-247-extern int amdgpu_si_support;\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-248-#endif\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h:249:#ifdef CONFIG_DRM_AMDGPU_CIK\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-250-extern int amdgpu_cik_support;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h=621=struct amdgpu_device {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-625-\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h:626:#ifdef CONFIG_DRM_AMD_ACP\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-627-\tstruct amdgpu_acp\t\tacp;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-798-\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h:799:#if defined(CONFIG_DRM_AMD_ISP)\ndrivers/gpu/drm/amd/amdgpu/amdgpu.h-800-\t/* isp */\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c=1293=int amdgpu_acpi_init(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c-1298-\t\tif (adev-\u003edc_enabled) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:1299:#if defined(CONFIG_DRM_AMD_DC)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c-1300-\t\t\tstruct amdgpu_display_manager *dm = \u0026adev-\u003edm;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c=1553=bool amdgpu_acpi_is_s0ix_active(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c-1587-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:1588:#if IS_ENABLED(CONFIG_DRM_AMD_ISP)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c-1589-static const struct acpi_device_id isp_sensor_ids[] = {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c=1599=int amdgpu_acpi_get_isp4_dev(struct acpi_device **dev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c-1616-}\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.c:1617:#endif /* CONFIG_DRM_AMD_ISP */\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.h=145=static inline bool amdgpu_acpi_is_s3_active(struct amdgpu_device *adev) { return false; }\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.h-147-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.h:148:#if defined(CONFIG_DRM_AMD_ISP)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_acpi.h-149-int amdgpu_acpi_get_isp4_dev(struct acpi_device **dev);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c=1027=int amdgpu_atombios_get_clock_dividers(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c-1124-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c:1125:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c-1126-int amdgpu_atombios_get_memory_pll_dividers(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h=155=int amdgpu_atombios_get_clock_dividers(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h-160-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h:161:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu_atombios.h-162-int amdgpu_atombios_get_memory_pll_dividers(struct amdgpu_device *adev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c=2133=int amdgpu_debugfs_init(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c-2179-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c:2180:#if defined(CONFIG_DRM_AMD_DC)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_debugfs.c-2181-\tif (adev-\u003edc_enabled)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-56-#include \"amd_pcie.h\"\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:57:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-58-#include \"si.h\"\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-59-#endif\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:60:#ifdef CONFIG_DRM_AMDGPU_CIK\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-61-#include \"cik.h\"\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c=1981=static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-2010-\tswitch (adev-\u003easic_type) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:2011:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-2012-\tcase CHIP_VERDE:\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-2022-#endif\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:2023:#ifdef CONFIG_DRM_AMDGPU_CIK\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-2024-\tcase CHIP_BONAIRE:\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c=3485=bool amdgpu_device_asic_has_dc_support(struct pci_dev *pdev,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-3488-\tswitch (asic_type) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3489:#ifdef CONFIG_DRM_AMDGPU_SI\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-3490-\tcase CHIP_HAINAN:\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c-3494-\t\treturn false;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3495:#if defined(CONFIG_DRM_AMD_DC)\n\n"
} |
| 5/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 15262 output: 29 thoughts: 27 Thoughts: Here's my analysis of the build process, focusing on `drm_syncobj.o`, as derived from `drivers/gpu/drm/Makefile`: **Deconstructing the DRM Makefile** Okay, so I'm diving into the `drivers/gpu/drm/Makefile` to understand how the `drm_syncobj.o` object file gets compiled. I need to figure out the dependencies, the compilation flags involved, and any specific rules that might apply to it. I'm expecting to see the typical makefile structure: targets, prerequisites, and the commands to build the object. I'm looking for any unusual twists or special considerations for this particular synchronization object. Are there any conditional compiles? Special linker flags? Anything that jumps out as being specifically tailored for sync objects? My initial thought is that it'll probably follow a standard pattern, but I need to confirm that. I'll start by looking for a rule that explicitly names `drm_syncobj.o`, or a more generic pattern that would cover it. I'll need to pay attention to any variables it might be using as well, those are key to understanding the build environment and the configuration that ultimately shapes the object file. |
| 6/2 | 2026/09/09 13:06 | tool | grepper |
0mArgs:{
"Expression": "drm_syncobj",
"PathPrefix": "drivers/gpu/drm"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1719 lines.\nUse more precise expression if possible.\n\ndrivers/gpu/drm/Makefile=35=drm-y := \\\n--\ndrivers/gpu/drm/Makefile-68-\tdrm_rect.o \\\ndrivers/gpu/drm/Makefile:69:\tdrm_syncobj.o \\\ndrivers/gpu/drm/Makefile-70-\tdrm_sysfs.o \\\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-33-#include \u003cdrm/amdgpu_drm.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:34:#include \u003cdrm/drm_syncobj.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-35-#include \u003cdrm/ttm/ttm_tt.h\u003e\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=471=static int amdgpu_syncobj_lookup_and_add(struct amdgpu_cs_parser *p,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-477-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:478:\tr = drm_syncobj_find_fence(p-\u003efilp, handle, point, flags, \u0026fence);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-479-\tif (r) {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=528=static int amdgpu_cs_p2_syncobj_out(struct amdgpu_cs_parser *p,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-549-\t\tp-\u003epost_deps[i].syncobj =\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:550:\t\t\tdrm_syncobj_find(p-\u003efilp, deps[i].handle);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-551-\t\tif (!p-\u003epost_deps[i].syncobj)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=561=static int amdgpu_cs_p2_syncobj_timeline_signal(struct amdgpu_cs_parser *p,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-589-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:590:\t\tdep-\u003esyncobj = drm_syncobj_find(p-\u003efilp,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-591-\t\t\t\t\t\tsyncobj_deps[i].handle);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=1265=static void amdgpu_cs_post_dependencies(struct amdgpu_cs_parser *p)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1270-\t\tif (p-\u003epost_deps[i].chain \u0026\u0026 p-\u003epost_deps[i].point) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1271:\t\t\tdrm_syncobj_add_point(p-\u003epost_deps[i].syncobj,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1272-\t\t\t\t\t p-\u003epost_deps[i].chain,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1275-\t\t} else {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1276:\t\t\tdrm_syncobj_replace_fence(p-\u003epost_deps[i].syncobj,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1277-\t\t\t\t\t\t p-\u003efence);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=1386=static void amdgpu_cs_parser_fini(struct amdgpu_cs_parser *parser)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1395-\tfor (i = 0; i \u003c parser-\u003enum_post_deps; i++) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1396:\t\tdrm_syncobj_put(parser-\u003epost_deps[i].syncobj);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1397-\t\tkfree(parser-\u003epost_deps[i].chain);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c=1576=int amdgpu_cs_fence_to_handle_ioctl(struct drm_device *dev, void *data,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1581-\tstruct dma_fence *fence;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1582:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1583-\tstruct sync_file *sync_file;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1594-\tcase AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ:\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1595:\t\tr = drm_syncobj_create(\u0026syncobj, 0, fence);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1596-\t\tdma_fence_put(fence);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1598-\t\t\treturn r;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1599:\t\tr = drm_syncobj_get_handle(filp, syncobj, \u0026info-\u003eout.handle);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1600:\t\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1601-\t\treturn r;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1603-\tcase AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD:\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1604:\t\tr = drm_syncobj_create(\u0026syncobj, 0, fence);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1605-\t\tdma_fence_put(fence);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1607-\t\t\treturn r;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1608:\t\tr = drm_syncobj_get_fd(syncobj, (int *)\u0026info-\u003eout.handle);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c:1609:\t\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.c-1610-\t\treturn r;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.h=43=struct amdgpu_cs_post_dep {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.h:44:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_cs.h-45-\tstruct dma_fence_chain *chain;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-41-#include \u003cdrm/ttm/ttm_tt.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:42:#include \u003cdrm/drm_syncobj.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-43-\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c=52=amdgpu_gem_add_input_fence(struct drm_file *filp,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-74-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:75:\t\tret = drm_syncobj_find_fence(filp, syncobj_handles[i], 0, 0, \u0026fence);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-76-\t\tif (ret)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c=91=amdgpu_gem_update_timeline_node(struct drm_file *filp,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-93-\t\t\t\tuint64_t point,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:94:\t\t\t\tstruct drm_syncobj **syncobj,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-95-\t\t\t\tstruct dma_fence_chain **chain)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-100-\t/* Find the sync object */\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:101:\t*syncobj = drm_syncobj_find(filp, syncobj_handle);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-102-\tif (!*syncobj)\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-110-\tif (!*chain) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:111:\t\tdrm_syncobj_put(*syncobj);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-112-\t\t*syncobj = NULL;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c=832=int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-847-\tstruct amdgpu_bo_va *bo_va;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:848:\tstruct drm_syncobj *timeline_syncobj = NULL;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-849-\tstruct dma_fence_chain *timeline_chain = NULL;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1002-\t\t\t\t/* Replace the existing fence when no point is given. */\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:1003:\t\t\t\tdrm_syncobj_replace_fence(timeline_syncobj,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1004-\t\t\t\t\t\t\t fence);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1006-\t\t\t\t/* Attach the last-update fence at a specific point. */\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:1007:\t\t\t\tdrm_syncobj_add_point(timeline_syncobj,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1008-\t\t\t\t\t\t timeline_chain,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1020-\tif (timeline_syncobj)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c:1021:\t\tdrm_syncobj_put(timeline_syncobj);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_gem.c-1022-\tdrm_exec_fini(\u0026exec);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-29-#include \u003cdrm/drm_exec.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:30:#include \u003cdrm/drm_syncobj.h\u003e\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-31-\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c=455=int amdgpu_userq_signal_ioctl(struct drm_device *dev, void *data,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-468-\tstruct amdgpu_userq_fence *fence;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:469:\tstruct drm_syncobj **syncobj;\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-470-\tstruct drm_exec exec;\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-496-\tfor (entry = 0; entry \u003c num_syncobj_handles; entry++) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:497:\t\tsyncobj[entry] = drm_syncobj_find(filp, syncobj_handles[entry]);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-498-\t\tif (!syncobj[entry]) {\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-570-\tfor (i = 0; i \u003c num_syncobj_handles; i++)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:571:\t\tdrm_syncobj_replace_fence(syncobj[i], \u0026fence-\u003ebase);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-572-\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-589-\twhile (entry-- \u003e 0)\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:590:\t\tdrm_syncobj_put(syncobj[entry]);\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-591-\tkfree(syncobj);\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c=600=amdgpu_userq_wait_count_fences(struct drm_file *filp,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-620-\tfor (i = 0; i \u003c wait_info-\u003enum_syncobj_timeline_handles; i++) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:621:\t\tr = drm_syncobj_find_fence(filp, timeline_handles[i],\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-622-\t\t\t\t\t timeline_points[i],\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-635-\tfor (i = 0; i \u003c wait_info-\u003enum_syncobj_handles; i++) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:636:\t\tr = drm_syncobj_find_fence(filp, syncobj_handles[i], 0,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-637-\t\t\t\t\t DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c=710=amdgpu_userq_wait_return_fence_info(struct drm_device *dev, struct drm_file *filp,\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-743-\tfor (i = 0; i \u003c num_points; i++) {\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:744:\t\tr = drm_syncobj_find_fence(filp, timeline_handles[i],\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-745-\t\t\t\t\t timeline_points[i],\n--\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-767-\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c:768:\t\tr = drm_syncobj_find_fence(filp, syncobj_handles[i], 0,\ndrivers/gpu/drm/amd/amdgpu/amdgpu_userq_fence.c-769-\t\t\t\t\t DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT,\n--\ndrivers/gpu/drm/drm_file.c=132=struct drm_file *drm_file_alloc(struct drm_minor *minor)\n--\ndrivers/gpu/drm/drm_file.c-167-\tif (drm_core_check_feature(dev, DRIVER_SYNCOBJ))\ndrivers/gpu/drm/drm_file.c:168:\t\tdrm_syncobj_open(file);\ndrivers/gpu/drm/drm_file.c-169-\n--\ndrivers/gpu/drm/drm_file.c-185-\tif (drm_core_check_feature(dev, DRIVER_SYNCOBJ))\ndrivers/gpu/drm/drm_file.c:186:\t\tdrm_syncobj_release(file);\ndrivers/gpu/drm/drm_file.c-187-\tif (drm_core_check_feature(dev, DRIVER_GEM))\n--\ndrivers/gpu/drm/drm_file.c=233=void drm_file_free(struct drm_file *file)\n--\ndrivers/gpu/drm/drm_file.c-257-\tif (drm_core_check_feature(dev, DRIVER_SYNCOBJ))\ndrivers/gpu/drm/drm_file.c:258:\t\tdrm_syncobj_release(file);\ndrivers/gpu/drm/drm_file.c-259-\n--\ndrivers/gpu/drm/drm_internal.h=259=drm_ioctl_t drm_getclient;\ndrivers/gpu/drm/drm_internal.h-260-\ndrivers/gpu/drm/drm_internal.h:261:/* drm_syncobj.c */\ndrivers/gpu/drm/drm_internal.h:262:void drm_syncobj_open(struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:263:void drm_syncobj_release(struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:264:int drm_syncobj_create_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-265-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:266:int drm_syncobj_destroy_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-267-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:268:int drm_syncobj_handle_to_fd_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-269-\t\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:270:int drm_syncobj_fd_to_handle_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-271-\t\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:272:int drm_syncobj_transfer_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-273-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:274:int drm_syncobj_wait_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-275-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:276:int drm_syncobj_timeline_wait_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-277-\t\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:278:int drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-279-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:280:int drm_syncobj_reset_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-281-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:282:int drm_syncobj_signal_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-283-\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:284:int drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-285-\t\t\t\t struct drm_file *file_private);\ndrivers/gpu/drm/drm_internal.h:286:int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,\ndrivers/gpu/drm/drm_internal.h-287-\t\t\t struct drm_file *file_private);\n--\ndrivers/gpu/drm/drm_ioctl.c=644=static const struct drm_ioctl_desc drm_ioctls[] = {\n--\ndrivers/gpu/drm/drm_ioctl.c-717-\ndrivers/gpu/drm/drm_ioctl.c:718:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_CREATE, drm_syncobj_create_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-719-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:720:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_DESTROY, drm_syncobj_destroy_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-721-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:722:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_HANDLE_TO_FD, drm_syncobj_handle_to_fd_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-723-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:724:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_FD_TO_HANDLE, drm_syncobj_fd_to_handle_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-725-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:726:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TRANSFER, drm_syncobj_transfer_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-727-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:728:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_WAIT, drm_syncobj_wait_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-729-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:730:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TIMELINE_WAIT, drm_syncobj_timeline_wait_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-731-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:732:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_EVENTFD, drm_syncobj_eventfd_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-733-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:734:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_RESET, drm_syncobj_reset_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-735-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:736:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_SIGNAL, drm_syncobj_signal_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-737-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:738:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_TIMELINE_SIGNAL, drm_syncobj_timeline_signal_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-739-\t\t DRM_RENDER_ALLOW),\ndrivers/gpu/drm/drm_ioctl.c:740:\tDRM_IOCTL_DEF(DRM_IOCTL_SYNCOBJ_QUERY, drm_syncobj_query_ioctl,\ndrivers/gpu/drm/drm_ioctl.c-741-\t\t DRM_RENDER_ALLOW),\n--\ndrivers/gpu/drm/drm_syncobj.c-31- *\ndrivers/gpu/drm/drm_syncobj.c:32: * DRM synchronisation objects (syncobj, see struct \u0026drm_syncobj) provide a\ndrivers/gpu/drm/drm_syncobj.c-33- * container for a synchronization primitive which can be used by userspace\n--\ndrivers/gpu/drm/drm_syncobj.c-160- * result of importing those file descriptors own a reference to the\ndrivers/gpu/drm/drm_syncobj.c:161: * same underlying struct \u0026drm_syncobj and the syncobj can be used\ndrivers/gpu/drm/drm_syncobj.c-162- * persistently across all the processes with which it is shared.\n--\ndrivers/gpu/drm/drm_syncobj.c-209-#include \u003cdrm/drm_print.h\u003e\ndrivers/gpu/drm/drm_syncobj.c:210:#include \u003cdrm/drm_syncobj.h\u003e\ndrivers/gpu/drm/drm_syncobj.c-211-#include \u003cdrm/drm_utils.h\u003e\n--\ndrivers/gpu/drm/drm_syncobj.c=215=struct syncobj_wait_entry {\n--\ndrivers/gpu/drm/drm_syncobj.c-222-\ndrivers/gpu/drm/drm_syncobj.c:223:static void syncobj_wait_syncobj_func(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-224-\t\t\t\t struct syncobj_wait_entry *wait);\n--\ndrivers/gpu/drm/drm_syncobj.c=226=struct syncobj_eventfd_entry {\n--\ndrivers/gpu/drm/drm_syncobj.c-229-\tstruct dma_fence_cb fence_cb;\ndrivers/gpu/drm/drm_syncobj.c:230:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/drm_syncobj.c-231-\tstruct eventfd_ctx *ev_fd_ctx;\n--\ndrivers/gpu/drm/drm_syncobj.c=236=static void\ndrivers/gpu/drm/drm_syncobj.c:237:syncobj_eventfd_entry_func(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-238-\t\t\t struct syncobj_eventfd_entry *entry);\n--\ndrivers/gpu/drm/drm_syncobj.c-240-/**\ndrivers/gpu/drm/drm_syncobj.c:241: * drm_syncobj_find - lookup and reference a sync object.\ndrivers/gpu/drm/drm_syncobj.c-242- * @file_private: drm file private pointer\n--\ndrivers/gpu/drm/drm_syncobj.c-245- * Returns a reference to the syncobj pointed to by handle or NULL. The\ndrivers/gpu/drm/drm_syncobj.c:246: * reference must be released by calling drm_syncobj_put().\ndrivers/gpu/drm/drm_syncobj.c-247- */\ndrivers/gpu/drm/drm_syncobj.c:248:struct drm_syncobj *drm_syncobj_find(struct drm_file *file_private,\ndrivers/gpu/drm/drm_syncobj.c-249-\t\t\t\t u32 handle)\ndrivers/gpu/drm/drm_syncobj.c-250-{\ndrivers/gpu/drm/drm_syncobj.c:251:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/drm_syncobj.c-252-\n--\ndrivers/gpu/drm/drm_syncobj.c-257-\tif (syncobj)\ndrivers/gpu/drm/drm_syncobj.c:258:\t\tdrm_syncobj_get(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-259-\n--\ndrivers/gpu/drm/drm_syncobj.c-263-}\ndrivers/gpu/drm/drm_syncobj.c:264:EXPORT_SYMBOL(drm_syncobj_find);\ndrivers/gpu/drm/drm_syncobj.c-265-\ndrivers/gpu/drm/drm_syncobj.c:266:static void drm_syncobj_fence_add_wait(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-267-\t\t\t\t struct syncobj_wait_entry *wait)\n--\ndrivers/gpu/drm/drm_syncobj.c-290-\ndrivers/gpu/drm/drm_syncobj.c:291:static void drm_syncobj_remove_wait(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-292-\t\t\t\t struct syncobj_wait_entry *wait)\n--\ndrivers/gpu/drm/drm_syncobj.c=314=static void\ndrivers/gpu/drm/drm_syncobj.c:315:drm_syncobj_add_eventfd(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-316-\t\t\tstruct syncobj_eventfd_entry *entry)\n--\ndrivers/gpu/drm/drm_syncobj.c-324-/**\ndrivers/gpu/drm/drm_syncobj.c:325: * drm_syncobj_add_point - add new timeline point to the syncobj\ndrivers/gpu/drm/drm_syncobj.c-326- * @syncobj: sync object to add timeline point do\n--\ndrivers/gpu/drm/drm_syncobj.c-332- */\ndrivers/gpu/drm/drm_syncobj.c:333:void drm_syncobj_add_point(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-334-\t\t\t struct dma_fence_chain *chain,\n--\ndrivers/gpu/drm/drm_syncobj.c-345-\ndrivers/gpu/drm/drm_syncobj.c:346:\tprev = drm_syncobj_fence_get(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-347-\t/* You are adding an unorder point to timeline, which could cause payload returned from query_ioctl is 0! */\n--\ndrivers/gpu/drm/drm_syncobj.c-362-}\ndrivers/gpu/drm/drm_syncobj.c:363:EXPORT_SYMBOL(drm_syncobj_add_point);\ndrivers/gpu/drm/drm_syncobj.c-364-\ndrivers/gpu/drm/drm_syncobj.c-365-/**\ndrivers/gpu/drm/drm_syncobj.c:366: * drm_syncobj_replace_fence - replace fence in a sync object.\ndrivers/gpu/drm/drm_syncobj.c-367- * @syncobj: Sync object to replace fence in\n--\ndrivers/gpu/drm/drm_syncobj.c-371- */\ndrivers/gpu/drm/drm_syncobj.c:372:void drm_syncobj_replace_fence(struct drm_syncobj *syncobj,\ndrivers/gpu/drm/drm_syncobj.c-373-\t\t\t struct dma_fence *fence)\n--\ndrivers/gpu/drm/drm_syncobj.c-398-}\ndrivers/gpu/drm/drm_syncobj.c:399:EXPORT_SYMBOL(drm_syncobj_replace_fence);\ndrivers/gpu/drm/drm_syncobj.c-400-\ndrivers/gpu/drm/drm_syncobj.c-401-/**\ndrivers/gpu/drm/drm_syncobj.c:402: * drm_syncobj_assign_null_handle - assign a stub fence to the sync object\ndrivers/gpu/drm/drm_syncobj.c-403- * @syncobj: sync object to assign the fence on\n--\ndrivers/gpu/drm/drm_syncobj.c-406- */\ndrivers/gpu/drm/drm_syncobj.c:407:static int drm_syncobj_assign_null_handle(struct drm_syncobj *syncobj)\ndrivers/gpu/drm/drm_syncobj.c-408-{\n--\ndrivers/gpu/drm/drm_syncobj.c-413-\ndrivers/gpu/drm/drm_syncobj.c:414:\tdrm_syncobj_replace_fence(syncobj, fence);\ndrivers/gpu/drm/drm_syncobj.c-415-\tdma_fence_put(fence);\n--\ndrivers/gpu/drm/drm_syncobj.c-421-/**\ndrivers/gpu/drm/drm_syncobj.c:422: * drm_syncobj_find_fence - lookup and reference the fence in a sync object\ndrivers/gpu/drm/drm_syncobj.c-423- * @file_private: drm file private pointer\n--\ndrivers/gpu/drm/drm_syncobj.c-428- *\ndrivers/gpu/drm/drm_syncobj.c:429: * This is just a convenience function that combines drm_syncobj_find() and\ndrivers/gpu/drm/drm_syncobj.c:430: * drm_syncobj_fence_get().\ndrivers/gpu/drm/drm_syncobj.c-431- *\n--\ndrivers/gpu/drm/drm_syncobj.c-435- */\ndrivers/gpu/drm/drm_syncobj.c:436:int drm_syncobj_find_fence(struct drm_file *file_private,\ndrivers/gpu/drm/drm_syncobj.c-437-\t\t\t u32 handle, u64 point, u64 flags,\n--\ndrivers/gpu/drm/drm_syncobj.c-439-{\ndrivers/gpu/drm/drm_syncobj.c:440:\tstruct drm_syncobj *syncobj = drm_syncobj_find(file_private, handle);\ndrivers/gpu/drm/drm_syncobj.c-441-\tstruct syncobj_wait_entry wait;\n--\ndrivers/gpu/drm/drm_syncobj.c-461-\ndrivers/gpu/drm/drm_syncobj.c:462:\t*fence = drm_syncobj_fence_get(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-463-\n--\ndrivers/gpu/drm/drm_syncobj.c-467-\t\t\t/* If the requested seqno is already signaled\ndrivers/gpu/drm/drm_syncobj.c:468:\t\t\t * drm_syncobj_find_fence may return a NULL\ndrivers/gpu/drm/drm_syncobj.c-469-\t\t\t * fence. To make sure the recipient gets\n--\ndrivers/gpu/drm/drm_syncobj.c-487-\twait.point = point;\ndrivers/gpu/drm/drm_syncobj.c:488:\tdrm_syncobj_fence_add_wait(syncobj, \u0026wait);\ndrivers/gpu/drm/drm_syncobj.c-489-\n--\ndrivers/gpu/drm/drm_syncobj.c-512-\tif (wait.node.next)\ndrivers/gpu/drm/drm_syncobj.c:513:\t\tdrm_syncobj_remove_wait(syncobj, \u0026wait);\ndrivers/gpu/drm/drm_syncobj.c-514-\ndrivers/gpu/drm/drm_syncobj.c-515-out:\ndrivers/gpu/drm/drm_syncobj.c:516:\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-517-\n--\ndrivers/gpu/drm/drm_syncobj.c-519-}\ndrivers/gpu/drm/drm_syncobj.c:520:EXPORT_SYMBOL(drm_syncobj_find_fence);\ndrivers/gpu/drm/drm_syncobj.c-521-\ndrivers/gpu/drm/drm_syncobj.c-522-/**\ndrivers/gpu/drm/drm_syncobj.c:523: * drm_syncobj_free - free a sync object.\ndrivers/gpu/drm/drm_syncobj.c-524- * @kref: kref to free.\ndrivers/gpu/drm/drm_syncobj.c-525- *\ndrivers/gpu/drm/drm_syncobj.c:526: * Only to be called from kref_put in drm_syncobj_put.\ndrivers/gpu/drm/drm_syncobj.c-527- */\ndrivers/gpu/drm/drm_syncobj.c:528:void drm_syncobj_free(struct kref *kref)\ndrivers/gpu/drm/drm_syncobj.c-529-{\ndrivers/gpu/drm/drm_syncobj.c:530:\tstruct drm_syncobj *syncobj = container_of(kref,\ndrivers/gpu/drm/drm_syncobj.c:531:\t\t\t\t\t\t struct drm_syncobj,\ndrivers/gpu/drm/drm_syncobj.c-532-\t\t\t\t\t\t refcount);\n--\ndrivers/gpu/drm/drm_syncobj.c-534-\ndrivers/gpu/drm/drm_syncobj.c:535:\tdrm_syncobj_replace_fence(syncobj, NULL);\ndrivers/gpu/drm/drm_syncobj.c-536-\n--\ndrivers/gpu/drm/drm_syncobj.c-541-}\ndrivers/gpu/drm/drm_syncobj.c:542:EXPORT_SYMBOL(drm_syncobj_free);\ndrivers/gpu/drm/drm_syncobj.c-543-\ndrivers/gpu/drm/drm_syncobj.c-544-/**\ndrivers/gpu/drm/drm_syncobj.c:545: * drm_syncobj_create - create a new syncobj\ndrivers/gpu/drm/drm_syncobj.c-546- * @out_syncobj: returned syncobj\n--\ndrivers/gpu/drm/drm_syncobj.c-551- * probably want to make it available to userspace, either through\ndrivers/gpu/drm/drm_syncobj.c:552: * drm_syncobj_get_handle() or drm_syncobj_get_fd().\ndrivers/gpu/drm/drm_syncobj.c-553- *\n--\ndrivers/gpu/drm/drm_syncobj.c-555- */\ndrivers/gpu/drm/drm_syncobj.c:556:int drm_syncobj_create(struct drm_syncobj **out_syncobj, uint32_t flags,\ndrivers/gpu/drm/drm_syncobj.c-557-\t\t struct dma_fence *fence)\n--\ndrivers/gpu/drm/drm_syncobj.c-559-\tint ret;\ndrivers/gpu/drm/drm_syncobj.c:560:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/drm_syncobj.c-561-\ndrivers/gpu/drm/drm_syncobj.c:562:\tsyncobj = kzalloc_obj(struct drm_syncobj);\ndrivers/gpu/drm/drm_syncobj.c-563-\tif (!syncobj)\n--\ndrivers/gpu/drm/drm_syncobj.c-571-\tif (flags \u0026 DRM_SYNCOBJ_CREATE_SIGNALED) {\ndrivers/gpu/drm/drm_syncobj.c:572:\t\tret = drm_syncobj_assign_null_handle(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-573-\t\tif (ret \u003c 0) {\ndrivers/gpu/drm/drm_syncobj.c:574:\t\t\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-575-\t\t\treturn ret;\n--\ndrivers/gpu/drm/drm_syncobj.c-579-\tif (fence)\ndrivers/gpu/drm/drm_syncobj.c:580:\t\tdrm_syncobj_replace_fence(syncobj, fence);\ndrivers/gpu/drm/drm_syncobj.c-581-\n--\ndrivers/gpu/drm/drm_syncobj.c-584-}\ndrivers/gpu/drm/drm_syncobj.c:585:EXPORT_SYMBOL(drm_syncobj_create);\ndrivers/gpu/drm/drm_syncobj.c-586-\ndrivers/gpu/drm/drm_syncobj.c-587-/**\ndrivers/gpu/drm/drm_syncobj.c:588: * drm_syncobj_get_handle - get a handle from a syncobj\ndrivers/gpu/drm/drm_syncobj.c-589- * @file_private: drm file private pointer\n--\ndrivers/gpu/drm/drm_syncobj.c-592- *\ndrivers/gpu/drm/drm_syncobj.c:593: * Exports a sync object created with drm_syncobj_create() as a handle on\ndrivers/gpu/drm/drm_syncobj.c-594- * @file_private to userspace.\n--\ndrivers/gpu/drm/drm_syncobj.c-597- */\ndrivers/gpu/drm/drm_syncobj.c:598:int drm_syncobj_get_handle(struct drm_file *file_private,\ndrivers/gpu/drm/drm_syncobj.c:599:\t\t\t struct drm_syncobj *syncobj, u32 *handle)\ndrivers/gpu/drm/drm_syncobj.c-600-{\n--\ndrivers/gpu/drm/drm_syncobj.c-603-\t/* take a reference to put in the xarray */\ndrivers/gpu/drm/drm_syncobj.c:604:\tdrm_syncobj_get(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-605-\n--\ndrivers/gpu/drm/drm_syncobj.c-608-\tif (ret)\ndrivers/gpu/drm/drm_syncobj.c:609:\t\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-610-\n--\ndrivers/gpu/drm/drm_syncobj.c-612-}\ndrivers/gpu/drm/drm_syncobj.c:613:EXPORT_SYMBOL(drm_syncobj_get_handle);\ndrivers/gpu/drm/drm_syncobj.c-614-\ndrivers/gpu/drm/drm_syncobj.c:615:static int drm_syncobj_create_as_handle(struct drm_file *file_private,\ndrivers/gpu/drm/drm_syncobj.c-616-\t\t\t\t\tu32 *handle, uint32_t flags)\n--\ndrivers/gpu/drm/drm_syncobj.c-618-\tint ret;\ndrivers/gpu/drm/drm_syncobj.c:619:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/drm_syncobj.c-620-\ndrivers/gpu/drm/drm_syncobj.c:621:\tret = drm_syncobj_create(\u0026syncobj, flags, NULL);\ndrivers/gpu/drm/drm_syncobj.c-622-\tif (ret)\n--\ndrivers/gpu/drm/drm_syncobj.c-624-\ndrivers/gpu/drm/drm_syncobj.c:625:\tret = drm_syncobj_get_handle(file_private, syncobj, handle);\ndrivers/gpu/drm/drm_syncobj.c:626:\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-627-\treturn ret;\n--\ndrivers/gpu/drm/drm_syncobj.c-629-\ndrivers/gpu/drm/drm_syncobj.c:630:static int drm_syncobj_destroy(struct drm_file *file_private,\ndrivers/gpu/drm/drm_syncobj.c-631-\t\t\t u32 handle)\ndrivers/gpu/drm/drm_syncobj.c-632-{\ndrivers/gpu/drm/drm_syncobj.c:633:\tstruct drm_syncobj *syncobj;\ndrivers/gpu/drm/drm_syncobj.c-634-\n--\ndrivers/gpu/drm/drm_syncobj.c-638-\ndrivers/gpu/drm/drm_syncobj.c:639:\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-640-\treturn 0;\n--\ndrivers/gpu/drm/drm_syncobj.c-642-\ndrivers/gpu/drm/drm_syncobj.c:643:static int drm_syncobj_file_release(struct inode *inode, struct file *file)\ndrivers/gpu/drm/drm_syncobj.c-644-{\ndrivers/gpu/drm/drm_syncobj.c:645:\tstruct drm_syncobj *syncobj = file-\u003eprivate_data;\ndrivers/gpu/drm/drm_syncobj.c-646-\ndrivers/gpu/drm/drm_syncobj.c:647:\tdrm_syncobj_put(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-648-\treturn 0;\n--\ndrivers/gpu/drm/drm_syncobj.c-650-\ndrivers/gpu/drm/drm_syncobj.c:651:static const struct file_operations drm_syncobj_file_fops = {\ndrivers/gpu/drm/drm_syncobj.c:652:\t.release = drm_syncobj_file_release,\ndrivers/gpu/drm/drm_syncobj.c-653-};\n--\ndrivers/gpu/drm/drm_syncobj.c-655-/**\ndrivers/gpu/drm/drm_syncobj.c:656: * drm_syncobj_get_fd - get a file descriptor from a syncobj\ndrivers/gpu/drm/drm_syncobj.c-657- * @syncobj: Sync object to export\n--\ndrivers/gpu/drm/drm_syncobj.c-659- *\ndrivers/gpu/drm/drm_syncobj.c:660: * Exports a sync object created with drm_syncobj_create() as a file descriptor.\ndrivers/gpu/drm/drm_syncobj.c-661- *\n--\ndrivers/gpu/drm/drm_syncobj.c-663- */\ndrivers/gpu/drm/drm_syncobj.c:664:int drm_syncobj_get_fd(struct drm_syncobj *syncobj, int *p_fd)\ndrivers/gpu/drm/drm_syncobj.c-665-{\n--\ndrivers/gpu/drm/drm_syncobj.c-673-\tfile = anon_inode_getfile(\"syncobj_file\",\ndrivers/gpu/drm/drm_syncobj.c:674:\t\t\t\t \u0026drm_syncobj_file_fops,\ndrivers/gpu/drm/drm_syncobj.c-675-\t\t\t\t syncobj, 0);\n--\ndrivers/gpu/drm/drm_syncobj.c-680-\ndrivers/gpu/drm/drm_syncobj.c:681:\tdrm_syncobj_get(syncobj);\ndrivers/gpu/drm/drm_syncobj.c-682-\tfd_install(fd, file);\n--\ndrivers/gpu/drm/drm_syncobj.c-686-}\ndrivers/gpu/drm/drm_syncobj.c:687:EXPORT_SYMBOL(drm_syncobj_get_fd);\n\n"
} |
| 7/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 28090 output: 41 thoughts: 31 Thoughts: Here's my take on the changes, presented as a summary of my internal thought process: **Diving Deep into Syncobj and Eventfd** Okay, so I need to get a handle on what's changed in `drm_syncobj.c` and `fs/eventfd.c`. The best way to do this, given my expertise, is to absorb the complete modified sections of *both* files. Skimming won't cut it here. I need the full context to really understand the implications of these modifications. I'm going to look for any changes in core logic, data structures, or interface calls. I will need to understand this to determine impact, integration and any possible optimization that may be available. This is how I best familiarize myself with the work done. |
| 8/2 | 2026/09/09 13:06 | tool | read-file |
0mArgs:{
"File": "drivers/gpu/drm/drm_syncobj.c",
"FirstLine": 1460,
"LineCount": 60
}Results: {
"Contents": "1460:\t\n1461:\tint\n1462:\tdrm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\n1463:\t\t\t\t struct drm_file *file_private)\n1464:\t{\n1465:\t\tstruct eventfd_ctx *ev_fd_ctx __free(eventfd) = NULL;\n1466:\t\tstruct drm_syncobj_eventfd *args = data;\n1467:\t\tstruct drm_syncobj *syncobj;\n1468:\t\tstruct syncobj_eventfd_entry *entry;\n1469:\t\tint ret;\n1470:\t\n1471:\t\tif (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))\n1472:\t\t\treturn -EOPNOTSUPP;\n1473:\t\n1474:\t\tif (args-\u003eflags \u0026 ~DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)\n1475:\t\t\treturn -EINVAL;\n1476:\t\n1477:\t\tif (args-\u003epad)\n1478:\t\t\treturn -EINVAL;\n1479:\t\n1480:\t\tsyncobj = drm_syncobj_find(file_private, args-\u003ehandle);\n1481:\t\tif (!syncobj)\n1482:\t\t\treturn -ENOENT;\n1483:\t\n1484:\t\tev_fd_ctx = eventfd_ctx_fdget(args-\u003efd);\n1485:\t\tif (IS_ERR(ev_fd_ctx)) {\n1486:\t\t\tret = PTR_ERR(ev_fd_ctx);\n1487:\t\t\tev_fd_ctx = NULL;\n1488:\t\t\tgoto err_fdget;\n1489:\t\t}\n1490:\t\n1491:\t\tentry = kzalloc_obj(*entry);\n1492:\t\tif (!entry) {\n1493:\t\t\tret = -ENOMEM;\n1494:\t\t\tgoto err_fdget;\n1495:\t\t}\n1496:\t\tentry-\u003esyncobj = syncobj;\n1497:\t\tentry-\u003eev_fd_ctx = no_free_ptr(ev_fd_ctx);\n1498:\t\tentry-\u003epoint = args-\u003epoint;\n1499:\t\tentry-\u003eflags = args-\u003eflags;\n1500:\t\n1501:\t\tdrm_syncobj_add_eventfd(syncobj, entry);\n1502:\t\tdrm_syncobj_put(syncobj);\n1503:\t\n1504:\t\treturn 0;\n1505:\t\n1506:\terr_fdget:\n1507:\t\tdrm_syncobj_put(syncobj);\n1508:\t\treturn ret;\n1509:\t}\n1510:\t\n1511:\tint\n1512:\tdrm_syncobj_reset_ioctl(struct drm_device *dev, void *data,\n1513:\t\t\t\tstruct drm_file *file_private)\n1514:\t{\n1515:\t\tstruct drm_syncobj_array *args = data;\n1516:\t\tstruct drm_syncobj **syncobjs;\n1517:\t\tuint32_t i;\n1518:\t\tint ret;\n1519:\t\n"
} |
| 9/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 29184 output: 33 thoughts: 26 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Investigating Eventfd Implementation** Okay, so we're diving into this `eventfd` issue. I'm going to quickly cross-reference the core implementation with the header file. I need to make sure I have a solid understanding of how `eventfd` is *actually* implemented. The typical go-to locations for that sort of analysis are `fs/eventfd.c` – which should contain the file system level driver code – and, of course, the corresponding header file, `include/linux/eventfd.h` for the key data structures and definitions. It's crucial to understand the interactions between userspace and the kernel, so this initial cross-check should provide a solid basis for further analysis. |
| 10/2 | 2026/09/09 13:06 | tool | read-file |
0mArgs:{
"File": "fs/eventfd.c",
"FirstLine": 90,
"LineCount": 30
}Results: {
"Contents": " 90:\t{\n 91:\t\tstruct eventfd_ctx *ctx = container_of(kref, struct eventfd_ctx, kref);\n 92:\t\n 93:\t\teventfd_free_ctx(ctx);\n 94:\t}\n 95:\t\n 96:\t/**\n 97:\t * eventfd_ctx_put - Releases a reference to the internal eventfd context.\n 98:\t * @ctx: [in] Pointer to eventfd context.\n 99:\t *\n 100:\t * The eventfd context reference must have been previously acquired either\n 101:\t * with eventfd_ctx_fdget() or eventfd_ctx_fileget().\n 102:\t */\n 103:\tvoid eventfd_ctx_put(struct eventfd_ctx *ctx)\n 104:\t{\n 105:\t\tif (!ctx)\n 106:\t\t\treturn;\n 107:\t\n 108:\t\tkref_put(\u0026ctx-\u003ekref, eventfd_free);\n 109:\t}\n 110:\tEXPORT_SYMBOL_GPL(eventfd_ctx_put);\n 111:\t\n 112:\tstatic int eventfd_release(struct inode *inode, struct file *file)\n 113:\t{\n 114:\t\tstruct eventfd_ctx *ctx = file-\u003eprivate_data;\n 115:\t\n 116:\t\twake_up_poll(\u0026ctx-\u003ewqh, EPOLLHUP);\n 117:\t\teventfd_ctx_put(ctx);\n 118:\t\treturn 0;\n 119:\t}\n"
} |
| 11/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 29841 output: 35 thoughts: 14 Thoughts: Okay, here's my take on those thoughts, tailored for an expert audience: **Diving into the `eventfd.h` Details** Alright, time to dig into the kernel's `include/linux/eventfd.h` file. I need a refresher on the intricacies of `eventfd`. I know the basic concept – it's a lightweight mechanism for signaling events between userspace and the kernel, or between kernel threads, using a file descriptor. But I want to nail down the specifics, particularly around its atomic operations and how it handles different signaling modes. I'm especially interested in whether there are any potential race conditions or edge cases lurking in the current implementation that might impact performance or reliability in complex, high-concurrency scenarios. I recall some discussions about the potential overhead compared to other signaling methods, so I’ll be paying close attention to the lock-free aspects of the implementation. I'm also curious about any recent changes or patches to that header, or surrounding code. I need to refresh my knowledge of the memory barriers used and how these protect the shared counter and ensure visibility of changes. Any recent optimizations that aim to reduce latency or improve performance are of particular interest to me. |
| 12/2 | 2026/09/09 13:06 | tool | read-file |
0mArgs:{
"File": "include/linux/eventfd.h",
"FirstLine": 75,
"LineCount": 30
}Results: {
"Contents": " 75:\t\n 76:\tstatic inline bool eventfd_signal_allowed(void)\n 77:\t{\n 78:\t\treturn true;\n 79:\t}\n 80:\t\n 81:\tstatic inline void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt)\n 82:\t{\n 83:\t\n 84:\t}\n 85:\t\n 86:\t#endif\n 87:\t\n 88:\tstatic inline void eventfd_signal(struct eventfd_ctx *ctx)\n 89:\t{\n 90:\t\teventfd_signal_mask(ctx, 0);\n 91:\t}\n 92:\t\n 93:\tDEFINE_FREE(eventfd, struct eventfd_ctx *, eventfd_ctx_put(_T))\n 94:\t\n 95:\t#endif /* _LINUX_EVENTFD_H */\n 96:\t\n"
} |
| 13/2 | 2026/09/09 13:06 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 30397 output: 24 thoughts: 708 Thoughts: **Fuzzing Decision for This Patch Series** Okay, let's break this down. First, I see a patch series that introduces a simple null check (`if (!ctx) return;`) to `eventfd_ctx_put()`, adds a `DEFINE_FREE` macro for eventfd contexts, and refactors resource management in `drm_syncobj_eventfd_ioctl()` to use that new macro instead of manual error handling. My initial thought is to assess if this warrants fuzzing. The key question is whether the modified code is reachable. Absolutely! `drm_syncobj_eventfd_ioctl` is called through the `DRM_IOCTL_SYNCOBJ_EVENTFD` ioctl, and syzkaller supports DRM ioctls, including those used by virtual drivers like `vkms` and others. This makes it accessible. Also, `eventfd_ctx_put` is part of core kernel, KVM, vfio, vhost, drm, io_uring, and others, so it's widely used. Now, let's consult the triage philosophy. Section 1 specifically warns us *not* to blindly trust claims of "no functional change" or "refactoring." They highlight that even refactorings can introduce subtle bugs. Section 3 reinforces this by stating that any restructuring of reachable code, including refactorings, requires fuzzing. The patch *does* touch reachable executable code, therefore I think the evaluation should be WorthFuzzing = true. Next, I need to define the `FocusSymbols`. Clearly, `drm_syncobj_eventfd_ioctl` is directly modified, making it a target. The `eventfd_ctx_put` is directly modified, too. I need to be careful with that one, though. Section 4 warns against listing ubiquitous functions called by almost every program. Is `eventfd_ctx_put` ubiquitous, or focused? The `drm_syncobj_eventfd_ioctl` function is specific to a DRM ioctl, so it's a definite focus symbol. `eventfd_ctx_put` releases eventfd contexts, but is now modified to handle null `ctx`. Since this is a specific modification, I think I'll include it in the focus symbols. I'm going to determine `eventfd_ctx_put` callers in the kernel to make sure that decision is correct. |
| 14/2 | 2026/09/09 13:07 | tool | grepper |
0mArgs:{
"Expression": "\\beventfd_ctx_put\\b"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 516 lines.\nUse more precise expression if possible.\n\narch/x86/kvm/hyperv.c=2725=void kvm_hv_destroy_vm(struct kvm *kvm)\n--\narch/x86/kvm/hyperv.c-2731-\tidr_for_each_entry(\u0026hv-\u003econn_to_evt, eventfd, i)\narch/x86/kvm/hyperv.c:2732:\t\teventfd_ctx_put(eventfd);\narch/x86/kvm/hyperv.c-2733-\tidr_destroy(\u0026hv-\u003econn_to_evt);\n--\narch/x86/kvm/hyperv.c=2736=static int kvm_hv_eventfd_assign(struct kvm *kvm, u32 conn_id, int fd)\n--\narch/x86/kvm/hyperv.c-2755-\t\tret = -EEXIST;\narch/x86/kvm/hyperv.c:2756:\teventfd_ctx_put(eventfd);\narch/x86/kvm/hyperv.c-2757-\treturn ret;\n--\narch/x86/kvm/hyperv.c=2760=static int kvm_hv_eventfd_deassign(struct kvm *kvm, u32 conn_id)\n--\narch/x86/kvm/hyperv.c-2772-\tsynchronize_srcu(\u0026kvm-\u003esrcu);\narch/x86/kvm/hyperv.c:2773:\teventfd_ctx_put(eventfd);\narch/x86/kvm/hyperv.c-2774-\treturn 0;\n--\narch/x86/kvm/xen.c=2134=static int kvm_xen_eventfd_assign(struct kvm *kvm,\n--\narch/x86/kvm/xen.c-2199-\tif (eventfd)\narch/x86/kvm/xen.c:2200:\t\teventfd_ctx_put(eventfd);\narch/x86/kvm/xen.c-2201-out_noeventfd:\n--\narch/x86/kvm/xen.c=2206=static int kvm_xen_eventfd_deassign(struct kvm *kvm, u32 port)\n--\narch/x86/kvm/xen.c-2218-\tif (!evtchnfd-\u003edeliver.port.port)\narch/x86/kvm/xen.c:2219:\t\teventfd_ctx_put(evtchnfd-\u003edeliver.eventfd.ctx);\narch/x86/kvm/xen.c-2220-\tkfree(evtchnfd);\n--\narch/x86/kvm/xen.c=2224=static int kvm_xen_eventfd_reset(struct kvm *kvm)\n--\narch/x86/kvm/xen.c-2257-\t\tif (!evtchnfd-\u003edeliver.port.port)\narch/x86/kvm/xen.c:2258:\t\t\teventfd_ctx_put(evtchnfd-\u003edeliver.eventfd.ctx);\narch/x86/kvm/xen.c-2259-\t\tkfree(evtchnfd);\n--\narch/x86/kvm/xen.c=2356=void kvm_xen_destroy_vm(struct kvm *kvm)\n--\narch/x86/kvm/xen.c-2364-\t\tif (!evtchnfd-\u003edeliver.port.port)\narch/x86/kvm/xen.c:2365:\t\t\teventfd_ctx_put(evtchnfd-\u003edeliver.eventfd.ctx);\narch/x86/kvm/xen.c-2366-\t\tkfree(evtchnfd);\n--\ndrivers/accel/habanalabs/common/device.c=460=static void hpriv_release(struct kref *ref)\n--\ndrivers/accel/habanalabs/common/device.c-536-\tif (hpriv-\u003enotifier_event.eventfd)\ndrivers/accel/habanalabs/common/device.c:537:\t\teventfd_ctx_put(hpriv-\u003enotifier_event.eventfd);\ndrivers/accel/habanalabs/common/device.c-538-\n--\ndrivers/accel/habanalabs/common/habanalabs_ioctl.c=793=static int eventfd_unregister(struct hl_fpriv *hpriv, struct hl_info_args *args)\n--\ndrivers/accel/habanalabs/common/habanalabs_ioctl.c-800-\ndrivers/accel/habanalabs/common/habanalabs_ioctl.c:801:\teventfd_ctx_put(hpriv-\u003enotifier_event.eventfd);\ndrivers/accel/habanalabs/common/habanalabs_ioctl.c-802-\thpriv-\u003enotifier_event.eventfd = NULL;\n--\ndrivers/fpga/dfl.c=1869=static int do_set_irq_trigger(struct dfl_feature *feature, unsigned int idx,\n--\ndrivers/fpga/dfl.c-1880-\t\tkfree(feature-\u003eirq_ctx[idx].name);\ndrivers/fpga/dfl.c:1881:\t\teventfd_ctx_put(feature-\u003eirq_ctx[idx].trigger);\ndrivers/fpga/dfl.c-1882-\t\tfeature-\u003eirq_ctx[idx].trigger = NULL;\n--\ndrivers/fpga/dfl.c-1906-\ndrivers/fpga/dfl.c:1907:\teventfd_ctx_put(trigger);\ndrivers/fpga/dfl.c-1908-free_name:\n--\ndrivers/gpu/drm/drm_syncobj.c=303=syncobj_eventfd_entry_free(struct syncobj_eventfd_entry *entry)\ndrivers/gpu/drm/drm_syncobj.c-304-{\ndrivers/gpu/drm/drm_syncobj.c:305:\teventfd_ctx_put(entry-\u003eev_fd_ctx);\ndrivers/gpu/drm/drm_syncobj.c-306-\tdma_fence_put(entry-\u003efence);\n--\ndrivers/gpu/drm/i915/gvt/kvmgt.c=690=static void intel_vgpu_release_msi_eventfd_ctx(struct intel_vgpu *vgpu)\n--\ndrivers/gpu/drm/i915/gvt/kvmgt.c-695-\tif (trigger) {\ndrivers/gpu/drm/i915/gvt/kvmgt.c:696:\t\teventfd_ctx_put(trigger);\ndrivers/gpu/drm/i915/gvt/kvmgt.c-697-\t\tvgpu-\u003emsi_trigger = NULL;\n--\ndrivers/hv/mshv_eventfd.c=254=static void mshv_irqfd_shutdown(struct work_struct *work)\n--\ndrivers/hv/mshv_eventfd.c-267-\t\tmshv_irqfd_resampler_shutdown(irqfd);\ndrivers/hv/mshv_eventfd.c:268:\t\teventfd_ctx_put(irqfd-\u003eirqfd_resamplefd);\ndrivers/hv/mshv_eventfd.c-269-\t}\n--\ndrivers/hv/mshv_eventfd.c-273-\t */\ndrivers/hv/mshv_eventfd.c:274:\teventfd_ctx_put(irqfd-\u003eirqfd_eventfd_ctx);\ndrivers/hv/mshv_eventfd.c-275-\tkfree(irqfd);\n--\ndrivers/hv/mshv_eventfd.c=393=static int mshv_irqfd_assign(struct mshv_partition *pt,\n--\ndrivers/hv/mshv_eventfd.c-529-\tif (resamplefd \u0026\u0026 !IS_ERR(resamplefd))\ndrivers/hv/mshv_eventfd.c:530:\t\teventfd_ctx_put(resamplefd);\ndrivers/hv/mshv_eventfd.c-531-\ndrivers/hv/mshv_eventfd.c-532-\tif (eventfd \u0026\u0026 !IS_ERR(eventfd))\ndrivers/hv/mshv_eventfd.c:533:\t\teventfd_ctx_put(eventfd);\ndrivers/hv/mshv_eventfd.c-534-\n--\ndrivers/hv/mshv_eventfd.c=543=static int mshv_irqfd_deassign(struct mshv_partition *pt,\n--\ndrivers/hv/mshv_eventfd.c-562-\ndrivers/hv/mshv_eventfd.c:563:\teventfd_ctx_put(eventfd);\ndrivers/hv/mshv_eventfd.c-564-\n--\ndrivers/hv/mshv_eventfd.c=633=static void ioeventfd_release(struct mshv_ioeventfd *p, u64 partition_id)\n--\ndrivers/hv/mshv_eventfd.c-636-\t\tmshv_unregister_doorbell(partition_id, p-\u003eiovntfd_doorbell_id);\ndrivers/hv/mshv_eventfd.c:637:\teventfd_ctx_put(p-\u003eiovntfd_eventfd);\ndrivers/hv/mshv_eventfd.c-638-\tkfree(p);\n--\ndrivers/hv/mshv_eventfd.c=673=static int mshv_assign_ioeventfd(struct mshv_partition *pt,\n--\ndrivers/hv/mshv_eventfd.c-767-fail:\ndrivers/hv/mshv_eventfd.c:768:\teventfd_ctx_put(eventfd);\ndrivers/hv/mshv_eventfd.c-769-\n--\ndrivers/hv/mshv_eventfd.c=773=static int mshv_deassign_ioeventfd(struct mshv_partition *pt,\n--\ndrivers/hv/mshv_eventfd.c-814-\ndrivers/hv/mshv_eventfd.c:815:\teventfd_ctx_put(eventfd);\ndrivers/hv/mshv_eventfd.c-816-\n--\ndrivers/hv/mshv_vtl_main.c=973=static int mshv_vtl_sint_ioctl_set_eventfd(struct mshv_vtl_set_eventfd __user *arg)\n--\ndrivers/hv/mshv_vtl_main.c-995-\t\tsynchronize_rcu();\ndrivers/hv/mshv_vtl_main.c:996:\t\teventfd_ctx_put(old_eventfd);\ndrivers/hv/mshv_vtl_main.c-997-\t}\n--\ndrivers/infiniband/hw/mlx5/devx.c=2072=static int UVERBS_HANDLER(MLX5_IB_METHOD_DEVX_SUBSCRIBE_EVENT)(\n--\ndrivers/infiniband/hw/mlx5/devx.c-2249-\t\tif (event_sub-\u003eeventfd)\ndrivers/infiniband/hw/mlx5/devx.c:2250:\t\t\teventfd_ctx_put(event_sub-\u003eeventfd);\ndrivers/infiniband/hw/mlx5/devx.c-2251-\t\tuverbs_uobject_put(\u0026event_sub-\u003eev_file-\u003euobj);\n--\ndrivers/infiniband/hw/mlx5/devx.c=2940=static void devx_free_subscription(struct rcu_head *rcu)\n--\ndrivers/infiniband/hw/mlx5/devx.c-2945-\tif (event_sub-\u003eeventfd)\ndrivers/infiniband/hw/mlx5/devx.c:2946:\t\teventfd_ctx_put(event_sub-\u003eeventfd);\ndrivers/infiniband/hw/mlx5/devx.c-2947-\tuverbs_uobject_put(\u0026event_sub-\u003eev_file-\u003euobj);\n--\ndrivers/misc/ocxl/file.c=191=static void irq_free(void *private)\n--\ndrivers/misc/ocxl/file.c-194-\ndrivers/misc/ocxl/file.c:195:\teventfd_ctx_put(ev_ctx);\ndrivers/misc/ocxl/file.c-196-}\n--\ndrivers/misc/ocxl/file.c=198=static long afu_ioctl(struct file *file, unsigned int cmd,\n--\ndrivers/misc/ocxl/file.c-259-\t\tif (rc)\ndrivers/misc/ocxl/file.c:260:\t\t\teventfd_ctx_put(ev_ctx);\ndrivers/misc/ocxl/file.c-261-\t\tbreak;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=410=static int vfio_ccw_mdev_set_irqs(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-460-\t\t\tif (*ctx)\ndrivers/s390/cio/vfio_ccw_ops.c:461:\t\t\t\teventfd_ctx_put(*ctx);\ndrivers/s390/cio/vfio_ccw_ops.c-462-\t\t\t*ctx = NULL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-470-\t\t\tif (*ctx)\ndrivers/s390/cio/vfio_ccw_ops.c:471:\t\t\t\teventfd_ctx_put(*ctx);\ndrivers/s390/cio/vfio_ccw_ops.c-472-\n--\ndrivers/s390/crypto/vfio_ap_ops.c=2172=static int vfio_ap_set_request_irq(struct ap_matrix_mdev *matrix_mdev,\n--\ndrivers/s390/crypto/vfio_ap_ops.c-2187-\t\tif (matrix_mdev-\u003ereq_trigger)\ndrivers/s390/crypto/vfio_ap_ops.c:2188:\t\t\teventfd_ctx_put(matrix_mdev-\u003ereq_trigger);\ndrivers/s390/crypto/vfio_ap_ops.c-2189-\t\tmatrix_mdev-\u003ereq_trigger = NULL;\n--\ndrivers/s390/crypto/vfio_ap_ops.c-2195-\t\tif (matrix_mdev-\u003ereq_trigger)\ndrivers/s390/crypto/vfio_ap_ops.c:2196:\t\t\teventfd_ctx_put(matrix_mdev-\u003ereq_trigger);\ndrivers/s390/crypto/vfio_ap_ops.c-2197-\n--\ndrivers/s390/crypto/vfio_ap_ops.c=2206=static int vfio_ap_set_cfg_change_irq(struct ap_matrix_mdev *matrix_mdev, unsigned long arg)\n--\ndrivers/s390/crypto/vfio_ap_ops.c-2220-\t\tif (matrix_mdev-\u003ecfg_chg_trigger)\ndrivers/s390/crypto/vfio_ap_ops.c:2221:\t\t\teventfd_ctx_put(matrix_mdev-\u003ecfg_chg_trigger);\ndrivers/s390/crypto/vfio_ap_ops.c-2222-\t\tmatrix_mdev-\u003ecfg_chg_trigger = NULL;\n--\ndrivers/s390/crypto/vfio_ap_ops.c-2228-\t\tif (matrix_mdev-\u003ecfg_chg_trigger)\ndrivers/s390/crypto/vfio_ap_ops.c:2229:\t\t\teventfd_ctx_put(matrix_mdev-\u003ecfg_chg_trigger);\ndrivers/s390/crypto/vfio_ap_ops.c-2230-\n--\ndrivers/usb/gadget/function/f_fs.c=2289=static void ffs_data_clear(struct ffs_data *ffs)\n--\ndrivers/usb/gadget/function/f_fs.c-2313-\tif (ffs-\u003effs_eventfd) {\ndrivers/usb/gadget/function/f_fs.c:2314:\t\teventfd_ctx_put(ffs-\u003effs_eventfd);\ndrivers/usb/gadget/function/f_fs.c-2315-\t\tffs-\u003effs_eventfd = NULL;\n--\ndrivers/vdpa/vdpa_user/vduse_dev.c=496=static void vduse_dev_reset(struct vduse_dev *dev)\n--\ndrivers/vdpa/vdpa_user/vduse_dev.c-532-\t\t\tif (vq-\u003ekickfd)\ndrivers/vdpa/vdpa_user/vduse_dev.c:533:\t\t\t\teventfd_ctx_put(vq-\u003ekickfd);\ndrivers/vdpa/vdpa_user/vduse_dev.c-534-\t\t\tvq-\u003ekickfd = NULL;\n--\ndrivers/vdpa/vdpa_user/vduse_dev.c=1199=static int vduse_kickfd_setup(struct vduse_dev *dev,\n--\ndrivers/vdpa/vdpa_user/vduse_dev.c-1219-\tif (vq-\u003ekickfd)\ndrivers/vdpa/vdpa_user/vduse_dev.c:1220:\t\teventfd_ctx_put(vq-\u003ekickfd);\ndrivers/vdpa/vdpa_user/vduse_dev.c-1221-\tvq-\u003ekickfd = ctx;\n--\ndrivers/vfio/cdx/intr.c=58=static int vfio_cdx_msi_set_vector_signal(struct vfio_cdx_device *vdev,\n--\ndrivers/vfio/cdx/intr.c-71-\t\tkfree(vdev-\u003ecdx_irqs[vector].name);\ndrivers/vfio/cdx/intr.c:72:\t\teventfd_ctx_put(vdev-\u003ecdx_irqs[vector].trigger);\ndrivers/vfio/cdx/intr.c-73-\t\tvdev-\u003ecdx_irqs[vector].trigger = NULL;\n--\ndrivers/vfio/cdx/intr.c-93-\t\tkfree(vdev-\u003ecdx_irqs[vector].name);\ndrivers/vfio/cdx/intr.c:94:\t\teventfd_ctx_put(trigger);\ndrivers/vfio/cdx/intr.c-95-\t\treturn ret;\n--\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c=61=static int vfio_set_trigger(struct vfio_fsl_mc_device *vdev,\n--\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c-72-\t\tkfree(irq-\u003ename);\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c:73:\t\teventfd_ctx_put(irq-\u003etrigger);\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c-74-\t\tirq-\u003etrigger = NULL;\n--\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c-96-\t\tkfree(irq-\u003ename);\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c:97:\t\teventfd_ctx_put(trigger);\ndrivers/vfio/fsl-mc/vfio_fsl_mc_intr.c-98-\t\tirq-\u003etrigger = NULL;\n--\ndrivers/vfio/pci/vfio_pci_core.c=44=static void vfio_pci_eventfd_rcu_free(struct rcu_head *rcu)\n--\ndrivers/vfio/pci/vfio_pci_core.c-48-\ndrivers/vfio/pci/vfio_pci_core.c:49:\teventfd_ctx_put(eventfd-\u003ectx);\ndrivers/vfio/pci/vfio_pci_core.c-50-\tkfree(eventfd);\n--\ndrivers/vfio/pci/vfio_pci_core.c=413=static int vfio_pci_core_pm_entry_with_wakeup(\n--\ndrivers/vfio/pci/vfio_pci_core.c-438-\tif (ret)\ndrivers/vfio/pci/vfio_pci_core.c:439:\t\teventfd_ctx_put(efdctx);\ndrivers/vfio/pci/vfio_pci_core.c-440-\n--\ndrivers/vfio/pci/vfio_pci_core.c=444=static void __vfio_pci_runtime_pm_exit(struct vfio_pci_core_device *vdev)\n--\ndrivers/vfio/pci/vfio_pci_core.c-450-\t\tif (vdev-\u003epm_wake_eventfd_ctx) {\ndrivers/vfio/pci/vfio_pci_core.c:451:\t\t\teventfd_ctx_put(vdev-\u003epm_wake_eventfd_ctx);\ndrivers/vfio/pci/vfio_pci_core.c-452-\t\t\tvdev-\u003epm_wake_eventfd_ctx = NULL;\n--\ndrivers/vfio/pci/vfio_pci_intrs.c=324=static int vfio_intx_set_signal(struct vfio_pci_core_device *vdev,\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-342-\t\tvfio_virqfd_flush_thread(\u0026ctx-\u003eunmask);\ndrivers/vfio/pci/vfio_pci_intrs.c:343:\t\teventfd_ctx_put(old);\ndrivers/vfio/pci/vfio_pci_intrs.c-344-\t}\n--\ndrivers/vfio/pci/vfio_pci_intrs.c=349=static void vfio_intx_disable(struct vfio_pci_core_device *vdev)\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-362-\t\tif (ctx-\u003etrigger)\ndrivers/vfio/pci/vfio_pci_intrs.c:363:\t\t\teventfd_ctx_put(ctx-\u003etrigger);\ndrivers/vfio/pci/vfio_pci_intrs.c-364-\t\tkfree(ctx-\u003ename);\n--\ndrivers/vfio/pci/vfio_pci_intrs.c=447=static int vfio_msi_set_vector_signal(struct vfio_pci_core_device *vdev,\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-465-\t\tkfree(ctx-\u003ename);\ndrivers/vfio/pci/vfio_pci_intrs.c:466:\t\teventfd_ctx_put(ctx-\u003etrigger);\ndrivers/vfio/pci/vfio_pci_intrs.c-467-\t\tvfio_irq_ctx_free(vdev, ctx, vector);\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-525-out_put_eventfd_ctx:\ndrivers/vfio/pci/vfio_pci_intrs.c:526:\teventfd_ctx_put(trigger);\ndrivers/vfio/pci/vfio_pci_intrs.c-527-out_free_name:\n--\ndrivers/vfio/pci/vfio_pci_intrs.c=634=static int vfio_pci_set_intx_trigger(struct vfio_pci_core_device *vdev,\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-662-\t\tif (ret \u0026\u0026 trigger)\ndrivers/vfio/pci/vfio_pci_intrs.c:663:\t\t\teventfd_ctx_put(trigger);\ndrivers/vfio/pci/vfio_pci_intrs.c-664-\n--\ndrivers/vfio/pci/vfio_pci_intrs.c=734=static int vfio_pci_set_ctx_trigger_single(struct vfio_pci_core_device *vdev,\n--\ndrivers/vfio/pci/vfio_pci_intrs.c-793-\t\t\tif (ret)\ndrivers/vfio/pci/vfio_pci_intrs.c:794:\t\t\t\teventfd_ctx_put(efdctx);\ndrivers/vfio/pci/vfio_pci_intrs.c-795-\n--\ndrivers/vfio/platform/vfio_platform_irq.c=182=static int vfio_set_trigger(struct vfio_platform_device *vdev, int index,\n--\ndrivers/vfio/platform/vfio_platform_irq.c-189-\t\tdisable_irq(irq-\u003ehwirq);\ndrivers/vfio/platform/vfio_platform_irq.c:190:\t\teventfd_ctx_put(irq-\u003etrigger);\ndrivers/vfio/platform/vfio_platform_irq.c-191-\t\tirq-\u003etrigger = NULL;\n--\ndrivers/vfio/platform/vfio_platform_irq.c=351=void vfio_platform_irq_cleanup(struct vfio_platform_device *vdev)\n--\ndrivers/vfio/platform/vfio_platform_irq.c-360-\t\t\tif (vdev-\u003eirqs[i].trigger)\ndrivers/vfio/platform/vfio_platform_irq.c:361:\t\t\t\teventfd_ctx_put(vdev-\u003eirqs[i].trigger);\ndrivers/vfio/platform/vfio_platform_irq.c-362-\t\t\tkfree(vdev-\u003eirqs[i].name);\n--\ndrivers/vfio/virqfd.c=85=static void virqfd_shutdown(struct work_struct *work)\n--\ndrivers/vfio/virqfd.c-91-\tflush_work(\u0026virqfd-\u003einject);\ndrivers/vfio/virqfd.c:92:\teventfd_ctx_put(virqfd-\u003eeventfd);\ndrivers/vfio/virqfd.c-93-\n--\ndrivers/vfio/virqfd.c=111=int vfio_virqfd_enable(void *opaque,\n--\ndrivers/vfio/virqfd.c-184-err_busy:\ndrivers/vfio/virqfd.c:185:\teventfd_ctx_put(ctx);\ndrivers/vfio/virqfd.c-186-err_fd:\n--\ndrivers/vhost/vdpa.c=519=static void vhost_vdpa_config_put(struct vhost_vdpa *v)\n--\ndrivers/vhost/vdpa.c-521-\tif (v-\u003econfig_ctx) {\ndrivers/vhost/vdpa.c:522:\t\teventfd_ctx_put(v-\u003econfig_ctx);\ndrivers/vhost/vdpa.c-523-\t\tv-\u003econfig_ctx = NULL;\n--\ndrivers/vhost/vdpa.c=527=static long vhost_vdpa_set_config_call(struct vhost_vdpa *v, u32 __user *argp)\n--\ndrivers/vhost/vdpa.c-541-\tif (!IS_ERR_OR_NULL(ctx))\ndrivers/vhost/vdpa.c:542:\t\teventfd_ctx_put(ctx);\ndrivers/vhost/vdpa.c-543-\n--\ndrivers/vhost/vhost.c=1203=void vhost_dev_cleanup(struct vhost_dev *dev)\n--\ndrivers/vhost/vhost.c-1208-\t\tif (dev-\u003evqs[i]-\u003eerror_ctx)\ndrivers/vhost/vhost.c:1209:\t\t\teventfd_ctx_put(dev-\u003evqs[i]-\u003eerror_ctx);\ndrivers/vhost/vhost.c-1210-\t\tif (dev-\u003evqs[i]-\u003ekick)\n--\ndrivers/vhost/vhost.c-1212-\t\tif (dev-\u003evqs[i]-\u003ecall_ctx.ctx)\ndrivers/vhost/vhost.c:1213:\t\t\teventfd_ctx_put(dev-\u003evqs[i]-\u003ecall_ctx.ctx);\ndrivers/vhost/vhost.c-1214-\t\tvhost_vq_reset(dev, dev-\u003evqs[i]);\n--\ndrivers/vhost/vhost.c-1217-\tif (dev-\u003elog_ctx)\ndrivers/vhost/vhost.c:1218:\t\teventfd_ctx_put(dev-\u003elog_ctx);\ndrivers/vhost/vhost.c-1219-\tdev-\u003elog_ctx = NULL;\n--\ndrivers/vhost/vhost.c=2150=long vhost_vring_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)\n--\ndrivers/vhost/vhost.c-2274-\tif (!IS_ERR_OR_NULL(ctx))\ndrivers/vhost/vhost.c:2275:\t\teventfd_ctx_put(ctx);\ndrivers/vhost/vhost.c-2276-\tif (filep)\n--\ndrivers/vhost/vhost.c=2321=long vhost_dev_ioctl(struct vhost_dev *d, unsigned int ioctl, void __user *argp)\n--\ndrivers/vhost/vhost.c-2419-\t\tif (ctx)\ndrivers/vhost/vhost.c:2420:\t\t\teventfd_ctx_put(ctx);\ndrivers/vhost/vhost.c-2421-\t\tbreak;\n--\ndrivers/virt/acrn/ioeventfd.c=43=static void acrn_ioeventfd_shutdown(struct acrn_vm *vm, struct hsm_ioeventfd *p)\n--\ndrivers/virt/acrn/ioeventfd.c-46-\ndrivers/virt/acrn/ioeventfd.c:47:\teventfd_ctx_put(p-\u003eeventfd);\ndrivers/virt/acrn/ioeventfd.c-48-\tlist_del(\u0026p-\u003elist);\n--\ndrivers/virt/acrn/ioeventfd.c=76=static int acrn_ioeventfd_assign(struct acrn_vm *vm,\n--\ndrivers/virt/acrn/ioeventfd.c-142-fail:\ndrivers/virt/acrn/ioeventfd.c:143:\teventfd_ctx_put(eventfd);\ndrivers/virt/acrn/ioeventfd.c-144-\treturn ret;\n--\ndrivers/virt/acrn/ioeventfd.c=147=static int acrn_ioeventfd_deassign(struct acrn_vm *vm,\n--\ndrivers/virt/acrn/ioeventfd.c-168-\ndrivers/virt/acrn/ioeventfd.c:169:\teventfd_ctx_put(eventfd);\ndrivers/virt/acrn/ioeventfd.c-170-\treturn 0;\n--\ndrivers/virt/acrn/irqfd.c=60=static void hsm_irqfd_shutdown_work(struct work_struct *work)\n--\ndrivers/virt/acrn/irqfd.c-72-\teventfd_ctx_remove_wait_queue(irqfd-\u003eeventfd, \u0026irqfd-\u003ewait, \u0026cnt);\ndrivers/virt/acrn/irqfd.c:73:\teventfd_ctx_put(irqfd-\u003eeventfd);\ndrivers/virt/acrn/irqfd.c-74-\tkfree(irqfd);\n--\ndrivers/virt/acrn/irqfd.c=111=static int acrn_irqfd_assign(struct acrn_vm *vm, struct acrn_irqfd *args)\n--\ndrivers/virt/acrn/irqfd.c-170-fail:\ndrivers/virt/acrn/irqfd.c:171:\teventfd_ctx_put(eventfd);\ndrivers/virt/acrn/irqfd.c-172-out:\n--\ndrivers/virt/acrn/irqfd.c=177=static int acrn_irqfd_deassign(struct acrn_vm *vm,\n--\ndrivers/virt/acrn/irqfd.c-195-\tmutex_unlock(\u0026vm-\u003eirqfds_lock);\ndrivers/virt/acrn/irqfd.c:196:\teventfd_ctx_put(eventfd);\ndrivers/virt/acrn/irqfd.c-197-\n--\ndrivers/xen/privcmd.c=912=static void irqfd_shutdown(struct work_struct *work)\n--\ndrivers/xen/privcmd.c-921-\teventfd_ctx_remove_wait_queue(kirqfd-\u003eeventfd, \u0026kirqfd-\u003ewait, \u0026cnt);\ndrivers/xen/privcmd.c:922:\teventfd_ctx_put(kirqfd-\u003eeventfd);\ndrivers/xen/privcmd.c-923-\tkfree(kirqfd);\n--\ndrivers/xen/privcmd.c=976=static int privcmd_irqfd_assign(struct privcmd_irqfd *irqfd)\n--\ndrivers/xen/privcmd.c-1044-error_eventfd:\ndrivers/xen/privcmd.c:1045:\teventfd_ctx_put(kirqfd-\u003eeventfd);\ndrivers/xen/privcmd.c-1046-\n--\ndrivers/xen/privcmd.c=1052=static int privcmd_irqfd_deassign(struct privcmd_irqfd *irqfd)\n--\ndrivers/xen/privcmd.c-1072-\ndrivers/xen/privcmd.c:1073:\teventfd_ctx_put(eventfd);\ndrivers/xen/privcmd.c-1074-\n--\ndrivers/xen/privcmd.c=1346=static void ioeventfd_free(struct privcmd_kernel_ioeventfd *kioeventfd)\n--\ndrivers/xen/privcmd.c-1348-\tlist_del(\u0026kioeventfd-\u003elist);\ndrivers/xen/privcmd.c:1349:\teventfd_ctx_put(kioeventfd-\u003eeventfd);\ndrivers/xen/privcmd.c-1350-\tkfree(kioeventfd);\n--\ndrivers/xen/privcmd.c=1353=static int privcmd_ioeventfd_assign(struct privcmd_ioeventfd *ioeventfd)\n--\ndrivers/xen/privcmd.c-1403-error_eventfd:\ndrivers/xen/privcmd.c:1404:\teventfd_ctx_put(kioeventfd-\u003eeventfd);\ndrivers/xen/privcmd.c-1405-\n--\ndrivers/xen/privcmd.c=1411=static int privcmd_ioeventfd_deassign(struct privcmd_ioeventfd *ioeventfd)\n--\ndrivers/xen/privcmd.c-1454-\tmutex_unlock(\u0026ioreq_lock);\ndrivers/xen/privcmd.c:1455:\teventfd_ctx_put(eventfd);\ndrivers/xen/privcmd.c-1456-\n--\nfs/aio.c=1156=static inline void iocb_destroy(struct aio_kiocb *iocb)\n--\nfs/aio.c-1158-\tif (iocb-\u003eki_eventfd)\nfs/aio.c:1159:\t\teventfd_ctx_put(iocb-\u003eki_eventfd);\nfs/aio.c-1160-\tif (iocb-\u003eki_filp)\n--\nfs/eventfd.c=89=static void eventfd_free(struct kref *kref)\n--\nfs/eventfd.c-96-/**\nfs/eventfd.c:97: * eventfd_ctx_put - Releases a reference to the internal eventfd context.\nfs/eventfd.c-98- * @ctx: [in] Pointer to eventfd context.\n--\nfs/eventfd.c-102- */\nfs/eventfd.c:103:void eventfd_ctx_put(struct eventfd_ctx *ctx)\nfs/eventfd.c-104-{\n--\nfs/eventfd.c-109-}\nfs/eventfd.c:110:EXPORT_SYMBOL_GPL(eventfd_ctx_put);\nfs/eventfd.c-111-\nfs/eventfd.c=112=static int eventfd_release(struct inode *inode, struct file *file)\n--\nfs/eventfd.c-116-\twake_up_poll(\u0026ctx-\u003ewqh, EPOLLHUP);\nfs/eventfd.c:117:\teventfd_ctx_put(ctx);\nfs/eventfd.c-118-\treturn 0;\n--\ninclude/linux/eventfd.h=31=struct file;\n--\ninclude/linux/eventfd.h-34-\ninclude/linux/eventfd.h:35:void eventfd_ctx_put(struct eventfd_ctx *ctx);\ninclude/linux/eventfd.h-36-struct file *eventfd_fget(int fd);\n--\ninclude/linux/eventfd.h=61=static inline void eventfd_signal_mask(struct eventfd_ctx *ctx, __poll_t mask)\n--\ninclude/linux/eventfd.h-64-\ninclude/linux/eventfd.h:65:static inline void eventfd_ctx_put(struct eventfd_ctx *ctx)\ninclude/linux/eventfd.h-66-{\n--\ninclude/linux/eventfd.h=88=static inline void eventfd_signal(struct eventfd_ctx *ctx)\n--\ninclude/linux/eventfd.h-92-\ninclude/linux/eventfd.h:93:DEFINE_FREE(eventfd, struct eventfd_ctx *, eventfd_ctx_put(_T))\ninclude/linux/eventfd.h-94-\n--\nio_uring/eventfd.c=28=static void io_eventfd_free(struct rcu_head *rcu)\n--\nio_uring/eventfd.c-31-\nio_uring/eventfd.c:32:\teventfd_ctx_put(ev_fd-\u003ecq_ev_fd);\nio_uring/eventfd.c-33-\tkfree(ev_fd);\n--\nmm/memcontrol-v1.c=1020=static void memcg_event_remove(struct work_struct *work)\n--\nmm/memcontrol-v1.c-1032-\nmm/memcontrol-v1.c:1033:\teventfd_ctx_put(event-\u003eeventfd);\nmm/memcontrol-v1.c-1034-\tkfree(event);\n--\nmm/memcontrol-v1.c=1094=static ssize_t memcg_write_event_control(struct kernfs_open_file *of,\n--\nmm/memcontrol-v1.c-1227-out_put_eventfd:\nmm/memcontrol-v1.c:1228:\teventfd_ctx_put(event-\u003eeventfd);\nmm/memcontrol-v1.c-1229-out_kfree:\n--\nsamples/vfio-mdev/mtty.c=1534=static void mtty_disable_intx(struct mdev_state *mdev_state)\n--\nsamples/vfio-mdev/mtty.c-1536-\tif (mdev_state-\u003eintx_evtfd) {\nsamples/vfio-mdev/mtty.c:1537:\t\teventfd_ctx_put(mdev_state-\u003eintx_evtfd);\nsamples/vfio-mdev/mtty.c-1538-\t\tmdev_state-\u003eintx_evtfd = NULL;\n--\nsamples/vfio-mdev/mtty.c=1544=static void mtty_disable_msi(struct mdev_state *mdev_state)\n--\nsamples/vfio-mdev/mtty.c-1546-\tif (mdev_state-\u003emsi_evtfd) {\nsamples/vfio-mdev/mtty.c:1547:\t\teventfd_ctx_put(mdev_state-\u003emsi_evtfd);\nsamples/vfio-mdev/mtty.c-1548-\t\tmdev_state-\u003emsi_evtfd = NULL;\n--\nvirt/kvm/eventfd.c=123=irqfd_shutdown(struct work_struct *work)\n--\nvirt/kvm/eventfd.c-146-\t\tirqfd_resampler_shutdown(irqfd);\nvirt/kvm/eventfd.c:147:\t\teventfd_ctx_put(irqfd-\u003eresamplefd);\nvirt/kvm/eventfd.c-148-\t}\n--\nvirt/kvm/eventfd.c-155-#endif\nvirt/kvm/eventfd.c:156:\teventfd_ctx_put(irqfd-\u003eeventfd);\nvirt/kvm/eventfd.c-157-\tkfree(irqfd);\n--\nvirt/kvm/eventfd.c=371=kvm_irqfd_assign(struct kvm *kvm, struct kvm_irqfd *args)\n--\nvirt/kvm/eventfd.c-512-\tif (resamplefd \u0026\u0026 !IS_ERR(resamplefd))\nvirt/kvm/eventfd.c:513:\t\teventfd_ctx_put(resamplefd);\nvirt/kvm/eventfd.c-514-\nvirt/kvm/eventfd.c-515-\tif (eventfd \u0026\u0026 !IS_ERR(eventfd))\nvirt/kvm/eventfd.c:516:\t\teventfd_ctx_put(eventfd);\nvirt/kvm/eventfd.c-517-\n--\nvirt/kvm/eventfd.c=590=kvm_irqfd_deassign(struct kvm *kvm, struct kvm_irqfd *args)\n--\nvirt/kvm/eventfd.c-606-\tspin_unlock_irq(\u0026kvm-\u003eirqfds.lock);\nvirt/kvm/eventfd.c:607:\teventfd_ctx_put(eventfd);\nvirt/kvm/eventfd.c-608-\n--\n\n"
} |
| 15/2 | 2026/09/09 13:07 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 42522 output: 24 thoughts: 119 Thoughts: **My Initial Assessment** Okay, so I'm looking at `drm_syncobj_eventfd_ioctl` – a pretty niche function, definitely not something I encounter every day. I also see that `eventfd_ctx_put` is being modified, which is directly related. Right, so what configs are in play here? I need to get the bigger picture. Let's start with the obvious: I know `drm_syncobj.c` uses `drm_syncobj_eventfd_ioctl`, so I should check for `CONFIG_DRM`. Similarly, since `eventfd_ctx_put` deals with, well, `eventfd`, it has to be `CONFIG_EVENTFD`. Now, before I dig into the code itself, I should check the kernel's `init/Kconfig` file and verify if my initial assumptions are correct about `CONFIG_EVENTFD`. That should give me the first clue about the dependencies here. |
| 16/2 | 2026/09/09 13:07 | tool | grepper |
0mArgs:{
"Expression": "config EVENTFD",
"PathPrefix": "init"
}Results: {
"Output": "init/Kconfig=1923=config TIMERFD\n--\ninit/Kconfig-1931-\ninit/Kconfig:1932:config EVENTFD\ninit/Kconfig-1933-\tbool \"Enable eventfd() system call\" if EXPERT\n"
} |
| 17/2 | 2026/09/09 13:07 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 42945 output: 23 thoughts: 15 Thoughts: Here's my take on those thoughts, tailored for an expert audience: **Eventfd Module Verification in fs/Makefile** Alright, let's get down to brass tacks. I'm going to quickly confirm the build process for `eventfd.o` within the `fs/Makefile`. It's a standard procedure, but I need to ensure it's built and linked correctly, especially if there's been any recent churn in the filesystem infrastructure. I'm primarily looking for the include paths, dependencies, compiler flags, and any potentially subtle interactions with the `kbuild` system that might impact the module's behavior. I want to rule out any build environment weirdness that could cause silent failures down the line, potentially manifesting as subtle performance issues or even crashes. I also will be checking any other similar modules that may be sharing similar code with the `eventfd.o` module. This is just a quick sanity check before I dig deeper into any specific issues, but essential to make sure the foundation is solid before getting bogged down in specifics. |
| 18/2 | 2026/09/09 13:07 | tool | grepper |
0mArgs:{
"Expression": "eventfd",
"PathPrefix": "fs"
}Results: {
"Output": "fs/Makefile=28=obj-$(CONFIG_TIMERFD)\t\t+= timerfd.o\nfs/Makefile:29:obj-$(CONFIG_EVENTFD)\t\t+= eventfd.o\nfs/Makefile-30-obj-$(CONFIG_AIO) += aio.o\n--\nfs/aio.c-36-#include \u003clinux/security.h\u003e\nfs/aio.c:37:#include \u003clinux/eventfd.h\u003e\nfs/aio.c-38-#include \u003clinux/blk_plug.h\u003e\n--\nfs/aio.c=197=struct aio_kiocb {\n--\nfs/aio.c-215-\t * If the aio_resfd field of the userspace iocb is not zero,\nfs/aio.c:216:\t * this is the underlying eventfd context to deliver events to.\nfs/aio.c-217-\t */\nfs/aio.c:218:\tstruct eventfd_ctx\t*ki_eventfd;\nfs/aio.c-219-};\n--\nfs/aio.c=1107=static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx)\n--\nfs/aio.c-1123-\trefcount_set(\u0026req-\u003eki_refcnt, 2);\nfs/aio.c:1124:\treq-\u003eki_eventfd = NULL;\nfs/aio.c-1125-\treturn req;\n--\nfs/aio.c=1156=static inline void iocb_destroy(struct aio_kiocb *iocb)\nfs/aio.c-1157-{\nfs/aio.c:1158:\tif (iocb-\u003eki_eventfd)\nfs/aio.c:1159:\t\teventfd_ctx_put(iocb-\u003eki_eventfd);\nfs/aio.c-1160-\tif (iocb-\u003eki_filp)\n--\nfs/aio.c=1174=static void aio_complete(struct aio_kiocb *iocb)\n--\nfs/aio.c-1230-\t * Check if the user asked us to deliver the result through an\nfs/aio.c:1231:\t * eventfd. The eventfd_signal() function is safe to be called\nfs/aio.c-1232-\t * from IRQ context.\nfs/aio.c-1233-\t */\nfs/aio.c:1234:\tif (iocb-\u003eki_eventfd)\nfs/aio.c:1235:\t\teventfd_signal(iocb-\u003eki_eventfd);\nfs/aio.c-1236-\n--\nfs/aio.c=1840=static int aio_poll_wake(struct wait_queue_entry *wait, unsigned mode, int sync,\n--\nfs/aio.c-1871-\t\tiocb-\u003eki_res.res = mangle_poll(mask);\nfs/aio.c:1872:\t\tif (iocb-\u003eki_eventfd \u0026\u0026 !eventfd_signal_allowed()) {\nfs/aio.c-1873-\t\t\tiocb = NULL;\n--\nfs/aio.c=2022=static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb,\n--\nfs/aio.c-2030-\tif (iocb-\u003eaio_flags \u0026 IOCB_FLAG_RESFD) {\nfs/aio.c:2031:\t\tstruct eventfd_ctx *eventfd;\nfs/aio.c-2032-\t\t/*\n--\nfs/aio.c-2034-\t\t * instance of the file* now. The file descriptor must be\nfs/aio.c:2035:\t\t * an eventfd() fd, and will be signaled for each completed\nfs/aio.c:2036:\t\t * event using the eventfd_signal() function.\nfs/aio.c-2037-\t\t */\nfs/aio.c:2038:\t\teventfd = eventfd_ctx_fdget(iocb-\u003eaio_resfd);\nfs/aio.c:2039:\t\tif (IS_ERR(eventfd))\nfs/aio.c:2040:\t\t\treturn PTR_ERR(eventfd);\nfs/aio.c-2041-\nfs/aio.c:2042:\t\treq-\u003eki_eventfd = eventfd;\nfs/aio.c-2043-\t}\n--\nfs/eventfd.c-2-/*\nfs/eventfd.c:3: * fs/eventfd.c\nfs/eventfd.c-4- *\n--\nfs/eventfd.c-21-#include \u003clinux/kref.h\u003e\nfs/eventfd.c:22:#include \u003clinux/eventfd.h\u003e\nfs/eventfd.c-23-#include \u003clinux/proc_fs.h\u003e\n--\nfs/eventfd.c-27-\nfs/eventfd.c:28:static DEFINE_IDA(eventfd_ida);\nfs/eventfd.c-29-\nfs/eventfd.c:30:struct eventfd_ctx {\nfs/eventfd.c-31-\tstruct kref kref;\n--\nfs/eventfd.c-33-\t/*\nfs/eventfd.c:34:\t * Every time that a write(2) is performed on an eventfd, the\nfs/eventfd.c-35-\t * value of the __u64 being written is added to \"count\" and a\n--\nfs/eventfd.c-37-\t * specified, a read(2) will return the \"count\" value to userspace,\nfs/eventfd.c:38:\t * and will reset \"count\" to zero. The kernel side eventfd_signal()\nfs/eventfd.c-39-\t * also, adds to the \"count\" counter and issue a wakeup.\n--\nfs/eventfd.c-46-/**\nfs/eventfd.c:47: * eventfd_signal_mask - Increment the event counter\nfs/eventfd.c:48: * @ctx: [in] Pointer to the eventfd context.\nfs/eventfd.c-49- * @mask: [in] poll mask\n--\nfs/eventfd.c-55- */\nfs/eventfd.c:56:void eventfd_signal_mask(struct eventfd_ctx *ctx, __poll_t mask)\nfs/eventfd.c-57-{\n--\nfs/eventfd.c-63-\t * nested waitqueues with custom wakeup handlers, then it should\nfs/eventfd.c:64:\t * check eventfd_signal_allowed() before calling this function. If\nfs/eventfd.c:65:\t * it returns false, the eventfd_signal() call should be deferred to a\nfs/eventfd.c-66-\t * safe context.\nfs/eventfd.c-67-\t */\nfs/eventfd.c:68:\tif (WARN_ON_ONCE(current-\u003ein_eventfd))\nfs/eventfd.c-69-\t\treturn;\n--\nfs/eventfd.c-71-\tspin_lock_irqsave(\u0026ctx-\u003ewqh.lock, flags);\nfs/eventfd.c:72:\tcurrent-\u003ein_eventfd = 1;\nfs/eventfd.c-73-\tif (ctx-\u003ecount \u003c ULLONG_MAX)\n--\nfs/eventfd.c-76-\t\twake_up_locked_poll(\u0026ctx-\u003ewqh, EPOLLIN | mask);\nfs/eventfd.c:77:\tcurrent-\u003ein_eventfd = 0;\nfs/eventfd.c-78-\tspin_unlock_irqrestore(\u0026ctx-\u003ewqh.lock, flags);\nfs/eventfd.c-79-}\nfs/eventfd.c:80:EXPORT_SYMBOL_GPL(eventfd_signal_mask);\nfs/eventfd.c-81-\nfs/eventfd.c:82:static void eventfd_free_ctx(struct eventfd_ctx *ctx)\nfs/eventfd.c-83-{\nfs/eventfd.c-84-\tif (ctx-\u003eid \u003e= 0)\nfs/eventfd.c:85:\t\tida_free(\u0026eventfd_ida, ctx-\u003eid);\nfs/eventfd.c-86-\tkfree(ctx);\n--\nfs/eventfd.c-88-\nfs/eventfd.c:89:static void eventfd_free(struct kref *kref)\nfs/eventfd.c-90-{\nfs/eventfd.c:91:\tstruct eventfd_ctx *ctx = container_of(kref, struct eventfd_ctx, kref);\nfs/eventfd.c-92-\nfs/eventfd.c:93:\teventfd_free_ctx(ctx);\nfs/eventfd.c-94-}\n--\nfs/eventfd.c-96-/**\nfs/eventfd.c:97: * eventfd_ctx_put - Releases a reference to the internal eventfd context.\nfs/eventfd.c:98: * @ctx: [in] Pointer to eventfd context.\nfs/eventfd.c-99- *\nfs/eventfd.c:100: * The eventfd context reference must have been previously acquired either\nfs/eventfd.c:101: * with eventfd_ctx_fdget() or eventfd_ctx_fileget().\nfs/eventfd.c-102- */\nfs/eventfd.c:103:void eventfd_ctx_put(struct eventfd_ctx *ctx)\nfs/eventfd.c-104-{\n--\nfs/eventfd.c-107-\nfs/eventfd.c:108:\tkref_put(\u0026ctx-\u003ekref, eventfd_free);\nfs/eventfd.c-109-}\nfs/eventfd.c:110:EXPORT_SYMBOL_GPL(eventfd_ctx_put);\nfs/eventfd.c-111-\nfs/eventfd.c:112:static int eventfd_release(struct inode *inode, struct file *file)\nfs/eventfd.c-113-{\nfs/eventfd.c:114:\tstruct eventfd_ctx *ctx = file-\u003eprivate_data;\nfs/eventfd.c-115-\nfs/eventfd.c-116-\twake_up_poll(\u0026ctx-\u003ewqh, EPOLLHUP);\nfs/eventfd.c:117:\teventfd_ctx_put(ctx);\nfs/eventfd.c-118-\treturn 0;\n--\nfs/eventfd.c-120-\nfs/eventfd.c:121:static __poll_t eventfd_poll(struct file *file, poll_table *wait)\nfs/eventfd.c-122-{\nfs/eventfd.c:123:\tstruct eventfd_ctx *ctx = file-\u003eprivate_data;\nfs/eventfd.c-124-\t__poll_t events = 0;\n--\nfs/eventfd.c-149-\t * unlock ctx-\u003eqwh.lock\nfs/eventfd.c:150:\t * eventfd_poll returns 0\nfs/eventfd.c-151-\t *\n--\nfs/eventfd.c-164-\t * unlock ctx-\u003ewqh.lock\nfs/eventfd.c:165:\t * eventfd_poll returns 0\nfs/eventfd.c-166-\t */\n--\nfs/eventfd.c-178-\nfs/eventfd.c:179:void eventfd_ctx_do_read(struct eventfd_ctx *ctx, __u64 *cnt)\nfs/eventfd.c-180-{\n--\nfs/eventfd.c-185-}\nfs/eventfd.c:186:EXPORT_SYMBOL_GPL(eventfd_ctx_do_read);\nfs/eventfd.c-187-\nfs/eventfd.c-188-/**\nfs/eventfd.c:189: * eventfd_ctx_remove_wait_queue - Read the current counter and removes wait queue.\nfs/eventfd.c:190: * @ctx: [in] Pointer to eventfd context.\nfs/eventfd.c-191- * @wait: [in] Wait queue to be removed.\n--\nfs/eventfd.c-197- *\nfs/eventfd.c:198: * This is used to atomically remove a wait queue entry from the eventfd wait\nfs/eventfd.c-199- * queue head, and read/reset the counter value.\nfs/eventfd.c-200- */\nfs/eventfd.c:201:int eventfd_ctx_remove_wait_queue(struct eventfd_ctx *ctx, wait_queue_entry_t *wait,\nfs/eventfd.c-202-\t\t\t\t __u64 *cnt)\n--\nfs/eventfd.c-206-\tspin_lock_irqsave(\u0026ctx-\u003ewqh.lock, flags);\nfs/eventfd.c:207:\teventfd_ctx_do_read(ctx, cnt);\nfs/eventfd.c-208-\t__remove_wait_queue(\u0026ctx-\u003ewqh, wait);\n--\nfs/eventfd.c-214-}\nfs/eventfd.c:215:EXPORT_SYMBOL_GPL(eventfd_ctx_remove_wait_queue);\nfs/eventfd.c-216-\nfs/eventfd.c:217:static ssize_t eventfd_read(struct kiocb *iocb, struct iov_iter *to)\nfs/eventfd.c-218-{\nfs/eventfd.c-219-\tstruct file *file = iocb-\u003eki_filp;\nfs/eventfd.c:220:\tstruct eventfd_ctx *ctx = file-\u003eprivate_data;\nfs/eventfd.c-221-\t__u64 ucnt = 0;\n--\nfs/eventfd.c-237-\t}\nfs/eventfd.c:238:\teventfd_ctx_do_read(ctx, \u0026ucnt);\nfs/eventfd.c:239:\tcurrent-\u003ein_eventfd = 1;\nfs/eventfd.c-240-\tif (waitqueue_active(\u0026ctx-\u003ewqh))\nfs/eventfd.c-241-\t\twake_up_locked_poll(\u0026ctx-\u003ewqh, EPOLLOUT);\nfs/eventfd.c:242:\tcurrent-\u003ein_eventfd = 0;\nfs/eventfd.c-243-\tspin_unlock_irq(\u0026ctx-\u003ewqh.lock);\n--\nfs/eventfd.c-249-\nfs/eventfd.c:250:static ssize_t eventfd_write(struct file *file, const char __user *buf, size_t count,\nfs/eventfd.c-251-\t\t\t loff_t *ppos)\nfs/eventfd.c-252-{\nfs/eventfd.c:253:\tstruct eventfd_ctx *ctx = file-\u003eprivate_data;\nfs/eventfd.c-254-\tssize_t res;\n--\nfs/eventfd.c-274-\t\tctx-\u003ecount += ucnt;\nfs/eventfd.c:275:\t\tcurrent-\u003ein_eventfd = 1;\nfs/eventfd.c-276-\t\tif (waitqueue_active(\u0026ctx-\u003ewqh))\nfs/eventfd.c-277-\t\t\twake_up_locked_poll(\u0026ctx-\u003ewqh, EPOLLIN);\nfs/eventfd.c:278:\t\tcurrent-\u003ein_eventfd = 0;\nfs/eventfd.c-279-\t}\n--\nfs/eventfd.c-285-#ifdef CONFIG_PROC_FS\nfs/eventfd.c:286:static void eventfd_show_fdinfo(struct seq_file *m, struct file *f)\nfs/eventfd.c-287-{\nfs/eventfd.c:288:\tstruct eventfd_ctx *ctx = f-\u003eprivate_data;\nfs/eventfd.c-289-\t__u64 cnt;\n--\nfs/eventfd.c-295-\tseq_printf(m,\nfs/eventfd.c:296:\t\t \"eventfd-count: %16llx\\n\"\nfs/eventfd.c:297:\t\t \"eventfd-id: %d\\n\"\nfs/eventfd.c:298:\t\t \"eventfd-semaphore: %d\\n\",\nfs/eventfd.c-299-\t\t cnt,\n--\nfs/eventfd.c-304-\nfs/eventfd.c:305:static const struct file_operations eventfd_fops = {\nfs/eventfd.c-306-#ifdef CONFIG_PROC_FS\nfs/eventfd.c:307:\t.show_fdinfo\t= eventfd_show_fdinfo,\nfs/eventfd.c-308-#endif\nfs/eventfd.c:309:\t.release\t= eventfd_release,\nfs/eventfd.c:310:\t.poll\t\t= eventfd_poll,\nfs/eventfd.c:311:\t.read_iter\t= eventfd_read,\nfs/eventfd.c:312:\t.write\t\t= eventfd_write,\nfs/eventfd.c-313-\t.llseek\t\t= noop_llseek,\n--\nfs/eventfd.c-316-/**\nfs/eventfd.c:317: * eventfd_fget - Acquire a reference of an eventfd file descriptor.\nfs/eventfd.c-318- * @fd: [in] Eventfd file descriptor.\nfs/eventfd.c-319- *\nfs/eventfd.c:320: * Returns a pointer to the eventfd file structure in case of success, or the\nfs/eventfd.c-321- * following error pointer:\n--\nfs/eventfd.c-323- * -EBADF : Invalid @fd file descriptor.\nfs/eventfd.c:324: * -EINVAL : The @fd file descriptor is not an eventfd file.\nfs/eventfd.c-325- */\nfs/eventfd.c:326:struct file *eventfd_fget(int fd)\nfs/eventfd.c-327-{\n--\nfs/eventfd.c-332-\t\treturn ERR_PTR(-EBADF);\nfs/eventfd.c:333:\tif (file-\u003ef_op != \u0026eventfd_fops) {\nfs/eventfd.c-334-\t\tfput(file);\n--\nfs/eventfd.c-339-}\nfs/eventfd.c:340:EXPORT_SYMBOL_GPL(eventfd_fget);\nfs/eventfd.c-341-\nfs/eventfd.c-342-/**\nfs/eventfd.c:343: * eventfd_ctx_fdget - Acquires a reference to the internal eventfd context.\nfs/eventfd.c-344- * @fd: [in] Eventfd file descriptor.\nfs/eventfd.c-345- *\nfs/eventfd.c:346: * Returns a pointer to the internal eventfd context, otherwise the error\nfs/eventfd.c-347- * pointers returned by the following functions:\nfs/eventfd.c-348- *\nfs/eventfd.c:349: * eventfd_fget\nfs/eventfd.c-350- */\nfs/eventfd.c:351:struct eventfd_ctx *eventfd_ctx_fdget(int fd)\nfs/eventfd.c-352-{\n--\nfs/eventfd.c-355-\t\treturn ERR_PTR(-EBADF);\nfs/eventfd.c:356:\treturn eventfd_ctx_fileget(fd_file(f));\nfs/eventfd.c-357-}\nfs/eventfd.c:358:EXPORT_SYMBOL_GPL(eventfd_ctx_fdget);\nfs/eventfd.c-359-\nfs/eventfd.c-360-/**\nfs/eventfd.c:361: * eventfd_ctx_fileget - Acquires a reference to the internal eventfd context.\nfs/eventfd.c-362- * @file: [in] Eventfd file pointer.\nfs/eventfd.c-363- *\nfs/eventfd.c:364: * Returns a pointer to the internal eventfd context, otherwise the error\nfs/eventfd.c-365- * pointer:\nfs/eventfd.c-366- *\nfs/eventfd.c:367: * -EINVAL : The @fd file descriptor is not an eventfd file.\nfs/eventfd.c-368- */\nfs/eventfd.c:369:struct eventfd_ctx *eventfd_ctx_fileget(struct file *file)\nfs/eventfd.c-370-{\nfs/eventfd.c:371:\tstruct eventfd_ctx *ctx;\nfs/eventfd.c-372-\nfs/eventfd.c:373:\tif (file-\u003ef_op != \u0026eventfd_fops)\nfs/eventfd.c-374-\t\treturn ERR_PTR(-EINVAL);\n--\nfs/eventfd.c-379-}\nfs/eventfd.c:380:EXPORT_SYMBOL_GPL(eventfd_ctx_fileget);\nfs/eventfd.c-381-\nfs/eventfd.c:382:static int do_eventfd(unsigned int count, int flags)\nfs/eventfd.c-383-{\nfs/eventfd.c:384:\tstruct eventfd_ctx *ctx __free(kfree) = NULL;\nfs/eventfd.c-385-\n--\nfs/eventfd.c-406-\tFD_PREPARE(fdf, flags,\nfs/eventfd.c:407:\t\t anon_inode_getfile_fmode(\"[eventfd]\", \u0026eventfd_fops, ctx,\nfs/eventfd.c-408-\t\t\t\t\t flags, FMODE_NOWAIT));\n--\nfs/eventfd.c-411-\nfs/eventfd.c:412:\tctx-\u003eid = ida_alloc(\u0026eventfd_ida, GFP_KERNEL);\nfs/eventfd.c-413-\tretain_and_null_ptr(ctx);\n--\nfs/eventfd.c-416-\nfs/eventfd.c:417:SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags)\nfs/eventfd.c-418-{\nfs/eventfd.c:419:\treturn do_eventfd(count, flags);\nfs/eventfd.c-420-}\nfs/eventfd.c-421-\nfs/eventfd.c:422:SYSCALL_DEFINE1(eventfd, unsigned int, count)\nfs/eventfd.c-423-{\nfs/eventfd.c:424:\treturn do_eventfd(count, 0);\nfs/eventfd.c-425-}\n"
} |
| 19/2 | 2026/09/09 13:07 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 48999 output: 134 thoughts: 842 Thoughts: **Patch Evaluation: A Refined Approach to Eventfd and Syncobj Interaction** Okay, let's dissect these changes methodically. First, I see a crucial update in `fs/eventfd.c`. The `eventfd_ctx_put` function has been hardened; it now gracefully handles NULL `ctx` pointers. This is a good defensive programming practice, a small but important refinement. The corresponding `DEFINE_FREE` macro in `include/linux/eventfd.h` is also present. This is typical, tying into the memory management changes. Now, let's move onto the `drivers/gpu/drm/drm_syncobj.c` changes. The `drm_syncobj_eventfd_ioctl` function is the primary target here. I'm focusing on the refactoring around error handling and resource management, specifically around the `eventfd_ctx`. It looks like the `__free(eventfd)` cleanup helper, probably defined as part of the initial change, is being leveraged to improve lifetime management of `ev_fd_ctx`. This looks clean, using the standard idiom to manage the lifecycle of the eventfd context in this function. We're using `eventfd_ctx_fdget` to obtain the eventfd context, and then either adding it to the syncobj or cleaning up. Now, let's step back and consider the fuzzing implications. The patch *is* worth fuzzing. It's modifying reachable kernel code within both `eventfd` and `drm_syncobj_eventfd_ioctl`. That means we've got new or modified code paths. I'd evaluate the following configs: `DRM` and `EVENTFD`. For my fuzzing focus, I'm thinking: `drm_syncobj_eventfd_ioctl` and `eventfd_ctx_put` are the symbols of interest. The patch's core modification to `eventfd_ctx_put()` and its corresponding macro, coupled with its use in `drm_syncobj_eventfd_ioctl`, is a well-defined use case that's quite readable. It all makes sense and it is clean. The overall reasoning, is solid. Everything checks out, time to set the results and move on to the next patch. |
| 20/2 | 2026/09/09 13:07 | tool | set-results |
0mArgs:{
"EnableConfigs": [
"DRM",
"EVENTFD"
],
"FocusSymbols": [
"drm_syncobj_eventfd_ioctl",
"eventfd_ctx_put"
],
"Reasoning": "The patch introduces a NULL check in eventfd_ctx_put(), defines a __free(eventfd) cleanup handler, and refactors resource lifecycle handling in the reachable DRM ioctl handler drm_syncobj_eventfd_ioctl(). Fuzzing will test whether the altered reference counting and cleanup flow in drm_syncobj_eventfd_ioctl behave correctly.",
"WorthFuzzing": true
}Results: {
"EnableConfigs": [
"DRM",
"EVENTFD"
],
"FocusSymbols": [
"drm_syncobj_eventfd_ioctl",
"eventfd_ctx_put"
],
"Reasoning": "The patch introduces a NULL check in eventfd_ctx_put(), defines a __free(eventfd) cleanup handler, and refactors resource lifecycle handling in the reachable DRM ioctl handler drm_syncobj_eventfd_ioctl(). Fuzzing will test whether the altered reference counting and cleanup flow in drm_syncobj_eventfd_ioctl behave correctly.",
"WorthFuzzing": true
} |
| 21/1 | 2026/09/09 13:07 | action | If |
0mArgs:{
"WorthFuzzing": true
}Results: null |
| 22/2 | 2026/09/09 13:07 | agent | kmsan-evaluator |
0mModel:core Args: null Results: {
"KMSANReasoning": "The patch introduces a cleanup attribute helper `DEFINE_FREE(eventfd, ...)` and updates `drm_syncobj_eventfd_ioctl()` to use automatic cleanup (`__free(eventfd)`) along with `no_free_ptr()`, and adds a NULL check to `eventfd_ctx_put()`.\n\nThere are no uninitialized variables, uninitialized struct reads, or information leaks to userspace introduced or affected by these changes. Any potential bugs in this refactoring would pertain to reference counting, lifetime management, or resource cleanup (e.g. use-after-free or double-free), which are handled by KASAN and standard kernel debug tools. Therefore, a dedicated KMSAN fuzzing session is not justified.",
"NeedsKMSAN": false
}Instruction: You are an expert Linux kernel security engineer specializing in kernel memory
error detectors (KASAN and KMSAN). Your job is to review the provided patch series and
determine if the code changes justify spawning a dedicated KMSAN (KernelMemorySanitizer)
fuzzing session in addition to standard KASAN fuzzing.
CRITICAL DISTINCTION BETWEEN KASAN AND KMSAN:
- Standard KASAN kernel builds (upstream-apparmor-kasan.config) already enable
a comprehensive suite of debugging tools and sanitizers, including KASAN
(out-of-bounds accesses, use-after-free, double free, invalid free), LOCKDEP
(locking bugs and deadlocks), UB-sanitizers, and memory corruption checks.
- KMSAN (KernelMemorySanitizer) detects reads of UNINITIALIZED memory (stack, heap,
or page allocations) and kernel-to-user memory info-leaks.
Rule: THERE IS NO SENSE IN RUNNING A KMSAN SESSION IF A BUG CAN BE CAUGHT BY KASAN,
LOCKDEP, OR OTHER STANDARD BUG DETECTORS.
A dedicated KMSAN fuzzing session incurs significant resource costs. You must ONLY
set NeedsKMSAN=true if the code changes introduce or expose UNINITIALIZED MEMORY risks
that are detected ONLY by KMSAN.
Look holistically at the patch series and surrounding code. Even if no direct
uninitialized field accesses or new buffer allocations are added in the diff itself,
a patch may alter control flow, bounds checking, or data length calculations in ways
that change how the rest of the code operates on existing buffers (e.g. allowing
uninitialized stack/heap memory to be read, copied to user space, or used in control
flow). Do not hesitate to use your code access tools to inspect the surrounding code,
called functions, and callers.
Set NeedsKMSAN=true ONLY IF the patch introduces or modifies:
1. Kernel structures sent to user space (via copy_to_user, put_user, netlink skb
attributes, ioctl output arguments, socket options, or BPF buffers) where fields
or structure padding might not be fully initialized/zeroed.
2. Conditional logic or branching that depends on potentially uninitialized variables
or struct fields.
3. Allocation or initialization of complex data structures where uninitialized fields
could be read later in reachable code paths.
4. Bounds checks, lengths, or logic in a way that allows surrounding code to access
uninitialized bytes of existing buffers.
Set NeedsKMSAN=false IF:
- The code changes primarily risk out-of-bounds access, array overflows, NULL pointer
dereferences, locking deadlocks, or use-after-free bugs (these are already caught
by KASAN, LOCKDEP, or standard bug detectors).
- All stack/heap structures touched or introduced by the patch are fully zeroed
or initialized (e.g. using = {0}, memset, kzalloc) before being read or copied.
- The patch does not introduce any risk of uninitialized memory usage or info-leaks.
Use your code access tools to inspect the surrounding code if necessary, then provide
detailed KMSANReasoning contrasting KASAN vs KMSAN applicability for this patch.
Prefer calling several tools at the same time to save round-trips.
Use set-results tool to provide results of the analysis.
It must be called exactly once before the final reply.
Ignore results of this tool.
Prompt: Target architecture: amd64
For your convenience, here is the diff of the changes:
commit e7339f9d3ba40ac063cbeb9e1e518f518e2e1b63
Author: syz-cluster <triage@syzkaller.com>
Date: Wed Sep 9 13:06:20 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index c23a5de27effa..261d5606e8bd8 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -1462,9 +1462,9 @@ int
drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
struct drm_file *file_private)
{
+ struct eventfd_ctx *ev_fd_ctx __free(eventfd) = NULL;
struct drm_syncobj_eventfd *args = data;
struct drm_syncobj *syncobj;
- struct eventfd_ctx *ev_fd_ctx;
struct syncobj_eventfd_entry *entry;
int ret;
@@ -1484,16 +1484,17 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
ev_fd_ctx = eventfd_ctx_fdget(args->fd);
if (IS_ERR(ev_fd_ctx)) {
ret = PTR_ERR(ev_fd_ctx);
+ ev_fd_ctx = NULL;
goto err_fdget;
}
entry = kzalloc_obj(*entry);
if (!entry) {
ret = -ENOMEM;
- goto err_kzalloc;
+ goto err_fdget;
}
entry->syncobj = syncobj;
- entry->ev_fd_ctx = ev_fd_ctx;
+ entry->ev_fd_ctx = no_free_ptr(ev_fd_ctx);
entry->point = args->point;
entry->flags = args->flags;
@@ -1502,8 +1503,6 @@ drm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,
return 0;
-err_kzalloc:
- eventfd_ctx_put(ev_fd_ctx);
err_fdget:
drm_syncobj_put(syncobj);
return ret;
diff --git a/fs/eventfd.c b/fs/eventfd.c
index 9d33a02757d52..24111a16284f1 100644
--- a/fs/eventfd.c
+++ b/fs/eventfd.c
@@ -102,6 +102,9 @@ static void eventfd_free(struct kref *kref)
*/
void eventfd_ctx_put(struct eventfd_ctx *ctx)
{
+ if (!ctx)
+ return;
+
kref_put(&ctx->kref, eventfd_free);
}
EXPORT_SYMBOL_GPL(eventfd_ctx_put);
diff --git a/include/linux/eventfd.h b/include/linux/eventfd.h
index e32bee4345fb9..689358c2b0ae7 100644
--- a/include/linux/eventfd.h
+++ b/include/linux/eventfd.h
@@ -10,6 +10,7 @@
#define _LINUX_EVENTFD_H
#include <linux/wait.h>
+#include <linux/cleanup.h>
#include <linux/err.h>
#include <linux/percpu-defs.h>
#include <linux/percpu.h>
@@ -89,5 +90,7 @@ static inline void eventfd_signal(struct eventfd_ctx *ctx)
eventfd_signal_mask(ctx, 0);
}
+DEFINE_FREE(eventfd, struct eventfd_ctx *, eventfd_ctx_put(_T))
+
#endif /* _LINUX_EVENTFD_H */
|
| 23/3 | 2026/09/09 13:07 | llm | kmsan-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 2880 output: 41 thoughts: 533 Thoughts: **Patch Analysis: KMSAN Fuzzing Evaluation** Okay, let's break this down. My initial assessment is whether this patch, touching DRM sync objects and eventfds, necessitates a deeper dive with KMSAN fuzzing. I need to understand the potential memory safety implications. First, I'm seeing changes in `drivers/gpu/drm/drm_syncobj.c`: The key alteration in `drm_syncobj_eventfd_ioctl` revolves around `struct eventfd_ctx *ev_fd_ctx`. It looks like they're transitioning to use a defined free function `__free(eventfd) = NULL`. The error handling is also tightened; if `eventfd_ctx_fdget` fails (returning an error), `ev_fd_ctx` is explicitly set to `NULL` before jumping to `err_fdget`. Importantly, `no_free_ptr` is being used to transfer ownership of the context, and the initialization of `entry->ev_fd_ctx` is with `no_free_ptr(ev_fd_ctx)`. It also looks like they are getting rid of `err_kzalloc` and manual `eventfd_ctx_put` calls, which simplifies things. Next, I see a small but significant change in `fs/eventfd.c` within `eventfd_ctx_put`. A NULL-safety check (`if (!ctx) return;`) has been added. This is good practice. Finally, the inclusion of `<linux/cleanup.h>` and the `DEFINE_FREE` macro for `eventfd` in `include/linux/eventfd.h` confirms this is a consistent refactoring to use a standardized free function, which is generally a good thing. Now, the critical question: is there an uninitialized memory risk? Let me run through this. `ev_fd_ctx` is initialized to NULL with the `__free(eventfd) = NULL`. If `eventfd_ctx_fdget` fails, we set `ev_fd_ctx` to NULL, preventing an attempt to clean up an error pointer. When the function succeeds, `no_free_ptr` takes control and resets `ev_fd_ctx`. Furthermore, the `entry` is zeroed with `kzalloc_obj`, and there are no direct `copy_to_user` operations involved. There's no immediately obvious path to uninitialized stack/heap reads, info-leaks, or uninitialized branching that I can see. The patch is very focused on resource cleanup and memory management. Given this analysis, I'd say the primary risks here are more related to classic resource management issues—leaks, double frees, or use-after-free—rather than uninitialized memory access. These kinds of problems are typically caught by KASAN or standard sanitizers. KMSAN isn't the priority for this patch. I should double check the surrounding code of `drm_syncobj_eventfd_ioctl` to be sure there are no subtle interactions, but I think the changes are straightforward. |
| 24/3 | 2026/09/09 13:07 | tool | read-file |
0mArgs:{
"File": "drivers/gpu/drm/drm_syncobj.c",
"FirstLine": 1460,
"LineCount": 60
}Results: {
"Contents": "1460:\t\n1461:\tint\n1462:\tdrm_syncobj_eventfd_ioctl(struct drm_device *dev, void *data,\n1463:\t\t\t\t struct drm_file *file_private)\n1464:\t{\n1465:\t\tstruct eventfd_ctx *ev_fd_ctx __free(eventfd) = NULL;\n1466:\t\tstruct drm_syncobj_eventfd *args = data;\n1467:\t\tstruct drm_syncobj *syncobj;\n1468:\t\tstruct syncobj_eventfd_entry *entry;\n1469:\t\tint ret;\n1470:\t\n1471:\t\tif (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))\n1472:\t\t\treturn -EOPNOTSUPP;\n1473:\t\n1474:\t\tif (args-\u003eflags \u0026 ~DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE)\n1475:\t\t\treturn -EINVAL;\n1476:\t\n1477:\t\tif (args-\u003epad)\n1478:\t\t\treturn -EINVAL;\n1479:\t\n1480:\t\tsyncobj = drm_syncobj_find(file_private, args-\u003ehandle);\n1481:\t\tif (!syncobj)\n1482:\t\t\treturn -ENOENT;\n1483:\t\n1484:\t\tev_fd_ctx = eventfd_ctx_fdget(args-\u003efd);\n1485:\t\tif (IS_ERR(ev_fd_ctx)) {\n1486:\t\t\tret = PTR_ERR(ev_fd_ctx);\n1487:\t\t\tev_fd_ctx = NULL;\n1488:\t\t\tgoto err_fdget;\n1489:\t\t}\n1490:\t\n1491:\t\tentry = kzalloc_obj(*entry);\n1492:\t\tif (!entry) {\n1493:\t\t\tret = -ENOMEM;\n1494:\t\t\tgoto err_fdget;\n1495:\t\t}\n1496:\t\tentry-\u003esyncobj = syncobj;\n1497:\t\tentry-\u003eev_fd_ctx = no_free_ptr(ev_fd_ctx);\n1498:\t\tentry-\u003epoint = args-\u003epoint;\n1499:\t\tentry-\u003eflags = args-\u003eflags;\n1500:\t\n1501:\t\tdrm_syncobj_add_eventfd(syncobj, entry);\n1502:\t\tdrm_syncobj_put(syncobj);\n1503:\t\n1504:\t\treturn 0;\n1505:\t\n1506:\terr_fdget:\n1507:\t\tdrm_syncobj_put(syncobj);\n1508:\t\treturn ret;\n1509:\t}\n1510:\t\n1511:\tint\n1512:\tdrm_syncobj_reset_ioctl(struct drm_device *dev, void *data,\n1513:\t\t\t\tstruct drm_file *file_private)\n1514:\t{\n1515:\t\tstruct drm_syncobj_array *args = data;\n1516:\t\tstruct drm_syncobj **syncobjs;\n1517:\t\tuint32_t i;\n1518:\t\tint ret;\n1519:\t\n"
} |
| 25/3 | 2026/09/09 13:07 | llm | kmsan-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 4957 output: 179 thoughts: 144 Thoughts: **My Assessment of the Code Changes** Okay, so looking at this, it seems the core of the change revolves around implementing `DEFINE_FREE(eventfd, ...)` which is then applied in `drm_syncobj_eventfd_ioctl()`. A nice, clean way to handle cleanup, and the addition of a NULL check in `eventfd_ctx_put()` is always a good practice. I've scanned the code for typical vulnerabilities. Crucially, I'm not seeing any red flags regarding uninitialized data, accidental data leaks to user space, uninitialized field accesses, or memory exposure. I've always been especially careful about lifetime management, reference counting, and cleanup because that's where things can get messy fast. Any of those common errors - the use-after-free, double-free, or null pointer dereference issues that can haunt us - would be flagged by the usual suspects - KASAN or the standard kernel detectors, not KMSAN. Since I don't see any of those KMSAN-specific vulnerabilities that I would be looking for in this particular context, it's safe to say: `NeedsKMSAN = false`. Now, I'm ready to move on. Let's get the call to `set-results` prepared. |
| 26/3 | 2026/09/09 13:07 | tool | set-results |
0mArgs:{
"KMSANReasoning": "The patch introduces a cleanup attribute helper `DEFINE_FREE(eventfd, ...)` and updates `drm_syncobj_eventfd_ioctl()` to use automatic cleanup (`__free(eventfd)`) along with `no_free_ptr()`, and adds a NULL check to `eventfd_ctx_put()`.\n\nThere are no uninitialized variables, uninitialized struct reads, or information leaks to userspace introduced or affected by these changes. Any potential bugs in this refactoring would pertain to reference counting, lifetime management, or resource cleanup (e.g. use-after-free or double-free), which are handled by KASAN and standard kernel debug tools. Therefore, a dedicated KMSAN fuzzing session is not justified.",
"NeedsKMSAN": false
}Results: {
"KMSANReasoning": "The patch introduces a cleanup attribute helper `DEFINE_FREE(eventfd, ...)` and updates `drm_syncobj_eventfd_ioctl()` to use automatic cleanup (`__free(eventfd)`) along with `no_free_ptr()`, and adds a NULL check to `eventfd_ctx_put()`.\n\nThere are no uninitialized variables, uninitialized struct reads, or information leaks to userspace introduced or affected by these changes. Any potential bugs in this refactoring would pertain to reference counting, lifetime management, or resource cleanup (e.g. use-after-free or double-free), which are handled by KASAN and standard kernel debug tools. Therefore, a dedicated KMSAN fuzzing session is not justified.",
"NeedsKMSAN": false
} |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|