AI Trajectory


Trajectory: (Expand/Collapse All)
Seq Timestamp Type Name Duration
0/0 2026/09/25 00:39 flow patch-triage
1m Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "KMSANReasoning": "",
  "NeedsKMSAN": false,
  "Reasoning": "The modified code in drivers/s390/cio/vfio_ccw_ops.c is exclusive to the s390 architecture (requires CONFIG_S390 and CONFIG_VFIO_CCW) and cannot be compiled or executed on the target architecture (amd64).",
  "WorthFuzzing": false
}

1/1 2026/09/25 00:39 action read-patch-diff
0m Args:
null

Results:
{
  "PatchDiff": "commit 9f30363ae126fc1bdd484595bd275374e4dec83e\nAuthor: syz-cluster \u003ctriage@syzkaller.com\u003e\nDate:   Fri Sep 25 00:39:31 2026 +0000\n\n    syz-cluster: applied patch under review\n\ndiff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c\nindex 5ce91285c7d52..8e0a2edbd34ab 100644\n--- a/drivers/s390/cio/vfio_ccw_ops.c\n+++ b/drivers/s390/cio/vfio_ccw_ops.c\n@@ -25,6 +25,14 @@ static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)\n \t * and re-opening the mdev, return an error.\n \t */\n \tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\n+\n+\t/*\n+\t * A failed CLOSE leaves the FSM Not Operational and defers cp_free()\n+\t * to notoper_work. Wait for it, so the channel program pages are\n+\t * unpinned before this returns.\n+\t */\n+\tflush_work(\u0026private-\u003enotoper_work);\n+\n \tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);\n \tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER)\n \t\treturn -EINVAL;\n"
}

2/1 2026/09/25 00:39 agent patch-evaluator
1m Model:
core

Args:
null

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The modified code in drivers/s390/cio/vfio_ccw_ops.c is exclusive to the s390 architecture (requires CONFIG_S390 and CONFIG_VFIO_CCW) and cannot be compiled or executed on the target architecture (amd64).",
  "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 9f30363ae126fc1bdd484595bd275374e4dec83e
Author: syz-cluster <triage@syzkaller.com>
Date:   Fri Sep 25 00:39:31 2026 +0000

    syz-cluster: applied patch under review

diff --git a/drivers/s390/cio/vfio_ccw_ops.c b/drivers/s390/cio/vfio_ccw_ops.c
index 5ce91285c7d52..8e0a2edbd34ab 100644
--- a/drivers/s390/cio/vfio_ccw_ops.c
+++ b/drivers/s390/cio/vfio_ccw_ops.c
@@ -25,6 +25,14 @@ static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)
 	 * and re-opening the mdev, return an error.
 	 */
 	vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);
+
+	/*
+	 * A failed CLOSE leaves the FSM Not Operational and defers cp_free()
+	 * to notoper_work. Wait for it, so the channel program pages are
+	 * unpinned before this returns.
+	 */
+	flush_work(&private->notoper_work);
+
 	vfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);
 	if (private->state == VFIO_CCW_STATE_NOT_OPER)
 		return -EINVAL;

3/2 2026/09/25 00:39 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 2995
							output: 33
							thoughts: 474
						

Thoughts:
**Evaluating the Patch for Fuzzing with Syzkaller**

Okay, so I've been asked to assess whether this patch is a good candidate for fuzzing with syzkaller. The first thing I'm doing is looking at the `diff` to understand the code changes. I see a change within `drivers/s390/cio/vfio_ccw_ops.c`. Now, the path immediately raises a flag: `s390` usually refers to the IBM mainframe architecture, and I know syzkaller has some coverage there, but it also supports other architectures. The request, however, specified amd64. 

The core of the patch involves adding a `flush_work` call within the `vfio_ccw_mdev_reset` function. It looks like it's addressing an issue where a failed close operation might leave the FSM in a Not Operational state, and they need to wait for a worker to finish some clean up. The concern here is about unpinning channel program pages before the function returns.

The key question is, *can* this `s390` code, or at least this part of it, even be compiled and run on amd64? I'm going to quickly check the `Kconfig` or `Makefile` in the `drivers/s390/cio/` directory to see if there's any conditional compilation based on the target architecture. If it's conditionally compiled *out* for amd64, then it's a non-starter for fuzzing on that architecture, as the code won't even be present. If it *is* compiled, the next step would be to see if there's any architecture-specific code that might be problematic for fuzzing, although it looks like a clean-up, I would still review the code to make sure it will be a good fuzz target on amd64. If it's not a fuzz target, then it will not be used in fuzzing. If it is a good target, then I will consider whether this change actually exposes new functionality that is worth fuzzing.



4/2 2026/09/25 00:40 tool grepper
0m Args:
{
  "Expression": "VFIO_CCW",
  "PathPrefix": "drivers/s390/cio"
}

