xref: /linux/tools/unittests/kdoc-test.yaml (revision 5181afcdf99527dd92a88f80fc4d0d8013e1b510)
1# SPDX-License-Identifier: GPL-2.0
2# Copyright (c) 2026: Mauro Carvalho Chehab <mchehab@kernel.org>
3
4# Test cases for the dynamic tests.
5# Useful to test if kernel-doc classes are doing what it is expected.
6#
7
8tests:
9- name: func1
10  fname: mock_functions.c
11  description: "Simplest function test: do nothing, just rst output"
12
13  source: |
14    /**
15      * func1 - Not exported function
16      * @arg1: @arg1 does nothing
17      *
18      * Does nothing
19      *
20      * return:
21      *    always return 0.
22      */
23    int func1(char *arg1) { return 0; };
24
25  expected:
26  - rst: |
27    .. c:function:: int func1 (char *arg1)
28
29      Not exported function
30
31    .. container:: kernelindent
32
33      **Parameters**
34
35      ``char *arg1``
36        **arg1** does nothing
37
38      **Description**
39
40      Does nothing
41
42      **Return**
43
44      always return 0.
45
46    # TODO: how to handle timestamps at .TH?
47    man: |
48      .TH "func1" 9 "February 2026"  "" "Kernel API Manual"
49      .SH NAME
50      func1 \- Not exported function
51      .SH SYNOPSIS
52      .B "int" func1
53      .BI "(char *arg1 "  ");"
54      .SH ARGUMENTS
55      .IP "arg1" 12
56      \fIarg1\fP does nothing
57      .SH "DESCRIPTION"
58      Does nothing
59      .SH "RETURN"
60      always return 0.
61      .SH "SEE ALSO"
62      .PP
63      Kernel file \fBmock_functions.c\fR
64
65- name: func2
66  fname: func2.c
67  description: Simple test with exports
68
69  source: |
70    /**
71      * func2() - Exported function
72      * @arg1: @arg1 does nothing
73      *
74      * Does nothing
75      *
76      * return:
77      *    always return 0.
78      */
79    int func2(char *arg1) { return 0; };
80    EXPORT_SYMBOL(func2);
81
82  exports: func2
83  expected:
84  - kdoc_item:
85      name: func2
86      type: function
87      declaration_start_line: 1
88
89      sections:
90        Description: |
91          Does nothing
92
93        Return: |
94          always return 0.
95
96      sections_start_lines:
97        Description: 3
98        Return: 6
99
100      parameterdescs:
101        arg1: |
102          @arg1 does nothing
103      parameterlist:
104        - arg1
105      parameterdesc_start_lines:
106        arg1: 2
107      parametertypes:
108        arg1: char *arg1
109
110      other_stuff:
111        func_macro: false
112        functiontype: int
113        purpose: "Exported function"
114        typedef: false
115
116    rst: |
117      .. c:function:: int func2 (char *arg1)
118
119        Exported function
120
121      .. container:: kernelindent
122
123        **Parameters**
124
125        ``char *arg1``
126          **arg1** does nothing
127
128        **Description**
129
130        Does nothing
131
132        **Return**
133
134        always return 0.
135
136    man: |
137      .TH "func2" 9 "February 2026"  "" "Kernel API Manual"
138      .SH NAME
139      func2 \- Exported function
140      .SH SYNOPSIS
141      .B "int" func2
142      .BI "(char *arg1 "  ");"
143      .SH ARGUMENTS
144      .IP "arg1" 12
145      \fIarg1\fP does nothing
146      .SH "DESCRIPTION"
147      Does nothing
148      .SH "RETURN"
149      always return 0.
150      .SH "SEE ALSO"
151      .PP
152      Kernel file \fBfunc2.c\fR
153
154- name: doc_with_complex_table
155  description: Test if complex tables are handled
156  fname: mock.c
157  source: |
158    /**
159      * DOC: Supported input formats and encodings
160      *
161      * Depending on the Hardware configuration of the Controller IP, it supports
162      * a subset of the following input formats and encodings on its internal
163      * 48bit bus.
164      *
165      * +----------------------+----------------------------------+------------------------------+
166      * | Format Name          | Format Code                      | Encodings                    |
167      * +======================+==================================+==============================+
168      * | RGB 4:4:4 8bit       | ``MEDIA_BUS_FMT_RGB888_1X24``    | ``V4L2_YCBCR_ENC_DEFAULT``   |
169      * +----------------------+----------------------------------+------------------------------+
170      * | RGB 4:4:4 10bits     | ``MEDIA_BUS_FMT_RGB101010_1X30`` | ``V4L2_YCBCR_ENC_DEFAULT``   |
171      * +----------------------+----------------------------------+------------------------------+
172      */
173  expected:
174    - man: |
175        .TH "Supported input formats and encodings" 9 "March 2026" "" "Kernel API Manual"
176        .SH "Supported input formats and encodings"
177        Depending on the Hardware configuration of the Controller IP, it supports
178        a subset of the following input formats and encodings on its internal
179        48bit bus.
180        .PP
181
182
183        .TS
184        box;
185        l	l	l.
186        \fBFormat Name\fP	\fBFormat Code\fP	\fBEncodings\fP
187        _
188        RGB 4:4:4 8bit	``MEDIA_BUS_FMT_RGB888_1X24	V4L2_YCBCR_ENC_DEFAULT
189        RGB 4:4:4 10bits	MEDIA_BUS_FMT_RGB101010_1X30	V4L2_YCBCR_ENC_DEFAULT``
190        .TE
191        .SH "SEE ALSO"
192        .PP
193        Kernel file \fBmock.c\fR
194
195      rst: |-
196        .. _Supported input formats and encodings:
197        **Supported input formats and encodings**
198        Depending on the Hardware configuration of the Controller IP, it supports
199        a subset of the following input formats and encodings on its internal
200        48bit bus.
201        +----------------------+----------------------------------+------------------------------+
202        | Format Name          | Format Code                      | Encodings                    |
203        +======================+==================================+==============================+
204        | RGB 4:4:4 8bit       | ``MEDIA_BUS_FMT_RGB888_1X24``    | ``V4L2_YCBCR_ENC_DEFAULT``   |
205        +----------------------+----------------------------------+------------------------------+
206        | RGB 4:4:4 10bits     | ``MEDIA_BUS_FMT_RGB101010_1X30`` | ``V4L2_YCBCR_ENC_DEFAULT``   |
207        +----------------------+----------------------------------+------------------------------+
208- name: func_with_ascii_artwork
209  description: Test if ascii artwork is properly output
210  fname: mock.c
211  source: |
212    /**
213      * add_cxl_resources() - reflect CXL fixed memory windows in iomem_resource
214      * @cxl_res: A standalone resource tree where each CXL window is a sibling
215      *
216      * Walk each CXL window in @cxl_res and add it to iomem_resource potentially
217      * expanding its boundaries to ensure that any conflicting resources become
218      * children. If a window is expanded it may then conflict with a another window
219      * entry and require the window to be truncated or trimmed. Consider this
220      * situation::
221      *
222      *      |-- "CXL Window 0" --||----- "CXL Window 1" -----|
223      *      |--------------- "System RAM" -------------|
224      *
225      * ...where platform firmware has established as System RAM resource across 2
226      * windows, but has left some portion of window 1 for dynamic CXL region
227      * provisioning. In this case "Window 0" will span the entirety of the "System
228      * RAM" span, and "CXL Window 1" is truncated to the remaining tail past the end
229      * of that "System RAM" resource.
230      */
231    static int add_cxl_resources(struct resource *cxl_res);
232  expected:
233    - man: |-
234        .TH "add_cxl_resources" 9 "March 2026" "" "Kernel API Manual"
235        .SH NAME
236        add_cxl_resources \- reflect CXL fixed memory windows in iomem_resource
237        .SH SYNOPSIS
238        .B "int" add_cxl_resources
239        .BI "(struct resource *cxl_res "  ");"
240        .SH ARGUMENTS
241        .IP "cxl_res" 12
242        A standalone resource tree where each CXL window is a sibling
243        .SH "DESCRIPTION"
244        Walk each CXL window in \fIcxl_res\fP and add it to iomem_resource potentially
245        expanding its boundaries to ensure that any conflicting resources become
246        children. If a window is expanded it may then conflict with a another window
247        entry and require the window to be truncated or trimmed. Consider this
248        situation:
249        .nf
250
251             |-- "CXL Window 0" --||----- "CXL Window 1" -----|
252             |--------------- "System RAM" -------------|
253
254
255        .fi
256        .PP
257
258        \&...where platform firmware has established as System RAM resource across 2
259        windows, but has left some portion of window 1 for dynamic CXL region
260        provisioning. In this case "Window 0" will span the entirety of the "System
261        RAM" span, and "CXL Window 1" is truncated to the remaining tail past the end
262        of that "System RAM" resource.
263        .SH "SEE ALSO"
264        .PP
265        Kernel file \fBmock.c\fR
266      rst: |
267        .. c:function:: int add_cxl_resources (struct resource *cxl_res)
268
269          reflect CXL fixed memory windows in iomem_resource
270
271        .. container:: kernelindent
272
273          **Parameters**
274
275          ``struct resource *cxl_res``
276            A standalone resource tree where each CXL window is a sibling
277
278          **Description**
279
280          Walk each CXL window in **cxl_res** and add it to iomem_resource potentially
281          expanding its boundaries to ensure that any conflicting resources become
282          children. If a window is expanded it may then conflict with a another window
283          entry and require the window to be truncated or trimmed. Consider this
284          situation::
285
286            |-- "CXL Window 0" --||----- "CXL Window 1" -----|
287            |--------------- "System RAM" -------------|
288
289          ...where platform firmware has established as System RAM resource across 2
290          windows, but has left some portion of window 1 for dynamic CXL region
291          provisioning. In this case "Window 0" will span the entirety of the "System
292          RAM" span, and "CXL Window 1" is truncated to the remaining tail past the end
293          of that "System RAM" resource.
294
295- name: simple_tables
296  description: Test formatting two simple tables
297  fname: mock.c
298  source: |
299    /**
300     * bitmap_onto - translate one bitmap relative to another
301     *      @dst: resulting translated bitmap
302     *      @orig: original untranslated bitmap
303     *      @relmap: bitmap relative to which translated
304     *      @bits: number of bits in each of these bitmaps
305     *
306     *      =============== ============== =================
307     *      @orig           tmp            @dst
308     *      0                0             40
309     *      1                1             41
310     *      =============== ============== =================
311     *
312     * And:
313     *
314     *      =============== ============== =================
315     *      @orig           tmp            @dst
316     *      =============== ============== =================
317     *      9                9             95
318     *      10               0             40 [#f1]_
319     *      =============== ============== =================
320     */
321    void bitmap_onto(unsigned long *dst, const unsigned long *orig,
322                     const unsigned long *relmap, unsigned int bits);
323  expected:
324    - man: |
325        .TH "bitmap_onto" 9 "March 2026" "" "Kernel API Manual"
326        .SH NAME
327        bitmap_onto \- translate one bitmap relative to another
328        .SH SYNOPSIS
329        .B "void" bitmap_onto
330        .BI "(unsigned long *dst "  ","
331        .BI "const unsigned long *orig "  ","
332        .BI "const unsigned long *relmap "  ","
333        .BI "unsigned int bits "  ");"
334        .SH ARGUMENTS
335        .IP "dst" 12
336        resulting translated bitmap
337        .IP "orig" 12
338        original untranslated bitmap
339        .IP "relmap" 12
340        bitmap relative to which translated
341        .IP "bits" 12
342        number of bits in each of these bitmaps
343        .SH "DESCRIPTION"
344
345        .TS
346        box;
347        l	l	l.
348        \fIorig\fP	tmp	\fIdst\fP
349        0	0	40
350        1	1	41
351        .TE
352        .PP
353
354        And:
355        .PP
356
357
358        .TS
359        box;
360        l	l	l.
361        \fIorig\fP	tmp	\fIdst\fP
362        .TE
363        9                9             95
364        10               0             40 [#f1]_
365        .SH "SEE ALSO"
366        .PP
367        Kernel file \fBmock.c\fR
368
369      rst: |
370        .. c:function:: void bitmap_onto (unsigned long *dst, const unsigned long *orig, const unsigned long *relmap,  unsigned int bits)
371
372          translate one bitmap relative to another
373
374        .. container:: kernelindent
375
376          **Parameters**
377
378          ``unsigned long *dst``
379            resulting translated bitmap
380
381          ``const unsigned long *orig``
382            original untranslated bitmap
383
384          ``const unsigned long *relmap``
385            bitmap relative to which translated
386
387          ``unsigned int bits``
388            number of bits in each of these bitmaps
389
390          **Description**
391
392              =============== ============== =================
393              **orig**           tmp            **dst**
394              0                0             40
395              1                1             41
396              =============== ============== =================
397
398          And:
399
400              =============== ============== =================
401              **orig**           tmp            **dst**
402              =============== ============== =================
403              9                9             95
404              10               0             40 [#f1]_
405              =============== ============== =================
406
407#
408# Variable tests from Randy Dunlap's testset
409#
410- name: unsigned_long_var_on_uppercase
411  description: Test an unsigned long varaible in uppercase
412  fname: mock-vars.c
413  source: |
414    /**
415     * var ROOT_DEV - system root device
416     *
417     * @ROOT_DEV is either the successful root device or the root device
418     * that failed boot in the boot failure message.
419     */
420    unsigned long ROOT_DEV;
421  expected:
422  - man: |
423      .TH "var ROOT_DEV" 9 "February 2026"  "" "Kernel API Manual"
424      .SH NAME
425      ROOT_DEV \- system root device
426      .SH SYNOPSIS
427      unsigned long ROOT_DEV;
428      .SH "Description"
429      \fIROOT_DEV\fP is either the successful root device or the root device
430      that failed boot in the boot failure message.
431      .SH "SEE ALSO"
432      .PP
433      Kernel file \fBmock-vars.c\fR
434    rst: |
435      .. c:macro:: ROOT_DEV
436
437        ``unsigned long ROOT_DEV;``
438
439        system root device
440
441        **Description**
442
443        **ROOT_DEV** is either the successful root device or the root device
444        that failed boot in the boot failure message.
445- name: enum_var
446  description: Test an enum var with __read_mostly
447  fname: mock-vars.c
448  source: |
449    /**
450     * var system_state - system state used during boot or suspend/hibernate/resume
451     *
452     * @system_state can be used during boot to determine if it is safe to
453     * make certain calls to other parts of the kernel. It can also be used
454     * during suspend/hibernate or resume to determine the order of actions
455     * that need to be executed. The numerical values of system_state are
456     * sometimes used in numerical ordering tests, so the relative values
457     * must not be altered.
458     */
459    enum system_states system_state __read_mostly;
460  expected:
461  - man: |
462      .TH "var system_state" 9 "February 2026"  "" "Kernel API Manual"
463      .SH NAME
464      system_state \- system state used during boot or suspend/hibernate/resume
465      .SH SYNOPSIS
466      enum system_states system_state __read_mostly;
467      .SH "Description"
468      \fIsystem_state\fP can be used during boot to determine if it is safe to
469      make certain calls to other parts of the kernel. It can also be used
470      during suspend/hibernate or resume to determine the order of actions
471      that need to be executed. The numerical values of system_state are
472      sometimes used in numerical ordering tests, so the relative values
473      must not be altered.
474      .SH "SEE ALSO"
475      .PP
476      Kernel file \fBmock-vars.c\fR
477    rst: |
478      .. c:macro:: system_state
479
480        ``enum system_states system_state __read_mostly;``
481
482        system state used during boot or suspend/hibernate/resume
483
484        **Description**
485
486        **system_state** can be used during boot to determine if it is safe to
487        make certain calls to other parts of the kernel. It can also be used
488        during suspend/hibernate or resume to determine the order of actions
489        that need to be executed. The numerical values of system_state are
490        sometimes used in numerical ordering tests, so the relative values
491        must not be altered.
492- name: char_pointer_var
493  description: Test char * var with __ro_after_init
494  fname: mock-vars.c
495  source: |
496    /**
497     * var saved_command_line - kernel's command line, saved from use at
498     * any later time in the kernel.
499     */
500    char *saved_command_line __ro_after_init;
501  expected:
502  - man: |
503      .TH "var saved_command_line" 9 "February 2026"  "" "Kernel API Manual"
504      .SH NAME
505      saved_command_line \- kernel's command line, saved from use at any later time in the kernel.
506      .SH SYNOPSIS
507      char *saved_command_line __ro_after_init;
508      .SH "SEE ALSO"
509      .PP
510      Kernel file \fBmock-vars.c\fR
511    rst: |
512      .. c:macro:: saved_command_line
513
514        ``char *saved_command_line __ro_after_init;``
515
516        kernel's command line, saved from use at any later time in the kernel.
517- name: unsigned_long_with_default
518  description: Test an unsigned long var that is set to a default value
519  fname: mock-vars.c
520  source: |
521    /**
522     * var loop_per_jiffy - calculated loop count needed to consume one jiffy
523     * of time
524     */
525    unsigned long loops_per_jiffy = (1<<12);
526  expected:
527  - man: |
528      .TH "var loops_per_jiffy" 9 "February 2026"  "" "Kernel API Manual"
529      .SH NAME
530      loops_per_jiffy \- calculated loop count needed to consume one jiffy of time
531      .SH SYNOPSIS
532      unsigned long loops_per_jiffy = (1<<12);
533      .SH "Initialization"
534      default: (1<<12)
535      .SH "SEE ALSO"
536      .PP
537      Kernel file \fBmock-vars.c\fR
538    rst: |
539      .. c:macro:: loops_per_jiffy
540
541        ``unsigned long loops_per_jiffy = (1<<12);``
542
543        calculated loop count needed to consume one jiffy of time
544
545        **Initialization**
546
547        default: ``(1<<12)``
548- name: unsigned_long
549  description: test a simple unsigned long variable.
550  fname: mock-vars.c
551  source: |
552    /**
553     * var preset_lpj - lpj (loops per jiffy) value set from kernel
554     * command line using "lpj=VALUE"
555     *
556     * See Documentation/admin-guide/kernel-parameters.txt ("lpj=") for details.
557     */
558    unsigned long preset_lpj;
559  expected:
560  - man: |
561      .TH "var preset_lpj" 9 "February 2026"  "" "Kernel API Manual"
562      .SH NAME
563      preset_lpj \- lpj (loops per jiffy) value set from kernel command line using "lpj=VALUE"
564      .SH SYNOPSIS
565      unsigned long preset_lpj;
566      .SH "Description"
567      See Documentation/admin-guide/kernel-parameters.txt ("lpj=") for details.
568      .SH "SEE ALSO"
569      .PP
570      Kernel file \fBmock-vars.c\fR
571    rst: |
572      .. c:macro:: preset_lpj
573
574        ``unsigned long preset_lpj;``
575
576        lpj (loops per jiffy) value set from kernel command line using "lpj=VALUE"
577
578        **Description**
579
580        See Documentation/admin-guide/kernel-parameters.txt ("lpj=") for details.
581- name: char_array
582  description: test a char array variable
583  fname: mock-vars.c
584  source: |
585    /**
586     * var linux_proc_banner - text used from /proc/version file
587     *
588     * * first %s is sysname (e.g., "Linux")
589     * * second %s is release
590     * * third %s is version
591     */
592    char linux_proc_banner[];
593  expected:
594  - man: |
595      .TH "var linux_proc_banner" 9 "February 2026"  "" "Kernel API Manual"
596      .SH NAME
597      linux_proc_banner \- text used from /proc/version file
598      .SH SYNOPSIS
599      char linux_proc_banner[];
600      .SH "Description"
601      .IP \[bu]
602      first s is sysname (e.g., "Linux")
603      .IP \[bu]
604      second s is release
605      .IP \[bu]
606      third s is version
607      .SH "SEE ALSO"
608      .PP
609      Kernel file \fBmock-vars.c\fR
610    rst: |
611      .. c:macro:: linux_proc_banner
612
613        ``char linux_proc_banner[];``
614
615        text used from /proc/version file
616
617        **Description**
618
619        * first ``s`` is sysname (e.g., "Linux")
620        * second ``s`` is release
621        * third ``s`` is version
622- name: const_char_array
623  description: test a const char array variable
624  fname: mock-vars.c
625  source: |
626    /**
627     * var linux_banner - Linux boot banner, usually printed at boot time
628     */
629    const char linux_banner[];
630  expected:
631  - man: |
632      .TH "var linux_banner" 9 "February 2026"  "" "Kernel API Manual"
633      .SH NAME
634      linux_banner \- Linux boot banner, usually printed at boot time
635      .SH SYNOPSIS
636      const char linux_banner[];
637      .SH "SEE ALSO"
638      .PP
639      Kernel file \fBmock-vars.c\fR
640    rst: |
641      .. c:macro:: linux_banner
642
643        ``const char linux_banner[];``
644
645        Linux boot banner, usually printed at boot time
646- name: static_atomic64_t_var
647  description: test a static atomi64_t variable
648  fname: mock-vars.c
649  source: |
650    /**
651     * var diskseq - unique sequence number for block device instances
652     *
653     * Allows userspace to associate uevents to the lifetime of a device
654     */
655    static atomic64_t diskseq;
656  expected:
657  - man: |
658      .TH "var diskseq" 9 "February 2026"  "" "Kernel API Manual"
659      .SH NAME
660      diskseq \- unique sequence number for block device instances
661      .SH SYNOPSIS
662      static atomic64_t diskseq;
663      .SH "Description"
664      Allows userspace to associate uevents to the lifetime of a device
665      .SH "SEE ALSO"
666      .PP
667      Kernel file \fBmock-vars.c\fR
668    rst: |
669      .. c:macro:: diskseq
670
671        ``static atomic64_t diskseq;``
672
673        unique sequence number for block device instances
674
675        **Description**
676
677        Allows userspace to associate uevents to the lifetime of a device
678- name: unsigned_long_on_init
679  description: test an unsigned long var at "init" with a different timestamp.
680  fname: init/mock-vars.c
681  source: |
682    /**
683     * var rtnl_mutex - historical global lock for networking control operations.
684     *
685     * @rtnl_mutex is used to serialize rtnetlink requests
686     * and protect all kernel internal data structures related to networking.
687     *
688     * See Documentation/networking/netdevices.rst for details.
689     * Often known as the rtnl_lock, although rtnl_lock is a kernel function.
690     */
691    unsigned long rtnl_mutex;
692  expected:
693  - man: |
694      .TH "var rtnl_mutex" 9 "February 2026"  "init" "Kernel API Manual"
695      .SH NAME
696      rtnl_mutex \- historical global lock for networking control operations.
697      .SH SYNOPSIS
698      unsigned long rtnl_mutex;
699      .SH "Description"
700      \fIrtnl_mutex\fP is used to serialize rtnetlink requests
701      and protect all kernel internal data structures related to networking.
702      .PP
703
704      See Documentation/networking/netdevices.rst for details.
705      Often known as the rtnl_lock, although rtnl_lock is a kernel function.
706      .SH "SEE ALSO"
707      .PP
708      Kernel file \fBinit/mock-vars.c\fR
709    rst: |
710      .. c:macro:: rtnl_mutex
711
712        ``unsigned long rtnl_mutex;``
713
714      historical global lock for networking control operations.
715
716      **Description**
717
718      **rtnl_mutex** is used to serialize rtnetlink requests
719      and protect all kernel internal data structures related to networking.
720
721      See Documentation/networking/netdevices.rst for details.
722      Often known as the rtnl_lock, although rtnl_lock is a kernel function.
723
724
725- name: struct_kcov
726  fname: mock_tests/kdoc-drop-ctx-lock.c
727  source: |
728    /**
729     * struct kcov - kcov descriptor (one per opened debugfs file).
730     * State transitions of the descriptor:
731     *
732     *  - initial state after open()
733     *  - then there must be a single ioctl(KCOV_INIT_TRACE) call
734     *  - then, mmap() call (several calls are allowed but not useful)
735     *  - then, ioctl(KCOV_ENABLE, arg), where arg is
736     *      KCOV_TRACE_PC - to trace only the PCs
737     *      or
738     *      KCOV_TRACE_CMP - to trace only the comparison operands
739     *  - then, ioctl(KCOV_DISABLE) to disable the task.
740     *
741     * Enabling/disabling ioctls can be repeated (only one task a time allowed).
742     */
743    struct kcov {
744            /**
745             * @refcount: Reference counter. We keep one for:
746             *  - opened file descriptor
747             *  - task with enabled coverage (we can't unwire it from another task)
748             *  - each code section for remote coverage collection
749             */
750            refcount_t              refcount;
751            /**
752             * @lock: The lock protects mode, size, area and t.
753             */
754            spinlock_t              lock;
755            /**
756             * @mode: the kcov_mode
757             */
758            enum kcov_mode          mode __guarded_by(&lock);
759            /**
760             * @size: Size of arena (in long's).
761             */
762            unsigned int            size __guarded_by(&lock);
763            /**
764             * @area: Coverage buffer shared with user space.
765             */
766            void                    *area __guarded_by(&lock);
767            /**
768             * @t: Task for which we collect coverage, or NULL.
769             */
770            struct task_struct      *t __guarded_by(&lock);
771            /**
772             * @remote: Collecting coverage from remote (background) threads.
773             */
774            bool                    remote;
775            /**
776             * @remote_size: Size of remote area (in long's).
777             */
778            unsigned int            remote_size;
779            /**
780             * @sequence: Sequence is incremented each time kcov is reenabled,
781             * used by kcov_remote_stop(), see the comment there.
782             */
783            int                     sequence;
784    };
785  expected:
786  - man: |
787      .TH "struct kcov" 9 "February 2026"  "mock_tests" "Kernel API Manual"
788      .SH NAME
789      struct kcov \- kcov descriptor (one per opened debugfs file). State transitions of the descriptor:
790      .SH SYNOPSIS
791      struct kcov {
792      .br
793      .BI "    refcount_t refcount;"
794      .br
795      .BI "    spinlock_t lock;"
796      .br
797      .BI "    enum kcov_mode          mode;"
798      .br
799      .BI "    unsigned int            size;"
800      .br
801      .BI "    void *area;"
802      .br
803      .BI "    struct task_struct      *t;"
804      .br
805      .BI "    bool remote;"
806      .br
807      .BI "    unsigned int            remote_size;"
808      .br
809      .BI "    int sequence;"
810      .br
811      .BI "
812      };
813      .br
814
815      .SH Members
816      .IP "refcount" 12
817      Reference counter. We keep one for:
818      .IP \[bu]
819      opened file descriptor
820      .IP \[bu]
821      task with enabled coverage (we can't unwire it from another task)
822      .IP \[bu]
823      each code section for remote coverage collection
824      .IP "lock" 12
825      The lock protects mode, size, area and t.
826      .IP "mode" 12
827      the kcov_mode
828      .IP "size" 12
829      Size of arena (in long's).
830      .IP "area" 12
831      Coverage buffer shared with user space.
832      .IP "t" 12
833      Task for which we collect coverage, or NULL.
834      .IP "remote" 12
835      Collecting coverage from remote (background) threads.
836      .IP "remote_size" 12
837      Size of remote area (in long's).
838      .IP "sequence" 12
839      Sequence is incremented each time kcov is reenabled,
840      used by \fBkcov_remote_stop\fP, see the comment there.
841      .SH "Description"
842      .IP \[bu]
843      initial state after \fBopen\fP
844      .IP \[bu]
845      then there must be a single ioctl(KCOV_INIT_TRACE) call
846      .IP \[bu]
847      then, \fBmmap\fP call (several calls are allowed but not useful)
848      .IP \[bu]
849      then, ioctl(KCOV_ENABLE, arg), where arg is
850      KCOV_TRACE_PC - to trace only the PCs
851      or
852      KCOV_TRACE_CMP - to trace only the comparison operands
853      .IP \[bu]
854      then, ioctl(KCOV_DISABLE) to disable the task.
855      .PP
856
857      Enabling/disabling ioctls can be repeated (only one task a time allowed).
858      .SH "SEE ALSO"
859      .PP
860      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
861    rst: |
862      .. c:struct:: kcov
863
864        kcov descriptor (one per opened debugfs file). State transitions of the descriptor:
865
866      .. container:: kernelindent
867
868        **Definition**::
869
870          struct kcov {
871              refcount_t refcount;
872              spinlock_t lock;
873              enum kcov_mode          mode;
874              unsigned int            size;
875              void *area;
876              struct task_struct      *t;
877              bool remote;
878              unsigned int            remote_size;
879              int sequence;
880          };
881
882        **Members**
883
884        ``refcount``
885          Reference counter. We keep one for:
886           - opened file descriptor
887           - task with enabled coverage (we can't unwire it from another task)
888           - each code section for remote coverage collection
889
890        ``lock``
891          The lock protects mode, size, area and t.
892
893        ``mode``
894          the kcov_mode
895
896        ``size``
897          Size of arena (in long's).
898
899        ``area``
900          Coverage buffer shared with user space.
901
902        ``t``
903          Task for which we collect coverage, or NULL.
904
905        ``remote``
906          Collecting coverage from remote (background) threads.
907
908        ``remote_size``
909          Size of remote area (in long's).
910
911        ``sequence``
912          Sequence is incremented each time kcov is reenabled,
913          used by kcov_remote_stop(), see the comment there.
914
915
916       **Description**
917
918       - initial state after open()
919       - then there must be a single ioctl(KCOV_INIT_TRACE) call
920       - then, mmap() call (several calls are allowed but not useful)
921       - then, ioctl(KCOV_ENABLE, arg), where arg is
922           KCOV_TRACE_PC - to trace only the PCs
923           or
924           KCOV_TRACE_CMP - to trace only the comparison operands
925       - then, ioctl(KCOV_DISABLE) to disable the task.
926
927       Enabling/disabling ioctls can be repeated (only one task a time allowed).
928
929- name: pool_offset
930  description: mock_tests/kdoc-drop-ctx-lock.c line 83
931  fname: mock_tests/kdoc-drop-ctx-lock.c
932  source: |
933    /**
934     * var pool_offset - Offset to the unused space in the currently used pool.
935     *
936     */
937    size_t pool_offset __guarded_by(&pool_lock) = DEPOT_POOL_SIZE;
938  expected:
939  - man: |
940      .TH "var pool_offset" 9 "February 2026"  "mock_tests" "Kernel API Manual"
941      .SH NAME
942      pool_offset \- Offset to the unused space in the currently used pool.
943      .SH SYNOPSIS
944      size_t pool_offset __guarded_by(&pool_lock) = DEPOT_POOL_SIZE;
945      .SH "Initialization"
946      default: DEPOT_POOL_SIZE
947      .SH "SEE ALSO"
948      .PP
949      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
950    rst: |
951      .. c:macro:: pool_offset
952
953        ``size_t pool_offset __guarded_by(&pool_lock) = DEPOT_POOL_SIZE;``
954
955        Offset to the unused space in the currently used pool.
956
957        **Initialization**
958
959        default: ``DEPOT_POOL_SIZE``
960- name: free_stacks
961  description: mock_tests/kdoc-drop-ctx-lock.c line 88
962  fname: mock_tests/kdoc-drop-ctx-lock.c
963  source: |
964    /**
965     * var free_stacks - Freelist of stack records within stack_pools.
966     *
967     */
968    __guarded_by(&pool_lock) LIST_HEAD(free_stacks);
969  expected:
970  - man: |
971      .TH "var free_stacks" 9 "February 2026"  "mock_tests" "Kernel API Manual"
972      .SH NAME
973      free_stacks \- Freelist of stack records within stack_pools.
974      .SH SYNOPSIS
975      __guarded_by(&pool_lock) LIST_HEAD(free_stacks);
976      .SH "SEE ALSO"
977      .PP
978      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
979    rst: |
980      .. c:macro:: free_stacks
981
982        ``__guarded_by(&pool_lock) LIST_HEAD(free_stacks);``
983
984        Freelist of stack records within stack_pools.
985- name: stack_pools
986  description: mock_tests/kdoc-drop-ctx-lock.c line 94
987  fname: mock_tests/kdoc-drop-ctx-lock.c
988  source: |
989    /**
990     * var stack_pools - Array of memory regions that store stack records.
991     *
992     */
993    void **stack_pools __pt_guarded_by(&pool_lock);
994  expected:
995  - man: |
996      .TH "var stack_pools" 9 "February 2026"  "mock_tests" "Kernel API Manual"
997      .SH NAME
998      stack_pools \- Array of memory regions that store stack records.
999      .SH SYNOPSIS
1000      void **stack_pools __pt_guarded_by(&pool_lock);
1001      .SH "SEE ALSO"
1002      .PP
1003      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1004    rst: |
1005      .. c:macro:: stack_pools
1006
1007        ``void **stack_pools __pt_guarded_by(&pool_lock);``
1008
1009        Array of memory regions that store stack records.
1010- name: prepare_report_consumer
1011  description: mock_tests/kdoc-drop-ctx-lock.c line 103
1012  fname: mock_tests/kdoc-drop-ctx-lock.c
1013  source: |
1014    /**
1015     * prepare_report_consumer - prepare the report consumer
1016     * @flags: flags
1017     * @ai: not that AI
1018     * @other_info: yes that
1019     */
1020    bool prepare_report_consumer(unsigned long *flags,
1021                                const struct access_info *ai,
1022                                struct other_info *other_info)
1023            __cond_acquires(true, &report_lock)
1024    {
1025  expected:
1026  - man: |
1027      .TH "prepare_report_consumer" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1028      .SH NAME
1029      prepare_report_consumer \- prepare the report consumer
1030      .SH SYNOPSIS
1031      .B "bool" prepare_report_consumer
1032      .BI "(unsigned long *flags "  ","
1033      .BI "const struct access_info *ai "  ","
1034      .BI "struct other_info *other_info "  ");"
1035      .SH ARGUMENTS
1036      .IP "flags" 12
1037      flags
1038      .IP "ai" 12
1039      not that AI
1040      .IP "other_info" 12
1041      yes that
1042      .SH "SEE ALSO"
1043      .PP
1044      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1045    rst: |
1046      .. c:function:: bool prepare_report_consumer (unsigned long *flags, const struct access_info *ai, struct other_info *other_info)
1047
1048         prepare the report consumer
1049
1050      .. container:: kernelindent
1051
1052        **Parameters**
1053
1054        ``unsigned long *flags``
1055          flags
1056
1057        ``const struct access_info *ai``
1058          not that AI
1059
1060        ``struct other_info *other_info``
1061          yes that
1062- name: tcp_sigpool_start
1063  description: mock_tests/kdoc-drop-ctx-lock.c line 117
1064  fname: mock_tests/kdoc-drop-ctx-lock.c
1065  source: |
1066    /**
1067     * tcp_sigpool_start - start a tcp message of @id, using @c
1068     * @id: TCP message ID
1069     * @c: the &tcp_sigpool to use
1070     */
1071    int tcp_sigpool_start(unsigned int id, struct tcp_sigpool *c) __cond_acquires(0, RCU_BH)
1072    {
1073  expected:
1074  - man: |
1075      .TH "tcp_sigpool_start" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1076      .SH NAME
1077      tcp_sigpool_start \- start a tcp message of @id, using @c
1078      .SH SYNOPSIS
1079      .B "int" tcp_sigpool_start
1080      .BI "(unsigned int id "  ","
1081      .BI "struct tcp_sigpool *c "  ");"
1082      .SH ARGUMENTS
1083      .IP "id" 12
1084      TCP message ID
1085      .IP "c" 12
1086      the \fItcp_sigpool\fP to use
1087      .SH "SEE ALSO"
1088      .PP
1089      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1090    rst: |
1091      .. c:function:: int tcp_sigpool_start (unsigned int id, struct tcp_sigpool *c)
1092
1093         start a tcp message of **id**, using **c**
1094
1095      .. container:: kernelindent
1096
1097        **Parameters**
1098
1099        ``unsigned int id``
1100          TCP message ID
1101
1102        ``struct tcp_sigpool *c``
1103          the :c:type:`tcp_sigpool` to use
1104- name: undo_report_consumer
1105  description: mock_tests/kdoc-drop-ctx-lock.c line 129
1106  fname: mock_tests/kdoc-drop-ctx-lock.c
1107  source: |
1108    /**
1109     * undo_report_consumer -  teardown a report consumer
1110     * @flags: those flags
1111     * @ai: not that AI
1112     * @other_info: yes that
1113     */
1114    bool undo_report_consumer(unsigned long *flags,
1115                                const struct access_info *ai,
1116                                struct other_info *other_info)
1117            __cond_releases(true, &report_lock)
1118    {
1119  expected:
1120  - man: |
1121      .TH "undo_report_consumer" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1122      .SH NAME
1123      undo_report_consumer \- teardown a report consumer
1124      .SH SYNOPSIS
1125      .B "bool" undo_report_consumer
1126      .BI "(unsigned long *flags "  ","
1127      .BI "const struct access_info *ai "  ","
1128      .BI "struct other_info *other_info "  ");"
1129      .SH ARGUMENTS
1130      .IP "flags" 12
1131      those flags
1132      .IP "ai" 12
1133      not that AI
1134      .IP "other_info" 12
1135      yes that
1136      .SH "SEE ALSO"
1137      .PP
1138      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1139    rst: |
1140      .. c:function:: bool undo_report_consumer (unsigned long *flags, const struct access_info *ai, struct other_info *other_info)
1141
1142         teardown a report consumer
1143
1144      .. container:: kernelindent
1145
1146        **Parameters**
1147
1148        ``unsigned long *flags``
1149          those flags
1150
1151        ``const struct access_info *ai``
1152          not that AI
1153
1154        ``struct other_info *other_info``
1155          yes that
1156- name: debugfs_enter_cancellation
1157  description: mock_tests/kdoc-drop-ctx-lock.c line 143
1158  fname: mock_tests/kdoc-drop-ctx-lock.c
1159  source: |
1160    /**
1161     * debugfs_enter_cancellation - begin a cancellation operation on @file
1162     * @file: the target file
1163     * @cancellation: the operation to execute
1164     */
1165    void debugfs_enter_cancellation(struct file *file,
1166                                    struct debugfs_cancellation *cancellation) __acquires(cancellation)
1167    { }
1168  expected:
1169  - man: |
1170      .TH "debugfs_enter_cancellation" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1171      .SH NAME
1172      debugfs_enter_cancellation \- begin a cancellation operation on @file
1173      .SH SYNOPSIS
1174      .B "void" debugfs_enter_cancellation
1175      .BI "(struct file *file "  ","
1176      .BI "struct debugfs_cancellation *cancellation "  ");"
1177      .SH ARGUMENTS
1178      .IP "file" 12
1179      the target file
1180      .IP "cancellation" 12
1181      the operation to execute
1182      .SH "SEE ALSO"
1183      .PP
1184      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1185    rst: |
1186      .. c:function:: void debugfs_enter_cancellation (struct file *file, struct debugfs_cancellation *cancellation)
1187
1188         begin a cancellation operation on **file**
1189
1190      .. container:: kernelindent
1191
1192        **Parameters**
1193
1194        ``struct file *file``
1195          the target file
1196
1197        ``struct debugfs_cancellation *cancellation``
1198          the operation to execute
1199- name: debugfs_leave_cancellation
1200  description: mock_tests/kdoc-drop-ctx-lock.c line 152
1201  fname: mock_tests/kdoc-drop-ctx-lock.c
1202  source: |
1203    /**
1204     * debugfs_leave_cancellation - wrapup the cancellation operation on @file
1205     * @file: the target file
1206     * @cancellation: the operation to wrapup
1207     */
1208    void debugfs_leave_cancellation(struct file *file,
1209                                    struct debugfs_cancellation *cancellation) __releases(cancellation)
1210    { }
1211  expected:
1212  - man: |
1213      .TH "debugfs_leave_cancellation" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1214      .SH NAME
1215      debugfs_leave_cancellation \- wrapup the cancellation operation on @file
1216      .SH SYNOPSIS
1217      .B "void" debugfs_leave_cancellation
1218      .BI "(struct file *file "  ","
1219      .BI "struct debugfs_cancellation *cancellation "  ");"
1220      .SH ARGUMENTS
1221      .IP "file" 12
1222      the target file
1223      .IP "cancellation" 12
1224      the operation to wrapup
1225      .SH "SEE ALSO"
1226      .PP
1227      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1228    rst: |
1229      .. c:function:: void debugfs_leave_cancellation (struct file *file, struct debugfs_cancellation *cancellation)
1230
1231         wrapup the cancellation operation on **file**
1232
1233      .. container:: kernelindent
1234
1235        **Parameters**
1236
1237        ``struct file *file``
1238          the target file
1239
1240        ``struct debugfs_cancellation *cancellation``
1241          the operation to wrapup
1242- name: acpi_os_acquire_lock
1243  description: mock_tests/kdoc-drop-ctx-lock.c line 161
1244  fname: mock_tests/kdoc-drop-ctx-lock.c
1245  source: |
1246    /**
1247     * acpi_os_acquire_lock - Acquire a spinlock.
1248     * @lockp: pointer to the spinlock_t.
1249     */
1250    acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock lockp)
1251            __acquires(lockp)
1252    {
1253  expected:
1254  - man: |
1255      .TH "acpi_os_acquire_lock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1256      .SH NAME
1257      acpi_os_acquire_lock \- Acquire a spinlock.
1258      .SH SYNOPSIS
1259      .B "acpi_cpu_flags" acpi_os_acquire_lock
1260      .BI "(acpi_spinlock lockp "  ");"
1261      .SH ARGUMENTS
1262      .IP "lockp" 12
1263      pointer to the spinlock_t.
1264      .SH "SEE ALSO"
1265      .PP
1266      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1267    rst: |
1268      .. c:function:: acpi_cpu_flags acpi_os_acquire_lock (acpi_spinlock lockp)
1269
1270         Acquire a spinlock.
1271
1272      .. container:: kernelindent
1273
1274        **Parameters**
1275
1276        ``acpi_spinlock lockp``
1277          pointer to the spinlock_t.
1278- name: acpi_os_release_lock
1279  description: mock_tests/kdoc-drop-ctx-lock.c line 172
1280  fname: mock_tests/kdoc-drop-ctx-lock.c
1281  source: |
1282    /**
1283     * acpi_os_release_lock - Release a spinlock.
1284     * @lockp: pointer to the spinlock_t.
1285     * @not_used: these flags are not used.
1286     */
1287    void acpi_os_release_lock(acpi_spinlock lockp, acpi_cpu_flags not_used)
1288            __releases(lockp)
1289    {
1290  expected:
1291  - man: |
1292      .TH "acpi_os_release_lock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1293      .SH NAME
1294      acpi_os_release_lock \- Release a spinlock.
1295      .SH SYNOPSIS
1296      .B "void" acpi_os_release_lock
1297      .BI "(acpi_spinlock lockp "  ","
1298      .BI "acpi_cpu_flags not_used "  ");"
1299      .SH ARGUMENTS
1300      .IP "lockp" 12
1301      pointer to the spinlock_t.
1302      .IP "not_used" 12
1303      these flags are not used.
1304      .SH "SEE ALSO"
1305      .PP
1306      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1307    rst: |
1308      .. c:function:: void acpi_os_release_lock (acpi_spinlock lockp, acpi_cpu_flags not_used)
1309
1310         Release a spinlock.
1311
1312      .. container:: kernelindent
1313
1314        **Parameters**
1315
1316        ``acpi_spinlock lockp``
1317          pointer to the spinlock_t.
1318
1319        ``acpi_cpu_flags not_used``
1320          these flags are not used.
1321- name: tx
1322  description: mock_tests/kdoc-drop-ctx-lock.c line 183
1323  fname: mock_tests/kdoc-drop-ctx-lock.c
1324  source: |
1325    /**
1326     * tx - transmit message ID @id
1327     * @id: message ID to transmit
1328     */
1329    int tx(int id) __must_hold(&txlock)
1330    {
1331  expected:
1332  - man: |
1333      .TH "tx" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1334      .SH NAME
1335      tx \- transmit message ID @id
1336      .SH SYNOPSIS
1337      .B "int" tx
1338      .BI "(int id "  ");"
1339      .SH ARGUMENTS
1340      .IP "id" 12
1341      message ID to transmit
1342      .SH "SEE ALSO"
1343      .PP
1344      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1345    rst: |
1346      .. c:function:: int tx (int id)
1347
1348         transmit message ID **id**
1349
1350      .. container:: kernelindent
1351
1352        **Parameters**
1353
1354        ``int id``
1355          message ID to transmit
1356- name: contend_for_bm
1357  description: mock_tests/kdoc-drop-ctx-lock.c line 192
1358  fname: mock_tests/kdoc-drop-ctx-lock.c
1359  source: |
1360    /**
1361     * contend_for_bm - try to become the bus master
1362     * @card: the &fw_card (describes the bus)
1363     */
1364    enum bm_contention_outcome contend_for_bm(struct fw_card *card)
1365        __must_hold(&card->lock)
1366    {
1367  expected:
1368  - man: |
1369      .TH "contend_for_bm" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1370      .SH NAME
1371      contend_for_bm \- try to become the bus master
1372      .SH SYNOPSIS
1373      .B "enum bm_contention_outcome" contend_for_bm
1374      .BI "(struct fw_card *card "  ");"
1375      .SH ARGUMENTS
1376      .IP "card" 12
1377      the \fIfw_card\fP (describes the bus)
1378      .SH "SEE ALSO"
1379      .PP
1380      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1381    rst: |
1382      .. c:function:: enum bm_contention_outcome contend_for_bm (struct fw_card *card)
1383
1384         try to become the bus master
1385
1386      .. container:: kernelindent
1387
1388        **Parameters**
1389
1390        ``struct fw_card *card``
1391          the :c:type:`fw_card` (describes the bus)
1392- name: prepare_report_producer
1393  description: mock_tests/kdoc-drop-ctx-lock.c line 202
1394  fname: mock_tests/kdoc-drop-ctx-lock.c
1395  source: |
1396    /**
1397     * prepare_report_producer - prepare the report producer
1398     * @flags: still flags
1399     * @ai: some AI
1400     * @other_info: Populate @other_info; requires that the provided
1401     *   @other_info not in use.
1402     */
1403    void prepare_report_producer(unsigned long *flags,
1404                                const struct access_info *ai,
1405                                struct other_info *other_info)
1406            __must_not_hold(&report_lock)
1407    { }
1408  expected:
1409  - man: |
1410      .TH "prepare_report_producer" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1411      .SH NAME
1412      prepare_report_producer \- prepare the report producer
1413      .SH SYNOPSIS
1414      .B "void" prepare_report_producer
1415      .BI "(unsigned long *flags "  ","
1416      .BI "const struct access_info *ai "  ","
1417      .BI "struct other_info *other_info "  ");"
1418      .SH ARGUMENTS
1419      .IP "flags" 12
1420      still flags
1421      .IP "ai" 12
1422      some AI
1423      .IP "other_info" 12
1424      Populate \fIother_info\fP; requires that the provided
1425      \fIother_info\fP not in use.
1426      .SH "SEE ALSO"
1427      .PP
1428      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1429    rst: |
1430      .. c:function:: void prepare_report_producer (unsigned long *flags, const struct access_info *ai, struct other_info *other_info)
1431
1432         prepare the report producer
1433
1434      .. container:: kernelindent
1435
1436        **Parameters**
1437
1438        ``unsigned long *flags``
1439          still flags
1440
1441        ``const struct access_info *ai``
1442          some AI
1443
1444        ``struct other_info *other_info``
1445          Populate **other_info**; requires that the provided
1446          **other_info** not in use.
1447- name: crypto_alg_lookup
1448  description: mock_tests/kdoc-drop-ctx-lock.c line 215
1449  fname: mock_tests/kdoc-drop-ctx-lock.c
1450  source: |
1451    /**
1452     * __crypto_alg_lookup() - lookup the algorithm by name/type/mask
1453     * @name: name to search for
1454     * @type: type to search for
1455     * @mask: mask to match
1456     */
1457    struct crypto_alg *__crypto_alg_lookup(const char *name, u32 type,
1458                                                  u32 mask)
1459            __must_hold_shared(&crypto_alg_sem)
1460    {
1461  expected:
1462  - man: |
1463      .TH "__crypto_alg_lookup" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1464      .SH NAME
1465      __crypto_alg_lookup \- lookup the algorithm by name/type/mask
1466      .SH SYNOPSIS
1467      .B "struct crypto_alg *" __crypto_alg_lookup
1468      .BI "(const char *name "  ","
1469      .BI "u32 type "  ","
1470      .BI "u32 mask "  ");"
1471      .SH ARGUMENTS
1472      .IP "name" 12
1473      name to search for
1474      .IP "type" 12
1475      type to search for
1476      .IP "mask" 12
1477      mask to match
1478      .SH "SEE ALSO"
1479      .PP
1480      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1481    rst: |
1482      .. c:function:: struct crypto_alg * __crypto_alg_lookup (const char *name, u32 type, u32 mask)
1483
1484         lookup the algorithm by name/type/mask
1485
1486      .. container:: kernelindent
1487
1488        **Parameters**
1489
1490        ``const char *name``
1491          name to search for
1492
1493        ``u32 type``
1494          type to search for
1495
1496        ``u32 mask``
1497          mask to match
1498- name: down_read_trylock
1499  description: mock_tests/kdoc-drop-ctx-lock.c line 228
1500  fname: mock_tests/kdoc-drop-ctx-lock.c
1501  source: |
1502    /**
1503     * down_read_trylock - trylock for reading
1504     * @sem: the semaphore to try to lock
1505     *
1506     * Returns: 1 if successful, 0 if contention
1507     */
1508    extern int down_read_trylock(struct rw_semaphore *sem) __cond_acquires_shared(true, sem);
1509  expected:
1510  - man: |
1511      .TH "down_read_trylock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1512      .SH NAME
1513      down_read_trylock \- trylock for reading
1514      .SH SYNOPSIS
1515      .B "int" down_read_trylock
1516      .BI "(struct rw_semaphore *sem "  ");"
1517      .SH ARGUMENTS
1518      .IP "sem" 12
1519      the semaphore to try to lock
1520      .SH "RETURN"
1521      1 if successful, 0 if contention
1522      .SH "SEE ALSO"
1523      .PP
1524      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1525    rst: |
1526      .. c:function:: int down_read_trylock (struct rw_semaphore *sem)
1527
1528         trylock for reading
1529
1530      .. container:: kernelindent
1531
1532        **Parameters**
1533
1534        ``struct rw_semaphore *sem``
1535          the semaphore to try to lock
1536
1537        **Return**
1538
1539        1 if successful, 0 if contention
1540- name: tomoyo_read_lock
1541  description: mock_tests/kdoc-drop-ctx-lock.c line 236
1542  fname: mock_tests/kdoc-drop-ctx-lock.c
1543  source: |
1544    /**
1545     * tomoyo_read_lock - Take lock for protecting policy.
1546     *
1547     * Returns: index number for tomoyo_read_unlock().
1548     */
1549    int tomoyo_read_lock(void)
1550            __acquires_shared(&tomoyo_ss)
1551    {
1552  expected:
1553  - man: |
1554      .TH "tomoyo_read_lock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1555      .SH NAME
1556      tomoyo_read_lock \- Take lock for protecting policy.
1557      .SH SYNOPSIS
1558      .B "int" tomoyo_read_lock
1559      .BI "(void "  ");"
1560      .SH ARGUMENTS
1561      .IP "void" 12
1562      no arguments
1563      .SH "RETURN"
1564      index number for \fBtomoyo_read_unlock\fP.
1565      .SH "SEE ALSO"
1566      .PP
1567      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1568    rst: |
1569      .. c:function:: int tomoyo_read_lock (void)
1570
1571         Take lock for protecting policy.
1572
1573      .. container:: kernelindent
1574
1575        **Parameters**
1576
1577        ``void``
1578          no arguments
1579
1580        **Return**
1581
1582        index number for tomoyo_read_unlock().
1583- name: tomoyo_read_unlock
1584  description: mock_tests/kdoc-drop-ctx-lock.c line 247
1585  fname: mock_tests/kdoc-drop-ctx-lock.c
1586  source: |
1587    /**
1588     * tomoyo_read_unlock - Release lock for protecting policy.
1589     *
1590     * @idx: Index number returned by tomoyo_read_lock().
1591     */
1592    void tomoyo_read_unlock(int idx)
1593            __releases_shared(&tomoyo_ss)
1594    { }
1595  expected:
1596  - man: |
1597      .TH "tomoyo_read_unlock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1598      .SH NAME
1599      tomoyo_read_unlock \- Release lock for protecting policy.
1600      .SH SYNOPSIS
1601      .B "void" tomoyo_read_unlock
1602      .BI "(int idx "  ");"
1603      .SH ARGUMENTS
1604      .IP "idx" 12
1605      Index number returned by \fBtomoyo_read_lock\fP.
1606      .SH "SEE ALSO"
1607      .PP
1608      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1609    rst: |
1610      .. c:function:: void tomoyo_read_unlock (int idx)
1611
1612         Release lock for protecting policy.
1613
1614      .. container:: kernelindent
1615
1616        **Parameters**
1617
1618        ``int idx``
1619          Index number returned by tomoyo_read_lock().
1620- name: c_stop
1621  description: mock_tests/kdoc-drop-ctx-lock.c line 256
1622  fname: mock_tests/kdoc-drop-ctx-lock.c
1623  source: |
1624    /**
1625     * c_stop - stop the seq_file iteration
1626     * @m: the &struct seq_file
1627     * @p: handle
1628     */
1629    void c_stop(struct seq_file *m, void *p)
1630            __releases_shared(&crypto_alg_sem)
1631    { }
1632  expected:
1633  - man: |
1634      .TH "c_stop" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1635      .SH NAME
1636      c_stop \- stop the seq_file iteration
1637      .SH SYNOPSIS
1638      .B "void" c_stop
1639      .BI "(struct seq_file *m "  ","
1640      .BI "void *p "  ");"
1641      .SH ARGUMENTS
1642      .IP "m" 12
1643      the \fIstruct seq_file\fP
1644      .IP "p" 12
1645      handle
1646      .SH "SEE ALSO"
1647      .PP
1648      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1649    rst: |
1650      .. c:function:: void c_stop (struct seq_file *m, void *p)
1651
1652         stop the seq_file iteration
1653
1654      .. container:: kernelindent
1655
1656        **Parameters**
1657
1658        ``struct seq_file *m``
1659          the :c:type:`struct seq_file <seq_file>`
1660
1661        ``void *p``
1662          handle
1663- name: spin_lock
1664  description: mock_tests/kdoc-drop-ctx-lock.c line 265
1665  fname: mock_tests/kdoc-drop-ctx-lock.c
1666  source: |
1667    /**
1668     * spin_lock - spin until the @lock is acquired
1669     * @lock: the spinlock
1670     */
1671    void spin_lock(spinlock_t *lock)
1672            __acquires(lock) __no_context_analysis
1673    { }
1674  expected:
1675  - man: |
1676      .TH "spin_lock" 9 "February 2026"  "mock_tests" "Kernel API Manual"
1677      .SH NAME
1678      spin_lock \- spin until the @lock is acquired
1679      .SH SYNOPSIS
1680      .B "void" spin_lock
1681      .BI "(spinlock_t *lock "  ");"
1682      .SH ARGUMENTS
1683      .IP "lock" 12
1684      the spinlock
1685      .SH "SEE ALSO"
1686      .PP
1687      Kernel file \fBmock_tests/kdoc-drop-ctx-lock.c\fR
1688    rst: |
1689      .. c:function:: void spin_lock (spinlock_t *lock)
1690
1691         spin until the **lock** is acquired
1692
1693      .. container:: kernelindent
1694
1695        **Parameters**
1696
1697        ``spinlock_t *lock``
1698          the spinlock
1699