*/
 struct sched_ext_ops {
        /**
-        * select_cpu - Pick the target CPU for a task which is being woken up
+        * @select_cpu: Pick the target CPU for a task which is being woken up
         * @p: task being woken up
         * @prev_cpu: the cpu @p was on before sleeping
         * @wake_flags: SCX_WAKE_*
        s32 (*select_cpu)(struct task_struct *p, s32 prev_cpu, u64 wake_flags);
 
        /**
-        * enqueue - Enqueue a task on the BPF scheduler
+        * @enqueue: Enqueue a task on the BPF scheduler
         * @p: task being enqueued
         * @enq_flags: %SCX_ENQ_*
         *
        void (*enqueue)(struct task_struct *p, u64 enq_flags);
 
        /**
-        * dequeue - Remove a task from the BPF scheduler
+        * @dequeue: Remove a task from the BPF scheduler
         * @p: task being dequeued
         * @deq_flags: %SCX_DEQ_*
         *
        void (*dequeue)(struct task_struct *p, u64 deq_flags);
 
        /**
-        * dispatch - Dispatch tasks from the BPF scheduler and/or user DSQs
+        * @dispatch: Dispatch tasks from the BPF scheduler and/or user DSQs
         * @cpu: CPU to dispatch tasks for
         * @prev: previous task being switched out
         *
        void (*dispatch)(s32 cpu, struct task_struct *prev);
 
        /**
-        * tick - Periodic tick
+        * @tick: Periodic tick
         * @p: task running currently
         *
         * This operation is called every 1/HZ seconds on CPUs which are
        void (*tick)(struct task_struct *p);
 
        /**
-        * runnable - A task is becoming runnable on its associated CPU
+        * @runnable: A task is becoming runnable on its associated CPU
         * @p: task becoming runnable
         * @enq_flags: %SCX_ENQ_*
         *
        void (*runnable)(struct task_struct *p, u64 enq_flags);
 
        /**
-        * running - A task is starting to run on its associated CPU
+        * @running: A task is starting to run on its associated CPU
         * @p: task starting to run
         *
         * See ->runnable() for explanation on the task state notifiers.
        void (*running)(struct task_struct *p);
 
        /**
-        * stopping - A task is stopping execution
+        * @stopping: A task is stopping execution
         * @p: task stopping to run
         * @runnable: is task @p still runnable?
         *
        void (*stopping)(struct task_struct *p, bool runnable);
 
        /**
-        * quiescent - A task is becoming not runnable on its associated CPU
+        * @quiescent: A task is becoming not runnable on its associated CPU
         * @p: task becoming not runnable
         * @deq_flags: %SCX_DEQ_*
         *
        void (*quiescent)(struct task_struct *p, u64 deq_flags);
 
        /**
-        * yield - Yield CPU
+        * @yield: Yield CPU
         * @from: yielding task
         * @to: optional yield target task
         *
        bool (*yield)(struct task_struct *from, struct task_struct *to);
 
        /**
-        * core_sched_before - Task ordering for core-sched
+        * @core_sched_before: Task ordering for core-sched
         * @a: task A
         * @b: task B
         *
        bool (*core_sched_before)(struct task_struct *a, struct task_struct *b);
 
        /**
-        * set_weight - Set task weight
+        * @set_weight: Set task weight
         * @p: task to set weight for
         * @weight: new weight [1..10000]
         *
        void (*set_weight)(struct task_struct *p, u32 weight);
 
        /**
-        * set_cpumask - Set CPU affinity
+        * @set_cpumask: Set CPU affinity
         * @p: task to set CPU affinity for
         * @cpumask: cpumask of cpus that @p can run on
         *
                            const struct cpumask *cpumask);
 
        /**
-        * update_idle - Update the idle state of a CPU
+        * @update_idle: Update the idle state of a CPU
         * @cpu: CPU to udpate the idle state for
         * @idle: whether entering or exiting the idle state
         *
        void (*update_idle)(s32 cpu, bool idle);
 
        /**
-        * cpu_acquire - A CPU is becoming available to the BPF scheduler
+        * @cpu_acquire: A CPU is becoming available to the BPF scheduler
         * @cpu: The CPU being acquired by the BPF scheduler.
         * @args: Acquire arguments, see the struct definition.
         *
        void (*cpu_acquire)(s32 cpu, struct scx_cpu_acquire_args *args);
 
        /**
-        * cpu_release - A CPU is taken away from the BPF scheduler
+        * @cpu_release: A CPU is taken away from the BPF scheduler
         * @cpu: The CPU being released by the BPF scheduler.
         * @args: Release arguments, see the struct definition.
         *
        void (*cpu_release)(s32 cpu, struct scx_cpu_release_args *args);
 
        /**
-        * init_task - Initialize a task to run in a BPF scheduler
+        * @init_task: Initialize a task to run in a BPF scheduler
         * @p: task to initialize for BPF scheduling
         * @args: init arguments, see the struct definition
         *
        s32 (*init_task)(struct task_struct *p, struct scx_init_task_args *args);
 
        /**
-        * exit_task - Exit a previously-running task from the system
+        * @exit_task: Exit a previously-running task from the system
         * @p: task to exit
+        * @args: exit arguments, see the struct definition
         *
         * @p is exiting or the BPF scheduler is being unloaded. Perform any
         * necessary cleanup for @p.
        void (*exit_task)(struct task_struct *p, struct scx_exit_task_args *args);
 
        /**
-        * enable - Enable BPF scheduling for a task
+        * @enable: Enable BPF scheduling for a task
         * @p: task to enable BPF scheduling for
         *
         * Enable @p for BPF scheduling. enable() is called on @p any time it
        void (*enable)(struct task_struct *p);
 
        /**
-        * disable - Disable BPF scheduling for a task
+        * @disable: Disable BPF scheduling for a task
         * @p: task to disable BPF scheduling for
         *
         * @p is exiting, leaving SCX or the BPF scheduler is being unloaded.
        void (*disable)(struct task_struct *p);
 
        /**
-        * dump - Dump BPF scheduler state on error
+        * @dump: Dump BPF scheduler state on error
         * @ctx: debug dump context
         *
         * Use scx_bpf_dump() to generate BPF scheduler specific debug dump.
        void (*dump)(struct scx_dump_ctx *ctx);
 
        /**
-        * dump_cpu - Dump BPF scheduler state for a CPU on error
+        * @dump_cpu: Dump BPF scheduler state for a CPU on error
         * @ctx: debug dump context
         * @cpu: CPU to generate debug dump for
         * @idle: @cpu is currently idle without any runnable tasks
        void (*dump_cpu)(struct scx_dump_ctx *ctx, s32 cpu, bool idle);
 
        /**
-        * dump_task - Dump BPF scheduler state for a runnable task on error
+        * @dump_task: Dump BPF scheduler state for a runnable task on error
         * @ctx: debug dump context
         * @p: runnable task to generate debug dump for
         *
 
 #ifdef CONFIG_EXT_GROUP_SCHED
        /**
-        * cgroup_init - Initialize a cgroup
+        * @cgroup_init: Initialize a cgroup
         * @cgrp: cgroup being initialized
         * @args: init arguments, see the struct definition
         *
                           struct scx_cgroup_init_args *args);
 
        /**
-        * cgroup_exit - Exit a cgroup
+        * @cgroup_exit: Exit a cgroup
         * @cgrp: cgroup being exited
         *
         * Either the BPF scheduler is being unloaded or @cgrp destroyed, exit
        void (*cgroup_exit)(struct cgroup *cgrp);
 
        /**
-        * cgroup_prep_move - Prepare a task to be moved to a different cgroup
+        * @cgroup_prep_move: Prepare a task to be moved to a different cgroup
         * @p: task being moved
         * @from: cgroup @p is being moved from
         * @to: cgroup @p is being moved to
                                struct cgroup *from, struct cgroup *to);
 
        /**
-        * cgroup_move - Commit cgroup move
+        * @cgroup_move: Commit cgroup move
         * @p: task being moved
         * @from: cgroup @p is being moved from
         * @to: cgroup @p is being moved to
                            struct cgroup *from, struct cgroup *to);
 
        /**
-        * cgroup_cancel_move - Cancel cgroup move
+        * @cgroup_cancel_move: Cancel cgroup move
         * @p: task whose cgroup move is being canceled
         * @from: cgroup @p was being moved from
         * @to: cgroup @p was being moved to
                                   struct cgroup *from, struct cgroup *to);
 
        /**
-        * cgroup_set_weight - A cgroup's weight is being changed
+        * @cgroup_set_weight: A cgroup's weight is being changed
         * @cgrp: cgroup whose weight is being updated
         * @weight: new weight [1..10000]
         *
         */
 
        /**
-        * cpu_online - A CPU became online
+        * @cpu_online: A CPU became online
         * @cpu: CPU which just came up
         *
         * @cpu just came online. @cpu will not call ops.enqueue() or
        void (*cpu_online)(s32 cpu);
 
        /**
-        * cpu_offline - A CPU is going offline
+        * @cpu_offline: A CPU is going offline
         * @cpu: CPU which is going offline
         *
         * @cpu is going offline. @cpu will not call ops.enqueue() or
         */
 
        /**
-        * init - Initialize the BPF scheduler
+        * @init: Initialize the BPF scheduler
         */
        s32 (*init)(void);
 
        /**
-        * exit - Clean up after the BPF scheduler
+        * @exit: Clean up after the BPF scheduler
         * @info: Exit info
         *
         * ops.exit() is also called on ops.init() failure, which is a bit
        void (*exit)(struct scx_exit_info *info);
 
        /**
-        * dispatch_max_batch - Max nr of tasks that dispatch() can dispatch
+        * @dispatch_max_batch: Max nr of tasks that dispatch() can dispatch
         */
        u32 dispatch_max_batch;
 
        /**
-        * flags - %SCX_OPS_* flags
+        * @flags: %SCX_OPS_* flags
         */
        u64 flags;
 
        /**
-        * timeout_ms - The maximum amount of time, in milliseconds, that a
+        * @timeout_ms: The maximum amount of time, in milliseconds, that a
         * runnable task should be able to wait before being scheduled. The
         * maximum timeout may not exceed the default timeout of 30 seconds.
         *
        u32 timeout_ms;
 
        /**
-        * exit_dump_len - scx_exit_info.dump buffer length. If 0, the default
+        * @exit_dump_len: scx_exit_info.dump buffer length. If 0, the default
         * value of 32768 is used.
         */
        u32 exit_dump_len;
 
        /**
-        * hotplug_seq - A sequence number that may be set by the scheduler to
+        * @hotplug_seq: A sequence number that may be set by the scheduler to
         * detect when a hotplug event has occurred during the loading process.
         * If 0, no detection occurs. Otherwise, the scheduler will fail to
         * load if the sequence number does not match @scx_hotplug_seq on the
        u64 hotplug_seq;
 
        /**
-        * name - BPF scheduler's name
+        * @name: BPF scheduler's name
         *
         * Must be a non-zero valid BPF object name including only isalnum(),
         * '_' and '.' chars. Shows up in kernel.sched_ext_ops sysctl while the
 /**
  * scx_task_iter_next_locked - Next non-idle task with its rq locked
  * @iter: iterator to walk
- * @include_dead: Whether we should include dead tasks in the iteration
  *
  * Visit the non-idle task with its rq lock held. Allows callers to specify
  * whether they would like to filter out dead tasks. See scx_task_iter_start()
  * scx_prio_less - Task ordering for core-sched
  * @a: task A
  * @b: task B
+ * @in_fi: in forced idle state
  *
  * Core-sched is implemented as an additional scheduling layer on top of the
  * usual sched_class'es and needs to find out the expected task ordering. For
 
 /**
  * scx_softlockup - sched_ext softlockup handler
+ * @dur_s: number of seconds of CPU stuck due to soft lockup
  *
  * On some multi-socket setups (e.g. 2x Intel 8480c), the BPF scheduler can
  * live-lock the system by making many CPUs target the same DSQ to the point
 
 /**
  * scx_ops_bypass - [Un]bypass scx_ops and guarantee forward progress
+ * @bypass: true for bypass, false for unbypass
  *
  * Bypassing guarantees that all runnable tasks make forward progress without
  * trusting the BPF scheduler. We can't grab any mutexes or rwsems as they might
 }
 
 /**
- * scx_bpf_dump - Generate extra debug dump specific to the BPF scheduler
+ * scx_bpf_dump_bstr - Generate extra debug dump specific to the BPF scheduler
  * @fmt: format string
  * @data: format string parameters packaged using ___bpf_fill() macro
  * @data__sz: @data len, must end in '__sz' for the verifier
  * scx_bpf_cpuperf_set - Set the relative performance target of a CPU
  * @cpu: CPU of interest
  * @perf: target performance level [0, %SCX_CPUPERF_ONE]
- * @flags: %SCX_CPUPERF_* flags
  *
  * Set the target performance level of @cpu to @perf. @perf is in linear
  * relative scale between 0 and %SCX_CPUPERF_ONE. This determines how the
 /**
  * scx_bpf_put_idle_cpumask - Release a previously acquired referenced kptr to
  * either the percpu, or SMT idle-tracking cpumask.
+ * @idle_mask: &cpumask to use
  */
 __bpf_kfunc void scx_bpf_put_idle_cpumask(const struct cpumask *idle_mask)
 {