Results:
{
  "Output": "drivers/s390/cio/Makefile=25=vfio_ccw-objs += vfio_ccw_drv.o vfio_ccw_cp.o vfio_ccw_ops.o vfio_ccw_fsm.o \\\ndrivers/s390/cio/Makefile-26-\tvfio_ccw_async.o vfio_ccw_trace.o vfio_ccw_chp.o\ndrivers/s390/cio/Makefile:27:obj-$(CONFIG_VFIO_CCW) += vfio_ccw.o\ndrivers/s390/cio/Makefile-28-\n--\ndrivers/s390/cio/vfio_ccw_async.c=15=static ssize_t vfio_ccw_async_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_async.c-18-{\ndrivers/s390/cio/vfio_ccw_async.c:19:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_async.c:20:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_async.c-21-\tstruct ccw_cmd_region *region;\n--\ndrivers/s390/cio/vfio_ccw_async.c=46=static ssize_t vfio_ccw_async_region_write(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_async.c-49-{\ndrivers/s390/cio/vfio_ccw_async.c:50:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_async.c:51:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_async.c-52-\tstruct ccw_cmd_region *region;\n--\ndrivers/s390/cio/vfio_ccw_async.c-72-\ndrivers/s390/cio/vfio_ccw_async.c:73:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_ASYNC_REQ);\ndrivers/s390/cio/vfio_ccw_async.c-74-\n--\ndrivers/s390/cio/vfio_ccw_chp.c=16=static ssize_t vfio_ccw_schib_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_chp.c-20-\tstruct subchannel *sch = to_subchannel(private-\u003evdev.dev-\u003eparent);\ndrivers/s390/cio/vfio_ccw_chp.c:21:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_chp.c:22:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_chp.c-23-\tstruct ccw_schib_region *region;\n--\ndrivers/s390/cio/vfio_ccw_chp.c=88=static ssize_t vfio_ccw_crw_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_chp.c-91-{\ndrivers/s390/cio/vfio_ccw_chp.c:92:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_chp.c:93:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_chp.c-94-\tstruct ccw_crw_region *region;\n--\ndrivers/s390/cio/vfio_ccw_cp.h-10-\ndrivers/s390/cio/vfio_ccw_cp.h:11:#ifndef _VFIO_CCW_CP_H_\ndrivers/s390/cio/vfio_ccw_cp.h:12:#define _VFIO_CCW_CP_H_\ndrivers/s390/cio/vfio_ccw_cp.h-13-\n--\ndrivers/s390/cio/vfio_ccw_drv.c=83=void vfio_ccw_sch_io_todo(struct work_struct *work)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-97-\t\tcp_update_scsw(\u0026private-\u003ecp, \u0026irb-\u003escsw);\ndrivers/s390/cio/vfio_ccw_drv.c:98:\t\tif (is_final \u0026\u0026 private-\u003estate == VFIO_CCW_STATE_CP_PENDING) {\ndrivers/s390/cio/vfio_ccw_drv.c-99-\t\t\tcp_free(\u0026private-\u003ecp);\n--\ndrivers/s390/cio/vfio_ccw_drv.c-111-\tif (cp_is_finished)\ndrivers/s390/cio/vfio_ccw_drv.c:112:\t\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_drv.c-113-\tmutex_unlock(\u0026private-\u003eio_mutex);\n--\ndrivers/s390/cio/vfio_ccw_drv.c=146=static void vfio_ccw_sch_irq(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-157-\tif (!private) {\ndrivers/s390/cio/vfio_ccw_drv.c:158:\t\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: unexpected interrupt\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-159-\t\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c-166-\tinc_irq_stat(IRQIO_CIO);\ndrivers/s390/cio/vfio_ccw_drv.c:167:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_INTERRUPT);\ndrivers/s390/cio/vfio_ccw_drv.c-168-}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=177=static int vfio_ccw_sch_probe(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-210-\ndrivers/s390/cio/vfio_ccw_drv.c:211:\tVFIO_CCW_MSG_EVENT(4, \"bound to subchannel %x.%x.%04x\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-212-\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=224=static void vfio_ccw_sch_remove(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-232-\ndrivers/s390/cio/vfio_ccw_drv.c:233:\tVFIO_CCW_MSG_EVENT(4, \"unbound from subchannel %x.%x.%04x\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-234-\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=238=static void vfio_ccw_sch_shutdown(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-245-\ndrivers/s390/cio/vfio_ccw_drv.c:246:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_drv.c:247:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_drv.c-248-}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=260=static int vfio_ccw_sch_event(struct subchannel *sch, int process)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-277-\t\tif (private)\ndrivers/s390/cio/vfio_ccw_drv.c:278:\t\t\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_drv.c-279-\t}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=317=static int vfio_ccw_chp_event(struct subchannel *sch,\n--\ndrivers/s390/cio/vfio_ccw_drv.c-328-\ttrace_vfio_ccw_chp_event(sch-\u003eschid, mask, event);\ndrivers/s390/cio/vfio_ccw_drv.c:329:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: mask=0x%x event=%d\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-330-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=423=static int __init vfio_ccw_sch_init(void)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-478-\ndrivers/s390/cio/vfio_ccw_drv.c:479:\tisc_register(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-480-\tret = css_driver_register(\u0026vfio_ccw_sch_driver);\ndrivers/s390/cio/vfio_ccw_drv.c-481-\tif (ret) {\ndrivers/s390/cio/vfio_ccw_drv.c:482:\t\tisc_unregister(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-483-\t\tgoto out_driver;\n--\ndrivers/s390/cio/vfio_ccw_drv.c=497=static void __exit vfio_ccw_sch_exit(void)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-500-\tmdev_unregister_driver(\u0026vfio_ccw_mdev_driver);\ndrivers/s390/cio/vfio_ccw_drv.c:501:\tisc_unregister(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-502-\tvfio_ccw_destroy_regions();\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=19=static int fsm_io_helper(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-35-\ndrivers/s390/cio/vfio_ccw_fsm.c:36:\tVFIO_CCW_TRACE_EVENT(5, \"stIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:37:\tVFIO_CCW_TRACE_EVENT(5, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-38-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-41-\ndrivers/s390/cio/vfio_ccw_fsm.c:42:\tVFIO_CCW_HEX_EVENT(5, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-43-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-50-\t\tret = 0;\ndrivers/s390/cio/vfio_ccw_fsm.c:51:\t\tprivate-\u003estate = VFIO_CCW_STATE_CP_PENDING;\ndrivers/s390/cio/vfio_ccw_fsm.c-52-\t\tbreak;\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=79=static int fsm_do_halt(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-87-\ndrivers/s390/cio/vfio_ccw_fsm.c:88:\tVFIO_CCW_TRACE_EVENT(2, \"haltIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:89:\tVFIO_CCW_TRACE_EVENT(2, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-90-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-93-\ndrivers/s390/cio/vfio_ccw_fsm.c:94:\tVFIO_CCW_HEX_EVENT(2, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-95-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=118=static int fsm_do_clear(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-126-\ndrivers/s390/cio/vfio_ccw_fsm.c:127:\tVFIO_CCW_TRACE_EVENT(2, \"clearIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:128:\tVFIO_CCW_TRACE_EVENT(2, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-129-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-132-\ndrivers/s390/cio/vfio_ccw_fsm.c:133:\tVFIO_CCW_HEX_EVENT(2, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-134-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=154=static void fsm_notoper(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-158-\ndrivers/s390/cio/vfio_ccw_fsm.c:159:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: notoper event %x state %x\\n\",\ndrivers/s390/cio/vfio_ccw_fsm.c-160-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-170-\tcss_sched_sch_todo(sch, SCH_TODO_UNREG);\ndrivers/s390/cio/vfio_ccw_fsm.c:171:\tprivate-\u003estate = VFIO_CCW_STATE_NOT_OPER;\ndrivers/s390/cio/vfio_ccw_fsm.c-172-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=204=static void fsm_async_error(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-209-\tpr_err(\"vfio-ccw: FSM: %s request from state:%d\\n\",\ndrivers/s390/cio/vfio_ccw_fsm.c:210:\t       cmd_region-\u003ecommand == VFIO_CCW_ASYNC_CMD_HSCH ? \"halt\" :\ndrivers/s390/cio/vfio_ccw_fsm.c:211:\t       cmd_region-\u003ecommand == VFIO_CCW_ASYNC_CMD_CSCH ? \"clear\" :\ndrivers/s390/cio/vfio_ccw_fsm.c-212-\t       \"\u003cunknown\u003e\", private-\u003estate);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=243=static void fsm_io_request(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-251-\ndrivers/s390/cio/vfio_ccw_fsm.c:252:\tprivate-\u003estate = VFIO_CCW_STATE_CP_PROCESSING;\ndrivers/s390/cio/vfio_ccw_fsm.c-253-\tmemcpy(scsw, io_region-\u003escsw_area, sizeof(*scsw));\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-260-\t\t\tio_region-\u003eret_code = -EOPNOTSUPP;\ndrivers/s390/cio/vfio_ccw_fsm.c:261:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-262-\t\t\t\t\t   \"sch %x.%x.%04x: transport mode\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-269-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:270:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-271-\t\t\t\t\t   \"sch %x.%x.%04x: cp_init=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-280-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:281:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-282-\t\t\t\t\t   \"sch %x.%x.%04x: cp_prefetch=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-293-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:294:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-295-\t\t\t\t\t   \"sch %x.%x.%04x: fsm_io_helper=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-304-\t} else if (scsw-\u003ecmd.fctl \u0026 SCSW_FCTL_HALT_FUNC) {\ndrivers/s390/cio/vfio_ccw_fsm.c:305:\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-306-\t\t\t\t   \"sch %x.%x.%04x: halt on io_region\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-312-\t} else if (scsw-\u003ecmd.fctl \u0026 SCSW_FCTL_CLEAR_FUNC) {\ndrivers/s390/cio/vfio_ccw_fsm.c:313:\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-314-\t\t\t\t   \"sch %x.%x.%04x: clear on io_region\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-322-err_out:\ndrivers/s390/cio/vfio_ccw_fsm.c:323:\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_fsm.c-324-\ttrace_vfio_ccw_fsm_io_request(scsw-\u003ecmd.fctl, schid,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=331=static void fsm_async_request(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-336-\tswitch (cmd_region-\u003ecommand) {\ndrivers/s390/cio/vfio_ccw_fsm.c:337:\tcase VFIO_CCW_ASYNC_CMD_HSCH:\ndrivers/s390/cio/vfio_ccw_fsm.c-338-\t\tcmd_region-\u003eret_code = fsm_do_halt(private);\ndrivers/s390/cio/vfio_ccw_fsm.c-339-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_fsm.c:340:\tcase VFIO_CCW_ASYNC_CMD_CSCH:\ndrivers/s390/cio/vfio_ccw_fsm.c-341-\t\tcmd_region-\u003eret_code = fsm_do_clear(private);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=356=static void fsm_irq(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-361-\ndrivers/s390/cio/vfio_ccw_fsm.c:362:\tVFIO_CCW_TRACE_EVENT(6, \"IRQ\");\ndrivers/s390/cio/vfio_ccw_fsm.c:363:\tVFIO_CCW_TRACE_EVENT(6, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-364-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=373=static void fsm_open(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-379-\tspin_lock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:380:\tsch-\u003eisc = VFIO_CCW_ISC;\ndrivers/s390/cio/vfio_ccw_fsm.c-381-\tret = cio_enable_subchannel(sch, (u32)virt_to_phys(sch));\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-384-\ndrivers/s390/cio/vfio_ccw_fsm.c:385:\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_fsm.c-386-\tspin_unlock_irq(\u0026sch-\u003elock);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-390-\tspin_unlock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:391:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_fsm.c-392-}\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=394=static void fsm_close(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-410-\ndrivers/s390/cio/vfio_ccw_fsm.c:411:\tprivate-\u003estate = VFIO_CCW_STATE_STANDBY;\ndrivers/s390/cio/vfio_ccw_fsm.c-412-\tspin_unlock_irq(\u0026sch-\u003elock);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-421-\tspin_unlock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:422:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_fsm.c-423-}\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-427- */\ndrivers/s390/cio/vfio_ccw_fsm.c:428:fsm_func_t *vfio_ccw_jumptable[NR_VFIO_CCW_STATES][NR_VFIO_CCW_EVENTS] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:429:\t[VFIO_CCW_STATE_NOT_OPER] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:430:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c:431:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:432:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:433:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_disabled_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:434:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c:435:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c-436-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:437:\t[VFIO_CCW_STATE_STANDBY] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:438:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:439:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:440:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:441:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_disabled_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:442:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_open,\ndrivers/s390/cio/vfio_ccw_fsm.c:443:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c-444-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:445:\t[VFIO_CCW_STATE_IDLE] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:446:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:447:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:448:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:449:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:450:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:451:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-452-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:453:\t[VFIO_CCW_STATE_CP_PROCESSING] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:454:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:455:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_retry,\ndrivers/s390/cio/vfio_ccw_fsm.c:456:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_retry,\ndrivers/s390/cio/vfio_ccw_fsm.c:457:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:458:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:459:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-460-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:461:\t[VFIO_CCW_STATE_CP_PENDING] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:462:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:463:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_busy,\ndrivers/s390/cio/vfio_ccw_fsm.c:464:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:465:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:466:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:467:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-468-\t},\n--\ndrivers/s390/cio/vfio_ccw_ops.c=21=static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-26-\t */\ndrivers/s390/cio/vfio_ccw_ops.c:27:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_ops.c-28-\n--\ndrivers/s390/cio/vfio_ccw_ops.c-35-\ndrivers/s390/cio/vfio_ccw_ops.c:36:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);\ndrivers/s390/cio/vfio_ccw_ops.c:37:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER)\ndrivers/s390/cio/vfio_ccw_ops.c-38-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=55=static int vfio_ccw_mdev_init_dev(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-60-\tmutex_init(\u0026private-\u003eio_mutex);\ndrivers/s390/cio/vfio_ccw_ops.c:61:\tprivate-\u003estate = VFIO_CCW_STATE_STANDBY;\ndrivers/s390/cio/vfio_ccw_ops.c-62-\tINIT_LIST_HEAD(\u0026private-\u003ecrw);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=107=static int vfio_ccw_mdev_probe(struct mdev_device *mdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-120-\ndrivers/s390/cio/vfio_ccw_ops.c:121:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: create\\n\",\ndrivers/s390/cio/vfio_ccw_ops.c-122-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_ops.c=174=static void vfio_ccw_mdev_remove(struct mdev_device *mdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-179-\ndrivers/s390/cio/vfio_ccw_ops.c:180:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: remove\\n\",\ndrivers/s390/cio/vfio_ccw_ops.c-181-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_ops.c=191=static int vfio_ccw_mdev_open_device(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-197-\t/* Device cannot simply be opened again from this state */\ndrivers/s390/cio/vfio_ccw_ops.c:198:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER)\ndrivers/s390/cio/vfio_ccw_ops.c-199-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-212-\ndrivers/s390/cio/vfio_ccw_ops.c:213:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);\ndrivers/s390/cio/vfio_ccw_ops.c:214:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER) {\ndrivers/s390/cio/vfio_ccw_ops.c-215-\t\tret = -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=226=static void vfio_ccw_mdev_close_device(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-230-\ndrivers/s390/cio/vfio_ccw_ops.c:231:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_ops.c-232-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=248=static ssize_t vfio_ccw_mdev_read_io_region(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-251-{\ndrivers/s390/cio/vfio_ccw_ops.c:252:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_ops.c-253-\tstruct ccw_io_region *region;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=269=static ssize_t vfio_ccw_mdev_read(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-275-\t\tcontainer_of(vdev, struct vfio_ccw_private, vdev);\ndrivers/s390/cio/vfio_ccw_ops.c:276:\tunsigned int index = VFIO_CCW_OFFSET_TO_INDEX(*ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-277-\ndrivers/s390/cio/vfio_ccw_ops.c:278:\tif (index \u003e= VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-279-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-281-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:282:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-283-\t\treturn vfio_ccw_mdev_read_io_region(private, buf, count, ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-284-\tdefault:\ndrivers/s390/cio/vfio_ccw_ops.c:285:\t\tindex -= VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-286-\t\tindex = array_index_nospec(index, private-\u003enum_regions);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=294=static ssize_t vfio_ccw_mdev_write_io_region(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-297-{\ndrivers/s390/cio/vfio_ccw_ops.c:298:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_ops.c-299-\tstruct ccw_io_region *region;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-313-\ndrivers/s390/cio/vfio_ccw_ops.c:314:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_IO_REQ);\ndrivers/s390/cio/vfio_ccw_ops.c-315-\tret = (region-\u003eret_code != 0) ? region-\u003eret_code : count;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=322=static ssize_t vfio_ccw_mdev_write(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-328-\t\tcontainer_of(vdev, struct vfio_ccw_private, vdev);\ndrivers/s390/cio/vfio_ccw_ops.c:329:\tunsigned int index = VFIO_CCW_OFFSET_TO_INDEX(*ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-330-\ndrivers/s390/cio/vfio_ccw_ops.c:331:\tif (index \u003e= VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-332-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-334-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:335:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-336-\t\treturn vfio_ccw_mdev_write_io_region(private, buf, count, ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-337-\tdefault:\ndrivers/s390/cio/vfio_ccw_ops.c:338:\t\tindex -= VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-339-\t\tindex = array_index_nospec(index, private-\u003enum_regions);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=347=static int vfio_ccw_mdev_get_device_info(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-350-\tinfo-\u003eflags = VFIO_DEVICE_FLAGS_CCW | VFIO_DEVICE_FLAGS_RESET;\ndrivers/s390/cio/vfio_ccw_ops.c:351:\tinfo-\u003enum_regions = VFIO_CCW_NUM_REGIONS + private-\u003enum_regions;\ndrivers/s390/cio/vfio_ccw_ops.c:352:\tinfo-\u003enum_irqs = VFIO_CCW_NUM_IRQS;\ndrivers/s390/cio/vfio_ccw_ops.c-353-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=357=static int vfio_ccw_mdev_ioctl_get_region_info(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-365-\tswitch (info-\u003eindex) {\ndrivers/s390/cio/vfio_ccw_ops.c:366:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-367-\t\tinfo-\u003eoffset = 0;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-379-\t\tif (info-\u003eindex \u003e=\ndrivers/s390/cio/vfio_ccw_ops.c:380:\t\t    VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-381-\t\t\treturn -EINVAL;\ndrivers/s390/cio/vfio_ccw_ops.c-382-\ndrivers/s390/cio/vfio_ccw_ops.c:383:\t\ti = info-\u003eindex - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-384-\t\ti = array_index_nospec(i, private-\u003enum_regions);\ndrivers/s390/cio/vfio_ccw_ops.c-385-\ndrivers/s390/cio/vfio_ccw_ops.c:386:\t\tinfo-\u003eoffset = VFIO_CCW_INDEX_TO_OFFSET(info-\u003eindex);\ndrivers/s390/cio/vfio_ccw_ops.c-387-\t\tinfo-\u003esize = private-\u003eregion[i].size;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=402=static int vfio_ccw_mdev_get_irq_info(struct vfio_irq_info *info)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-404-\tswitch (info-\u003eindex) {\ndrivers/s390/cio/vfio_ccw_ops.c:405:\tcase VFIO_CCW_IO_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c:406:\tcase VFIO_CCW_CRW_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c:407:\tcase VFIO_CCW_REQ_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-408-\t\tinfo-\u003ecount = 1;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=418=static int vfio_ccw_mdev_set_irqs(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-428-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:429:\tcase VFIO_CCW_IO_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-430-\t\tctx = \u0026private-\u003eio_trigger;\ndrivers/s390/cio/vfio_ccw_ops.c-431-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_ops.c:432:\tcase VFIO_CCW_CRW_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-433-\t\tctx = \u0026private-\u003ecrw_trigger;\ndrivers/s390/cio/vfio_ccw_ops.c-434-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_ops.c:435:\tcase VFIO_CCW_REQ_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-436-\t\tctx = \u0026private-\u003ereq_trigger;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=529=static ssize_t vfio_ccw_mdev_ioctl(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-565-\ndrivers/s390/cio/vfio_ccw_ops.c:566:\t\tif (info.argsz \u003c minsz || info.index \u003e= VFIO_CCW_NUM_IRQS)\ndrivers/s390/cio/vfio_ccw_ops.c-567-\t\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-589-\t\tret = vfio_set_irqs_validate_and_prepare(\u0026hdr, 1,\ndrivers/s390/cio/vfio_ccw_ops.c:590:\t\t\t\t\t\t\t VFIO_CCW_NUM_IRQS,\ndrivers/s390/cio/vfio_ccw_ops.c-591-\t\t\t\t\t\t\t \u0026data_size);\n--\ndrivers/s390/cio/vfio_ccw_private.h-12-\ndrivers/s390/cio/vfio_ccw_private.h:13:#ifndef _VFIO_CCW_PRIVATE_H_\ndrivers/s390/cio/vfio_ccw_private.h:14:#define _VFIO_CCW_PRIVATE_H_\ndrivers/s390/cio/vfio_ccw_private.h-15-\n--\ndrivers/s390/cio/vfio_ccw_private.h-27-\ndrivers/s390/cio/vfio_ccw_private.h:28:#define VFIO_CCW_OFFSET_SHIFT   10\ndrivers/s390/cio/vfio_ccw_private.h:29:#define VFIO_CCW_OFFSET_TO_INDEX(off)\t(off \u003e\u003e VFIO_CCW_OFFSET_SHIFT)\ndrivers/s390/cio/vfio_ccw_private.h:30:#define VFIO_CCW_INDEX_TO_OFFSET(index)\t((u64)(index) \u003c\u003c VFIO_CCW_OFFSET_SHIFT)\ndrivers/s390/cio/vfio_ccw_private.h:31:#define VFIO_CCW_OFFSET_MASK\t(((u64)(1) \u003c\u003c VFIO_CCW_OFFSET_SHIFT) - 1)\ndrivers/s390/cio/vfio_ccw_private.h-32-\n--\ndrivers/s390/cio/vfio_ccw_private.h=148=enum vfio_ccw_state {\ndrivers/s390/cio/vfio_ccw_private.h:149:\tVFIO_CCW_STATE_NOT_OPER,\ndrivers/s390/cio/vfio_ccw_private.h:150:\tVFIO_CCW_STATE_STANDBY,\ndrivers/s390/cio/vfio_ccw_private.h:151:\tVFIO_CCW_STATE_IDLE,\ndrivers/s390/cio/vfio_ccw_private.h:152:\tVFIO_CCW_STATE_CP_PROCESSING,\ndrivers/s390/cio/vfio_ccw_private.h:153:\tVFIO_CCW_STATE_CP_PENDING,\ndrivers/s390/cio/vfio_ccw_private.h-154-\t/* last element! */\ndrivers/s390/cio/vfio_ccw_private.h:155:\tNR_VFIO_CCW_STATES\ndrivers/s390/cio/vfio_ccw_private.h-156-};\n--\ndrivers/s390/cio/vfio_ccw_private.h=161=enum vfio_ccw_event {\ndrivers/s390/cio/vfio_ccw_private.h:162:\tVFIO_CCW_EVENT_NOT_OPER,\ndrivers/s390/cio/vfio_ccw_private.h:163:\tVFIO_CCW_EVENT_IO_REQ,\ndrivers/s390/cio/vfio_ccw_private.h:164:\tVFIO_CCW_EVENT_INTERRUPT,\ndrivers/s390/cio/vfio_ccw_private.h:165:\tVFIO_CCW_EVENT_ASYNC_REQ,\ndrivers/s390/cio/vfio_ccw_private.h:166:\tVFIO_CCW_EVENT_OPEN,\ndrivers/s390/cio/vfio_ccw_private.h:167:\tVFIO_CCW_EVENT_CLOSE,\ndrivers/s390/cio/vfio_ccw_private.h-168-\t/* last element! */\ndrivers/s390/cio/vfio_ccw_private.h:169:\tNR_VFIO_CCW_EVENTS\ndrivers/s390/cio/vfio_ccw_private.h-170-};\n--\ndrivers/s390/cio/vfio_ccw_private.h=175=typedef void (fsm_func_t)(struct vfio_ccw_private *, enum vfio_ccw_event);\ndrivers/s390/cio/vfio_ccw_private.h:176:extern fsm_func_t *vfio_ccw_jumptable[NR_VFIO_CCW_STATES][NR_VFIO_CCW_EVENTS];\ndrivers/s390/cio/vfio_ccw_private.h-177-\n--\ndrivers/s390/cio/vfio_ccw_private.h=196=extern debug_info_t *vfio_ccw_debug_trace_id;\ndrivers/s390/cio/vfio_ccw_private.h-197-\ndrivers/s390/cio/vfio_ccw_private.h:198:#define VFIO_CCW_TRACE_EVENT(imp, txt) \\\ndrivers/s390/cio/vfio_ccw_private.h-199-\t\tdebug_text_event(vfio_ccw_debug_trace_id, imp, txt)\ndrivers/s390/cio/vfio_ccw_private.h-200-\ndrivers/s390/cio/vfio_ccw_private.h:201:#define VFIO_CCW_MSG_EVENT(imp, args...) \\\ndrivers/s390/cio/vfio_ccw_private.h-202-\t\tdebug_sprintf_event(vfio_ccw_debug_msg_id, imp, ##args)\ndrivers/s390/cio/vfio_ccw_private.h-203-\ndrivers/s390/cio/vfio_ccw_private.h:204:static inline void VFIO_CCW_HEX_EVENT(int level, void *data, int length)\ndrivers/s390/cio/vfio_ccw_private.h-205-{\n--\ndrivers/s390/cio/vfio_ccw_trace.h-14-\ndrivers/s390/cio/vfio_ccw_trace.h:15:#if !defined(_VFIO_CCW_TRACE_) || defined(TRACE_HEADER_MULTI_READ)\ndrivers/s390/cio/vfio_ccw_trace.h:16:#define _VFIO_CCW_TRACE_\ndrivers/s390/cio/vfio_ccw_trace.h-17-\n--\ndrivers/s390/cio/vfio_ccw_trace.h=106=TRACE_EVENT(vfio_ccw_fsm_io_request,\n--\ndrivers/s390/cio/vfio_ccw_trace.h-136-\ndrivers/s390/cio/vfio_ccw_trace.h:137:#endif /* _VFIO_CCW_TRACE_ */\ndrivers/s390/cio/vfio_ccw_trace.h-138-\n"
}

