| Seq | Timestamp | Type | Name | Duration |
|---|---|---|---|---|
| 0/0 | 2026/09/06 22:13 | flow | patch-triage |
3mArgs:null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"KMSANReasoning": "",
"NeedsKMSAN": false,
"Reasoning": "The patch modifies vfio_cdx_mmap() in drivers/vfio/cdx/main.c, which is part of the VFIO driver for the AMD Versal CDX bus. CDX devices depend on AMD Versal-net platform controller hardware and remote firmware (MCDI/rpmsg) that is not emulated in standard QEMU/GCE virtualized environments. Consequently, no CDX devices can be instantiated or bound to vfio-cdx, rendering the modified code structurally unreachable during fuzzing.",
"WorthFuzzing": false
} |
| 1/1 | 2026/09/06 22:13 | action | read-patch-diff |
0mArgs:null Results: {
"PatchDiff": "commit a19c150f568f8f45f013656f1f0f95643c110774\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate: Sun Sep 6 22:13:50 2026 +0000\n\n syz-cluster: applied patch under review\n\ndiff --git a/drivers/vfio/cdx/main.c b/drivers/vfio/cdx/main.c\nindex b31ed4be7bdc1..6d208db0896d6 100644\n--- a/drivers/vfio/cdx/main.c\n+++ b/drivers/vfio/cdx/main.c\n@@ -271,6 +271,9 @@ static int vfio_cdx_mmap(struct vfio_device *core_vdev,\n \n \tindex = vma-\u003evm_pgoff \u003e\u003e (VFIO_CDX_OFFSET_SHIFT - PAGE_SHIFT);\n \n+\tif (!(vma-\u003evm_flags \u0026 VM_SHARED))\n+\t\treturn -EINVAL;\n+\n \tif (index \u003e= cdx_dev-\u003eres_count)\n \t\treturn -EINVAL;\n \n"
} |
| 2/1 | 2026/09/06 22:13 | agent | patch-evaluator |
3mModel:core Args: null Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies vfio_cdx_mmap() in drivers/vfio/cdx/main.c, which is part of the VFIO driver for the AMD Versal CDX bus. CDX devices depend on AMD Versal-net platform controller hardware and remote firmware (MCDI/rpmsg) that is not emulated in standard QEMU/GCE virtualized environments. Consequently, no CDX devices can be instantiated or bound to vfio-cdx, rendering the modified code structurally unreachable during fuzzing.",
"WorthFuzzing": false
}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 a19c150f568f8f45f013656f1f0f95643c110774
Author: syz-cluster <triage@syzkaller.com>
Date: Sun Sep 6 22:13:50 2026 +0000
syz-cluster: applied patch under review
diff --git a/drivers/vfio/cdx/main.c b/drivers/vfio/cdx/main.c
index b31ed4be7bdc1..6d208db0896d6 100644
--- a/drivers/vfio/cdx/main.c
+++ b/drivers/vfio/cdx/main.c
@@ -271,6 +271,9 @@ static int vfio_cdx_mmap(struct vfio_device *core_vdev,
index = vma->vm_pgoff >> (VFIO_CDX_OFFSET_SHIFT - PAGE_SHIFT);
+ if (!(vma->vm_flags & VM_SHARED))
+ return -EINVAL;
+
if (index >= cdx_dev->res_count)
return -EINVAL;
|
| 3/2 | 2026/09/06 22:13 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 2878 output: 19 thoughts: 110 Thoughts: **Initial Assessment of the VFIO CDX Patch** Okay, so this patch is touching `drivers/vfio/cdx/main.c`. My first move is always to establish context, and I'm especially interested in this `vfio/cdx` part. What exactly *is* `drivers/vfio/cdx`? I need to understand the hardware or virtual bus it's tied to. Is this some specialized hardware, or is it something that commonly shows up in virtualized environments like QEMU, or Google Compute Engine, and on standard amd64 systems? Knowing this will significantly influence my understanding of the patch's potential impact and relevance. To get the lay of the land, I'll need to dig into the codebase. I'll reach for `grepper` or `read-file` to check out `drivers/vfio/cdx/Kconfig`. That should give me some clues as to the dependencies and intended use case. I'll also want to look at `drivers/cdx/`, or anything else that seems relevant to this "CDX" thing to ensure that I have all relevant components of the system in view. Once I can get a good picture of the hardware it applies to I will be able to evaluate the patch much more efficiently. |
| 4/2 | 2026/09/06 22:13 | tool | grepper |
0mArgs:{
"Expression": "VFIO_CDX"
}Results: {
"Output": "drivers/vfio/Makefile=17=obj-$(CONFIG_VFIO_FSL_MC) += fsl-mc/\ndrivers/vfio/Makefile:18:obj-$(CONFIG_VFIO_CDX) += cdx/\n--\ndrivers/vfio/cdx/Kconfig-7-\ndrivers/vfio/cdx/Kconfig:8:config VFIO_CDX\ndrivers/vfio/cdx/Kconfig-9-\ttristate \"VFIO support for CDX bus devices\"\n--\ndrivers/vfio/cdx/Makefile-5-\ndrivers/vfio/cdx/Makefile:6:obj-$(CONFIG_VFIO_CDX) += vfio-cdx.o\ndrivers/vfio/cdx/Makefile-7-\n--\ndrivers/vfio/cdx/main.c=244=static int vfio_cdx_mmap_mmio(struct vfio_cdx_region region,\n--\ndrivers/vfio/cdx/main.c-250-\tpgoff = vma-\u003evm_pgoff \u0026\ndrivers/vfio/cdx/main.c:251:\t\t((1U \u003c\u003c (VFIO_CDX_OFFSET_SHIFT - PAGE_SHIFT)) - 1);\ndrivers/vfio/cdx/main.c-252-\tbase = pgoff \u003c\u003c PAGE_SHIFT;\n--\ndrivers/vfio/cdx/main.c=264=static int vfio_cdx_mmap(struct vfio_device *core_vdev,\n--\ndrivers/vfio/cdx/main.c-271-\ndrivers/vfio/cdx/main.c:272:\tindex = vma-\u003evm_pgoff \u003e\u003e (VFIO_CDX_OFFSET_SHIFT - PAGE_SHIFT);\ndrivers/vfio/cdx/main.c-273-\n--\ndrivers/vfio/cdx/private.h-5-\ndrivers/vfio/cdx/private.h:6:#ifndef VFIO_CDX_PRIVATE_H\ndrivers/vfio/cdx/private.h:7:#define VFIO_CDX_PRIVATE_H\ndrivers/vfio/cdx/private.h-8-\n--\ndrivers/vfio/cdx/private.h-10-\ndrivers/vfio/cdx/private.h:11:#define VFIO_CDX_OFFSET_SHIFT 40\ndrivers/vfio/cdx/private.h-12-\ndrivers/vfio/cdx/private.h=13=static inline u64 vfio_cdx_index_to_offset(u32 index)\ndrivers/vfio/cdx/private.h-14-{\ndrivers/vfio/cdx/private.h:15:\treturn ((u64)(index) \u003c\u003c VFIO_CDX_OFFSET_SHIFT);\ndrivers/vfio/cdx/private.h-16-}\n--\ndrivers/vfio/cdx/private.h=59=static void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev)\n--\ndrivers/vfio/cdx/private.h-63-\ndrivers/vfio/cdx/private.h:64:#endif /* VFIO_CDX_PRIVATE_H */\n"
} |
| 5/2 | 2026/09/06 22:14 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 4078 output: 36 thoughts: 33 Thoughts: Here's my summary, as I delve into this: **Initial CDX Investigations** Alright, let's dive in. To really get a grip on what this "CDX" thing is, I need to start with the source – or, in this case, the kernel config files. Specifically, I'm going to pull up `drivers/vfio/cdx/Kconfig` and `drivers/cdx/Kconfig`. These Kconfig files are the heart of how the kernel is configured, which includes this potentially new "CDX" function. Looking at the dependencies, descriptions, and potential configuration options will hopefully reveal the purpose and scope of this feature. Time to see what the Kconfig files expose about the underpinnings of CDX. Hopefully, this will paint a clear picture. |
| 6/2 | 2026/09/06 22:14 | tool | read-file |
0mArgs:{
"File": "drivers/vfio/cdx/Kconfig",
"FirstLine": 1,
"LineCount": 50
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0\n 2:\t#\n 3:\t# VFIO CDX configuration\n 4:\t#\n 5:\t# Copyright (C) 2022-2023, Advanced Micro Devices, Inc.\n 6:\t#\n 7:\t\n 8:\tconfig VFIO_CDX\n 9:\t\ttristate \"VFIO support for CDX bus devices\"\n 10:\t\tdepends on CDX_BUS\n 11:\t\tselect EVENTFD\n 12:\t\thelp\n 13:\t\t Driver to enable VFIO support for the devices on CDX bus.\n 14:\t\t This is required to make use of CDX devices present in\n 15:\t\t the system using the VFIO framework.\n 16:\t\n 17:\t\t If you don't know what to do here, say N.\n"
} |
| 7/2 | 2026/09/06 22:14 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 4545 output: 18 thoughts: 23 Thoughts: Here's my take on those thoughts, tailored for an expert audience: **Examining the CDX Bus Configuration** Okay, so I need to understand how the CDX bus is configured. Let's dive straight into the `drivers/cdx/Kconfig` file. I'm assuming that's where the core bus definition and its dependencies reside. My immediate focus is on getting a handle on `CDX_BUS` – that's the crucial symbol I need to trace. I'll be looking for its definition, its dependencies on other config options, and any default values. Understanding how that's handled at the Kconfig level is the gateway to understanding the entire subsystem. From there, I can figure out the specifics and the implications for any configurations I need to make. |
| 8/2 | 2026/09/06 22:14 | tool | grepper |
0mArgs:{
"Expression": "CDX_BUS"
}Results: {
"Output": "drivers/Makefile=194=obj-$(CONFIG_DRM_ACCEL)\t\t+= accel/\ndrivers/Makefile:195:obj-$(CONFIG_CDX_BUS)\t\t+= cdx/\ndrivers/Makefile-196-obj-$(CONFIG_DPLL)\t\t+= dpll/\n--\ndrivers/cdx/Kconfig-7-\ndrivers/cdx/Kconfig:8:config CDX_BUS\ndrivers/cdx/Kconfig-9-\tbool \"CDX Bus driver\"\n--\ndrivers/cdx/Makefile-7-\ndrivers/cdx/Makefile:8:ccflags-y += -DDEFAULT_SYMBOL_NAMESPACE='\"CDX_BUS\"'\ndrivers/cdx/Makefile-9-\ndrivers/cdx/Makefile:10:obj-$(CONFIG_CDX_BUS) += cdx.o controller/\ndrivers/cdx/Makefile-11-\ndrivers/cdx/Makefile=12=ifdef CONFIG_GENERIC_MSI_IRQ\ndrivers/cdx/Makefile:13:obj-$(CONFIG_CDX_BUS) += cdx_msi.o\ndrivers/cdx/Makefile-14-endif\n--\ndrivers/cdx/cdx.c=759=int cdx_device_add(struct cdx_dev_params *dev_params)\n--\ndrivers/cdx/cdx.c-798-\tdev_set_name(\u0026cdx_dev-\u003edev, \"cdx-%02x:%02x\",\ndrivers/cdx/cdx.c:799:\t\t ((cdx-\u003eid \u003c\u003c CDX_CONTROLLER_ID_SHIFT) | (cdx_dev-\u003ebus_num \u0026 CDX_BUS_NUM_MASK)),\ndrivers/cdx/cdx.c-800-\t\t cdx_dev-\u003edev_num);\n--\ndrivers/cdx/cdx.c-844-}\ndrivers/cdx/cdx.c:845:EXPORT_SYMBOL_NS_GPL(cdx_device_add, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-846-\ndrivers/cdx/cdx.c=847=struct device *cdx_bus_add(struct cdx_controller *cdx, u8 bus_num)\n--\ndrivers/cdx/cdx.c-865-\tdev_set_name(\u0026cdx_dev-\u003edev, \"cdx-%02x\",\ndrivers/cdx/cdx.c:866:\t\t ((cdx-\u003eid \u003c\u003c CDX_CONTROLLER_ID_SHIFT) | (bus_num \u0026 CDX_BUS_NUM_MASK)));\ndrivers/cdx/cdx.c-867-\n--\ndrivers/cdx/cdx.c-891-}\ndrivers/cdx/cdx.c:892:EXPORT_SYMBOL_NS_GPL(cdx_bus_add, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-893-\ndrivers/cdx/cdx.c=894=int cdx_register_controller(struct cdx_controller *cdx)\n--\ndrivers/cdx/cdx.c-916-}\ndrivers/cdx/cdx.c:917:EXPORT_SYMBOL_NS_GPL(cdx_register_controller, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-918-\ndrivers/cdx/cdx.c=919=void cdx_unregister_controller(struct cdx_controller *cdx)\n--\ndrivers/cdx/cdx.c-931-}\ndrivers/cdx/cdx.c:932:EXPORT_SYMBOL_NS_GPL(cdx_unregister_controller, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-933-\n--\ndrivers/cdx/cdx_msi.c=160=struct irq_domain *cdx_msi_domain_init(struct device *dev)\n--\ndrivers/cdx/cdx_msi.c-192-}\ndrivers/cdx/cdx_msi.c:193:EXPORT_SYMBOL_NS_GPL(cdx_msi_domain_init, \"CDX_BUS_CONTROLLER\");\n--\ndrivers/cdx/controller/Kconfig-7-\ndrivers/cdx/controller/Kconfig:8:if CDX_BUS\ndrivers/cdx/controller/Kconfig-9-\n--\ndrivers/cdx/controller/cdx_controller.c=256=MODULE_LICENSE(\"GPL\");\ndrivers/cdx/controller/cdx_controller.c:257:MODULE_IMPORT_NS(\"CDX_BUS_CONTROLLER\");\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-247-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:248: * MC_CMD_CDX_BUS_ENUM_BUSES\ndrivers/cdx/controller/mc_cdx_pcol.h-249- * CDX bus hosts devices (functions) that are implemented using the Composable\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-256- */\ndrivers/cdx/controller/mc_cdx_pcol.h:257:#define MC_CMD_CDX_BUS_ENUM_BUSES\t\t\t\t0x1\ndrivers/cdx/controller/mc_cdx_pcol.h:258:#define MC_CMD_CDX_BUS_ENUM_BUSES_MSGSET\t\t\t0x1\ndrivers/cdx/controller/mc_cdx_pcol.h-259-#undef MC_CMD_0x1_PRIVILEGE_CTG\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-262-\ndrivers/cdx/controller/mc_cdx_pcol.h:263:/* MC_CMD_CDX_BUS_ENUM_BUSES_IN msgrequest */\ndrivers/cdx/controller/mc_cdx_pcol.h:264:#define MC_CMD_CDX_BUS_ENUM_BUSES_IN_LEN\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h-265-\ndrivers/cdx/controller/mc_cdx_pcol.h:266:/* MC_CMD_CDX_BUS_ENUM_BUSES_OUT msgresponse */\ndrivers/cdx/controller/mc_cdx_pcol.h:267:#define MC_CMD_CDX_BUS_ENUM_BUSES_OUT_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-268-/*\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-271- */\ndrivers/cdx/controller/mc_cdx_pcol.h:272:#define MC_CMD_CDX_BUS_ENUM_BUSES_OUT_BUS_COUNT_OFST\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:273:#define MC_CMD_CDX_BUS_ENUM_BUSES_OUT_BUS_COUNT_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-274-\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-276-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:277: * MC_CMD_CDX_BUS_ENUM_DEVICES\ndrivers/cdx/controller/mc_cdx_pcol.h-278- * Enumerate CDX bus devices on a given bus\ndrivers/cdx/controller/mc_cdx_pcol.h-279- */\ndrivers/cdx/controller/mc_cdx_pcol.h:280:#define MC_CMD_CDX_BUS_ENUM_DEVICES\t\t\t\t0x2\ndrivers/cdx/controller/mc_cdx_pcol.h:281:#define MC_CMD_CDX_BUS_ENUM_DEVICES_MSGSET\t\t\t0x2\ndrivers/cdx/controller/mc_cdx_pcol.h-282-#undef MC_CMD_0x2_PRIVILEGE_CTG\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-285-\ndrivers/cdx/controller/mc_cdx_pcol.h:286:/* MC_CMD_CDX_BUS_ENUM_DEVICES_IN msgrequest */\ndrivers/cdx/controller/mc_cdx_pcol.h:287:#define MC_CMD_CDX_BUS_ENUM_DEVICES_IN_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-288-/*\ndrivers/cdx/controller/mc_cdx_pcol.h-289- * Bus number to enumerate, in range 0 to BUS_COUNT-1, as returned by\ndrivers/cdx/controller/mc_cdx_pcol.h:290: * MC_CMD_CDX_BUS_ENUM_BUSES_OUT\ndrivers/cdx/controller/mc_cdx_pcol.h-291- */\ndrivers/cdx/controller/mc_cdx_pcol.h:292:#define MC_CMD_CDX_BUS_ENUM_DEVICES_IN_BUS_OFST\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:293:#define MC_CMD_CDX_BUS_ENUM_DEVICES_IN_BUS_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-294-\ndrivers/cdx/controller/mc_cdx_pcol.h:295:/* MC_CMD_CDX_BUS_ENUM_DEVICES_OUT msgresponse */\ndrivers/cdx/controller/mc_cdx_pcol.h:296:#define MC_CMD_CDX_BUS_ENUM_DEVICES_OUT_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-297-/*\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-301- */\ndrivers/cdx/controller/mc_cdx_pcol.h:302:#define MC_CMD_CDX_BUS_ENUM_DEVICES_OUT_DEVICE_COUNT_OFST\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:303:#define MC_CMD_CDX_BUS_ENUM_DEVICES_OUT_DEVICE_COUNT_LEN\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-304-\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-306-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:307: * MC_CMD_CDX_BUS_GET_DEVICE_CONFIG\ndrivers/cdx/controller/mc_cdx_pcol.h-308- * Returns device identification and MMIO/MSI resource data for a CDX device.\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-318- */\ndrivers/cdx/controller/mc_cdx_pcol.h:319:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG\t\t\t\t\t0x3\ndrivers/cdx/controller/mc_cdx_pcol.h:320:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_MSGSET\t\t\t\t\t0x3\ndrivers/cdx/controller/mc_cdx_pcol.h-321-#undef MC_CMD_0x3_PRIVILEGE_CTG\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-324-\ndrivers/cdx/controller/mc_cdx_pcol.h:325:/* MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN msgrequest */\ndrivers/cdx/controller/mc_cdx_pcol.h:326:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_LEN\t\t\t\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h-327-/* Device bus number, in range 0 to BUS_COUNT-1 */\ndrivers/cdx/controller/mc_cdx_pcol.h:328:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_BUS_OFST\t\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:329:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_BUS_LEN\t\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-330-/* Device number relative to the bus, in range 0 to DEVICE_COUNT-1 for that bus */\ndrivers/cdx/controller/mc_cdx_pcol.h:331:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_DEVICE_OFST\t\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:332:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_DEVICE_LEN\t\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-333-\ndrivers/cdx/controller/mc_cdx_pcol.h:334:/* MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT msgresponse */\ndrivers/cdx/controller/mc_cdx_pcol.h:335:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_LEN\t\t\t\t88\ndrivers/cdx/controller/mc_cdx_pcol.h-336-/* 16-bit Vendor identifier, compliant with PCI-SIG VendorID assignment. */\ndrivers/cdx/controller/mc_cdx_pcol.h:337:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_VENDOR_ID_OFST\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:338:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_VENDOR_ID_LEN\t\t\t2\ndrivers/cdx/controller/mc_cdx_pcol.h-339-/* 16-bit Device ID assigned by the vendor */\ndrivers/cdx/controller/mc_cdx_pcol.h:340:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_ID_OFST\t\t\t2\ndrivers/cdx/controller/mc_cdx_pcol.h:341:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_ID_LEN\t\t\t2\ndrivers/cdx/controller/mc_cdx_pcol.h-342-/*\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-345- */\ndrivers/cdx/controller/mc_cdx_pcol.h:346:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_VENDOR_ID_OFST\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:347:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_VENDOR_ID_LEN\t\t2\ndrivers/cdx/controller/mc_cdx_pcol.h-348-/*\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-351- */\ndrivers/cdx/controller/mc_cdx_pcol.h:352:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_DEVICE_ID_OFST\t\t6\ndrivers/cdx/controller/mc_cdx_pcol.h:353:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_DEVICE_ID_LEN\t\t2\ndrivers/cdx/controller/mc_cdx_pcol.h-354-/* 24-bit Device Class code, compliant with PCI-SIG Device Class codes */\ndrivers/cdx/controller/mc_cdx_pcol.h:355:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_CLASS_OFST\t\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:356:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_CLASS_LEN\t\t\t3\ndrivers/cdx/controller/mc_cdx_pcol.h-357-/* 8-bit vendor-assigned revision */\ndrivers/cdx/controller/mc_cdx_pcol.h:358:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_REVISION_OFST\t\t11\ndrivers/cdx/controller/mc_cdx_pcol.h:359:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_REVISION_LEN\t\t1\ndrivers/cdx/controller/mc_cdx_pcol.h-360-/* Reserved (alignment) */\ndrivers/cdx/controller/mc_cdx_pcol.h:361:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_RESERVED_OFST\t\t\t12\ndrivers/cdx/controller/mc_cdx_pcol.h:362:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_RESERVED_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-363-/* MMIO region 0 base address (bus address), 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:364:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_OFST\t\t16\ndrivers/cdx/controller/mc_cdx_pcol.h:365:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:366:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_LO_OFST\t\t16\ndrivers/cdx/controller/mc_cdx_pcol.h:367:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:368:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_LO_LBN\t\t128\ndrivers/cdx/controller/mc_cdx_pcol.h:369:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:370:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_HI_OFST\t\t20\ndrivers/cdx/controller/mc_cdx_pcol.h:371:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:372:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_HI_LBN\t\t160\ndrivers/cdx/controller/mc_cdx_pcol.h:373:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-374-/* MMIO region 0 size, 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:375:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_OFST\t\t24\ndrivers/cdx/controller/mc_cdx_pcol.h:376:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:377:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_LO_OFST\t\t24\ndrivers/cdx/controller/mc_cdx_pcol.h:378:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:379:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_LO_LBN\t\t192\ndrivers/cdx/controller/mc_cdx_pcol.h:380:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:381:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_HI_OFST\t\t28\ndrivers/cdx/controller/mc_cdx_pcol.h:382:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:383:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_HI_LBN\t\t224\ndrivers/cdx/controller/mc_cdx_pcol.h:384:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-385-/* MMIO region 1 base address (bus address), 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:386:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_OFST\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:387:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:388:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_LO_OFST\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:389:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:390:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_LO_LBN\t\t256\ndrivers/cdx/controller/mc_cdx_pcol.h:391:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:392:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_HI_OFST\t\t36\ndrivers/cdx/controller/mc_cdx_pcol.h:393:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:394:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_HI_LBN\t\t288\ndrivers/cdx/controller/mc_cdx_pcol.h:395:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-396-/* MMIO region 1 size, 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:397:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_OFST\t\t40\ndrivers/cdx/controller/mc_cdx_pcol.h:398:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:399:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_LO_OFST\t\t40\ndrivers/cdx/controller/mc_cdx_pcol.h:400:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:401:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_LO_LBN\t\t320\ndrivers/cdx/controller/mc_cdx_pcol.h:402:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:403:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_HI_OFST\t\t44\ndrivers/cdx/controller/mc_cdx_pcol.h:404:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:405:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_HI_LBN\t\t352\ndrivers/cdx/controller/mc_cdx_pcol.h:406:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-407-/* MMIO region 2 base address (bus address), 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:408:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_OFST\t\t48\ndrivers/cdx/controller/mc_cdx_pcol.h:409:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:410:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_LO_OFST\t\t48\ndrivers/cdx/controller/mc_cdx_pcol.h:411:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:412:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_LO_LBN\t\t384\ndrivers/cdx/controller/mc_cdx_pcol.h:413:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:414:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_HI_OFST\t\t52\ndrivers/cdx/controller/mc_cdx_pcol.h:415:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:416:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_HI_LBN\t\t416\ndrivers/cdx/controller/mc_cdx_pcol.h:417:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-418-/* MMIO region 2 size, 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:419:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_OFST\t\t56\ndrivers/cdx/controller/mc_cdx_pcol.h:420:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:421:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_LO_OFST\t\t56\ndrivers/cdx/controller/mc_cdx_pcol.h:422:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:423:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_LO_LBN\t\t448\ndrivers/cdx/controller/mc_cdx_pcol.h:424:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:425:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_HI_OFST\t\t60\ndrivers/cdx/controller/mc_cdx_pcol.h:426:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:427:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_HI_LBN\t\t480\ndrivers/cdx/controller/mc_cdx_pcol.h:428:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-429-/* MMIO region 3 base address (bus address), 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:430:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_OFST\t\t64\ndrivers/cdx/controller/mc_cdx_pcol.h:431:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:432:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_LO_OFST\t\t64\ndrivers/cdx/controller/mc_cdx_pcol.h:433:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:434:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_LO_LBN\t\t512\ndrivers/cdx/controller/mc_cdx_pcol.h:435:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:436:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_HI_OFST\t\t68\ndrivers/cdx/controller/mc_cdx_pcol.h:437:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:438:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_HI_LBN\t\t544\ndrivers/cdx/controller/mc_cdx_pcol.h:439:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-440-/* MMIO region 3 size, 0 if unused */\ndrivers/cdx/controller/mc_cdx_pcol.h:441:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_OFST\t\t72\ndrivers/cdx/controller/mc_cdx_pcol.h:442:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_LEN\t\t8\ndrivers/cdx/controller/mc_cdx_pcol.h:443:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_LO_OFST\t\t72\ndrivers/cdx/controller/mc_cdx_pcol.h:444:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_LO_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:445:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_LO_LBN\t\t576\ndrivers/cdx/controller/mc_cdx_pcol.h:446:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_LO_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h:447:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_HI_OFST\t\t76\ndrivers/cdx/controller/mc_cdx_pcol.h:448:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_HI_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h:449:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_HI_LBN\t\t608\ndrivers/cdx/controller/mc_cdx_pcol.h:450:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE_HI_WIDTH\t\t32\ndrivers/cdx/controller/mc_cdx_pcol.h-451-/* MSI vector count */\ndrivers/cdx/controller/mc_cdx_pcol.h:452:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MSI_COUNT_OFST\t\t\t80\ndrivers/cdx/controller/mc_cdx_pcol.h:453:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_MSI_COUNT_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-454-/* Requester ID used by device (SMMU StreamID, GIC ITS DeviceID) */\ndrivers/cdx/controller/mc_cdx_pcol.h:455:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_REQUESTER_ID_OFST\t\t\t84\ndrivers/cdx/controller/mc_cdx_pcol.h:456:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_REQUESTER_ID_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-457-\ndrivers/cdx/controller/mc_cdx_pcol.h:458:/* MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2 msgresponse */\ndrivers/cdx/controller/mc_cdx_pcol.h:459:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_LEN\t\t\t\t92\ndrivers/cdx/controller/mc_cdx_pcol.h-460-/* Requester ID used by device for GIC ITS DeviceID */\ndrivers/cdx/controller/mc_cdx_pcol.h:461:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_REQUESTER_DEVICE_ID_OFST\t88\ndrivers/cdx/controller/mc_cdx_pcol.h:462:#define MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_REQUESTER_DEVICE_ID_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-463-\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-465-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:466: * MC_CMD_CDX_BUS_DOWN\ndrivers/cdx/controller/mc_cdx_pcol.h-467- * Asserting reset on the CDX bus causes all devices on the bus to be quiesced.\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-477- */\ndrivers/cdx/controller/mc_cdx_pcol.h:478:#define MC_CMD_CDX_BUS_DOWN\t\t\t\t\t0x4\ndrivers/cdx/controller/mc_cdx_pcol.h:479:#define MC_CMD_CDX_BUS_DOWN_MSGSET\t\t\t0x4\ndrivers/cdx/controller/mc_cdx_pcol.h-480-\ndrivers/cdx/controller/mc_cdx_pcol.h:481:/* MC_CMD_CDX_BUS_DOWN_IN msgrequest */\ndrivers/cdx/controller/mc_cdx_pcol.h:482:#define MC_CMD_CDX_BUS_DOWN_IN_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-483-/* Bus number to put in reset, in range 0 to BUS_COUNT-1 */\ndrivers/cdx/controller/mc_cdx_pcol.h:484:#define MC_CMD_CDX_BUS_DOWN_IN_BUS_OFST\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:485:#define MC_CMD_CDX_BUS_DOWN_IN_BUS_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-486-\ndrivers/cdx/controller/mc_cdx_pcol.h-487-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:488: * MC_CMD_CDX_BUS_DOWN_OUT msgresponse: The bus is quiesced, no further\ndrivers/cdx/controller/mc_cdx_pcol.h-489- * upstream traffic for devices on this bus.\ndrivers/cdx/controller/mc_cdx_pcol.h-490- */\ndrivers/cdx/controller/mc_cdx_pcol.h:491:#define MC_CMD_CDX_BUS_DOWN_OUT_LEN\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h-492-\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-494-/*\ndrivers/cdx/controller/mc_cdx_pcol.h:495: * MC_CMD_CDX_BUS_UP\ndrivers/cdx/controller/mc_cdx_pcol.h-496- * After bus reset is de-asserted, devices are in a state which is functionally\n--\ndrivers/cdx/controller/mc_cdx_pcol.h-505- */\ndrivers/cdx/controller/mc_cdx_pcol.h:506:#define MC_CMD_CDX_BUS_UP\t\t\t\t\t0x5\ndrivers/cdx/controller/mc_cdx_pcol.h:507:#define MC_CMD_CDX_BUS_UP_MSGSET\t\t\t0x5\ndrivers/cdx/controller/mc_cdx_pcol.h-508-\ndrivers/cdx/controller/mc_cdx_pcol.h:509:/* MC_CMD_CDX_BUS_UP_IN msgrequest */\ndrivers/cdx/controller/mc_cdx_pcol.h:510:#define MC_CMD_CDX_BUS_UP_IN_LEN\t\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-511-/* Bus number to take out of reset, in range 0 to BUS_COUNT-1 */\ndrivers/cdx/controller/mc_cdx_pcol.h:512:#define MC_CMD_CDX_BUS_UP_IN_BUS_OFST\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h:513:#define MC_CMD_CDX_BUS_UP_IN_BUS_LEN\t\t4\ndrivers/cdx/controller/mc_cdx_pcol.h-514-\ndrivers/cdx/controller/mc_cdx_pcol.h:515:/* MC_CMD_CDX_BUS_UP_OUT msgresponse: The bus can now be enumerated. */\ndrivers/cdx/controller/mc_cdx_pcol.h:516:#define MC_CMD_CDX_BUS_UP_OUT_LEN\t\t\t0\ndrivers/cdx/controller/mc_cdx_pcol.h-517-\n--\ndrivers/cdx/controller/mcdi_functions.c=10=int cdx_mcdi_get_num_buses(struct cdx_mcdi *cdx)\ndrivers/cdx/controller/mcdi_functions.c-11-{\ndrivers/cdx/controller/mcdi_functions.c:12:\tMCDI_DECLARE_BUF(outbuf, MC_CMD_CDX_BUS_ENUM_BUSES_OUT_LEN);\ndrivers/cdx/controller/mcdi_functions.c-13-\tsize_t outlen;\n--\ndrivers/cdx/controller/mcdi_functions.c-15-\ndrivers/cdx/controller/mcdi_functions.c:16:\tret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_ENUM_BUSES, NULL, 0,\ndrivers/cdx/controller/mcdi_functions.c-17-\t\t\t outbuf, sizeof(outbuf), \u0026outlen);\n--\ndrivers/cdx/controller/mcdi_functions.c-20-\ndrivers/cdx/controller/mcdi_functions.c:21:\tif (outlen != MC_CMD_CDX_BUS_ENUM_BUSES_OUT_LEN)\ndrivers/cdx/controller/mcdi_functions.c-22-\t\treturn -EIO;\ndrivers/cdx/controller/mcdi_functions.c-23-\ndrivers/cdx/controller/mcdi_functions.c:24:\treturn MCDI_DWORD(outbuf, CDX_BUS_ENUM_BUSES_OUT_BUS_COUNT);\ndrivers/cdx/controller/mcdi_functions.c-25-}\n--\ndrivers/cdx/controller/mcdi_functions.c=27=int cdx_mcdi_get_num_devs(struct cdx_mcdi *cdx, int bus_num)\ndrivers/cdx/controller/mcdi_functions.c-28-{\ndrivers/cdx/controller/mcdi_functions.c:29:\tMCDI_DECLARE_BUF(outbuf, MC_CMD_CDX_BUS_ENUM_DEVICES_OUT_LEN);\ndrivers/cdx/controller/mcdi_functions.c:30:\tMCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_ENUM_DEVICES_IN_LEN);\ndrivers/cdx/controller/mcdi_functions.c-31-\tsize_t outlen;\n--\ndrivers/cdx/controller/mcdi_functions.c-33-\ndrivers/cdx/controller/mcdi_functions.c:34:\tMCDI_SET_DWORD(inbuf, CDX_BUS_ENUM_DEVICES_IN_BUS, bus_num);\ndrivers/cdx/controller/mcdi_functions.c-35-\ndrivers/cdx/controller/mcdi_functions.c:36:\tret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_ENUM_DEVICES, inbuf, sizeof(inbuf),\ndrivers/cdx/controller/mcdi_functions.c-37-\t\t\t outbuf, sizeof(outbuf), \u0026outlen);\n--\ndrivers/cdx/controller/mcdi_functions.c-40-\ndrivers/cdx/controller/mcdi_functions.c:41:\tif (outlen != MC_CMD_CDX_BUS_ENUM_DEVICES_OUT_LEN)\ndrivers/cdx/controller/mcdi_functions.c-42-\t\treturn -EIO;\ndrivers/cdx/controller/mcdi_functions.c-43-\ndrivers/cdx/controller/mcdi_functions.c:44:\treturn MCDI_DWORD(outbuf, CDX_BUS_ENUM_DEVICES_OUT_DEVICE_COUNT);\ndrivers/cdx/controller/mcdi_functions.c-45-}\n--\ndrivers/cdx/controller/mcdi_functions.c=47=int cdx_mcdi_get_dev_config(struct cdx_mcdi *cdx,\n--\ndrivers/cdx/controller/mcdi_functions.c-50-{\ndrivers/cdx/controller/mcdi_functions.c:51:\tMCDI_DECLARE_BUF(outbuf, MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_LEN);\ndrivers/cdx/controller/mcdi_functions.c:52:\tMCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_IN_LEN);\ndrivers/cdx/controller/mcdi_functions.c-53-\tstruct resource *res = \u0026dev_params-\u003eres[0];\n--\ndrivers/cdx/controller/mcdi_functions.c-57-\ndrivers/cdx/controller/mcdi_functions.c:58:\tMCDI_SET_DWORD(inbuf, CDX_BUS_GET_DEVICE_CONFIG_IN_BUS, bus_num);\ndrivers/cdx/controller/mcdi_functions.c:59:\tMCDI_SET_DWORD(inbuf, CDX_BUS_GET_DEVICE_CONFIG_IN_DEVICE, dev_num);\ndrivers/cdx/controller/mcdi_functions.c-60-\ndrivers/cdx/controller/mcdi_functions.c:61:\tret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_GET_DEVICE_CONFIG, inbuf, sizeof(inbuf),\ndrivers/cdx/controller/mcdi_functions.c-62-\t\t\t outbuf, sizeof(outbuf), \u0026outlen);\n--\ndrivers/cdx/controller/mcdi_functions.c-65-\ndrivers/cdx/controller/mcdi_functions.c:66:\tif (outlen != MC_CMD_CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_LEN)\ndrivers/cdx/controller/mcdi_functions.c-67-\t\treturn -EIO;\n--\ndrivers/cdx/controller/mcdi_functions.c-71-\ndrivers/cdx/controller/mcdi_functions.c:72:\treq_id = MCDI_DWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_REQUESTER_ID);\ndrivers/cdx/controller/mcdi_functions.c-73-\tdev_params-\u003ereq_id = req_id;\n--\ndrivers/cdx/controller/mcdi_functions.c-75-\tdev_params-\u003emsi_dev_id = MCDI_DWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:76:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_V2_REQUESTER_DEVICE_ID);\ndrivers/cdx/controller/mcdi_functions.c-77-\ndrivers/cdx/controller/mcdi_functions.c-78-\tdev_params-\u003eres_count = 0;\ndrivers/cdx/controller/mcdi_functions.c:79:\tif (MCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE) != 0) {\ndrivers/cdx/controller/mcdi_functions.c-80-\t\tres[dev_params-\u003eres_count].start =\ndrivers/cdx/controller/mcdi_functions.c:81:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE);\ndrivers/cdx/controller/mcdi_functions.c-82-\t\tres[dev_params-\u003eres_count].end =\ndrivers/cdx/controller/mcdi_functions.c:83:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_BASE) +\ndrivers/cdx/controller/mcdi_functions.c-84-\t\t\t\t MCDI_QWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:85:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION0_SIZE) - 1;\ndrivers/cdx/controller/mcdi_functions.c-86-\t\tres[dev_params-\u003eres_count].flags = IORESOURCE_MEM;\n--\ndrivers/cdx/controller/mcdi_functions.c-89-\ndrivers/cdx/controller/mcdi_functions.c:90:\tif (MCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE) != 0) {\ndrivers/cdx/controller/mcdi_functions.c-91-\t\tres[dev_params-\u003eres_count].start =\ndrivers/cdx/controller/mcdi_functions.c:92:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE);\ndrivers/cdx/controller/mcdi_functions.c-93-\t\tres[dev_params-\u003eres_count].end =\ndrivers/cdx/controller/mcdi_functions.c:94:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_BASE) +\ndrivers/cdx/controller/mcdi_functions.c-95-\t\t\t\t MCDI_QWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:96:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION1_SIZE) - 1;\ndrivers/cdx/controller/mcdi_functions.c-97-\t\tres[dev_params-\u003eres_count].flags = IORESOURCE_MEM;\n--\ndrivers/cdx/controller/mcdi_functions.c-100-\ndrivers/cdx/controller/mcdi_functions.c:101:\tif (MCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE) != 0) {\ndrivers/cdx/controller/mcdi_functions.c-102-\t\tres[dev_params-\u003eres_count].start =\ndrivers/cdx/controller/mcdi_functions.c:103:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE);\ndrivers/cdx/controller/mcdi_functions.c-104-\t\tres[dev_params-\u003eres_count].end =\ndrivers/cdx/controller/mcdi_functions.c:105:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_BASE) +\ndrivers/cdx/controller/mcdi_functions.c-106-\t\t\t\t MCDI_QWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:107:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION2_SIZE) - 1;\ndrivers/cdx/controller/mcdi_functions.c-108-\t\tres[dev_params-\u003eres_count].flags = IORESOURCE_MEM;\n--\ndrivers/cdx/controller/mcdi_functions.c-111-\ndrivers/cdx/controller/mcdi_functions.c:112:\tif (MCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE) != 0) {\ndrivers/cdx/controller/mcdi_functions.c-113-\t\tres[dev_params-\u003eres_count].start =\ndrivers/cdx/controller/mcdi_functions.c:114:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE);\ndrivers/cdx/controller/mcdi_functions.c-115-\t\tres[dev_params-\u003eres_count].end =\ndrivers/cdx/controller/mcdi_functions.c:116:\t\t\tMCDI_QWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_BASE) +\ndrivers/cdx/controller/mcdi_functions.c-117-\t\t\t\t MCDI_QWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:118:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_MMIO_REGION3_SIZE) - 1;\ndrivers/cdx/controller/mcdi_functions.c-119-\t\tres[dev_params-\u003eres_count].flags = IORESOURCE_MEM;\n--\ndrivers/cdx/controller/mcdi_functions.c-122-\ndrivers/cdx/controller/mcdi_functions.c:123:\tdev_params-\u003evendor = MCDI_WORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_VENDOR_ID);\ndrivers/cdx/controller/mcdi_functions.c:124:\tdev_params-\u003edevice = MCDI_WORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_ID);\ndrivers/cdx/controller/mcdi_functions.c-125-\tdev_params-\u003esubsys_vendor = MCDI_WORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:126:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_VENDOR_ID);\ndrivers/cdx/controller/mcdi_functions.c-127-\tdev_params-\u003esubsys_device = MCDI_WORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:128:\t\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_SUBSYS_DEVICE_ID);\ndrivers/cdx/controller/mcdi_functions.c-129-\tdev_params-\u003eclass = MCDI_DWORD(outbuf,\ndrivers/cdx/controller/mcdi_functions.c:130:\t\t\t\t CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_CLASS) \u0026 0xFFFFFF;\ndrivers/cdx/controller/mcdi_functions.c:131:\tdev_params-\u003erevision = MCDI_BYTE(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_DEVICE_REVISION);\ndrivers/cdx/controller/mcdi_functions.c:132:\tdev_params-\u003enum_msi = MCDI_DWORD(outbuf, CDX_BUS_GET_DEVICE_CONFIG_OUT_MSI_COUNT);\ndrivers/cdx/controller/mcdi_functions.c-133-\n--\ndrivers/cdx/controller/mcdi_functions.c=137=int cdx_mcdi_bus_enable(struct cdx_mcdi *cdx, u8 bus_num)\ndrivers/cdx/controller/mcdi_functions.c-138-{\ndrivers/cdx/controller/mcdi_functions.c:139:\tMCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_UP_IN_LEN);\ndrivers/cdx/controller/mcdi_functions.c-140-\tint ret;\ndrivers/cdx/controller/mcdi_functions.c-141-\ndrivers/cdx/controller/mcdi_functions.c:142:\tMCDI_SET_DWORD(inbuf, CDX_BUS_UP_IN_BUS, bus_num);\ndrivers/cdx/controller/mcdi_functions.c:143:\tret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_UP, inbuf, sizeof(inbuf),\ndrivers/cdx/controller/mcdi_functions.c-144-\t\t\t NULL, 0, NULL);\n--\ndrivers/cdx/controller/mcdi_functions.c=149=int cdx_mcdi_bus_disable(struct cdx_mcdi *cdx, u8 bus_num)\ndrivers/cdx/controller/mcdi_functions.c-150-{\ndrivers/cdx/controller/mcdi_functions.c:151:\tMCDI_DECLARE_BUF(inbuf, MC_CMD_CDX_BUS_DOWN_IN_LEN);\ndrivers/cdx/controller/mcdi_functions.c-152-\tint ret;\ndrivers/cdx/controller/mcdi_functions.c-153-\ndrivers/cdx/controller/mcdi_functions.c:154:\tMCDI_SET_DWORD(inbuf, CDX_BUS_DOWN_IN_BUS, bus_num);\ndrivers/cdx/controller/mcdi_functions.c:155:\tret = cdx_mcdi_rpc(cdx, MC_CMD_CDX_BUS_DOWN, inbuf, sizeof(inbuf),\ndrivers/cdx/controller/mcdi_functions.c-156-\t\t\t NULL, 0, NULL);\n--\ndrivers/gpu/drm/radeon/r600.c=1615=u32 r600_gpu_check_soft_reset(struct radeon_device *rdev)\n--\ndrivers/gpu/drm/radeon/r600.c-1667-\tif (G_000E50_MCB_BUSY(tmp) | G_000E50_MCDZ_BUSY(tmp) |\ndrivers/gpu/drm/radeon/r600.c:1668:\t G_000E50_MCDY_BUSY(tmp) | G_000E50_MCDX_BUSY(tmp) |\ndrivers/gpu/drm/radeon/r600.c-1669-\t G_000E50_MCDW_BUSY(tmp))\n--\ndrivers/gpu/drm/radeon/r600d.h-1833-#define\t\tG_000E50_MCDY_BUSY(x)\t\t\t(((x) \u003e\u003e 11) \u0026 1)\ndrivers/gpu/drm/radeon/r600d.h:1834:#define\t\tG_000E50_MCDX_BUSY(x)\t\t\t(((x) \u003e\u003e 12) \u0026 1)\ndrivers/gpu/drm/radeon/r600d.h-1835-#define\t\tG_000E50_MCDW_BUSY(x)\t\t\t(((x) \u003e\u003e 13) \u0026 1)\n--\ndrivers/iommu/iommu.c=186=static const struct bus_type * const iommu_buses[] = {\n--\ndrivers/iommu/iommu.c-199-#endif\ndrivers/iommu/iommu.c:200:#ifdef CONFIG_CDX_BUS\ndrivers/iommu/iommu.c-201-\t\u0026cdx_bus_type,\n--\ndrivers/vfio/cdx/Kconfig=8=config VFIO_CDX\ndrivers/vfio/cdx/Kconfig-9-\ttristate \"VFIO support for CDX bus devices\"\ndrivers/vfio/cdx/Kconfig:10:\tdepends on CDX_BUS\ndrivers/vfio/cdx/Kconfig-11-\tselect EVENTFD\n--\ndrivers/vfio/cdx/main.c=364=MODULE_DESCRIPTION(\"VFIO for CDX devices - User Level meta-driver\");\ndrivers/vfio/cdx/main.c:365:MODULE_IMPORT_NS(\"CDX_BUS\");\n--\ninclude/linux/cdx/cdx_bus.h-8-\ninclude/linux/cdx/cdx_bus.h:9:#ifndef _CDX_BUS_H_\ninclude/linux/cdx/cdx_bus.h:10:#define _CDX_BUS_H_\ninclude/linux/cdx/cdx_bus.h-11-\n--\ninclude/linux/cdx/cdx_bus.h-18-#define CDX_CONTROLLER_ID_SHIFT 4\ninclude/linux/cdx/cdx_bus.h:19:#define CDX_BUS_NUM_MASK 0xF\ninclude/linux/cdx/cdx_bus.h-20-\n--\ninclude/linux/cdx/cdx_bus.h=281=static inline void cdx_disable_msi(struct cdx_device *cdx_dev)\n--\ninclude/linux/cdx/cdx_bus.h-286-\ninclude/linux/cdx/cdx_bus.h:287:#endif /* _CDX_BUS_H_ */\n"
} |
| 9/2 | 2026/09/06 22:14 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 20527 output: 22 thoughts: 40 Thoughts: Okay, here's my thought process on this, from my perspective as someone well-versed in driver development: **Initial Investigation into CDX Controller/Device Drivers** Alright, so the task at hand is to pinpoint which driver(s) are responsible for managing the CDX controller or for creating CDX devices. My initial instinct is to target the obvious. I'll need to start by looking for the code that registers the CDX controller itself. Where would that live? The most logical starting point is the `drivers/cdx/controller/` directory. That's usually where you'd find the core logic for the device's hardware interface. However, I'm not going to limit myself to that path immediately. Given the modular nature of many contemporary driver architectures, I need to keep my search broad, at least initially. I'll also expand my search to include other files within the `drivers/cdx` directory. There might be some helper or utility files containing initialization, probe, or remove functions or associated device structures. I'll need to use my preferred tooling (grep, find, etc.) to quickly search for key identifiers like "cdx," "CDX," or specific function names/struct names likely related to driver registration, probe, or device creation. I'll also keep in mind common kernel coding practices, such as looking for module_init or device_driver structures. This approach gives me the best chance of quickly identifying the responsible driver and understanding its overall structure. |
| 10/2 | 2026/09/06 22:14 | tool | codesearch-dir-index |
0mArgs:{
"Dir": "drivers/cdx"
}Results: {
"Files": [
"cdx.c",
"cdx.h",
"cdx_msi.c"
],
"Subdirs": [
"controller"
]
} |
| 11/2 | 2026/09/06 22:14 | llm | patch-evaluator |
1mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 20945 output: 24 thoughts: 15 Thoughts: Here's my attempt at summarizing the thought process, tailored for an expert audience: **Diving into the `drivers/cdx/controller` Directory** Okay, let's take a look at what's in `drivers/cdx/controller`. I'm assuming, given the path, that this is the directory containing the controller-specific code for the CDX subsystem. I immediately want to understand how the hardware abstraction layers are organized here. Is it a monolithic controller implementation, or is it broken down into functional units – perhaps DMA control, interrupt handling, register access, and power management? What interfaces are exposed to the upper layers of the CDX driver? Are there any obvious design patterns being employed, such as a state machine for command processing or a layered driver architecture? I'm particularly interested in seeing how they handle error conditions, retries, and any device-specific quirks. It will also be interesting to understand how interrupts are configured and handled, specifically the interrupt service routines. This also will have implications on how the device is configured and initialized. Finally, I'll be looking for any signs of optimization strategies – caching, buffering, or any techniques employed to maximize throughput or minimize latency. Let's see if this is all clean and maintainable. |
| 12/2 | 2026/09/06 22:15 | tool | codesearch-dir-index |
0mArgs:{
"Dir": "drivers/cdx/controller"
}Results: {
"Files": [
"cdx_controller.c",
"cdx_controller.h",
"cdx_rpmsg.c",
"mc_cdx_pcol.h",
"mcdi.c",
"mcdi_functions.c",
"mcdi_functions.h",
"mcdid.h"
],
"Subdirs": null
} |
| 13/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 21335 output: 40 thoughts: 29 Thoughts: Here's my take: **Investigating the CDX Controller and RPMSG Interaction** Okay, time to dive in. I need to get a handle on how this CDX stuff is working, so I'm going to start by taking a close look at `drivers/cdx/controller/cdx_controller.c` and `cdx_rpmsg.c`. The controller file is obviously the heart of the CDX management itself, but I'm betting the RPMSG implementation is the key to understanding how it's communicating and interfacing with the rest of the system, likely over some form of inter-processor communication. I expect these two files will give me a good initial picture of the architecture and how the components are interacting, especially if there's any sort of shared memory or message passing involved. Let's see what's what. |
| 14/2 | 2026/09/06 22:15 | tool | read-file |
0mArgs:{
"File": "drivers/cdx/controller/cdx_controller.c",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0\n 2:\t/*\n 3:\t * CDX host controller driver for AMD versal-net platform.\n 4:\t *\n 5:\t * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.\n 6:\t */\n 7:\t\n 8:\t#include \u003clinux/platform_device.h\u003e\n 9:\t#include \u003clinux/slab.h\u003e\n 10:\t#include \u003clinux/cdx/cdx_bus.h\u003e\n 11:\t#include \u003clinux/irqdomain.h\u003e\n 12:\t\n 13:\t#include \"cdx_controller.h\"\n 14:\t#include \"../cdx.h\"\n 15:\t#include \"mcdi_functions.h\"\n 16:\t#include \"mcdid.h\"\n 17:\t\n 18:\tstatic unsigned int cdx_mcdi_rpc_timeout(struct cdx_mcdi *cdx, unsigned int cmd)\n 19:\t{\n 20:\t\treturn MCDI_RPC_TIMEOUT;\n 21:\t}\n 22:\t\n 23:\tstatic void cdx_mcdi_request(struct cdx_mcdi *cdx,\n 24:\t\t\t\t const struct cdx_dword *hdr, size_t hdr_len,\n 25:\t\t\t\t const struct cdx_dword *sdu, size_t sdu_len)\n 26:\t{\n 27:\t\tif (cdx_rpmsg_send(cdx, hdr, hdr_len, sdu, sdu_len))\n 28:\t\t\tdev_err(\u0026cdx-\u003erpdev-\u003edev, \"Failed to send rpmsg data\\n\");\n 29:\t}\n 30:\t\n 31:\tstatic const struct cdx_mcdi_ops mcdi_ops = {\n 32:\t\t.mcdi_rpc_timeout = cdx_mcdi_rpc_timeout,\n 33:\t\t.mcdi_request = cdx_mcdi_request,\n 34:\t};\n 35:\t\n 36:\tstatic int cdx_bus_enable(struct cdx_controller *cdx, u8 bus_num)\n 37:\t{\n 38:\t\treturn cdx_mcdi_bus_enable(cdx-\u003epriv, bus_num);\n 39:\t}\n 40:\t\n 41:\tstatic int cdx_bus_disable(struct cdx_controller *cdx, u8 bus_num)\n 42:\t{\n 43:\t\treturn cdx_mcdi_bus_disable(cdx-\u003epriv, bus_num);\n 44:\t}\n 45:\t\n 46:\tvoid cdx_rpmsg_post_probe(struct cdx_controller *cdx)\n 47:\t{\n 48:\t\t/* Register CDX controller with CDX bus driver */\n 49:\t\tif (cdx_register_controller(cdx))\n 50:\t\t\tdev_err(cdx-\u003edev, \"Failed to register CDX controller\\n\");\n 51:\t}\n 52:\t\n 53:\tvoid cdx_rpmsg_pre_remove(struct cdx_controller *cdx)\n 54:\t{\n 55:\t\tcdx_unregister_controller(cdx);\n 56:\t\tcdx_mcdi_wait_for_quiescence(cdx-\u003epriv, MCDI_RPC_TIMEOUT);\n 57:\t}\n 58:\t\n 59:\tstatic int cdx_configure_device(struct cdx_controller *cdx,\n 60:\t\t\t\t\tu8 bus_num, u8 dev_num,\n 61:\t\t\t\t\tstruct cdx_device_config *dev_config)\n 62:\t{\n 63:\t\tu16 msi_index;\n 64:\t\tint ret = 0;\n 65:\t\tu32 data;\n 66:\t\tu64 addr;\n 67:\t\n 68:\t\tswitch (dev_config-\u003etype) {\n 69:\t\tcase CDX_DEV_MSI_CONF:\n 70:\t\t\tmsi_index = dev_config-\u003emsi.msi_index;\n 71:\t\t\tdata = dev_config-\u003emsi.data;\n 72:\t\t\taddr = dev_config-\u003emsi.addr;\n 73:\t\n 74:\t\t\tret = cdx_mcdi_write_msi(cdx-\u003epriv, bus_num, dev_num, msi_index, addr, data);\n 75:\t\t\tbreak;\n 76:\t\tcase CDX_DEV_RESET_CONF:\n 77:\t\t\tret = cdx_mcdi_reset_device(cdx-\u003epriv, bus_num, dev_num);\n 78:\t\t\tbreak;\n 79:\t\tcase CDX_DEV_BUS_MASTER_CONF:\n 80:\t\t\tret = cdx_mcdi_bus_master_enable(cdx-\u003epriv, bus_num, dev_num,\n 81:\t\t\t\t\t\t\t dev_config-\u003ebus_master_enable);\n 82:\t\t\tbreak;\n 83:\t\tcase CDX_DEV_MSI_ENABLE:\n 84:\t\t\tret = cdx_mcdi_msi_enable(cdx-\u003epriv, bus_num, dev_num, dev_config-\u003emsi_enable);\n 85:\t\t\tbreak;\n 86:\t\tdefault:\n 87:\t\t\tret = -EINVAL;\n 88:\t\t}\n 89:\t\n 90:\t\treturn ret;\n 91:\t}\n 92:\t\n 93:\tstatic int cdx_scan_devices(struct cdx_controller *cdx)\n 94:\t{\n 95:\t\tstruct cdx_mcdi *cdx_mcdi = cdx-\u003epriv;\n 96:\t\tu8 bus_num, dev_num, num_cdx_bus;\n 97:\t\tint ret;\n 98:\t\n 99:\t\t/* MCDI FW Read: Fetch the number of CDX buses on this controller */\n 100:\t\tret = cdx_mcdi_get_num_buses(cdx_mcdi);\n"
} |
| 15/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 23158 output: 35 thoughts: 56 Thoughts: **My Initial Thoughts on the CDX Host Controller Driver for the AMD Versal-Net Platform** Okay, so we're looking at the CDX host controller driver specifically for the AMD Versal-Net platform. My initial thought process is to understand how this controller is being probed. The next logical step is to dive into the code. I'll need to check the relevant files. I'm thinking the logical places to start would be `cdx_rpmsg.c` or maybe even the `drivers/cdx/controller/Kconfig` file. The Kconfig could tell me how the controller is configured, whereas the .c file will, of course, hold the probing logic. This should give me a good handle on how the system discovers and initializes this particular CDX controller. Let's see what we can find. |
| 16/2 | 2026/09/06 22:15 | tool | read-file |
0mArgs:{
"File": "drivers/cdx/controller/Kconfig",
"FirstLine": 1,
"LineCount": 40
}Results: {
"Contents": " 1:\t# SPDX-License-Identifier: GPL-2.0-only\n 2:\t#\n 3:\t# CDX controller configuration\n 4:\t#\n 5:\t# Copyright (C) 2022-2023, Advanced Micro Devices, Inc.\n 6:\t#\n 7:\t\n 8:\tif CDX_BUS\n 9:\t\n 10:\tconfig CDX_CONTROLLER\n 11:\t\ttristate \"CDX bus controller\"\n 12:\t\tdepends on HAS_DMA\n 13:\t\tselect REMOTEPROC\n 14:\t\tselect RPMSG\n 15:\t\thelp\n 16:\t\t CDX controller drives the CDX bus. It interacts with\n 17:\t\t firmware to get the hardware devices and registers with\n 18:\t\t the CDX bus. Say Y to enable the CDX hardware driver.\n 19:\t\n 20:\t\t If unsure, say N.\n 21:\t\n 22:\tendif\n"
} |
| 17/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 23683 output: 38 thoughts: 35 Thoughts: Okay, let's dive into this. I need to understand the lifecycle of a VFIO CDX device, from instantiation to operation. Given my expertise, the best place to start is the core implementation, specifically `drivers/vfio/cdx/main.c`. I'm going to pore over this code to grasp the sequence of events. My focus will be on the critical functions: how the device is created, registered within the system, probed to ensure its presence and functionality, and then managed throughout its operational life cycle. Understanding these steps is crucial for debugging, performance tuning, and potentially extending the functionality of VFIO CDX devices. I anticipate finding the core data structures and function calls responsible for handling the device's state and interaction with the VFIO framework. I'm going to assume a certain level of familiarity with the VFIO architecture and delve directly into the CDX specific implementation. |
| 18/2 | 2026/09/06 22:15 | tool | read-file |
0mArgs:{
"File": "drivers/vfio/cdx/main.c",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0\n 2:\t/*\n 3:\t * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.\n 4:\t */\n 5:\t\n 6:\t#include \u003clinux/vfio.h\u003e\n 7:\t#include \u003clinux/cdx/cdx_bus.h\u003e\n 8:\t\n 9:\t#include \"private.h\"\n 10:\t\n 11:\tstatic int vfio_cdx_init_dev(struct vfio_device *core_vdev)\n 12:\t{\n 13:\t\tstruct vfio_cdx_device *vdev =\n 14:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 15:\t\n 16:\t\tmutex_init(\u0026vdev-\u003ecdx_irqs_lock);\n 17:\t\treturn 0;\n 18:\t}\n 19:\t\n 20:\tstatic void vfio_cdx_release_dev(struct vfio_device *core_vdev)\n 21:\t{\n 22:\t\tstruct vfio_cdx_device *vdev =\n 23:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 24:\t\n 25:\t\tmutex_destroy(\u0026vdev-\u003ecdx_irqs_lock);\n 26:\t}\n 27:\t\n 28:\tstatic int vfio_cdx_open_device(struct vfio_device *core_vdev)\n 29:\t{\n 30:\t\tstruct vfio_cdx_device *vdev =\n 31:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 32:\t\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\n 33:\t\tint count = cdx_dev-\u003eres_count;\n 34:\t\tint i, ret;\n 35:\t\n 36:\t\tvdev-\u003eregions = kzalloc_objs(struct vfio_cdx_region, count,\n 37:\t\t\t\t\t GFP_KERNEL_ACCOUNT);\n 38:\t\tif (!vdev-\u003eregions)\n 39:\t\t\treturn -ENOMEM;\n 40:\t\n 41:\t\tfor (i = 0; i \u003c count; i++) {\n 42:\t\t\tstruct resource *res = \u0026cdx_dev-\u003eres[i];\n 43:\t\n 44:\t\t\tvdev-\u003eregions[i].addr = res-\u003estart;\n 45:\t\t\tvdev-\u003eregions[i].size = resource_size(res);\n 46:\t\t\tvdev-\u003eregions[i].type = res-\u003eflags;\n 47:\t\t\t/*\n 48:\t\t\t * Only regions addressed with PAGE granularity may be\n 49:\t\t\t * MMAP'ed securely.\n 50:\t\t\t */\n 51:\t\t\tif (!(vdev-\u003eregions[i].addr \u0026 ~PAGE_MASK) \u0026\u0026\n 52:\t\t\t !(vdev-\u003eregions[i].size \u0026 ~PAGE_MASK))\n 53:\t\t\t\tvdev-\u003eregions[i].flags |=\n 54:\t\t\t\t\t\tVFIO_REGION_INFO_FLAG_MMAP;\n 55:\t\t\tvdev-\u003eregions[i].flags |= VFIO_REGION_INFO_FLAG_READ;\n 56:\t\t\tif (!(cdx_dev-\u003eres[i].flags \u0026 IORESOURCE_READONLY))\n 57:\t\t\t\tvdev-\u003eregions[i].flags |= VFIO_REGION_INFO_FLAG_WRITE;\n 58:\t\t}\n 59:\t\tret = cdx_dev_reset(core_vdev-\u003edev);\n 60:\t\tif (ret) {\n 61:\t\t\tkfree(vdev-\u003eregions);\n 62:\t\t\tvdev-\u003eregions = NULL;\n 63:\t\t\treturn ret;\n 64:\t\t}\n 65:\t\tret = cdx_clear_master(cdx_dev);\n 66:\t\tif (ret)\n 67:\t\t\tvdev-\u003eflags \u0026= ~BME_SUPPORT;\n 68:\t\telse\n 69:\t\t\tvdev-\u003eflags |= BME_SUPPORT;\n 70:\t\n 71:\t\treturn 0;\n 72:\t}\n 73:\t\n 74:\tstatic void vfio_cdx_close_device(struct vfio_device *core_vdev)\n 75:\t{\n 76:\t\tstruct vfio_cdx_device *vdev =\n 77:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 78:\t\n 79:\t\tkfree(vdev-\u003eregions);\n 80:\t\tcdx_dev_reset(core_vdev-\u003edev);\n 81:\t\tvfio_cdx_irqs_cleanup(vdev);\n 82:\t}\n 83:\t\n 84:\tstatic int vfio_cdx_bm_ctrl(struct vfio_device *core_vdev, u32 flags,\n 85:\t\t\t\t void __user *arg, size_t argsz)\n 86:\t{\n 87:\t\tsize_t minsz =\n 88:\t\t\toffsetofend(struct vfio_device_feature_bus_master, op);\n 89:\t\tstruct vfio_cdx_device *vdev =\n 90:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 91:\t\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\n 92:\t\tstruct vfio_device_feature_bus_master ops;\n 93:\t\tint ret;\n 94:\t\n 95:\t\tif (!(vdev-\u003eflags \u0026 BME_SUPPORT))\n 96:\t\t\treturn -ENOTTY;\n 97:\t\n 98:\t\tret = vfio_check_feature(flags, argsz, VFIO_DEVICE_FEATURE_SET,\n 99:\t\t\t\t\t sizeof(ops));\n 100:\t\tif (ret != 1)\n"
} |
| 19/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 25477 output: 40 thoughts: 20 Thoughts: Okay, here's my attempt at summarizing the thought process, as if I were examining the `drivers/vfio/cdx/main.c` code and thinking aloud as a seasoned expert: **Diving into `drivers/vfio/cdx/main.c`** Alright, let's get into this `main.c` file within the CDX (likely Container Direct eXecution) VFIO driver. My initial thought is to quickly establish the core purpose. What's the entry point? What's initialized? Are we dealing with the overall module initialization and exit routines, or just a piece of the puzzle? I'm expecting to see module_init and module_exit macros right off the bat, to get the broad structure. From there, I'll quickly look for struct definitions and global variables. I want to see how data is stored for the container and the device within this context. I'll need to understand the relationship to the overall VFIO framework and how we are interacting with it. The memory mapping and unmapping routines will be critical - are we directly managing the host physical addresses or indirectly via some kind of iommu setup? I will probably see some kind of interaction with the device models and a file descriptor. I'm looking for the essential parts of the driver; the code that wires up the vfio-pci interface for CDX operations. Then I will see how to handle the device registration, interrupt handling (if applicable), and of course, the actual operations for container execution. Depending on the complexity, I'll start building a mental model of control flow. Essentially, I'm trying to identify the critical data structures and how the CDX specific pieces fit within the larger VFIO ecosystem. |
| 20/2 | 2026/09/06 22:15 | tool | read-file |
0mArgs:{
"File": "drivers/vfio/cdx/main.c",
"FirstLine": 260,
"LineCount": 100
}Results: {
"Contents": " 260:\t\treturn io_remap_pfn_range(vma, vma-\u003evm_start, vma-\u003evm_pgoff,\n 261:\t\t\t\t\t size, vma-\u003evm_page_prot);\n 262:\t}\n 263:\t\n 264:\tstatic int vfio_cdx_mmap(struct vfio_device *core_vdev,\n 265:\t\t\t\t struct vm_area_struct *vma)\n 266:\t{\n 267:\t\tstruct vfio_cdx_device *vdev =\n 268:\t\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\n 269:\t\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\n 270:\t\tunsigned int index;\n 271:\t\n 272:\t\tindex = vma-\u003evm_pgoff \u003e\u003e (VFIO_CDX_OFFSET_SHIFT - PAGE_SHIFT);\n 273:\t\n 274:\t\tif (!(vma-\u003evm_flags \u0026 VM_SHARED))\n 275:\t\t\treturn -EINVAL;\n 276:\t\n 277:\t\tif (index \u003e= cdx_dev-\u003eres_count)\n 278:\t\t\treturn -EINVAL;\n 279:\t\n 280:\t\tif (!(vdev-\u003eregions[index].flags \u0026 VFIO_REGION_INFO_FLAG_MMAP))\n 281:\t\t\treturn -EINVAL;\n 282:\t\n 283:\t\tif (!(vdev-\u003eregions[index].flags \u0026 VFIO_REGION_INFO_FLAG_READ) \u0026\u0026\n 284:\t\t (vma-\u003evm_flags \u0026 VM_READ))\n 285:\t\t\treturn -EPERM;\n 286:\t\n 287:\t\tif (!(vdev-\u003eregions[index].flags \u0026 VFIO_REGION_INFO_FLAG_WRITE) \u0026\u0026\n 288:\t\t (vma-\u003evm_flags \u0026 VM_WRITE))\n 289:\t\t\treturn -EPERM;\n 290:\t\n 291:\t\treturn vfio_cdx_mmap_mmio(vdev-\u003eregions[index], vma);\n 292:\t}\n 293:\t\n 294:\tstatic const struct vfio_device_ops vfio_cdx_ops = {\n 295:\t\t.name\t\t= \"vfio-cdx\",\n 296:\t\t.init\t\t= vfio_cdx_init_dev,\n 297:\t\t.release\t= vfio_cdx_release_dev,\n 298:\t\t.open_device\t= vfio_cdx_open_device,\n 299:\t\t.close_device\t= vfio_cdx_close_device,\n 300:\t\t.ioctl\t\t= vfio_cdx_ioctl,\n 301:\t\t.get_region_info_caps = vfio_cdx_ioctl_get_region_info,\n 302:\t\t.device_feature = vfio_cdx_ioctl_feature,\n 303:\t\t.mmap\t\t= vfio_cdx_mmap,\n 304:\t\t.bind_iommufd\t= vfio_iommufd_physical_bind,\n 305:\t\t.unbind_iommufd\t= vfio_iommufd_physical_unbind,\n 306:\t\t.attach_ioas\t= vfio_iommufd_physical_attach_ioas,\n 307:\t};\n 308:\t\n 309:\tstatic int vfio_cdx_probe(struct cdx_device *cdx_dev)\n 310:\t{\n 311:\t\tstruct vfio_cdx_device *vdev;\n 312:\t\tstruct device *dev = \u0026cdx_dev-\u003edev;\n 313:\t\tint ret;\n 314:\t\n 315:\t\tvdev = vfio_alloc_device(vfio_cdx_device, vdev, dev,\n 316:\t\t\t\t\t \u0026vfio_cdx_ops);\n 317:\t\tif (IS_ERR(vdev))\n 318:\t\t\treturn PTR_ERR(vdev);\n 319:\t\n 320:\t\tret = vfio_register_group_dev(\u0026vdev-\u003evdev);\n 321:\t\tif (ret)\n 322:\t\t\tgoto out_uninit;\n 323:\t\n 324:\t\tdev_set_drvdata(dev, vdev);\n 325:\t\treturn 0;\n 326:\t\n 327:\tout_uninit:\n 328:\t\tvfio_put_device(\u0026vdev-\u003evdev);\n 329:\t\treturn ret;\n 330:\t}\n 331:\t\n 332:\tstatic int vfio_cdx_remove(struct cdx_device *cdx_dev)\n 333:\t{\n 334:\t\tstruct device *dev = \u0026cdx_dev-\u003edev;\n 335:\t\tstruct vfio_cdx_device *vdev = dev_get_drvdata(dev);\n 336:\t\n 337:\t\tvfio_unregister_group_dev(\u0026vdev-\u003evdev);\n 338:\t\tvfio_put_device(\u0026vdev-\u003evdev);\n 339:\t\n 340:\t\treturn 0;\n 341:\t}\n 342:\t\n 343:\tstatic const struct cdx_device_id vfio_cdx_table[] = {\n 344:\t\t{ CDX_DEVICE_DRIVER_OVERRIDE(CDX_ANY_ID, CDX_ANY_ID,\n 345:\t\t\t\t\t CDX_ID_F_VFIO_DRIVER_OVERRIDE) }, /* match all by default */\n 346:\t\t{}\n 347:\t};\n 348:\t\n 349:\tMODULE_DEVICE_TABLE(cdx, vfio_cdx_table);\n 350:\t\n 351:\tstatic struct cdx_driver vfio_cdx_driver = {\n 352:\t\t.probe\t\t= vfio_cdx_probe,\n 353:\t\t.remove\t\t= vfio_cdx_remove,\n 354:\t\t.match_id_table\t= vfio_cdx_table,\n 355:\t\t.driver\t= {\n 356:\t\t\t.name\t= \"vfio-cdx\",\n 357:\t\t},\n 358:\t\t.driver_managed_dma = true,\n 359:\t};\n"
} |
| 21/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 27592 output: 27 thoughts: 67 Thoughts: **CDX Analysis & Feasibility** Okay, let's break this down. My initial assessment centers on understanding CDX – what it *is*, fundamentally – and then, crucially, whether it's even *accessible* within my usual QEMU and GCE testing environments. I need to know if I'm going to require specialized AMD Versal hardware for this or if I can stay within my familiar comfort zone. That's the real question. The next logical step is to understand the device creation process: How *are* these CDX devices instantiated? This information will be key to fuzzing, as it determines how I can potentially influence their initialization or feed them unexpected inputs. If they require some unique or proprietary setup, that changes the whole game. Finally, I'll dive into the codebase. Specifically, the `drivers/cdx/` directory should reveal the secrets. Are these devices created statically, at boot? Or, even better, is there a dynamic creation path? Dynamic creation would open up a whole universe of possibilities for manipulating and fuzzing. Understanding the creation mechanism is paramount to any effective fuzzing strategy. |
| 22/2 | 2026/09/06 22:15 | tool | grepper |
0mArgs:{
"Expression": "cdx_",
"PathPrefix": "drivers/cdx"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 1834 lines.\nUse more precise expression if possible.\n\ndrivers/cdx/Makefile=12=ifdef CONFIG_GENERIC_MSI_IRQ\ndrivers/cdx/Makefile:13:obj-$(CONFIG_CDX_BUS) += cdx_msi.o\ndrivers/cdx/Makefile-14-endif\n--\ndrivers/cdx/cdx.c-67-#include \u003clinux/idr.h\u003e\ndrivers/cdx/cdx.c:68:#include \u003clinux/cdx/cdx_bus.h\u003e\ndrivers/cdx/cdx.c-69-#include \u003clinux/iommu.h\u003e\n--\ndrivers/cdx/cdx.c-78-/* IDA for CDX controllers registered with the CDX bus */\ndrivers/cdx/cdx.c:79:static DEFINE_IDA(cdx_controller_ida);\ndrivers/cdx/cdx.c-80-/* Lock to protect controller ops */\ndrivers/cdx/cdx.c:81:static DEFINE_MUTEX(cdx_controller_lock);\ndrivers/cdx/cdx.c-82-/* Debugfs dir for cdx bus */\ndrivers/cdx/cdx.c:83:static struct dentry *cdx_debugfs_dir;\ndrivers/cdx/cdx.c-84-\ndrivers/cdx/cdx.c=85=static char *compat_node_name = \"xlnx,versal-net-cdx\";\ndrivers/cdx/cdx.c-86-\ndrivers/cdx/cdx.c:87:static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num);\ndrivers/cdx/cdx.c-88-\ndrivers/cdx/cdx.c-89-/**\ndrivers/cdx/cdx.c:90: * cdx_dev_reset - Reset a CDX device\ndrivers/cdx/cdx.c-91- * @dev: CDX device\n--\ndrivers/cdx/cdx.c-94- */\ndrivers/cdx/cdx.c:95:int cdx_dev_reset(struct device *dev)\ndrivers/cdx/cdx.c-96-{\ndrivers/cdx/cdx.c:97:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:98:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:99:\tstruct cdx_device_config dev_config = {0};\ndrivers/cdx/cdx.c:100:\tstruct cdx_driver *cdx_drv;\ndrivers/cdx/cdx.c-101-\tint ret;\ndrivers/cdx/cdx.c-102-\ndrivers/cdx/cdx.c:103:\tcdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c-104-\t/* Notify driver that device is being reset */\ndrivers/cdx/cdx.c:105:\tif (cdx_drv \u0026\u0026 cdx_drv-\u003ereset_prepare)\ndrivers/cdx/cdx.c:106:\t\tcdx_drv-\u003ereset_prepare(cdx_dev);\ndrivers/cdx/cdx.c-107-\ndrivers/cdx/cdx.c-108-\tdev_config.type = CDX_DEV_RESET_CONF;\ndrivers/cdx/cdx.c:109:\tret = cdx-\u003eops-\u003edev_configure(cdx, cdx_dev-\u003ebus_num,\ndrivers/cdx/cdx.c:110:\t\t\t\t cdx_dev-\u003edev_num, \u0026dev_config);\ndrivers/cdx/cdx.c-111-\tif (ret)\n--\ndrivers/cdx/cdx.c-114-\t/* Notify driver that device reset is complete */\ndrivers/cdx/cdx.c:115:\tif (cdx_drv \u0026\u0026 cdx_drv-\u003ereset_done)\ndrivers/cdx/cdx.c:116:\t\tcdx_drv-\u003ereset_done(cdx_dev);\ndrivers/cdx/cdx.c-117-\n--\ndrivers/cdx/cdx.c-119-}\ndrivers/cdx/cdx.c:120:EXPORT_SYMBOL_GPL(cdx_dev_reset);\ndrivers/cdx/cdx.c-121-\ndrivers/cdx/cdx.c-122-/**\ndrivers/cdx/cdx.c:123: * reset_cdx_device - Reset a CDX device\ndrivers/cdx/cdx.c-124- * @dev: CDX device\n--\ndrivers/cdx/cdx.c-130- */\ndrivers/cdx/cdx.c:131:static int reset_cdx_device(struct device *dev, void *data)\ndrivers/cdx/cdx.c-132-{\ndrivers/cdx/cdx.c:133:\treturn cdx_dev_reset(dev);\ndrivers/cdx/cdx.c-134-}\n--\ndrivers/cdx/cdx.c-136-/**\ndrivers/cdx/cdx.c:137: * cdx_unregister_device - Unregister a CDX device\ndrivers/cdx/cdx.c-138- * @dev: CDX device\n--\ndrivers/cdx/cdx.c-140- *\t but is required here as the bus_for_each_dev() API expects\ndrivers/cdx/cdx.c:141: *\t the passed function (cdx_unregister_device) to have this\ndrivers/cdx/cdx.c-142- *\t as an argument.\n--\ndrivers/cdx/cdx.c-145- */\ndrivers/cdx/cdx.c:146:static int cdx_unregister_device(struct device *dev,\ndrivers/cdx/cdx.c-147-\t\t\t\t void *data)\ndrivers/cdx/cdx.c-148-{\ndrivers/cdx/cdx.c:149:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:150:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c-151-\ndrivers/cdx/cdx.c:152:\tif (cdx_dev-\u003eis_bus) {\ndrivers/cdx/cdx.c:153:\t\tdevice_for_each_child(dev, NULL, cdx_unregister_device);\ndrivers/cdx/cdx.c:154:\t\tif (cdx_dev-\u003eenabled \u0026\u0026 cdx-\u003eops-\u003ebus_disable)\ndrivers/cdx/cdx.c:155:\t\t\tcdx-\u003eops-\u003ebus_disable(cdx, cdx_dev-\u003ebus_num);\ndrivers/cdx/cdx.c-156-\t} else {\ndrivers/cdx/cdx.c:157:\t\tcdx_destroy_res_attr(cdx_dev, MAX_CDX_DEV_RESOURCES);\ndrivers/cdx/cdx.c:158:\t\tdebugfs_remove_recursive(cdx_dev-\u003edebugfs_dir);\ndrivers/cdx/cdx.c-159-\t}\n--\ndrivers/cdx/cdx.c-161-\t/*\ndrivers/cdx/cdx.c:162:\t * Do not free cdx_dev here as it would be freed in\ndrivers/cdx/cdx.c:163:\t * cdx_device_release() called from within put_device().\ndrivers/cdx/cdx.c-164-\t */\ndrivers/cdx/cdx.c:165:\tdevice_del(\u0026cdx_dev-\u003edev);\ndrivers/cdx/cdx.c:166:\tput_device(\u0026cdx_dev-\u003edev);\ndrivers/cdx/cdx.c-167-\n--\ndrivers/cdx/cdx.c-170-\ndrivers/cdx/cdx.c:171:static void cdx_unregister_devices(const struct bus_type *bus)\ndrivers/cdx/cdx.c-172-{\ndrivers/cdx/cdx.c-173-\t/* Reset all the devices attached to cdx bus */\ndrivers/cdx/cdx.c:174:\tbus_for_each_dev(bus, NULL, NULL, cdx_unregister_device);\ndrivers/cdx/cdx.c-175-}\n--\ndrivers/cdx/cdx.c-177-/**\ndrivers/cdx/cdx.c:178: * cdx_match_one_device - Tell if a CDX device structure has a matching\ndrivers/cdx/cdx.c-179- *\t\t\t CDX device id structure\n--\ndrivers/cdx/cdx.c-182- *\ndrivers/cdx/cdx.c:183: * Return: matching cdx_device_id structure or NULL if there is no match.\ndrivers/cdx/cdx.c-184- */\ndrivers/cdx/cdx.c:185:static inline const struct cdx_device_id *\ndrivers/cdx/cdx.c:186:cdx_match_one_device(const struct cdx_device_id *id,\ndrivers/cdx/cdx.c:187:\t\t const struct cdx_device *dev)\ndrivers/cdx/cdx.c-188-{\n--\ndrivers/cdx/cdx.c-199-/**\ndrivers/cdx/cdx.c:200: * cdx_match_id - See if a CDX device matches a given cdx_id table\ndrivers/cdx/cdx.c-201- * @ids: array of CDX device ID structures to search in\n--\ndrivers/cdx/cdx.c-204- * Used by a driver to check whether a CDX device is in its list of\ndrivers/cdx/cdx.c:205: * supported devices. Returns the matching cdx_device_id structure or\ndrivers/cdx/cdx.c-206- * NULL if there is no match.\ndrivers/cdx/cdx.c-207- *\ndrivers/cdx/cdx.c:208: * Return: matching cdx_device_id structure or NULL if there is no match.\ndrivers/cdx/cdx.c-209- */\ndrivers/cdx/cdx.c:210:static inline const struct cdx_device_id *\ndrivers/cdx/cdx.c:211:cdx_match_id(const struct cdx_device_id *ids, struct cdx_device *dev)\ndrivers/cdx/cdx.c-212-{\n--\ndrivers/cdx/cdx.c-214-\t\twhile (ids-\u003evendor || ids-\u003edevice) {\ndrivers/cdx/cdx.c:215:\t\t\tif (cdx_match_one_device(ids, dev))\ndrivers/cdx/cdx.c-216-\t\t\t\treturn ids;\n--\ndrivers/cdx/cdx.c-222-\ndrivers/cdx/cdx.c:223:int cdx_set_master(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-224-{\ndrivers/cdx/cdx.c:225:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:226:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx.c-227-\tint ret = -EOPNOTSUPP;\n--\ndrivers/cdx/cdx.c-231-\tif (cdx-\u003eops-\u003edev_configure)\ndrivers/cdx/cdx.c:232:\t\tret = cdx-\u003eops-\u003edev_configure(cdx, cdx_dev-\u003ebus_num,\ndrivers/cdx/cdx.c:233:\t\t\t\t\t cdx_dev-\u003edev_num, \u0026dev_config);\ndrivers/cdx/cdx.c-234-\n--\ndrivers/cdx/cdx.c-236-}\ndrivers/cdx/cdx.c:237:EXPORT_SYMBOL_GPL(cdx_set_master);\ndrivers/cdx/cdx.c-238-\ndrivers/cdx/cdx.c:239:int cdx_clear_master(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-240-{\ndrivers/cdx/cdx.c:241:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:242:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx.c-243-\tint ret = -EOPNOTSUPP;\n--\ndrivers/cdx/cdx.c-247-\tif (cdx-\u003eops-\u003edev_configure)\ndrivers/cdx/cdx.c:248:\t\tret = cdx-\u003eops-\u003edev_configure(cdx, cdx_dev-\u003ebus_num,\ndrivers/cdx/cdx.c:249:\t\t\t\t\t cdx_dev-\u003edev_num, \u0026dev_config);\ndrivers/cdx/cdx.c-250-\n--\ndrivers/cdx/cdx.c-252-}\ndrivers/cdx/cdx.c:253:EXPORT_SYMBOL_GPL(cdx_clear_master);\ndrivers/cdx/cdx.c-254-\ndrivers/cdx/cdx.c-255-/**\ndrivers/cdx/cdx.c:256: * cdx_bus_match - device to driver matching callback\ndrivers/cdx/cdx.c-257- * @dev: the cdx device to match against\n--\ndrivers/cdx/cdx.c-262- */\ndrivers/cdx/cdx.c:263:static int cdx_bus_match(struct device *dev, const struct device_driver *drv)\ndrivers/cdx/cdx.c-264-{\ndrivers/cdx/cdx.c:265:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:266:\tconst struct cdx_driver *cdx_drv = to_cdx_driver(drv);\ndrivers/cdx/cdx.c:267:\tconst struct cdx_device_id *found_id = NULL;\ndrivers/cdx/cdx.c:268:\tconst struct cdx_device_id *ids;\ndrivers/cdx/cdx.c-269-\tint ret;\ndrivers/cdx/cdx.c-270-\ndrivers/cdx/cdx.c:271:\tif (cdx_dev-\u003eis_bus)\ndrivers/cdx/cdx.c-272-\t\treturn false;\ndrivers/cdx/cdx.c-273-\ndrivers/cdx/cdx.c:274:\tids = cdx_drv-\u003ematch_id_table;\ndrivers/cdx/cdx.c-275-\n--\ndrivers/cdx/cdx.c-280-\ndrivers/cdx/cdx.c:281:\tfound_id = cdx_match_id(ids, cdx_dev);\ndrivers/cdx/cdx.c-282-\tif (!found_id)\n--\ndrivers/cdx/cdx.c-295-\t\tids = found_id + 1;\ndrivers/cdx/cdx.c:296:\t\tfound_id = cdx_match_id(ids, cdx_dev);\ndrivers/cdx/cdx.c-297-\t} while (found_id);\n--\ndrivers/cdx/cdx.c-301-\ndrivers/cdx/cdx.c:302:static int cdx_probe(struct device *dev)\ndrivers/cdx/cdx.c-303-{\ndrivers/cdx/cdx.c:304:\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:305:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:306:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c-307-\tint error;\n--\ndrivers/cdx/cdx.c-313-\tif (IS_ENABLED(CONFIG_GENERIC_MSI_IRQ) \u0026\u0026 cdx-\u003emsi_domain) {\ndrivers/cdx/cdx.c:314:\t\terror = msi_setup_device_data(\u0026cdx_dev-\u003edev);\ndrivers/cdx/cdx.c-315-\t\tif (error)\n--\ndrivers/cdx/cdx.c-318-\ndrivers/cdx/cdx.c:319:\terror = cdx_drv-\u003eprobe(cdx_dev);\ndrivers/cdx/cdx.c-320-\tif (error) {\n--\ndrivers/cdx/cdx.c-327-\ndrivers/cdx/cdx.c:328:static void cdx_remove(struct device *dev)\ndrivers/cdx/cdx.c-329-{\ndrivers/cdx/cdx.c:330:\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:331:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-332-\ndrivers/cdx/cdx.c:333:\tif (cdx_drv \u0026\u0026 cdx_drv-\u003eremove)\ndrivers/cdx/cdx.c:334:\t\tcdx_drv-\u003eremove(cdx_dev);\ndrivers/cdx/cdx.c-335-}\ndrivers/cdx/cdx.c-336-\ndrivers/cdx/cdx.c:337:static void cdx_shutdown(struct device *dev)\ndrivers/cdx/cdx.c-338-{\ndrivers/cdx/cdx.c:339:\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:340:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:341:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c-342-\ndrivers/cdx/cdx.c:343:\tif (cdx_dev-\u003eis_bus \u0026\u0026 cdx_dev-\u003eenabled \u0026\u0026 cdx-\u003eops-\u003ebus_disable)\ndrivers/cdx/cdx.c:344:\t\tcdx-\u003eops-\u003ebus_disable(cdx, cdx_dev-\u003ebus_num);\ndrivers/cdx/cdx.c:345:\tif (cdx_drv \u0026\u0026 cdx_drv-\u003eshutdown)\ndrivers/cdx/cdx.c:346:\t\tcdx_drv-\u003eshutdown(cdx_dev);\ndrivers/cdx/cdx.c-347-}\ndrivers/cdx/cdx.c-348-\ndrivers/cdx/cdx.c:349:static int cdx_dma_configure(struct device *dev)\ndrivers/cdx/cdx.c-350-{\ndrivers/cdx/cdx.c:351:\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:352:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:353:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:354:\tu32 input_id = cdx_dev-\u003ereq_id;\ndrivers/cdx/cdx.c-355-\tint ret;\n--\ndrivers/cdx/cdx.c-362-\ndrivers/cdx/cdx.c:363:\t/* @cdx_drv may not be valid when we're called from the IOMMU layer */\ndrivers/cdx/cdx.c:364:\tif (!ret \u0026\u0026 dev-\u003edriver \u0026\u0026 !cdx_drv-\u003edriver_managed_dma) {\ndrivers/cdx/cdx.c-365-\t\tret = iommu_device_use_default_domain(dev);\n--\ndrivers/cdx/cdx.c-372-\ndrivers/cdx/cdx.c:373:static void cdx_dma_cleanup(struct device *dev)\ndrivers/cdx/cdx.c-374-{\ndrivers/cdx/cdx.c:375:\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c-376-\ndrivers/cdx/cdx.c:377:\tif (!cdx_drv-\u003edriver_managed_dma)\ndrivers/cdx/cdx.c-378-\t\tiommu_device_unuse_default_domain(dev);\n--\ndrivers/cdx/cdx.c-381-/* show configuration fields */\ndrivers/cdx/cdx.c:382:#define cdx_config_attr(field, format_string)\t\\\ndrivers/cdx/cdx.c-383-static ssize_t\t\\\ndrivers/cdx/cdx.c=384=field##_show(struct device *dev, struct device_attribute *attr, char *buf)\t\\\ndrivers/cdx/cdx.c-385-{\t\\\ndrivers/cdx/cdx.c:386:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\t\\\ndrivers/cdx/cdx.c:387:\treturn sysfs_emit(buf, format_string, cdx_dev-\u003efield);\t\\\ndrivers/cdx/cdx.c-388-}\t\\\ndrivers/cdx/cdx.c=389=static DEVICE_ATTR_RO(field)\ndrivers/cdx/cdx.c-390-\ndrivers/cdx/cdx.c:391:cdx_config_attr(vendor, \"0x%04x\\n\");\ndrivers/cdx/cdx.c:392:cdx_config_attr(device, \"0x%04x\\n\");\ndrivers/cdx/cdx.c:393:cdx_config_attr(subsystem_vendor, \"0x%04x\\n\");\ndrivers/cdx/cdx.c:394:cdx_config_attr(subsystem_device, \"0x%04x\\n\");\ndrivers/cdx/cdx.c:395:cdx_config_attr(revision, \"0x%02x\\n\");\ndrivers/cdx/cdx.c:396:cdx_config_attr(class, \"0x%06x\\n\");\ndrivers/cdx/cdx.c-397-\ndrivers/cdx/cdx.c=398=static ssize_t remove_store(struct device *dev,\n--\ndrivers/cdx/cdx.c-412-\ndrivers/cdx/cdx.c:413:\t\tret = cdx_unregister_device(dev, NULL);\ndrivers/cdx/cdx.c-414-\t\tif (ret)\n--\ndrivers/cdx/cdx.c=422=static ssize_t reset_store(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-424-{\ndrivers/cdx/cdx.c:425:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-426-\tbool val;\n--\ndrivers/cdx/cdx.c-434-\ndrivers/cdx/cdx.c:435:\tif (cdx_dev-\u003eis_bus)\ndrivers/cdx/cdx.c-436-\t\t/* Reset all the devices attached to cdx bus */\ndrivers/cdx/cdx.c:437:\t\tret = device_for_each_child(dev, NULL, reset_cdx_device);\ndrivers/cdx/cdx.c-438-\telse\ndrivers/cdx/cdx.c:439:\t\tret = cdx_dev_reset(dev);\ndrivers/cdx/cdx.c-440-\n--\ndrivers/cdx/cdx.c=445=static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-447-{\ndrivers/cdx/cdx.c:448:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-449-\ndrivers/cdx/cdx.c:450:\treturn sprintf(buf, \"cdx:v%04Xd%04Xsv%04Xsd%04Xc%06X\\n\", cdx_dev-\u003evendor,\ndrivers/cdx/cdx.c:451:\t\t\tcdx_dev-\u003edevice, cdx_dev-\u003esubsystem_vendor, cdx_dev-\u003esubsystem_device,\ndrivers/cdx/cdx.c:452:\t\t\tcdx_dev-\u003eclass);\ndrivers/cdx/cdx.c-453-}\n--\ndrivers/cdx/cdx.c=456=static ssize_t enable_store(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-458-{\ndrivers/cdx/cdx.c:459:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:460:\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c-461-\tbool enable;\n--\ndrivers/cdx/cdx.c-466-\ndrivers/cdx/cdx.c:467:\tif (enable == cdx_dev-\u003eenabled)\ndrivers/cdx/cdx.c-468-\t\treturn count;\n--\ndrivers/cdx/cdx.c-470-\tif (enable \u0026\u0026 cdx-\u003eops-\u003ebus_enable)\ndrivers/cdx/cdx.c:471:\t\tret = cdx-\u003eops-\u003ebus_enable(cdx, cdx_dev-\u003ebus_num);\ndrivers/cdx/cdx.c-472-\telse if (!enable \u0026\u0026 cdx-\u003eops-\u003ebus_disable)\ndrivers/cdx/cdx.c:473:\t\tret = cdx-\u003eops-\u003ebus_disable(cdx, cdx_dev-\u003ebus_num);\ndrivers/cdx/cdx.c-474-\telse\n--\ndrivers/cdx/cdx.c-477-\tif (!ret)\ndrivers/cdx/cdx.c:478:\t\tcdx_dev-\u003eenabled = enable;\ndrivers/cdx/cdx.c-479-\n--\ndrivers/cdx/cdx.c=483=static ssize_t enable_show(struct device *dev, struct device_attribute *attr, char *buf)\ndrivers/cdx/cdx.c-484-{\ndrivers/cdx/cdx.c:485:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-486-\ndrivers/cdx/cdx.c:487:\treturn sysfs_emit(buf, \"%u\\n\", cdx_dev-\u003eenabled);\ndrivers/cdx/cdx.c-488-}\ndrivers/cdx/cdx.c=489=static DEVICE_ATTR_RW(enable);\ndrivers/cdx/cdx.c-490-\ndrivers/cdx/cdx.c:491:static umode_t cdx_dev_attrs_are_visible(struct kobject *kobj, struct attribute *a, int n)\ndrivers/cdx/cdx.c-492-{\ndrivers/cdx/cdx.c-493-\tstruct device *dev = kobj_to_dev(kobj);\ndrivers/cdx/cdx.c:494:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-495-\ndrivers/cdx/cdx.c:496:\tcdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:497:\tif (!cdx_dev-\u003eis_bus)\ndrivers/cdx/cdx.c-498-\t\treturn a-\u003emode;\n--\ndrivers/cdx/cdx.c-502-\ndrivers/cdx/cdx.c:503:static umode_t cdx_bus_attrs_are_visible(struct kobject *kobj, struct attribute *a, int n)\ndrivers/cdx/cdx.c-504-{\ndrivers/cdx/cdx.c-505-\tstruct device *dev = kobj_to_dev(kobj);\ndrivers/cdx/cdx.c:506:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-507-\ndrivers/cdx/cdx.c:508:\tcdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c:509:\tif (cdx_dev-\u003eis_bus)\ndrivers/cdx/cdx.c-510-\t\treturn a-\u003emode;\n--\ndrivers/cdx/cdx.c-514-\ndrivers/cdx/cdx.c:515:static struct attribute *cdx_dev_attrs[] = {\ndrivers/cdx/cdx.c-516-\t\u0026dev_attr_remove.attr,\n--\ndrivers/cdx/cdx.c-527-\ndrivers/cdx/cdx.c:528:static const struct attribute_group cdx_dev_group = {\ndrivers/cdx/cdx.c:529:\t.attrs = cdx_dev_attrs,\ndrivers/cdx/cdx.c:530:\t.is_visible = cdx_dev_attrs_are_visible,\ndrivers/cdx/cdx.c-531-};\ndrivers/cdx/cdx.c-532-\ndrivers/cdx/cdx.c:533:static struct attribute *cdx_bus_dev_attrs[] = {\ndrivers/cdx/cdx.c-534-\t\u0026dev_attr_enable.attr,\n--\ndrivers/cdx/cdx.c-538-\ndrivers/cdx/cdx.c:539:static const struct attribute_group cdx_bus_dev_group = {\ndrivers/cdx/cdx.c:540:\t.attrs = cdx_bus_dev_attrs,\ndrivers/cdx/cdx.c:541:\t.is_visible = cdx_bus_attrs_are_visible,\ndrivers/cdx/cdx.c-542-};\ndrivers/cdx/cdx.c-543-\ndrivers/cdx/cdx.c:544:static const struct attribute_group *cdx_dev_groups[] = {\ndrivers/cdx/cdx.c:545:\t\u0026cdx_dev_group,\ndrivers/cdx/cdx.c:546:\t\u0026cdx_bus_dev_group,\ndrivers/cdx/cdx.c-547-\tNULL,\n--\ndrivers/cdx/cdx.c-549-\ndrivers/cdx/cdx.c:550:static int cdx_debug_resource_show(struct seq_file *s, void *data)\ndrivers/cdx/cdx.c-551-{\ndrivers/cdx/cdx.c:552:\tstruct cdx_device *cdx_dev = s-\u003eprivate;\ndrivers/cdx/cdx.c-553-\tint i;\n--\ndrivers/cdx/cdx.c-555-\tfor (i = 0; i \u003c MAX_CDX_DEV_RESOURCES; i++) {\ndrivers/cdx/cdx.c:556:\t\tstruct resource *res = \u0026cdx_dev-\u003eres[i];\ndrivers/cdx/cdx.c-557-\n--\ndrivers/cdx/cdx.c-562-}\ndrivers/cdx/cdx.c:563:DEFINE_SHOW_ATTRIBUTE(cdx_debug_resource);\ndrivers/cdx/cdx.c-564-\ndrivers/cdx/cdx.c:565:static void cdx_device_debugfs_init(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-566-{\ndrivers/cdx/cdx.c:567:\tcdx_dev-\u003edebugfs_dir = debugfs_create_dir(dev_name(\u0026cdx_dev-\u003edev), cdx_debugfs_dir);\ndrivers/cdx/cdx.c:568:\tif (IS_ERR(cdx_dev-\u003edebugfs_dir))\ndrivers/cdx/cdx.c-569-\t\treturn;\ndrivers/cdx/cdx.c-570-\ndrivers/cdx/cdx.c:571:\tdebugfs_create_file(\"resource\", 0444, cdx_dev-\u003edebugfs_dir, cdx_dev,\ndrivers/cdx/cdx.c:572:\t\t\t \u0026cdx_debug_resource_fops);\ndrivers/cdx/cdx.c-573-}\n--\ndrivers/cdx/cdx.c=575=static ssize_t rescan_store(const struct bus_type *bus,\n--\ndrivers/cdx/cdx.c-577-{\ndrivers/cdx/cdx.c:578:\tstruct cdx_controller *cdx;\ndrivers/cdx/cdx.c-579-\tstruct platform_device *pd;\n--\ndrivers/cdx/cdx.c-587-\ndrivers/cdx/cdx.c:588:\tguard(mutex)(\u0026cdx_controller_lock);\ndrivers/cdx/cdx.c-589-\ndrivers/cdx/cdx.c-590-\t/* Unregister all the devices on the bus */\ndrivers/cdx/cdx.c:591:\tcdx_unregister_devices(\u0026cdx_bus_type);\ndrivers/cdx/cdx.c-592-\n--\ndrivers/cdx/cdx.c=608=static BUS_ATTR_WO(rescan);\ndrivers/cdx/cdx.c-609-\ndrivers/cdx/cdx.c:610:static struct attribute *cdx_bus_attrs[] = {\ndrivers/cdx/cdx.c-611-\t\u0026bus_attr_rescan.attr,\n--\ndrivers/cdx/cdx.c-613-};\ndrivers/cdx/cdx.c:614:ATTRIBUTE_GROUPS(cdx_bus);\ndrivers/cdx/cdx.c-615-\ndrivers/cdx/cdx.c:616:const struct bus_type cdx_bus_type = {\ndrivers/cdx/cdx.c-617-\t.name\t\t= \"cdx\",\ndrivers/cdx/cdx.c-618-\t.driver_override = true,\ndrivers/cdx/cdx.c:619:\t.match\t\t= cdx_bus_match,\ndrivers/cdx/cdx.c:620:\t.probe\t\t= cdx_probe,\ndrivers/cdx/cdx.c:621:\t.remove\t\t= cdx_remove,\ndrivers/cdx/cdx.c:622:\t.shutdown\t= cdx_shutdown,\ndrivers/cdx/cdx.c:623:\t.dma_configure\t= cdx_dma_configure,\ndrivers/cdx/cdx.c:624:\t.dma_cleanup\t= cdx_dma_cleanup,\ndrivers/cdx/cdx.c:625:\t.bus_groups\t= cdx_bus_groups,\ndrivers/cdx/cdx.c:626:\t.dev_groups\t= cdx_dev_groups,\ndrivers/cdx/cdx.c-627-};\ndrivers/cdx/cdx.c:628:EXPORT_SYMBOL_GPL(cdx_bus_type);\ndrivers/cdx/cdx.c-629-\ndrivers/cdx/cdx.c:630:int __cdx_driver_register(struct cdx_driver *cdx_driver,\ndrivers/cdx/cdx.c-631-\t\t\t struct module *owner)\n--\ndrivers/cdx/cdx.c-634-\ndrivers/cdx/cdx.c:635:\tcdx_driver-\u003edriver.owner = owner;\ndrivers/cdx/cdx.c:636:\tcdx_driver-\u003edriver.bus = \u0026cdx_bus_type;\ndrivers/cdx/cdx.c-637-\ndrivers/cdx/cdx.c:638:\terror = driver_register(\u0026cdx_driver-\u003edriver);\ndrivers/cdx/cdx.c-639-\tif (error) {\ndrivers/cdx/cdx.c-640-\t\tpr_err(\"driver_register() failed for %s: %d\\n\",\ndrivers/cdx/cdx.c:641:\t\t cdx_driver-\u003edriver.name, error);\ndrivers/cdx/cdx.c-642-\t\treturn error;\n--\ndrivers/cdx/cdx.c-646-}\ndrivers/cdx/cdx.c:647:EXPORT_SYMBOL_GPL(__cdx_driver_register);\ndrivers/cdx/cdx.c-648-\ndrivers/cdx/cdx.c:649:void cdx_driver_unregister(struct cdx_driver *cdx_driver)\ndrivers/cdx/cdx.c-650-{\ndrivers/cdx/cdx.c:651:\tdriver_unregister(\u0026cdx_driver-\u003edriver);\ndrivers/cdx/cdx.c-652-}\ndrivers/cdx/cdx.c:653:EXPORT_SYMBOL_GPL(cdx_driver_unregister);\ndrivers/cdx/cdx.c-654-\ndrivers/cdx/cdx.c:655:static void cdx_device_release(struct device *dev)\ndrivers/cdx/cdx.c-656-{\ndrivers/cdx/cdx.c:657:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-658-\ndrivers/cdx/cdx.c:659:\tkfree(cdx_dev);\ndrivers/cdx/cdx.c-660-}\ndrivers/cdx/cdx.c-661-\ndrivers/cdx/cdx.c:662:static const struct vm_operations_struct cdx_phys_vm_ops = {\ndrivers/cdx/cdx.c-663-#ifdef CONFIG_HAVE_IOREMAP_PROT\n--\ndrivers/cdx/cdx.c-668-/**\ndrivers/cdx/cdx.c:669: * cdx_mmap_resource - map a CDX resource into user memory space\ndrivers/cdx/cdx.c-670- * @fp: File pointer. Not used in this function, but required where\n--\ndrivers/cdx/cdx.c-679- */\ndrivers/cdx/cdx.c:680:static int cdx_mmap_resource(struct file *fp, struct kobject *kobj,\ndrivers/cdx/cdx.c-681-\t\t\t const struct bin_attribute *attr,\n--\ndrivers/cdx/cdx.c-683-{\ndrivers/cdx/cdx.c:684:\tstruct cdx_device *cdx_dev = to_cdx_device(kobj_to_dev(kobj));\ndrivers/cdx/cdx.c-685-\tint num = (unsigned long)attr-\u003eprivate;\n--\ndrivers/cdx/cdx.c-688-\ndrivers/cdx/cdx.c:689:\tres = \u0026cdx_dev-\u003eres[num];\ndrivers/cdx/cdx.c-690-\tif (iomem_is_exclusive(res-\u003estart))\n--\ndrivers/cdx/cdx.c-693-\t/* Make sure the caller is mapping a valid resource for this device */\ndrivers/cdx/cdx.c:694:\tsize = ((cdx_resource_len(cdx_dev, num) - 1) \u003e\u003e PAGE_SHIFT) + 1;\ndrivers/cdx/cdx.c-695-\tif (vma-\u003evm_pgoff + vma_pages(vma) \u003e size)\n--\ndrivers/cdx/cdx.c-702-\tvma-\u003evm_page_prot = pgprot_device(vma-\u003evm_page_prot);\ndrivers/cdx/cdx.c:703:\tvma-\u003evm_pgoff += (cdx_resource_start(cdx_dev, num) \u003e\u003e PAGE_SHIFT);\ndrivers/cdx/cdx.c:704:\tvma-\u003evm_ops = \u0026cdx_phys_vm_ops;\ndrivers/cdx/cdx.c-705-\treturn io_remap_pfn_range(vma, vma-\u003evm_start, vma-\u003evm_pgoff,\n--\ndrivers/cdx/cdx.c-709-\ndrivers/cdx/cdx.c:710:static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num)\ndrivers/cdx/cdx.c-711-{\n--\ndrivers/cdx/cdx.c-717-\ndrivers/cdx/cdx.c:718:\t\tres_attr = cdx_dev-\u003eres_attr[i];\ndrivers/cdx/cdx.c-719-\t\tif (res_attr) {\ndrivers/cdx/cdx.c:720:\t\t\tsysfs_remove_bin_file(\u0026cdx_dev-\u003edev.kobj, res_attr);\ndrivers/cdx/cdx.c-721-\t\t\tkfree(res_attr);\n--\ndrivers/cdx/cdx.c-726-#define CDX_RES_ATTR_NAME_LEN\t10\ndrivers/cdx/cdx.c:727:static int cdx_create_res_attr(struct cdx_device *cdx_dev, int num)\ndrivers/cdx/cdx.c-728-{\n--\ndrivers/cdx/cdx.c-742-\ndrivers/cdx/cdx.c:743:\tres_attr-\u003emmap = cdx_mmap_resource;\ndrivers/cdx/cdx.c-744-\tres_attr-\u003eattr.name = res_attr_name;\ndrivers/cdx/cdx.c-745-\tres_attr-\u003eattr.mode = 0600;\ndrivers/cdx/cdx.c:746:\tres_attr-\u003esize = cdx_resource_len(cdx_dev, num);\ndrivers/cdx/cdx.c-747-\tres_attr-\u003eprivate = (void *)(unsigned long)num;\ndrivers/cdx/cdx.c:748:\tret = sysfs_create_bin_file(\u0026cdx_dev-\u003edev.kobj, res_attr);\ndrivers/cdx/cdx.c-749-\tif (ret) {\n\n"
} |
| 23/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 39136 output: 41 thoughts: 65 Thoughts: **Diving into the CDX VFIO Driver** Okay, so I'm looking into the VFIO driver for the CDX bus – that's `drivers/vfio/cdx/main.c`, and it's handling `vfio-cdx`. Right, got it. Now, the key question is, how exactly are these CDX controllers being brought to life within this whole VFIO setup? Where's the instantiation happening? I need to trace this back. My intuition says the implementation might be in `drivers/cdx/controller/cdx_rpmsg.c` – let's check there, see if we can find the magic. |
| 24/2 | 2026/09/06 22:15 | tool | read-file |
0mArgs:{
"File": "drivers/cdx/controller/cdx_rpmsg.c",
"FirstLine": 1,
"LineCount": 100
}Results: {
"Contents": " 1:\t// SPDX-License-Identifier: GPL-2.0\n 2:\t/*\n 3:\t * Platform driver for CDX bus.\n 4:\t *\n 5:\t * Copyright (C) 2022-2023, Advanced Micro Devices, Inc.\n 6:\t */\n 7:\t\n 8:\t#include \u003clinux/rpmsg.h\u003e\n 9:\t#include \u003clinux/remoteproc.h\u003e\n 10:\t#include \u003clinux/of.h\u003e\n 11:\t#include \u003clinux/platform_device.h\u003e\n 12:\t#include \u003clinux/cdx/cdx_bus.h\u003e\n 13:\t#include \u003clinux/module.h\u003e\n 14:\t\n 15:\t#include \"../cdx.h\"\n 16:\t#include \"cdx_controller.h\"\n 17:\t#include \"mcdi_functions.h\"\n 18:\t#include \"mcdid.h\"\n 19:\t\n 20:\tstatic struct rpmsg_device_id cdx_rpmsg_id_table[] = {\n 21:\t\t{ .name = \"mcdi_ipc\" },\n 22:\t\t{ },\n 23:\t};\n 24:\tMODULE_DEVICE_TABLE(rpmsg, cdx_rpmsg_id_table);\n 25:\t\n 26:\tint cdx_rpmsg_send(struct cdx_mcdi *cdx_mcdi,\n 27:\t\t\t const struct cdx_dword *hdr, size_t hdr_len,\n 28:\t\t\t const struct cdx_dword *sdu, size_t sdu_len)\n 29:\t{\n 30:\t\tunsigned char *send_buf;\n 31:\t\tint ret;\n 32:\t\n 33:\t\tsend_buf = kzalloc(hdr_len + sdu_len, GFP_KERNEL);\n 34:\t\tif (!send_buf)\n 35:\t\t\treturn -ENOMEM;\n 36:\t\n 37:\t\tmemcpy(send_buf, hdr, hdr_len);\n 38:\t\tmemcpy(send_buf + hdr_len, sdu, sdu_len);\n 39:\t\n 40:\t\tret = rpmsg_send(cdx_mcdi-\u003eept, send_buf, hdr_len + sdu_len);\n 41:\t\tkfree(send_buf);\n 42:\t\n 43:\t\treturn ret;\n 44:\t}\n 45:\t\n 46:\tstatic int cdx_attach_to_rproc(struct platform_device *pdev)\n 47:\t{\n 48:\t\tstruct device_node *r5_core_node;\n 49:\t\tstruct cdx_controller *cdx_c;\n 50:\t\tstruct cdx_mcdi *cdx_mcdi;\n 51:\t\tstruct device *dev;\n 52:\t\tstruct rproc *rp;\n 53:\t\tint ret;\n 54:\t\n 55:\t\tdev = \u0026pdev-\u003edev;\n 56:\t\tcdx_c = platform_get_drvdata(pdev);\n 57:\t\tcdx_mcdi = cdx_c-\u003epriv;\n 58:\t\n 59:\t\tr5_core_node = of_parse_phandle(dev-\u003eof_node, \"xlnx,rproc\", 0);\n 60:\t\tif (!r5_core_node) {\n 61:\t\t\tdev_err(\u0026pdev-\u003edev, \"xlnx,rproc: invalid phandle\\n\");\n 62:\t\t\treturn -EINVAL;\n 63:\t\t}\n 64:\t\n 65:\t\trp = rproc_get_by_phandle(r5_core_node-\u003ephandle);\n 66:\t\tif (!rp) {\n 67:\t\t\tret = -EPROBE_DEFER;\n 68:\t\t\tgoto pdev_err;\n 69:\t\t}\n 70:\t\n 71:\t\t/* Attach to remote processor */\n 72:\t\tret = rproc_boot(rp);\n 73:\t\tif (ret) {\n 74:\t\t\tdev_err(\u0026pdev-\u003edev, \"Failed to attach to remote processor\\n\");\n 75:\t\t\trproc_put(rp);\n 76:\t\t\tgoto pdev_err;\n 77:\t\t}\n 78:\t\n 79:\t\tcdx_mcdi-\u003er5_rproc = rp;\n 80:\tpdev_err:\n 81:\t\tof_node_put(r5_core_node);\n 82:\t\treturn ret;\n 83:\t}\n 84:\t\n 85:\tstatic void cdx_detach_to_r5(struct platform_device *pdev)\n 86:\t{\n 87:\t\tstruct cdx_controller *cdx_c;\n 88:\t\tstruct cdx_mcdi *cdx_mcdi;\n 89:\t\n 90:\t\tcdx_c = platform_get_drvdata(pdev);\n 91:\t\tcdx_mcdi = cdx_c-\u003epriv;\n 92:\t\n 93:\t\trproc_detach(cdx_mcdi-\u003er5_rproc);\n 94:\t\trproc_put(cdx_mcdi-\u003er5_rproc);\n 95:\t}\n 96:\t\n 97:\tstatic int cdx_rpmsg_cb(struct rpmsg_device *rpdev, void *data,\n 98:\t\t\t\tint len, void *priv, u32 src)\n 99:\t{\n 100:\t\tstruct cdx_controller *cdx_c = dev_get_drvdata(\u0026rpdev-\u003edev);\n"
} |
| 25/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 40855 output: 20 thoughts: 86 Thoughts: Here's my take on the situation: **Investigating the CDX RPMSG Implementation** Okay, so I'm looking at `cdx_rpmsg` and it needs a specific rpmsg channel, "mcdi_ipc," or, if that's not available, it's expecting a platform device with a Device Tree node that matches "xlnx,versal-net-cdx" and a remote processor described as "xlnx,rproc." Right, so we're talking about an AMD Versal or Xilinx Versal Net platform – that makes sense. Now, my next thought is, are there *any* other CDX controller implementations kicking around in the kernel? I need to quickly scan and see if anything else has been registered that might relate to this. Are there any existing device registrations that could impact this particular setup? Got to make sure I'm not missing any other potential contenders or conflicts within the system. Let's dig in and see. |
| 26/2 | 2026/09/06 22:15 | tool | grepper |
0mArgs:{
"Expression": "cdx_register_controller"
}Results: {
"Output": "drivers/cdx/cdx.c=892=EXPORT_SYMBOL_NS_GPL(cdx_bus_add, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-893-\ndrivers/cdx/cdx.c:894:int cdx_register_controller(struct cdx_controller *cdx)\ndrivers/cdx/cdx.c-895-{\n--\ndrivers/cdx/cdx.c-916-}\ndrivers/cdx/cdx.c:917:EXPORT_SYMBOL_NS_GPL(cdx_register_controller, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-918-\n--\ndrivers/cdx/cdx.h=31=struct cdx_dev_params {\n--\ndrivers/cdx/cdx.h-49-/**\ndrivers/cdx/cdx.h:50: * cdx_register_controller - Register a CDX controller and its ports\ndrivers/cdx/cdx.h-51- *\t\ton the CDX bus.\n--\ndrivers/cdx/cdx.h-55- */\ndrivers/cdx/cdx.h:56:int cdx_register_controller(struct cdx_controller *cdx);\ndrivers/cdx/cdx.h-57-\n--\ndrivers/cdx/controller/cdx_controller.c=46=void cdx_rpmsg_post_probe(struct cdx_controller *cdx)\n--\ndrivers/cdx/controller/cdx_controller.c-48-\t/* Register CDX controller with CDX bus driver */\ndrivers/cdx/controller/cdx_controller.c:49:\tif (cdx_register_controller(cdx))\ndrivers/cdx/controller/cdx_controller.c-50-\t\tdev_err(cdx-\u003edev, \"Failed to register CDX controller\\n\");\n"
} |
| 27/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 41653 output: 20 thoughts: 41 Thoughts: Okay, here's my take on those thoughts, tailored for an expert audience, and delivered as a first-person summary: **Digging into Controller Registration and Device Addition** Alright, so the call graph is telling me something interesting. It looks like the `cdx_register_controller` function is only ever called from within `drivers/cdx/controller/cdx_controller.c`. That’s good to know. It helps to narrow down the scope of where controller initialization originates. Now, the next logical step is to see which functions rely on the `cdx_device_add` function. Understanding what adds devices will clarify the relationship between device registration and the devices themselves. I need to understand the connection between these two components. Knowing which modules add devices will make my analysis more comprehensive. |
| 28/2 | 2026/09/06 22:15 | tool | grepper |
0mArgs:{
"Expression": "cdx_device_add"
}Results: {
"Output": "drivers/cdx/cdx.c=727=static int cdx_create_res_attr(struct cdx_device *cdx_dev, int num)\n--\ndrivers/cdx/cdx.c-758-\ndrivers/cdx/cdx.c:759:int cdx_device_add(struct cdx_dev_params *dev_params)\ndrivers/cdx/cdx.c-760-{\n--\ndrivers/cdx/cdx.c-844-}\ndrivers/cdx/cdx.c:845:EXPORT_SYMBOL_NS_GPL(cdx_device_add, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-846-\n--\ndrivers/cdx/cdx.h=62=void cdx_unregister_controller(struct cdx_controller *cdx);\n--\ndrivers/cdx/cdx.h-64-/**\ndrivers/cdx/cdx.h:65: * cdx_device_add - Add a CDX device. This function adds a CDX device\ndrivers/cdx/cdx.h-66- *\t\ton the CDX bus as per the device parameters provided\n--\ndrivers/cdx/cdx.h-72- */\ndrivers/cdx/cdx.h:73:int cdx_device_add(struct cdx_dev_params *dev_params);\ndrivers/cdx/cdx.h-74-\n--\ndrivers/cdx/controller/cdx_controller.c=93=static int cdx_scan_devices(struct cdx_controller *cdx)\n--\ndrivers/cdx/controller/cdx_controller.c-141-\t\t\t/* Add the device to the cdx bus */\ndrivers/cdx/controller/cdx_controller.c:142:\t\t\tret = cdx_device_add(\u0026dev_params);\ndrivers/cdx/controller/cdx_controller.c-143-\t\t\tif (ret) {\n"
} |
| 29/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 42379 output: 18 thoughts: 416 Thoughts: **Analyzing the Accessibility of the CDX Bus in a Standard QEMU Environment** Okay, let's break this down. We're looking at the AMD/Xilinx Versal Network platform composable device bus, or CDX bus, specifically in relation to VFIO and QEMU. The instructions point out certain hardware – vendor-specific PCIe switches, SmartNICs, and GPU drivers like mlxsw, pds_core, qed, ionic, and amdgpu – that require physical ASIC/PCIe cards and aren't emulated in a standard QEMU setup. Our goal is to determine if we can access or simulate the CDX bus or VFIO CDX within that standard QEMU environment on amd64 architecture. First, I'm checking the VFIO driver for the CDX bus, `drivers/vfio/cdx/main.c`. It's pretty clear that CDX bus devices only materialize when a CDX controller is registered. The registration, from what I gather in `drivers/cdx/controller/cdx_rpmsg.c` and `cdx_controller.c`, hinges on binding to an rpmsg device named "mcdi_ipc" or a platform device with the DT node "xlnx,versal-net-cdx," which connects to the remote Cortex-R5 processor's firmware (`rproc`). Now, the core of the problem: in standard virtualized environments like QEMU or GCE on amd64, there's no inherent CDX controller hardware, and critically, no emulated CDX controller or firmware. This means no CDX bus devices are present. Consequently, the `cdx_device` can't be probed by `vfio-cdx`. So, that `vfio_cdx_mmap()` function – where the patch adds the check `if (!(vma->vm_flags & VM_SHARED)) return -EINVAL;` – it simply can't be executed under these conditions. But wait a minute, I want to confirm – I should double-check that there's absolutely no virtual CDX driver, sysfs mock, or anything else lurking in the kernel tree that could *artificially* create a `cdx_device`. Let me do a quick search for `cdx_device` throughout the entire kernel source to rule out any potential surprises. |
| 30/2 | 2026/09/06 22:15 | tool | grepper |
0mArgs:{
"Expression": "cdx_device"
}Results: {
"Output": "\nFull output is too long, showing 500 out of 556 lines.\nUse more precise expression if possible.\n\ndrivers/cdx/cdx.c=85=static char *compat_node_name = \"xlnx,versal-net-cdx\";\ndrivers/cdx/cdx.c-86-\ndrivers/cdx/cdx.c:87:static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num);\ndrivers/cdx/cdx.c-88-\n--\ndrivers/cdx/cdx.c=95=int cdx_dev_reset(struct device *dev)\ndrivers/cdx/cdx.c-96-{\ndrivers/cdx/cdx.c:97:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-98-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:99:\tstruct cdx_device_config dev_config = {0};\ndrivers/cdx/cdx.c-100-\tstruct cdx_driver *cdx_drv;\n--\ndrivers/cdx/cdx.c=120=EXPORT_SYMBOL_GPL(cdx_dev_reset);\n--\ndrivers/cdx/cdx.c-122-/**\ndrivers/cdx/cdx.c:123: * reset_cdx_device - Reset a CDX device\ndrivers/cdx/cdx.c-124- * @dev: CDX device\n--\ndrivers/cdx/cdx.c-130- */\ndrivers/cdx/cdx.c:131:static int reset_cdx_device(struct device *dev, void *data)\ndrivers/cdx/cdx.c-132-{\n--\ndrivers/cdx/cdx.c=146=static int cdx_unregister_device(struct device *dev,\n--\ndrivers/cdx/cdx.c-148-{\ndrivers/cdx/cdx.c:149:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-150-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\n--\ndrivers/cdx/cdx.c-162-\t * Do not free cdx_dev here as it would be freed in\ndrivers/cdx/cdx.c:163:\t * cdx_device_release() called from within put_device().\ndrivers/cdx/cdx.c-164-\t */\n--\ndrivers/cdx/cdx.c=171=static void cdx_unregister_devices(const struct bus_type *bus)\n--\ndrivers/cdx/cdx.c-182- *\ndrivers/cdx/cdx.c:183: * Return: matching cdx_device_id structure or NULL if there is no match.\ndrivers/cdx/cdx.c-184- */\ndrivers/cdx/cdx.c:185:static inline const struct cdx_device_id *\ndrivers/cdx/cdx.c:186:cdx_match_one_device(const struct cdx_device_id *id,\ndrivers/cdx/cdx.c:187:\t\t const struct cdx_device *dev)\ndrivers/cdx/cdx.c-188-{\n--\ndrivers/cdx/cdx.c-204- * Used by a driver to check whether a CDX device is in its list of\ndrivers/cdx/cdx.c:205: * supported devices. Returns the matching cdx_device_id structure or\ndrivers/cdx/cdx.c-206- * NULL if there is no match.\ndrivers/cdx/cdx.c-207- *\ndrivers/cdx/cdx.c:208: * Return: matching cdx_device_id structure or NULL if there is no match.\ndrivers/cdx/cdx.c-209- */\ndrivers/cdx/cdx.c:210:static inline const struct cdx_device_id *\ndrivers/cdx/cdx.c:211:cdx_match_id(const struct cdx_device_id *ids, struct cdx_device *dev)\ndrivers/cdx/cdx.c-212-{\n--\ndrivers/cdx/cdx.c-222-\ndrivers/cdx/cdx.c:223:int cdx_set_master(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-224-{\ndrivers/cdx/cdx.c-225-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:226:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx.c-227-\tint ret = -EOPNOTSUPP;\n--\ndrivers/cdx/cdx.c=237=EXPORT_SYMBOL_GPL(cdx_set_master);\ndrivers/cdx/cdx.c-238-\ndrivers/cdx/cdx.c:239:int cdx_clear_master(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-240-{\ndrivers/cdx/cdx.c-241-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx.c:242:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx.c-243-\tint ret = -EOPNOTSUPP;\n--\ndrivers/cdx/cdx.c=263=static int cdx_bus_match(struct device *dev, const struct device_driver *drv)\ndrivers/cdx/cdx.c-264-{\ndrivers/cdx/cdx.c:265:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-266-\tconst struct cdx_driver *cdx_drv = to_cdx_driver(drv);\ndrivers/cdx/cdx.c:267:\tconst struct cdx_device_id *found_id = NULL;\ndrivers/cdx/cdx.c:268:\tconst struct cdx_device_id *ids;\ndrivers/cdx/cdx.c-269-\tint ret;\n--\ndrivers/cdx/cdx.c=302=static int cdx_probe(struct device *dev)\n--\ndrivers/cdx/cdx.c-304-\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:305:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-306-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\n--\ndrivers/cdx/cdx.c=328=static void cdx_remove(struct device *dev)\n--\ndrivers/cdx/cdx.c-330-\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:331:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-332-\n--\ndrivers/cdx/cdx.c=337=static void cdx_shutdown(struct device *dev)\n--\ndrivers/cdx/cdx.c-339-\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:340:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-341-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\n--\ndrivers/cdx/cdx.c=349=static int cdx_dma_configure(struct device *dev)\n--\ndrivers/cdx/cdx.c-351-\tstruct cdx_driver *cdx_drv = to_cdx_driver(dev-\u003edriver);\ndrivers/cdx/cdx.c:352:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-353-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\n--\ndrivers/cdx/cdx.c=384=field##_show(struct device *dev, struct device_attribute *attr, char *buf)\t\\\ndrivers/cdx/cdx.c-385-{\t\\\ndrivers/cdx/cdx.c:386:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\t\\\ndrivers/cdx/cdx.c-387-\treturn sysfs_emit(buf, format_string, cdx_dev-\u003efield);\t\\\n--\ndrivers/cdx/cdx.c=422=static ssize_t reset_store(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-424-{\ndrivers/cdx/cdx.c:425:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-426-\tbool val;\n--\ndrivers/cdx/cdx.c-436-\t\t/* Reset all the devices attached to cdx bus */\ndrivers/cdx/cdx.c:437:\t\tret = device_for_each_child(dev, NULL, reset_cdx_device);\ndrivers/cdx/cdx.c-438-\telse\n--\ndrivers/cdx/cdx.c=445=static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-447-{\ndrivers/cdx/cdx.c:448:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-449-\n--\ndrivers/cdx/cdx.c=456=static ssize_t enable_store(struct device *dev, struct device_attribute *attr,\n--\ndrivers/cdx/cdx.c-458-{\ndrivers/cdx/cdx.c:459:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-460-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\n--\ndrivers/cdx/cdx.c=483=static ssize_t enable_show(struct device *dev, struct device_attribute *attr, char *buf)\ndrivers/cdx/cdx.c-484-{\ndrivers/cdx/cdx.c:485:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-486-\n--\ndrivers/cdx/cdx.c=491=static umode_t cdx_dev_attrs_are_visible(struct kobject *kobj, struct attribute *a, int n)\n--\ndrivers/cdx/cdx.c-493-\tstruct device *dev = kobj_to_dev(kobj);\ndrivers/cdx/cdx.c:494:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-495-\ndrivers/cdx/cdx.c:496:\tcdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-497-\tif (!cdx_dev-\u003eis_bus)\n--\ndrivers/cdx/cdx.c=503=static umode_t cdx_bus_attrs_are_visible(struct kobject *kobj, struct attribute *a, int n)\n--\ndrivers/cdx/cdx.c-505-\tstruct device *dev = kobj_to_dev(kobj);\ndrivers/cdx/cdx.c:506:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-507-\ndrivers/cdx/cdx.c:508:\tcdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-509-\tif (cdx_dev-\u003eis_bus)\n--\ndrivers/cdx/cdx.c=550=static int cdx_debug_resource_show(struct seq_file *s, void *data)\ndrivers/cdx/cdx.c-551-{\ndrivers/cdx/cdx.c:552:\tstruct cdx_device *cdx_dev = s-\u003eprivate;\ndrivers/cdx/cdx.c-553-\tint i;\n--\ndrivers/cdx/cdx.c=563=DEFINE_SHOW_ATTRIBUTE(cdx_debug_resource);\ndrivers/cdx/cdx.c-564-\ndrivers/cdx/cdx.c:565:static void cdx_device_debugfs_init(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx.c-566-{\n--\ndrivers/cdx/cdx.c=653=EXPORT_SYMBOL_GPL(cdx_driver_unregister);\ndrivers/cdx/cdx.c-654-\ndrivers/cdx/cdx.c:655:static void cdx_device_release(struct device *dev)\ndrivers/cdx/cdx.c-656-{\ndrivers/cdx/cdx.c:657:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx.c-658-\n--\ndrivers/cdx/cdx.c=680=static int cdx_mmap_resource(struct file *fp, struct kobject *kobj,\n--\ndrivers/cdx/cdx.c-683-{\ndrivers/cdx/cdx.c:684:\tstruct cdx_device *cdx_dev = to_cdx_device(kobj_to_dev(kobj));\ndrivers/cdx/cdx.c-685-\tint num = (unsigned long)attr-\u003eprivate;\n--\ndrivers/cdx/cdx.c-709-\ndrivers/cdx/cdx.c:710:static void cdx_destroy_res_attr(struct cdx_device *cdx_dev, int num)\ndrivers/cdx/cdx.c-711-{\n--\ndrivers/cdx/cdx.c-726-#define CDX_RES_ATTR_NAME_LEN\t10\ndrivers/cdx/cdx.c:727:static int cdx_create_res_attr(struct cdx_device *cdx_dev, int num)\ndrivers/cdx/cdx.c-728-{\n--\ndrivers/cdx/cdx.c-758-\ndrivers/cdx/cdx.c:759:int cdx_device_add(struct cdx_dev_params *dev_params)\ndrivers/cdx/cdx.c-760-{\ndrivers/cdx/cdx.c-761-\tstruct cdx_controller *cdx = dev_params-\u003ecdx;\ndrivers/cdx/cdx.c:762:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-763-\tint ret, i;\n--\ndrivers/cdx/cdx.c-792-\tcdx_dev-\u003edev.dma_mask = \u0026cdx_dev-\u003edma_mask;\ndrivers/cdx/cdx.c:793:\tcdx_dev-\u003edev.release = cdx_device_release;\ndrivers/cdx/cdx.c-794-\tcdx_dev-\u003emsi_write_pending = false;\n--\ndrivers/cdx/cdx.c-829-\ndrivers/cdx/cdx.c:830:\tcdx_device_debugfs_init(cdx_dev);\ndrivers/cdx/cdx.c-831-\n--\ndrivers/cdx/cdx.c-838-\t * Do not free cdx_dev here as it would be freed in\ndrivers/cdx/cdx.c:839:\t * cdx_device_release() called from put_device().\ndrivers/cdx/cdx.c-840-\t */\n--\ndrivers/cdx/cdx.c-844-}\ndrivers/cdx/cdx.c:845:EXPORT_SYMBOL_NS_GPL(cdx_device_add, \"CDX_BUS_CONTROLLER\");\ndrivers/cdx/cdx.c-846-\ndrivers/cdx/cdx.c=847=struct device *cdx_bus_add(struct cdx_controller *cdx, u8 bus_num)\ndrivers/cdx/cdx.c-848-{\ndrivers/cdx/cdx.c:849:\tstruct cdx_device *cdx_dev;\ndrivers/cdx/cdx.c-850-\tint ret;\n--\ndrivers/cdx/cdx.c-860-\tcdx_dev-\u003edev.bus = \u0026cdx_bus_type;\ndrivers/cdx/cdx.c:861:\tcdx_dev-\u003edev.release = cdx_device_release;\ndrivers/cdx/cdx.c-862-\tcdx_dev-\u003eis_bus = true;\n--\ndrivers/cdx/cdx.h=62=void cdx_unregister_controller(struct cdx_controller *cdx);\n--\ndrivers/cdx/cdx.h-64-/**\ndrivers/cdx/cdx.h:65: * cdx_device_add - Add a CDX device. This function adds a CDX device\ndrivers/cdx/cdx.h-66- *\t\ton the CDX bus as per the device parameters provided\n--\ndrivers/cdx/cdx.h-72- */\ndrivers/cdx/cdx.h:73:int cdx_device_add(struct cdx_dev_params *dev_params);\ndrivers/cdx/cdx.h-74-\n--\ndrivers/cdx/cdx_msi.c=19=static void cdx_msi_write_msg(struct irq_data *irq_data, struct msi_msg *msg)\n--\ndrivers/cdx/cdx_msi.c-21-\tstruct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);\ndrivers/cdx/cdx_msi.c:22:\tstruct cdx_device *cdx_dev = to_cdx_device(msi_desc-\u003edev);\ndrivers/cdx/cdx_msi.c-23-\n--\ndrivers/cdx/cdx_msi.c=31=static void cdx_msi_write_irq_lock(struct irq_data *irq_data)\n--\ndrivers/cdx/cdx_msi.c-33-\tstruct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);\ndrivers/cdx/cdx_msi.c:34:\tstruct cdx_device *cdx_dev = to_cdx_device(msi_desc-\u003edev);\ndrivers/cdx/cdx_msi.c-35-\n--\ndrivers/cdx/cdx_msi.c=39=static void cdx_msi_write_irq_unlock(struct irq_data *irq_data)\n--\ndrivers/cdx/cdx_msi.c-41-\tstruct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);\ndrivers/cdx/cdx_msi.c:42:\tstruct cdx_device *cdx_dev = to_cdx_device(msi_desc-\u003edev);\ndrivers/cdx/cdx_msi.c-43-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx_msi.c:44:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx_msi.c-45-\n--\ndrivers/cdx/cdx_msi.c-67-\ndrivers/cdx/cdx_msi.c:68:int cdx_enable_msi(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx_msi.c-69-{\ndrivers/cdx/cdx_msi.c-70-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx_msi.c:71:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx_msi.c-72-\n--\ndrivers/cdx/cdx_msi.c=82=EXPORT_SYMBOL_GPL(cdx_enable_msi);\ndrivers/cdx/cdx_msi.c-83-\ndrivers/cdx/cdx_msi.c:84:void cdx_disable_msi(struct cdx_device *cdx_dev)\ndrivers/cdx/cdx_msi.c-85-{\ndrivers/cdx/cdx_msi.c-86-\tstruct cdx_controller *cdx = cdx_dev-\u003ecdx;\ndrivers/cdx/cdx_msi.c:87:\tstruct cdx_device_config dev_config;\ndrivers/cdx/cdx_msi.c-88-\n--\ndrivers/cdx/cdx_msi.c=96=static struct irq_chip cdx_msi_irq_chip = {\n--\ndrivers/cdx/cdx_msi.c-107-/* Convert an msi_desc to a unique identifier within the domain. */\ndrivers/cdx/cdx_msi.c:108:static irq_hw_number_t cdx_domain_calc_hwirq(struct cdx_device *dev,\ndrivers/cdx/cdx_msi.c-109-\t\t\t\t\t struct msi_desc *desc)\n--\ndrivers/cdx/cdx_msi.c=114=static void cdx_msi_set_desc(msi_alloc_info_t *arg, struct msi_desc *desc)\n--\ndrivers/cdx/cdx_msi.c-116-\targ-\u003edesc = desc;\ndrivers/cdx/cdx_msi.c:117:\targ-\u003ehwirq = cdx_domain_calc_hwirq(to_cdx_device(desc-\u003edev), desc);\ndrivers/cdx/cdx_msi.c-118-}\n--\ndrivers/cdx/cdx_msi.c=120=static int cdx_msi_prepare(struct irq_domain *msi_domain,\n--\ndrivers/cdx/cdx_msi.c-124-\tstruct of_phandle_args msi_spec = {};\ndrivers/cdx/cdx_msi.c:125:\tstruct cdx_device *cdx_dev = to_cdx_device(dev);\ndrivers/cdx/cdx_msi.c-126-\tstruct device *parent = cdx_dev-\u003ecdx-\u003edev;\n--\ndrivers/cdx/controller/cdx_controller.c=59=static int cdx_configure_device(struct cdx_controller *cdx,\ndrivers/cdx/controller/cdx_controller.c-60-\t\t\t\tu8 bus_num, u8 dev_num,\ndrivers/cdx/controller/cdx_controller.c:61:\t\t\t\tstruct cdx_device_config *dev_config)\ndrivers/cdx/controller/cdx_controller.c-62-{\n--\ndrivers/cdx/controller/cdx_controller.c=93=static int cdx_scan_devices(struct cdx_controller *cdx)\n--\ndrivers/cdx/controller/cdx_controller.c-141-\t\t\t/* Add the device to the cdx bus */\ndrivers/cdx/controller/cdx_controller.c:142:\t\t\tret = cdx_device_add(\u0026dev_params);\ndrivers/cdx/controller/cdx_controller.c-143-\t\t\tif (ret) {\n--\ndrivers/vfio/cdx/intr.c=16=static irqreturn_t vfio_cdx_msihandler(int irq_no, void *arg)\n--\ndrivers/vfio/cdx/intr.c-23-\ndrivers/vfio/cdx/intr.c:24:static int vfio_cdx_msi_enable(struct vfio_cdx_device *vdev, int nvec)\ndrivers/vfio/cdx/intr.c-25-{\ndrivers/vfio/cdx/intr.c:26:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/intr.c-27-\tstruct device *dev = vdev-\u003evdev.dev;\n--\ndrivers/vfio/cdx/intr.c-57-\ndrivers/vfio/cdx/intr.c:58:static int vfio_cdx_msi_set_vector_signal(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/intr.c-59-\t\t\t\t\t int vector, int fd)\n--\ndrivers/vfio/cdx/intr.c-102-\ndrivers/vfio/cdx/intr.c:103:static int vfio_cdx_msi_set_block(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/intr.c-104-\t\t\t\t unsigned int start, unsigned int count,\n--\ndrivers/vfio/cdx/intr.c-125-\ndrivers/vfio/cdx/intr.c:126:static void vfio_cdx_msi_disable(struct vfio_cdx_device *vdev)\ndrivers/vfio/cdx/intr.c-127-{\ndrivers/vfio/cdx/intr.c:128:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/intr.c-129-\tstruct device *dev = vdev-\u003evdev.dev;\n--\ndrivers/vfio/cdx/intr.c-143-\ndrivers/vfio/cdx/intr.c:144:static int vfio_cdx_set_msi_trigger(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/intr.c-145-\t\t\t\t unsigned int index, unsigned int start,\n--\ndrivers/vfio/cdx/intr.c-148-{\ndrivers/vfio/cdx/intr.c:149:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/intr.c-150-\tint i;\n--\ndrivers/vfio/cdx/intr.c-198-\ndrivers/vfio/cdx/intr.c:199:int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/intr.c-200-\t\t\t u32 flags, unsigned int index,\n--\ndrivers/vfio/cdx/intr.c-211-/* Free All IRQs for the given device */\ndrivers/vfio/cdx/intr.c:212:void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev)\ndrivers/vfio/cdx/intr.c-213-{\n--\ndrivers/vfio/cdx/main.c=11=static int vfio_cdx_init_dev(struct vfio_device *core_vdev)\ndrivers/vfio/cdx/main.c-12-{\ndrivers/vfio/cdx/main.c:13:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:14:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c-15-\n--\ndrivers/vfio/cdx/main.c=20=static void vfio_cdx_release_dev(struct vfio_device *core_vdev)\ndrivers/vfio/cdx/main.c-21-{\ndrivers/vfio/cdx/main.c:22:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:23:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c-24-\n--\ndrivers/vfio/cdx/main.c=28=static int vfio_cdx_open_device(struct vfio_device *core_vdev)\ndrivers/vfio/cdx/main.c-29-{\ndrivers/vfio/cdx/main.c:30:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:31:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c:32:\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\ndrivers/vfio/cdx/main.c-33-\tint count = cdx_dev-\u003eres_count;\n--\ndrivers/vfio/cdx/main.c=74=static void vfio_cdx_close_device(struct vfio_device *core_vdev)\ndrivers/vfio/cdx/main.c-75-{\ndrivers/vfio/cdx/main.c:76:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:77:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c-78-\n--\ndrivers/vfio/cdx/main.c=84=static int vfio_cdx_bm_ctrl(struct vfio_device *core_vdev, u32 flags,\n--\ndrivers/vfio/cdx/main.c-88-\t\toffsetofend(struct vfio_device_feature_bus_master, op);\ndrivers/vfio/cdx/main.c:89:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:90:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c:91:\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\ndrivers/vfio/cdx/main.c-92-\tstruct vfio_device_feature_bus_master ops;\n--\ndrivers/vfio/cdx/main.c=116=static int vfio_cdx_ioctl_feature(struct vfio_device *device, u32 flags,\n--\ndrivers/vfio/cdx/main.c-126-\ndrivers/vfio/cdx/main.c:127:static int vfio_cdx_ioctl_get_info(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/main.c-128-\t\t\t\t struct vfio_device_info __user *arg)\n--\ndrivers/vfio/cdx/main.c-130-\tunsigned long minsz = offsetofend(struct vfio_device_info, num_irqs);\ndrivers/vfio/cdx/main.c:131:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/main.c-132-\tstruct vfio_device_info info;\n--\ndrivers/vfio/cdx/main.c=149=static int vfio_cdx_ioctl_get_region_info(struct vfio_device *core_vdev,\n--\ndrivers/vfio/cdx/main.c-152-{\ndrivers/vfio/cdx/main.c:153:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:154:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c:155:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/main.c-156-\n--\ndrivers/vfio/cdx/main.c-166-\ndrivers/vfio/cdx/main.c:167:static int vfio_cdx_ioctl_get_irq_info(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/main.c-168-\t\t\t\t struct vfio_irq_info __user *arg)\n--\ndrivers/vfio/cdx/main.c-170-\tunsigned long minsz = offsetofend(struct vfio_irq_info, count);\ndrivers/vfio/cdx/main.c:171:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/main.c-172-\tstruct vfio_irq_info info;\n--\ndrivers/vfio/cdx/main.c-191-\ndrivers/vfio/cdx/main.c:192:static int vfio_cdx_ioctl_set_irqs(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/main.c-193-\t\t\t\t struct vfio_irq_set __user *arg)\n--\ndrivers/vfio/cdx/main.c-195-\tunsigned long minsz = offsetofend(struct vfio_irq_set, count);\ndrivers/vfio/cdx/main.c:196:\tstruct cdx_device *cdx_dev = to_cdx_device(vdev-\u003evdev.dev);\ndrivers/vfio/cdx/main.c-197-\tstruct vfio_irq_set hdr;\n--\ndrivers/vfio/cdx/main.c=223=static long vfio_cdx_ioctl(struct vfio_device *core_vdev,\n--\ndrivers/vfio/cdx/main.c-225-{\ndrivers/vfio/cdx/main.c:226:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:227:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c-228-\tvoid __user *uarg = (void __user *)arg;\n--\ndrivers/vfio/cdx/main.c=264=static int vfio_cdx_mmap(struct vfio_device *core_vdev,\n--\ndrivers/vfio/cdx/main.c-266-{\ndrivers/vfio/cdx/main.c:267:\tstruct vfio_cdx_device *vdev =\ndrivers/vfio/cdx/main.c:268:\t\tcontainer_of(core_vdev, struct vfio_cdx_device, vdev);\ndrivers/vfio/cdx/main.c:269:\tstruct cdx_device *cdx_dev = to_cdx_device(core_vdev-\u003edev);\ndrivers/vfio/cdx/main.c-270-\tunsigned int index;\n--\ndrivers/vfio/cdx/main.c=294=static const struct vfio_device_ops vfio_cdx_ops = {\n--\ndrivers/vfio/cdx/main.c-308-\ndrivers/vfio/cdx/main.c:309:static int vfio_cdx_probe(struct cdx_device *cdx_dev)\ndrivers/vfio/cdx/main.c-310-{\ndrivers/vfio/cdx/main.c:311:\tstruct vfio_cdx_device *vdev;\ndrivers/vfio/cdx/main.c-312-\tstruct device *dev = \u0026cdx_dev-\u003edev;\n--\ndrivers/vfio/cdx/main.c-314-\ndrivers/vfio/cdx/main.c:315:\tvdev = vfio_alloc_device(vfio_cdx_device, vdev, dev,\ndrivers/vfio/cdx/main.c-316-\t\t\t\t \u0026vfio_cdx_ops);\n--\ndrivers/vfio/cdx/main.c-331-\ndrivers/vfio/cdx/main.c:332:static int vfio_cdx_remove(struct cdx_device *cdx_dev)\ndrivers/vfio/cdx/main.c-333-{\ndrivers/vfio/cdx/main.c-334-\tstruct device *dev = \u0026cdx_dev-\u003edev;\ndrivers/vfio/cdx/main.c:335:\tstruct vfio_cdx_device *vdev = dev_get_drvdata(dev);\ndrivers/vfio/cdx/main.c-336-\n--\ndrivers/vfio/cdx/main.c-342-\ndrivers/vfio/cdx/main.c:343:static const struct cdx_device_id vfio_cdx_table[] = {\ndrivers/vfio/cdx/main.c-344-\t{ CDX_DEVICE_DRIVER_OVERRIDE(CDX_ANY_ID, CDX_ANY_ID,\n--\ndrivers/vfio/cdx/private.h=26=struct vfio_cdx_region {\n--\ndrivers/vfio/cdx/private.h-32-\ndrivers/vfio/cdx/private.h:33:struct vfio_cdx_device {\ndrivers/vfio/cdx/private.h-34-\tstruct vfio_device\tvdev;\n--\ndrivers/vfio/cdx/private.h-43-#ifdef CONFIG_GENERIC_MSI_IRQ\ndrivers/vfio/cdx/private.h:44:int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/private.h-45-\t\t\t u32 flags, unsigned int index,\n--\ndrivers/vfio/cdx/private.h-48-\ndrivers/vfio/cdx/private.h:49:void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev);\ndrivers/vfio/cdx/private.h-50-#else\ndrivers/vfio/cdx/private.h:51:static int vfio_cdx_set_irqs_ioctl(struct vfio_cdx_device *vdev,\ndrivers/vfio/cdx/private.h-52-\t\t\t\t u32 flags, unsigned int index,\n--\ndrivers/vfio/cdx/private.h-58-\ndrivers/vfio/cdx/private.h:59:static void vfio_cdx_irqs_cleanup(struct vfio_cdx_device *vdev)\ndrivers/vfio/cdx/private.h-60-{\n--\ninclude/linux/cdx/cdx_bus.h=31=struct cdx_msi_config {\n--\ninclude/linux/cdx/cdx_bus.h-36-\ninclude/linux/cdx/cdx_bus.h:37:struct cdx_device_config {\ninclude/linux/cdx/cdx_bus.h-38-\tu8 type;\n--\ninclude/linux/cdx/cdx_bus.h=52=typedef int (*cdx_dev_configure_cb)(struct cdx_controller *cdx,\ninclude/linux/cdx/cdx_bus.h-53-\t\t\t\t u8 bus_num, u8 dev_num,\ninclude/linux/cdx/cdx_bus.h:54:\t\t\t\t struct cdx_device_config *dev_config);\ninclude/linux/cdx/cdx_bus.h-55-\n--\ninclude/linux/cdx/cdx_bus.h-60- *\ninclude/linux/cdx/cdx_bus.h:61: * This macro is used to create a struct cdx_device_id that matches a\ninclude/linux/cdx/cdx_bus.h-62- * specific device. The subvendor and subdevice fields will be set to\n--\ninclude/linux/cdx/cdx_bus.h-75- *\ninclude/linux/cdx/cdx_bus.h:76: * This macro is used to create a struct cdx_device_id that matches only a\ninclude/linux/cdx/cdx_bus.h-77- * driver_override device. The subvendor and subdevice fields will be set to\n--\ninclude/linux/cdx/cdx_bus.h=108=struct cdx_controller {\n--\ninclude/linux/cdx/cdx_bus.h-117-/**\ninclude/linux/cdx/cdx_bus.h:118: * struct cdx_device - CDX device object\ninclude/linux/cdx/cdx_bus.h-119- * @dev: Linux driver model device object\n--\ninclude/linux/cdx/cdx_bus.h-142- */\ninclude/linux/cdx/cdx_bus.h:143:struct cdx_device {\ninclude/linux/cdx/cdx_bus.h-144-\tstruct device dev;\n--\ninclude/linux/cdx/cdx_bus.h-168-\ninclude/linux/cdx/cdx_bus.h:169:#define to_cdx_device(_dev) \\\ninclude/linux/cdx/cdx_bus.h:170:\tcontainer_of(_dev, struct cdx_device, dev)\ninclude/linux/cdx/cdx_bus.h-171-\n--\ninclude/linux/cdx/cdx_bus.h=198=struct cdx_driver {\ninclude/linux/cdx/cdx_bus.h-199-\tstruct device_driver driver;\ninclude/linux/cdx/cdx_bus.h:200:\tconst struct cdx_device_id *match_id_table;\ninclude/linux/cdx/cdx_bus.h:201:\tint (*probe)(struct cdx_device *dev);\ninclude/linux/cdx/cdx_bus.h:202:\tint (*remove)(struct cdx_device *dev);\ninclude/linux/cdx/cdx_bus.h:203:\tvoid (*shutdown)(struct cdx_device *dev);\ninclude/linux/cdx/cdx_bus.h:204:\tvoid (*reset_prepare)(struct cdx_device *dev);\ninclude/linux/cdx/cdx_bus.h:205:\tvoid (*reset_done)(struct cdx_device *dev);\ninclude/linux/cdx/cdx_bus.h-206-\tbool driver_managed_dma;\n--\ninclude/linux/cdx/cdx_bus.h=241=int cdx_dev_reset(struct device *dev);\n--\ninclude/linux/cdx/cdx_bus.h-248- */\ninclude/linux/cdx/cdx_bus.h:249:int cdx_set_master(struct cdx_device *cdx_dev);\ninclude/linux/cdx/cdx_bus.h-250-\n--\ninclude/linux/cdx/cdx_bus.h-256- */\ninclude/linux/cdx/cdx_bus.h:257:int cdx_clear_master(struct cdx_device *cdx_dev);\ninclude/linux/cdx/cdx_bus.h-258-\n--\n\n"
} |
| 31/2 | 2026/09/06 22:15 | llm | patch-evaluator |
0mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 54565 output: 20 thoughts: 74 Thoughts: Here's my thought process, as it stands: **VFIO CDX Driver Investigation** Okay, so I'm looking at `drivers/vfio/cdx/main.c`. Right, that's the VFIO driver for the CDX bus – specifically the AMD Versal / Xilinx Versal Net composable devices bus. My immediate question is, is *this* the only driver using the CDX bus, or are there others? I need to figure out the extent of its usage. My instinct says I should probably check within the Xilinx Ethernet drivers first. Let's see... I'll start by checking within `drivers/net/ethernet/xilinx/` and similar directories to get a broader picture of potential CDX bus utilization. That should give me some direction. |
| 32/2 | 2026/09/06 22:15 | tool | grepper |
0mArgs:{
"Expression": "cdx_driver_register"
}Results: {
"Output": "drivers/cdx/cdx.c=628=EXPORT_SYMBOL_GPL(cdx_bus_type);\ndrivers/cdx/cdx.c-629-\ndrivers/cdx/cdx.c:630:int __cdx_driver_register(struct cdx_driver *cdx_driver,\ndrivers/cdx/cdx.c-631-\t\t\t struct module *owner)\n--\ndrivers/cdx/cdx.c-646-}\ndrivers/cdx/cdx.c:647:EXPORT_SYMBOL_GPL(__cdx_driver_register);\ndrivers/cdx/cdx.c-648-\n--\ndrivers/vfio/cdx/main.c=351=static struct cdx_driver vfio_cdx_driver = {\n--\ndrivers/vfio/cdx/main.c-360-\ndrivers/vfio/cdx/main.c:361:module_driver(vfio_cdx_driver, cdx_driver_register, cdx_driver_unregister);\ndrivers/vfio/cdx/main.c-362-\n--\ninclude/linux/cdx/cdx_bus.h=198=struct cdx_driver {\n--\ninclude/linux/cdx/cdx_bus.h-212-/* Macro to avoid include chaining to get THIS_MODULE */\ninclude/linux/cdx/cdx_bus.h:213:#define cdx_driver_register(drv) \\\ninclude/linux/cdx/cdx_bus.h:214:\t__cdx_driver_register(drv, THIS_MODULE)\ninclude/linux/cdx/cdx_bus.h-215-\ninclude/linux/cdx/cdx_bus.h-216-/**\ninclude/linux/cdx/cdx_bus.h:217: * __cdx_driver_register - registers a CDX device driver\ninclude/linux/cdx/cdx_bus.h-218- * @cdx_driver: CDX driver to register\n--\ninclude/linux/cdx/cdx_bus.h-222- */\ninclude/linux/cdx/cdx_bus.h:223:int __must_check __cdx_driver_register(struct cdx_driver *cdx_driver,\ninclude/linux/cdx/cdx_bus.h-224-\t\t\t\t struct module *owner);\n"
} |
| 33/2 | 2026/09/06 22:15 | llm | patch-evaluator |
1mModel:gemini-3.7-flash Args: null Results: null Tokens: input: 55437 output: 142 thoughts: 818 Thoughts: **VFIO CDX Driver Reachability Assessment** Okay, so the `vfio_cdx_driver` is, quite literally, the only driver on the CDX bus in the kernel, and the CDX bus controller itself *demands* physical AMD Versal hardware. That's a crucial point. It relies on either the rpmsg communication to the R5 firmware or a device tree node (`xlnx,versal-net-cdx`). Without that host controller, which *requires* the physical hardware, no CDX devices are ever enumerated or added. `cdx_device_add` is never called. Consequently, `vfio_cdx_probe` is never invoked. This means no VFIO CDX device is created, and user-space can't possibly interact with any `/dev/vfio/...` CDX device through open/mmap. Now, let's go back and review the documentation on hardware reachability. Section 2 clearly outlines "structurally unreachable hardware" as including vendor-specific PCIe switches, SmartNICs, GPU drivers (like `mlxsw`, `pds_core`, `qed`, `ionic`, and `amdgpu`) that require physical ASICs/PCIe cards not emulated in standard QEMU. "Unreachable execution paths" are also defined, involving scenarios like driver teardown callbacks during physical hot-unplug or manual unbinding. The core takeaway? **Reachability is the primary gate**. Fuzzing is only effective on code paths that *actually* execute within standard virtualized environments, like those using software-emulated devices. If the code is structurally unreachable, as described, it *must not* be fuzzed, regardless of how complex the logic or assertions might be. Looking specifically at the patch, the target function is `vfio_cdx_mmap()` in `drivers/vfio/cdx/main.c`. This function is part of the `vfio-cdx` driver, responsible for handling VFIO pass-through of AMD Versal-net CDX bus devices. Since CDX devices intrinsically depend on AMD Versal hardware and associated firmware that isn't emulated in standard QEMU/GCE environments, this makes `vfio_cdx_mmap` fundamentally unreachable in those fuzzing scenarios. Therefore, after careful consideration, I'm confident that `WorthFuzzing` should be set to `false`. My assessment: - EnableConfigs: \[ ] - FocusSymbols: \[ ] - WorthFuzzing: false - Reasoning: Clear and concise explanation of structural unreachability due to hardware dependencies in standard virtualized environments (QEMU/GCE). Now, let's prepare the `set-results` tool call. |
| 34/2 | 2026/09/06 22:16 | tool | set-results |
0mArgs:{
"EnableConfigs": [],
"FocusSymbols": [],
"Reasoning": "The patch modifies vfio_cdx_mmap() in drivers/vfio/cdx/main.c, which is part of the VFIO driver for the AMD Versal CDX bus. CDX devices depend on AMD Versal-net platform controller hardware and remote firmware (MCDI/rpmsg) that is not emulated in standard QEMU/GCE virtualized environments. Consequently, no CDX devices can be instantiated or bound to vfio-cdx, rendering the modified code structurally unreachable during fuzzing.",
"WorthFuzzing": false
}Results: {
"EnableConfigs": null,
"FocusSymbols": [],
"Reasoning": "The patch modifies vfio_cdx_mmap() in drivers/vfio/cdx/main.c, which is part of the VFIO driver for the AMD Versal CDX bus. CDX devices depend on AMD Versal-net platform controller hardware and remote firmware (MCDI/rpmsg) that is not emulated in standard QEMU/GCE virtualized environments. Consequently, no CDX devices can be instantiated or bound to vfio-cdx, rendering the modified code structurally unreachable during fuzzing.",
"WorthFuzzing": false
} |
| 35/1 | 2026/09/06 22:16 | action | If |
0mArgs:{
"WorthFuzzing": false
}Results: null |
| Total Calls | Total Tokens | Avg Tokens | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|
| Total Calls | Total Duration (Seconds) | Avg Duration (Seconds) |
|---|