5/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 18437
							output: 28
							thoughts: 26
						

Thoughts:
Here's my take on the thought process, tailored for an expert audience:

**Examining s390 Kconfig Files for Configuration Logic**

Okay, so I need to get a handle on the relevant configuration options. My first move is to dive into the heart of the matter – the `Kconfig` files. Specifically, I need to check out `drivers/s390/Kconfig` and, crucially, `drivers/s390/cio/Kconfig`. These are the files where the build system defines the configuration variables, dependencies, defaults, and help text that determine what gets compiled into the kernel for the s390 architecture, and the Channel I/O (CIO) subsystem. I'm expecting to find the standard `config` directives, `depends on`, `default`, `select`, `help` blocks – the whole shebang – that shape the available options and their relationships. I want to quickly grasp the logical flow and any potential conflicts or interactions between settings within the general s390 setup and the CIO specifics. Knowing these will inform any modifications or debugging efforts I may need to undertake. My goal here is a quick, but comprehensive, understanding of how this is controlled.



6/2 2026/09/25 00:40 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "config VFIO_CCW",
  "PathPrefix": "drivers/"
}

Results:
{
  "error": "no matches"
}

7/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 18758
							output: 31
							thoughts: 27
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience:

**Investigating VFIO-CCW Configuration in the s390 Architecture**

Alright, so I'm looking at how VFIO-CCW is set up. My initial instinct is to go straight to the configuration files. Given the context, the logical starting point is `drivers/s390/cio/Kconfig`. That's where I'd expect to find the core definitions related to the channel I/O (CIO) subsystem on s390, and I'm betting that's where any VFIO-CCW related options would reside. It's the most likely location for enabling/disabling the VFIO-CCW features and controlling their behavior.

Of course, a targeted `grep` within that Kconfig file is a quick and effective way to confirm my hunch and directly pinpoint the relevant configuration options. I'd be looking specifically for `VFIO_CCW` itself to quickly find where it's defined, dependent on, or perhaps providing dependencies for other features. That should give me the entry point and the relationships of those features with the rest of the configuration.



8/2 2026/09/25 00:40 tool grepper
0m Args:
{
  "Expression": "VFIO_CCW",
  "PathPrefix": "drivers/s390"
}

Results:
{
  "Output": "drivers/s390/cio/Makefile=25=vfio_ccw-objs += vfio_ccw_drv.o vfio_ccw_cp.o vfio_ccw_ops.o vfio_ccw_fsm.o \\\ndrivers/s390/cio/Makefile-26-\tvfio_ccw_async.o vfio_ccw_trace.o vfio_ccw_chp.o\ndrivers/s390/cio/Makefile:27:obj-$(CONFIG_VFIO_CCW) += vfio_ccw.o\ndrivers/s390/cio/Makefile-28-\n--\ndrivers/s390/cio/vfio_ccw_async.c=15=static ssize_t vfio_ccw_async_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_async.c-18-{\ndrivers/s390/cio/vfio_ccw_async.c:19:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_async.c:20:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_async.c-21-\tstruct ccw_cmd_region *region;\n--\ndrivers/s390/cio/vfio_ccw_async.c=46=static ssize_t vfio_ccw_async_region_write(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_async.c-49-{\ndrivers/s390/cio/vfio_ccw_async.c:50:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_async.c:51:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_async.c-52-\tstruct ccw_cmd_region *region;\n--\ndrivers/s390/cio/vfio_ccw_async.c-72-\ndrivers/s390/cio/vfio_ccw_async.c:73:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_ASYNC_REQ);\ndrivers/s390/cio/vfio_ccw_async.c-74-\n--\ndrivers/s390/cio/vfio_ccw_chp.c=16=static ssize_t vfio_ccw_schib_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_chp.c-20-\tstruct subchannel *sch = to_subchannel(private-\u003evdev.dev-\u003eparent);\ndrivers/s390/cio/vfio_ccw_chp.c:21:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_chp.c:22:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_chp.c-23-\tstruct ccw_schib_region *region;\n--\ndrivers/s390/cio/vfio_ccw_chp.c=88=static ssize_t vfio_ccw_crw_region_read(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_chp.c-91-{\ndrivers/s390/cio/vfio_ccw_chp.c:92:\tunsigned int i = VFIO_CCW_OFFSET_TO_INDEX(*ppos) - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_chp.c:93:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_chp.c-94-\tstruct ccw_crw_region *region;\n--\ndrivers/s390/cio/vfio_ccw_cp.h-10-\ndrivers/s390/cio/vfio_ccw_cp.h:11:#ifndef _VFIO_CCW_CP_H_\ndrivers/s390/cio/vfio_ccw_cp.h:12:#define _VFIO_CCW_CP_H_\ndrivers/s390/cio/vfio_ccw_cp.h-13-\n--\ndrivers/s390/cio/vfio_ccw_drv.c=83=void vfio_ccw_sch_io_todo(struct work_struct *work)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-97-\t\tcp_update_scsw(\u0026private-\u003ecp, \u0026irb-\u003escsw);\ndrivers/s390/cio/vfio_ccw_drv.c:98:\t\tif (is_final \u0026\u0026 private-\u003estate == VFIO_CCW_STATE_CP_PENDING) {\ndrivers/s390/cio/vfio_ccw_drv.c-99-\t\t\tcp_free(\u0026private-\u003ecp);\n--\ndrivers/s390/cio/vfio_ccw_drv.c-111-\tif (cp_is_finished)\ndrivers/s390/cio/vfio_ccw_drv.c:112:\t\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_drv.c-113-\tmutex_unlock(\u0026private-\u003eio_mutex);\n--\ndrivers/s390/cio/vfio_ccw_drv.c=146=static void vfio_ccw_sch_irq(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-157-\tif (!private) {\ndrivers/s390/cio/vfio_ccw_drv.c:158:\t\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: unexpected interrupt\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-159-\t\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c-166-\tinc_irq_stat(IRQIO_CIO);\ndrivers/s390/cio/vfio_ccw_drv.c:167:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_INTERRUPT);\ndrivers/s390/cio/vfio_ccw_drv.c-168-}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=177=static int vfio_ccw_sch_probe(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-210-\ndrivers/s390/cio/vfio_ccw_drv.c:211:\tVFIO_CCW_MSG_EVENT(4, \"bound to subchannel %x.%x.%04x\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-212-\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=224=static void vfio_ccw_sch_remove(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-232-\ndrivers/s390/cio/vfio_ccw_drv.c:233:\tVFIO_CCW_MSG_EVENT(4, \"unbound from subchannel %x.%x.%04x\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-234-\t\t\t   sch-\u003eschid.cssid, sch-\u003eschid.ssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=238=static void vfio_ccw_sch_shutdown(struct subchannel *sch)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-245-\ndrivers/s390/cio/vfio_ccw_drv.c:246:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_drv.c:247:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_drv.c-248-}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=260=static int vfio_ccw_sch_event(struct subchannel *sch, int process)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-277-\t\tif (private)\ndrivers/s390/cio/vfio_ccw_drv.c:278:\t\t\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_drv.c-279-\t}\n--\ndrivers/s390/cio/vfio_ccw_drv.c=317=static int vfio_ccw_chp_event(struct subchannel *sch,\n--\ndrivers/s390/cio/vfio_ccw_drv.c-328-\ttrace_vfio_ccw_chp_event(sch-\u003eschid, mask, event);\ndrivers/s390/cio/vfio_ccw_drv.c:329:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: mask=0x%x event=%d\\n\",\ndrivers/s390/cio/vfio_ccw_drv.c-330-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_drv.c=423=static int __init vfio_ccw_sch_init(void)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-478-\ndrivers/s390/cio/vfio_ccw_drv.c:479:\tisc_register(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-480-\tret = css_driver_register(\u0026vfio_ccw_sch_driver);\ndrivers/s390/cio/vfio_ccw_drv.c-481-\tif (ret) {\ndrivers/s390/cio/vfio_ccw_drv.c:482:\t\tisc_unregister(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-483-\t\tgoto out_driver;\n--\ndrivers/s390/cio/vfio_ccw_drv.c=497=static void __exit vfio_ccw_sch_exit(void)\n--\ndrivers/s390/cio/vfio_ccw_drv.c-500-\tmdev_unregister_driver(\u0026vfio_ccw_mdev_driver);\ndrivers/s390/cio/vfio_ccw_drv.c:501:\tisc_unregister(VFIO_CCW_ISC);\ndrivers/s390/cio/vfio_ccw_drv.c-502-\tvfio_ccw_destroy_regions();\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=19=static int fsm_io_helper(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-35-\ndrivers/s390/cio/vfio_ccw_fsm.c:36:\tVFIO_CCW_TRACE_EVENT(5, \"stIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:37:\tVFIO_CCW_TRACE_EVENT(5, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-38-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-41-\ndrivers/s390/cio/vfio_ccw_fsm.c:42:\tVFIO_CCW_HEX_EVENT(5, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-43-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-50-\t\tret = 0;\ndrivers/s390/cio/vfio_ccw_fsm.c:51:\t\tprivate-\u003estate = VFIO_CCW_STATE_CP_PENDING;\ndrivers/s390/cio/vfio_ccw_fsm.c-52-\t\tbreak;\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=79=static int fsm_do_halt(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-87-\ndrivers/s390/cio/vfio_ccw_fsm.c:88:\tVFIO_CCW_TRACE_EVENT(2, \"haltIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:89:\tVFIO_CCW_TRACE_EVENT(2, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-90-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-93-\ndrivers/s390/cio/vfio_ccw_fsm.c:94:\tVFIO_CCW_HEX_EVENT(2, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-95-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=118=static int fsm_do_clear(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-126-\ndrivers/s390/cio/vfio_ccw_fsm.c:127:\tVFIO_CCW_TRACE_EVENT(2, \"clearIO\");\ndrivers/s390/cio/vfio_ccw_fsm.c:128:\tVFIO_CCW_TRACE_EVENT(2, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-129-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-132-\ndrivers/s390/cio/vfio_ccw_fsm.c:133:\tVFIO_CCW_HEX_EVENT(2, \u0026ccode, sizeof(ccode));\ndrivers/s390/cio/vfio_ccw_fsm.c-134-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=154=static void fsm_notoper(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-158-\ndrivers/s390/cio/vfio_ccw_fsm.c:159:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: notoper event %x state %x\\n\",\ndrivers/s390/cio/vfio_ccw_fsm.c-160-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-170-\tcss_sched_sch_todo(sch, SCH_TODO_UNREG);\ndrivers/s390/cio/vfio_ccw_fsm.c:171:\tprivate-\u003estate = VFIO_CCW_STATE_NOT_OPER;\ndrivers/s390/cio/vfio_ccw_fsm.c-172-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=204=static void fsm_async_error(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-209-\tpr_err(\"vfio-ccw: FSM: %s request from state:%d\\n\",\ndrivers/s390/cio/vfio_ccw_fsm.c:210:\t       cmd_region-\u003ecommand == VFIO_CCW_ASYNC_CMD_HSCH ? \"halt\" :\ndrivers/s390/cio/vfio_ccw_fsm.c:211:\t       cmd_region-\u003ecommand == VFIO_CCW_ASYNC_CMD_CSCH ? \"clear\" :\ndrivers/s390/cio/vfio_ccw_fsm.c-212-\t       \"\u003cunknown\u003e\", private-\u003estate);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=243=static void fsm_io_request(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-251-\ndrivers/s390/cio/vfio_ccw_fsm.c:252:\tprivate-\u003estate = VFIO_CCW_STATE_CP_PROCESSING;\ndrivers/s390/cio/vfio_ccw_fsm.c-253-\tmemcpy(scsw, io_region-\u003escsw_area, sizeof(*scsw));\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-260-\t\t\tio_region-\u003eret_code = -EOPNOTSUPP;\ndrivers/s390/cio/vfio_ccw_fsm.c:261:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-262-\t\t\t\t\t   \"sch %x.%x.%04x: transport mode\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-269-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:270:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-271-\t\t\t\t\t   \"sch %x.%x.%04x: cp_init=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-280-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:281:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-282-\t\t\t\t\t   \"sch %x.%x.%04x: cp_prefetch=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-293-\t\tif (io_region-\u003eret_code) {\ndrivers/s390/cio/vfio_ccw_fsm.c:294:\t\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-295-\t\t\t\t\t   \"sch %x.%x.%04x: fsm_io_helper=%d\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-304-\t} else if (scsw-\u003ecmd.fctl \u0026 SCSW_FCTL_HALT_FUNC) {\ndrivers/s390/cio/vfio_ccw_fsm.c:305:\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-306-\t\t\t\t   \"sch %x.%x.%04x: halt on io_region\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-312-\t} else if (scsw-\u003ecmd.fctl \u0026 SCSW_FCTL_CLEAR_FUNC) {\ndrivers/s390/cio/vfio_ccw_fsm.c:313:\t\tVFIO_CCW_MSG_EVENT(2,\ndrivers/s390/cio/vfio_ccw_fsm.c-314-\t\t\t\t   \"sch %x.%x.%04x: clear on io_region\\n\",\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-322-err_out:\ndrivers/s390/cio/vfio_ccw_fsm.c:323:\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_fsm.c-324-\ttrace_vfio_ccw_fsm_io_request(scsw-\u003ecmd.fctl, schid,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=331=static void fsm_async_request(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-336-\tswitch (cmd_region-\u003ecommand) {\ndrivers/s390/cio/vfio_ccw_fsm.c:337:\tcase VFIO_CCW_ASYNC_CMD_HSCH:\ndrivers/s390/cio/vfio_ccw_fsm.c-338-\t\tcmd_region-\u003eret_code = fsm_do_halt(private);\ndrivers/s390/cio/vfio_ccw_fsm.c-339-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_fsm.c:340:\tcase VFIO_CCW_ASYNC_CMD_CSCH:\ndrivers/s390/cio/vfio_ccw_fsm.c-341-\t\tcmd_region-\u003eret_code = fsm_do_clear(private);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=356=static void fsm_irq(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-361-\ndrivers/s390/cio/vfio_ccw_fsm.c:362:\tVFIO_CCW_TRACE_EVENT(6, \"IRQ\");\ndrivers/s390/cio/vfio_ccw_fsm.c:363:\tVFIO_CCW_TRACE_EVENT(6, dev_name(\u0026sch-\u003edev));\ndrivers/s390/cio/vfio_ccw_fsm.c-364-\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=373=static void fsm_open(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-379-\tspin_lock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:380:\tsch-\u003eisc = VFIO_CCW_ISC;\ndrivers/s390/cio/vfio_ccw_fsm.c-381-\tret = cio_enable_subchannel(sch, (u32)virt_to_phys(sch));\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-384-\ndrivers/s390/cio/vfio_ccw_fsm.c:385:\tprivate-\u003estate = VFIO_CCW_STATE_IDLE;\ndrivers/s390/cio/vfio_ccw_fsm.c-386-\tspin_unlock_irq(\u0026sch-\u003elock);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-390-\tspin_unlock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:391:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_fsm.c-392-}\n--\ndrivers/s390/cio/vfio_ccw_fsm.c=394=static void fsm_close(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-410-\ndrivers/s390/cio/vfio_ccw_fsm.c:411:\tprivate-\u003estate = VFIO_CCW_STATE_STANDBY;\ndrivers/s390/cio/vfio_ccw_fsm.c-412-\tspin_unlock_irq(\u0026sch-\u003elock);\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-421-\tspin_unlock_irq(\u0026sch-\u003elock);\ndrivers/s390/cio/vfio_ccw_fsm.c:422:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_NOT_OPER);\ndrivers/s390/cio/vfio_ccw_fsm.c-423-}\n--\ndrivers/s390/cio/vfio_ccw_fsm.c-427- */\ndrivers/s390/cio/vfio_ccw_fsm.c:428:fsm_func_t *vfio_ccw_jumptable[NR_VFIO_CCW_STATES][NR_VFIO_CCW_EVENTS] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:429:\t[VFIO_CCW_STATE_NOT_OPER] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:430:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c:431:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:432:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:433:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_disabled_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:434:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c:435:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_nop,\ndrivers/s390/cio/vfio_ccw_fsm.c-436-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:437:\t[VFIO_CCW_STATE_STANDBY] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:438:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:439:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:440:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_error,\ndrivers/s390/cio/vfio_ccw_fsm.c:441:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_disabled_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:442:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_open,\ndrivers/s390/cio/vfio_ccw_fsm.c:443:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c-444-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:445:\t[VFIO_CCW_STATE_IDLE] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:446:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:447:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:448:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:449:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:450:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:451:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-452-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:453:\t[VFIO_CCW_STATE_CP_PROCESSING] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:454:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:455:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_retry,\ndrivers/s390/cio/vfio_ccw_fsm.c:456:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_retry,\ndrivers/s390/cio/vfio_ccw_fsm.c:457:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:458:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:459:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-460-\t},\ndrivers/s390/cio/vfio_ccw_fsm.c:461:\t[VFIO_CCW_STATE_CP_PENDING] = {\ndrivers/s390/cio/vfio_ccw_fsm.c:462:\t\t[VFIO_CCW_EVENT_NOT_OPER]\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:463:\t\t[VFIO_CCW_EVENT_IO_REQ]\t\t= fsm_io_busy,\ndrivers/s390/cio/vfio_ccw_fsm.c:464:\t\t[VFIO_CCW_EVENT_ASYNC_REQ]\t= fsm_async_request,\ndrivers/s390/cio/vfio_ccw_fsm.c:465:\t\t[VFIO_CCW_EVENT_INTERRUPT]\t= fsm_irq,\ndrivers/s390/cio/vfio_ccw_fsm.c:466:\t\t[VFIO_CCW_EVENT_OPEN]\t\t= fsm_notoper,\ndrivers/s390/cio/vfio_ccw_fsm.c:467:\t\t[VFIO_CCW_EVENT_CLOSE]\t\t= fsm_close,\ndrivers/s390/cio/vfio_ccw_fsm.c-468-\t},\n--\ndrivers/s390/cio/vfio_ccw_ops.c=21=static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-26-\t */\ndrivers/s390/cio/vfio_ccw_ops.c:27:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_ops.c-28-\n--\ndrivers/s390/cio/vfio_ccw_ops.c-35-\ndrivers/s390/cio/vfio_ccw_ops.c:36:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);\ndrivers/s390/cio/vfio_ccw_ops.c:37:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER)\ndrivers/s390/cio/vfio_ccw_ops.c-38-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=55=static int vfio_ccw_mdev_init_dev(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-60-\tmutex_init(\u0026private-\u003eio_mutex);\ndrivers/s390/cio/vfio_ccw_ops.c:61:\tprivate-\u003estate = VFIO_CCW_STATE_STANDBY;\ndrivers/s390/cio/vfio_ccw_ops.c-62-\tINIT_LIST_HEAD(\u0026private-\u003ecrw);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=107=static int vfio_ccw_mdev_probe(struct mdev_device *mdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-120-\ndrivers/s390/cio/vfio_ccw_ops.c:121:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: create\\n\",\ndrivers/s390/cio/vfio_ccw_ops.c-122-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_ops.c=174=static void vfio_ccw_mdev_remove(struct mdev_device *mdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-179-\ndrivers/s390/cio/vfio_ccw_ops.c:180:\tVFIO_CCW_MSG_EVENT(2, \"sch %x.%x.%04x: remove\\n\",\ndrivers/s390/cio/vfio_ccw_ops.c-181-\t\t\t   sch-\u003eschid.cssid,\n--\ndrivers/s390/cio/vfio_ccw_ops.c=191=static int vfio_ccw_mdev_open_device(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-197-\t/* Device cannot simply be opened again from this state */\ndrivers/s390/cio/vfio_ccw_ops.c:198:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER)\ndrivers/s390/cio/vfio_ccw_ops.c-199-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-212-\ndrivers/s390/cio/vfio_ccw_ops.c:213:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_OPEN);\ndrivers/s390/cio/vfio_ccw_ops.c:214:\tif (private-\u003estate == VFIO_CCW_STATE_NOT_OPER) {\ndrivers/s390/cio/vfio_ccw_ops.c-215-\t\tret = -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=226=static void vfio_ccw_mdev_close_device(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-230-\ndrivers/s390/cio/vfio_ccw_ops.c:231:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_CLOSE);\ndrivers/s390/cio/vfio_ccw_ops.c-232-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=248=static ssize_t vfio_ccw_mdev_read_io_region(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-251-{\ndrivers/s390/cio/vfio_ccw_ops.c:252:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_ops.c-253-\tstruct ccw_io_region *region;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=269=static ssize_t vfio_ccw_mdev_read(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-275-\t\tcontainer_of(vdev, struct vfio_ccw_private, vdev);\ndrivers/s390/cio/vfio_ccw_ops.c:276:\tunsigned int index = VFIO_CCW_OFFSET_TO_INDEX(*ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-277-\ndrivers/s390/cio/vfio_ccw_ops.c:278:\tif (index \u003e= VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-279-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-281-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:282:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-283-\t\treturn vfio_ccw_mdev_read_io_region(private, buf, count, ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-284-\tdefault:\ndrivers/s390/cio/vfio_ccw_ops.c:285:\t\tindex -= VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-286-\t\tindex = array_index_nospec(index, private-\u003enum_regions);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=294=static ssize_t vfio_ccw_mdev_write_io_region(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-297-{\ndrivers/s390/cio/vfio_ccw_ops.c:298:\tloff_t pos = *ppos \u0026 VFIO_CCW_OFFSET_MASK;\ndrivers/s390/cio/vfio_ccw_ops.c-299-\tstruct ccw_io_region *region;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-313-\ndrivers/s390/cio/vfio_ccw_ops.c:314:\tvfio_ccw_fsm_event(private, VFIO_CCW_EVENT_IO_REQ);\ndrivers/s390/cio/vfio_ccw_ops.c-315-\tret = (region-\u003eret_code != 0) ? region-\u003eret_code : count;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=322=static ssize_t vfio_ccw_mdev_write(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-328-\t\tcontainer_of(vdev, struct vfio_ccw_private, vdev);\ndrivers/s390/cio/vfio_ccw_ops.c:329:\tunsigned int index = VFIO_CCW_OFFSET_TO_INDEX(*ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-330-\ndrivers/s390/cio/vfio_ccw_ops.c:331:\tif (index \u003e= VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-332-\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-334-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:335:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-336-\t\treturn vfio_ccw_mdev_write_io_region(private, buf, count, ppos);\ndrivers/s390/cio/vfio_ccw_ops.c-337-\tdefault:\ndrivers/s390/cio/vfio_ccw_ops.c:338:\t\tindex -= VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-339-\t\tindex = array_index_nospec(index, private-\u003enum_regions);\n--\ndrivers/s390/cio/vfio_ccw_ops.c=347=static int vfio_ccw_mdev_get_device_info(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-350-\tinfo-\u003eflags = VFIO_DEVICE_FLAGS_CCW | VFIO_DEVICE_FLAGS_RESET;\ndrivers/s390/cio/vfio_ccw_ops.c:351:\tinfo-\u003enum_regions = VFIO_CCW_NUM_REGIONS + private-\u003enum_regions;\ndrivers/s390/cio/vfio_ccw_ops.c:352:\tinfo-\u003enum_irqs = VFIO_CCW_NUM_IRQS;\ndrivers/s390/cio/vfio_ccw_ops.c-353-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=357=static int vfio_ccw_mdev_ioctl_get_region_info(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-365-\tswitch (info-\u003eindex) {\ndrivers/s390/cio/vfio_ccw_ops.c:366:\tcase VFIO_CCW_CONFIG_REGION_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-367-\t\tinfo-\u003eoffset = 0;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-379-\t\tif (info-\u003eindex \u003e=\ndrivers/s390/cio/vfio_ccw_ops.c:380:\t\t    VFIO_CCW_NUM_REGIONS + private-\u003enum_regions)\ndrivers/s390/cio/vfio_ccw_ops.c-381-\t\t\treturn -EINVAL;\ndrivers/s390/cio/vfio_ccw_ops.c-382-\ndrivers/s390/cio/vfio_ccw_ops.c:383:\t\ti = info-\u003eindex - VFIO_CCW_NUM_REGIONS;\ndrivers/s390/cio/vfio_ccw_ops.c-384-\t\ti = array_index_nospec(i, private-\u003enum_regions);\ndrivers/s390/cio/vfio_ccw_ops.c-385-\ndrivers/s390/cio/vfio_ccw_ops.c:386:\t\tinfo-\u003eoffset = VFIO_CCW_INDEX_TO_OFFSET(info-\u003eindex);\ndrivers/s390/cio/vfio_ccw_ops.c-387-\t\tinfo-\u003esize = private-\u003eregion[i].size;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=402=static int vfio_ccw_mdev_get_irq_info(struct vfio_irq_info *info)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-404-\tswitch (info-\u003eindex) {\ndrivers/s390/cio/vfio_ccw_ops.c:405:\tcase VFIO_CCW_IO_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c:406:\tcase VFIO_CCW_CRW_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c:407:\tcase VFIO_CCW_REQ_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-408-\t\tinfo-\u003ecount = 1;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=418=static int vfio_ccw_mdev_set_irqs(struct vfio_ccw_private *private,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-428-\tswitch (index) {\ndrivers/s390/cio/vfio_ccw_ops.c:429:\tcase VFIO_CCW_IO_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-430-\t\tctx = \u0026private-\u003eio_trigger;\ndrivers/s390/cio/vfio_ccw_ops.c-431-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_ops.c:432:\tcase VFIO_CCW_CRW_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-433-\t\tctx = \u0026private-\u003ecrw_trigger;\ndrivers/s390/cio/vfio_ccw_ops.c-434-\t\tbreak;\ndrivers/s390/cio/vfio_ccw_ops.c:435:\tcase VFIO_CCW_REQ_IRQ_INDEX:\ndrivers/s390/cio/vfio_ccw_ops.c-436-\t\tctx = \u0026private-\u003ereq_trigger;\n--\ndrivers/s390/cio/vfio_ccw_ops.c=529=static ssize_t vfio_ccw_mdev_ioctl(struct vfio_device *vdev,\n--\ndrivers/s390/cio/vfio_ccw_ops.c-565-\ndrivers/s390/cio/vfio_ccw_ops.c:566:\t\tif (info.argsz \u003c minsz || info.index \u003e= VFIO_CCW_NUM_IRQS)\ndrivers/s390/cio/vfio_ccw_ops.c-567-\t\t\treturn -EINVAL;\n--\ndrivers/s390/cio/vfio_ccw_ops.c-589-\t\tret = vfio_set_irqs_validate_and_prepare(\u0026hdr, 1,\ndrivers/s390/cio/vfio_ccw_ops.c:590:\t\t\t\t\t\t\t VFIO_CCW_NUM_IRQS,\ndrivers/s390/cio/vfio_ccw_ops.c-591-\t\t\t\t\t\t\t \u0026data_size);\n--\ndrivers/s390/cio/vfio_ccw_private.h-12-\ndrivers/s390/cio/vfio_ccw_private.h:13:#ifndef _VFIO_CCW_PRIVATE_H_\ndrivers/s390/cio/vfio_ccw_private.h:14:#define _VFIO_CCW_PRIVATE_H_\ndrivers/s390/cio/vfio_ccw_private.h-15-\n--\ndrivers/s390/cio/vfio_ccw_private.h-27-\ndrivers/s390/cio/vfio_ccw_private.h:28:#define VFIO_CCW_OFFSET_SHIFT   10\ndrivers/s390/cio/vfio_ccw_private.h:29:#define VFIO_CCW_OFFSET_TO_INDEX(off)\t(off \u003e\u003e VFIO_CCW_OFFSET_SHIFT)\ndrivers/s390/cio/vfio_ccw_private.h:30:#define VFIO_CCW_INDEX_TO_OFFSET(index)\t((u64)(index) \u003c\u003c VFIO_CCW_OFFSET_SHIFT)\ndrivers/s390/cio/vfio_ccw_private.h:31:#define VFIO_CCW_OFFSET_MASK\t(((u64)(1) \u003c\u003c VFIO_CCW_OFFSET_SHIFT) - 1)\ndrivers/s390/cio/vfio_ccw_private.h-32-\n--\ndrivers/s390/cio/vfio_ccw_private.h=148=enum vfio_ccw_state {\ndrivers/s390/cio/vfio_ccw_private.h:149:\tVFIO_CCW_STATE_NOT_OPER,\ndrivers/s390/cio/vfio_ccw_private.h:150:\tVFIO_CCW_STATE_STANDBY,\ndrivers/s390/cio/vfio_ccw_private.h:151:\tVFIO_CCW_STATE_IDLE,\ndrivers/s390/cio/vfio_ccw_private.h:152:\tVFIO_CCW_STATE_CP_PROCESSING,\ndrivers/s390/cio/vfio_ccw_private.h:153:\tVFIO_CCW_STATE_CP_PENDING,\ndrivers/s390/cio/vfio_ccw_private.h-154-\t/* last element! */\ndrivers/s390/cio/vfio_ccw_private.h:155:\tNR_VFIO_CCW_STATES\ndrivers/s390/cio/vfio_ccw_private.h-156-};\n--\ndrivers/s390/cio/vfio_ccw_private.h=161=enum vfio_ccw_event {\ndrivers/s390/cio/vfio_ccw_private.h:162:\tVFIO_CCW_EVENT_NOT_OPER,\ndrivers/s390/cio/vfio_ccw_private.h:163:\tVFIO_CCW_EVENT_IO_REQ,\ndrivers/s390/cio/vfio_ccw_private.h:164:\tVFIO_CCW_EVENT_INTERRUPT,\ndrivers/s390/cio/vfio_ccw_private.h:165:\tVFIO_CCW_EVENT_ASYNC_REQ,\ndrivers/s390/cio/vfio_ccw_private.h:166:\tVFIO_CCW_EVENT_OPEN,\ndrivers/s390/cio/vfio_ccw_private.h:167:\tVFIO_CCW_EVENT_CLOSE,\ndrivers/s390/cio/vfio_ccw_private.h-168-\t/* last element! */\ndrivers/s390/cio/vfio_ccw_private.h:169:\tNR_VFIO_CCW_EVENTS\ndrivers/s390/cio/vfio_ccw_private.h-170-};\n--\ndrivers/s390/cio/vfio_ccw_private.h=175=typedef void (fsm_func_t)(struct vfio_ccw_private *, enum vfio_ccw_event);\ndrivers/s390/cio/vfio_ccw_private.h:176:extern fsm_func_t *vfio_ccw_jumptable[NR_VFIO_CCW_STATES][NR_VFIO_CCW_EVENTS];\ndrivers/s390/cio/vfio_ccw_private.h-177-\n--\ndrivers/s390/cio/vfio_ccw_private.h=196=extern debug_info_t *vfio_ccw_debug_trace_id;\ndrivers/s390/cio/vfio_ccw_private.h-197-\ndrivers/s390/cio/vfio_ccw_private.h:198:#define VFIO_CCW_TRACE_EVENT(imp, txt) \\\ndrivers/s390/cio/vfio_ccw_private.h-199-\t\tdebug_text_event(vfio_ccw_debug_trace_id, imp, txt)\ndrivers/s390/cio/vfio_ccw_private.h-200-\ndrivers/s390/cio/vfio_ccw_private.h:201:#define VFIO_CCW_MSG_EVENT(imp, args...) \\\ndrivers/s390/cio/vfio_ccw_private.h-202-\t\tdebug_sprintf_event(vfio_ccw_debug_msg_id, imp, ##args)\ndrivers/s390/cio/vfio_ccw_private.h-203-\ndrivers/s390/cio/vfio_ccw_private.h:204:static inline void VFIO_CCW_HEX_EVENT(int level, void *data, int length)\ndrivers/s390/cio/vfio_ccw_private.h-205-{\n--\ndrivers/s390/cio/vfio_ccw_trace.h-14-\ndrivers/s390/cio/vfio_ccw_trace.h:15:#if !defined(_VFIO_CCW_TRACE_) || defined(TRACE_HEADER_MULTI_READ)\ndrivers/s390/cio/vfio_ccw_trace.h:16:#define _VFIO_CCW_TRACE_\ndrivers/s390/cio/vfio_ccw_trace.h-17-\n--\ndrivers/s390/cio/vfio_ccw_trace.h=106=TRACE_EVENT(vfio_ccw_fsm_io_request,\n--\ndrivers/s390/cio/vfio_ccw_trace.h-136-\ndrivers/s390/cio/vfio_ccw_trace.h:137:#endif /* _VFIO_CCW_TRACE_ */\ndrivers/s390/cio/vfio_ccw_trace.h-138-\n"
}

9/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 33554
							output: 36
							thoughts: 35
						

Thoughts:
Okay, here's my take on those thoughts, tailored for an expert audience and written in the first person:

**Investigating the CONFIG_VFIO_CCW Configuration**

Alright, I'm digging into something that touches on VFIO and the s390 architecture. My immediate thought is, "Where exactly is `CONFIG_VFIO_CCW` defined?" It's a key configuration option, so I need to know where it's being set, what dependencies it has, and perhaps even what context surrounds it. Given its nature, my intuition leads me to two likely locations within the kernel source. I'll need to check `drivers/s390/cio/Kconfig` first, since the "CCW" part strongly suggests Channel I/O, which is a core s390 component. Then, if it's not there, the logical next place would be `drivers/vfio/Kconfig`, since VFIO (Virtual Function I/O) is clearly in the name. Either one should give me the answer and show the logic and dependencies that go along with this definition.



10/2 2026/09/25 00:40 tool grepper
0m Error:
no matches

Args:
{
  "Expression": "VFIO_CCW",
  "PathPrefix": "drivers/s390/cio/Kconfig"
}

Results:
{
  "error": "no matches"
}

11/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 33874
							output: 22
							thoughts: 15
						

Thoughts:
Here's my thought process, summarized as you requested:

**VFIO_CCW Kconfig Hunt**

Okay, let's get down to brass tacks. My initial thought is to find all the Kconfig files that reference `VFIO_CCW`. This is a straightforward, fundamental first step when dealing with kernel configuration and a new module like this. It's the most efficient way to understand its dependencies, available options, and how it integrates into the broader kernel configuration landscape. Finding these references will give me a base to work from. I need to understand where this fits and what I can do with it. Let's see what the Kconfig files reveal.



12/2 2026/09/25 00:40 tool grepper
0m Args:
{
  "Expression": "config VFIO_CCW\\b"
}

Results:
{
  "Output": "arch/s390/Kconfig=821=config AP_DEBUG\n--\narch/s390/Kconfig-834-\narch/s390/Kconfig:835:config VFIO_CCW\narch/s390/Kconfig-836-\tdef_tristate n\n"
}

13/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 34143
							output: 37
							thoughts: 44
						

Thoughts:
Here's my summary, as though I'm thinking through this process:

**VFIO-CCW Discovery and Context**

Okay, so I see `arch/s390/Kconfig` defines `config VFIO_CCW` – that's the key. My immediate thought is, "Right, VFIO on the s390 architecture." Given my understanding of the system, this is likely related to device assignment and direct access to CCW (Channel Command Word) devices, which is, of course, critical for virtualization and high-performance I/O in the z/ architecture. Now, I want to get a look at the surrounding context; I need to understand how `VFIO_CCW` is being introduced within the broader configuration framework. Let's jump to around line 835 in `arch/s390/Kconfig`. That should give me a good feel for dependencies, any conditional logic, and how this feature is presented to the user during the kernel configuration process. This will help me to understand how this is connected to the existing s390 infrastructure and the broader VFIO framework. Let's see what we find!



14/2 2026/09/25 00:40 tool read-file
0m Args:
{
  "File": "arch/s390/Kconfig",
  "FirstLine": 830,
  "LineCount": 25
}

Results:
{
  "Contents": " 830:\t\n 831:\t\t  Do not enable on production level kernel build.\n 832:\t\n 833:\t\t  If unsure, say N.\n 834:\t\n 835:\tconfig VFIO_CCW\n 836:\t\tdef_tristate n\n 837:\t\tprompt \"Support for VFIO-CCW subchannels\"\n 838:\t\tdepends on VFIO\n 839:\t\tselect VFIO_MDEV\n 840:\t\thelp\n 841:\t\t  This driver allows usage of I/O subchannels via VFIO-CCW.\n 842:\t\n 843:\t\t  To compile this driver as a module, choose M here: the\n 844:\t\t  module will be called vfio_ccw.\n 845:\t\n 846:\tconfig VFIO_AP\n 847:\t\tdef_tristate n\n 848:\t\tprompt \"VFIO support for AP devices\"\n 849:\t\tdepends on KVM\n 850:\t\tdepends on VFIO\n 851:\t\tdepends on AP\n 852:\t\tselect VFIO_MDEV\n 853:\t\thelp\n 854:\t\t  This driver grants access to Adjunct Processor (AP) devices\n"
}

15/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 34805
							output: 27
							thoughts: 39
						

Thoughts:
Here's my thought process, as requested:

**Investigating s390 CIO Driver Inclusion**

Okay, so I need to figure out how the `drivers/s390/cio/` directory gets built into the kernel. My first instinct is to dive into the Makefiles. I'll start with the obvious places: the `drivers/s390/Makefile` itself, and the root-level `Makefile`. The root Makefile is the grand orchestrator, so it'll provide the broader view, while the s390 Makefile should be the immediate point of inclusion for the CIO driver's source code. I expect the root Makefile might be where the high-level configuration options influence inclusion, while the s390 Makefile will handle the specifics of compilation and linking. Let's see what these files reveal!



16/2 2026/09/25 00:40 tool grepper
0m Args:
{
  "Expression": "s390",
  "PathPrefix": "drivers/Makefile"
}

Results:
{
  "Output": "drivers/Makefile=199=obj-$(CONFIG_DIBS)\t\t+= dibs/\ndrivers/Makefile:200:obj-$(CONFIG_S390)\t\t+= s390/\n"
}

17/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 35107
							output: 36
							thoughts: 317
						

Thoughts:
**WorthFuzzing Decision for Drivers/Makefile Modification**

Okay, so I'm looking at this `drivers/Makefile` change, specifically `obj-$(CONFIG_S390) += s390/`.  And, of course, `CONFIG_S390` is *only* defined for the s390 architecture, which I already know because I'm intimately familiar with the Kconfig structure. Now, the target architecture for this build is explicitly amd64. That immediately triggers my "WorthFuzzing" evaluation process.

Time to consult the guidelines. Specifically, Section 2 on when to *not* fuzz. The relevant negative criteria here is about *unreachable execution paths*, and it explicitly says "Return WorthFuzzing=false ONLY IF all modified code falls strictly into one or more of these categories". Let me repeat that wording in my head: "Code paths exclusive to architectures other than the target architecture." Perfect.

The file modified is `drivers/s390/cio/vfio_ccw_ops.c`.  It's sitting in the `drivers/s390/cio/` directory, and is compiled under `CONFIG_S390` *and* `CONFIG_VFIO_CCW`, both of which are specific to the s390 architecture in `arch/s390/Kconfig`. I know for a fact that this code cannot possibly compile, let alone *run*, on an amd64 system. It's utterly unreachable in that context.

Just to be absolutely sure and understand the commit's context, I'll quickly glance at the git log. But the decision is clear: WorthFuzzing = false.



18/2 2026/09/25 00:40 tool grepper
0m Args:
{
  "Expression": "flush_work.*notoper_work",
  "PathPrefix": "drivers/s390/cio"
}

Results:
{
  "Output": "drivers/s390/cio/vfio_ccw_ops.c=21=static int vfio_ccw_mdev_reset(struct vfio_ccw_private *private)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-33-\t */\ndrivers/s390/cio/vfio_ccw_ops.c:34:\tflush_work(\u0026private-\u003enotoper_work);\ndrivers/s390/cio/vfio_ccw_ops.c-35-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=138=static void vfio_ccw_mdev_release_dev(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-156-\tcancel_work_sync(\u0026private-\u003ecrw_work);\ndrivers/s390/cio/vfio_ccw_ops.c:157:\tflush_work(\u0026private-\u003enotoper_work);\ndrivers/s390/cio/vfio_ccw_ops.c-158-\n--\ndrivers/s390/cio/vfio_ccw_ops.c=226=static void vfio_ccw_mdev_close_device(struct vfio_device *vdev)\n--\ndrivers/s390/cio/vfio_ccw_ops.c-242-\tcancel_work_sync(\u0026private-\u003ecrw_work);\ndrivers/s390/cio/vfio_ccw_ops.c:243:\tflush_work(\u0026private-\u003enotoper_work);\ndrivers/s390/cio/vfio_ccw_ops.c-244-\n"
}

19/2 2026/09/25 00:40 llm patch-evaluator
0m Model:
gemini-3.8-flash

Args:
null

Results:
null

Tokens:
							input: 36269
							output: 94
							thoughts: 312
						

Thoughts:
**Analysis of the VFIO-CCW Patch for Fuzzing Eligibility**

Okay, let's break this down. The patch I'm looking at modifies `drivers/s390/cio/vfio_ccw_ops.c`. This is all about the VFIO-CCW driver specifically for s390 architecture channel I/O. The target architecture specified for this assessment is amd64. Because the code is fundamentally built around the s390 architecture (as confirmed by the `CONFIG_S390` and `CONFIG_VFIO_CCW` dependencies), there's no way it's going to compile or run on amd64.

Now, according to Section 2 of the guidelines, I can confidently set `WorthFuzzing` to `false` if *all* the modified code falls into certain categories. Specifically, I need to check for "Unreachable execution paths", which includes code exclusive to architectures other than the target. Since this patch *only* affects s390-specific code, which is inaccessible to amd64, it completely falls under this exemption.

Therefore, the patch is not worth fuzzing for amd64, so I will set `WorthFuzzing = false`. I don't need to specify any `EnableConfigs` or `FocusSymbols`. The reasoning is straightforward: the modified code is exclusively for the VFIO-CCW driver, which is built on the `CONFIG_S390` and `CONFIG_VFIO_CCW` configurations and is thus s390 architecture specific and cannot be built or executed on the target architecture (`amd64`).

Everything is clear as a bell. Time to call `set-results`.



20/2 2026/09/25 00:40 tool set-results
0m Args:
{
  "EnableConfigs": [],
  "FocusSymbols": [],
  "Reasoning": "The modified code in drivers/s390/cio/vfio_ccw_ops.c is exclusive to the s390 architecture (requires CONFIG_S390 and CONFIG_VFIO_CCW) and cannot be compiled or executed on the target architecture (amd64).",
  "WorthFuzzing": false
}

Results:
{
  "EnableConfigs": null,
  "FocusSymbols": [],
  "Reasoning": "The modified code in drivers/s390/cio/vfio_ccw_ops.c is exclusive to the s390 architecture (requires CONFIG_S390 and CONFIG_VFIO_CCW) and cannot be compiled or executed on the target architecture (amd64).",
  "WorthFuzzing": false
}

21/1 2026/09/25 00:40 action If
0m Args:
{
  "WorthFuzzing": false
}

Results:
null

LLM Calls Summary:
Total Calls Total Tokens Avg Tokens Total Duration (Seconds) Avg Duration (Seconds)
Tool Calls Summary:
Total Calls Total Duration (Seconds) Avg Duration (Seconds)