!sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/driver-api/generic_ptmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/driver-api/generic_ptmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/driver-api/generic_ptmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/driver-api/generic_ptmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/driver-api/generic_ptmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/driver-api/generic_ptmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h SPDX-License-Identifier: GPL-2.0h]h SPDX-License-Identifier: GPL-2.0}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt.rsthKubhsection)}(hhh](htitle)}(hGeneric Radix Page Tableh]hGeneric Radix Page Table}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hX,Generic Radix Page Table is a set of functions and helpers to efficiently parse radix style page tables typically seen in HW implementations. The interface is built to deliver similar code generation as the mm's pte/pmd/etc system by fully inlining the exact code required to handle each table level.h]hX.Generic Radix Page Table is a set of functions and helpers to efficiently parse radix style page tables typically seen in HW implementations. The interface is built to deliver similar code generation as the mm’s pte/pmd/etc system by fully inlining the exact code required to handle each table level.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhK hhhhubh)}(hLike the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.h]hLike the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhhhhubh)}(h0The system is divided into three logical levels:h]h0The system is divided into three logical levels:}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhhhhubh block_quote)}(h- The page table format and its manipulation functions - Generic helpers to give a consistent API regardless of underlying format - An algorithm implementation (e.g. IOMMU/DRM/KVM/MM) h]h bullet_list)}(hhh](h list_item)}(h4The page table format and its manipulation functionsh]h)}(hjh]h4The page table format and its manipulation functions}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(hHGeneric helpers to give a consistent API regardless of underlying formath]h)}(hjh]hHGeneric helpers to give a consistent API regardless of underlying format}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h4An algorithm implementation (e.g. IOMMU/DRM/KVM/MM) h]h)}(h3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)h]h3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhj5ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet-uh1hhjhKhhubah}(h]h ]h"]h$]h&]uh1hhjhKhhhhubh)}(hX?Multiple implementations are supported. The intention is to have the generic format code be re-usable for whatever specialized implementation is required. The generic code is solely about the format of the radix tree; it does not include memory allocation or higher level decisions that are left for the implementation.h]hX?Multiple implementations are supported. The intention is to have the generic format code be re-usable for whatever specialized implementation is required. The generic code is solely about the format of the radix tree; it does not include memory allocation or higher level decisions that are left for the implementation.}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhKhhhhubh)}(hVThe generic framework supports a superset of functions across many HW implementations:h]hVThe generic framework supports a superset of functions across many HW implementations:}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhK!hhhhubh)}(hX- Entries comprised of contiguous blocks of IO PTEs for larger page sizes - Multi-level tables, up to 6 levels. Runtime selected top level - Runtime variable table level size (ARM's concatenated tables) - Expandable top level allowing dynamic sizing of table levels - Optional leaf entries at any level - 32-bit/64-bit virtual and output addresses, using every address bit - Dirty tracking - Sign extended addressing h]h)}(hhh](j)}(hGEntries comprised of contiguous blocks of IO PTEs for larger page sizesh]h)}(hjh]hGEntries comprised of contiguous blocks of IO PTEs for larger page sizes}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhK$hjubah}(h]h ]h"]h$]h&]uh1jhj~ubj)}(h>Multi-level tables, up to 6 levels. Runtime selected top levelh]h)}(hjh]h>Multi-level tables, up to 6 levels. Runtime selected top level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhK%hjubah}(h]h ]h"]h$]h&]uh1jhj~ubj)}(h=Runtime variable table level size (ARM's concatenated tables)h]h)}(hjh]h?Runtime variable table level size (ARM’s concatenated tables)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.hhK&hjubah}(h]h ]h"]h$]h&]uh1jhj~ubj)}(h #include "defs_amdv1.h" #include "../pt_defs.h" #include "amdv1.h" #include "../pt_common.h" #include "../pt_iter.h" #include "../iommu_pt.h" /* The IOMMU implementation */h]h#include #include "defs_amdv1.h" #include "../pt_defs.h" #include "amdv1.h" #include "../pt_common.h" #include "../pt_iter.h" #include "../iommu_pt.h" /* The IOMMU implementation */}hjsbah}(h]h ]h"]h$]h&]hhuh1jhhhK!hjfhhubh)}(hiommu_pt.h includes definitions that will generate the operations functions for map/unmap/etc. using the definitions provided by AMDv1. The resulting module will have exported symbols named like pt_iommu_amdv1_init().h]hiommu_pt.h includes definitions that will generate the operations functions for map/unmap/etc. using the definitions provided by AMDv1. The resulting module will have exported symbols named like pt_iommu_amdv1_init().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK)hjfhhubh)}(hRefer to drivers/iommu/generic_pt/fmt/iommu_template.h for an example of how the IOMMU implementation uses multi-compilation to generate per-format ops structs pointers.h]hRefer to drivers/iommu/generic_pt/fmt/iommu_template.h for an example of how the IOMMU implementation uses multi-compilation to generate per-format ops structs pointers.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hjfhhubh)}(hThe format code is written so that the common names arise from #defines to distinct format specific names. This is intended to aid debuggability by avoiding symbol clashes across all the different formats.h]hThe format code is written so that the common names arise from #defines to distinct format specific names. This is intended to aid debuggability by avoiding symbol clashes across all the different formats.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjfhhubh)}(hhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.h]hhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK5hjfhhubh)}(hThe format uses struct pt_common as the top-level struct for the table, and each format will have its own struct pt_xxx which embeds it to store format-specific information.h]hThe format uses struct pt_common as the top-level struct for the table, and each format will have its own struct pt_xxx which embeds it to store format-specific information.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK8hjfhhubh)}(hqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.h]hqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKh]h pt_common}(hjqhhhNhNubah}(h]h ]nah"]h$]h&]uh1johjkubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1jihjBhhhjWhKubeh}(h]h ]h"]h$]h&]hh add_permalinkuh1j@sphinx_line_type declaratorhj<hhhjWhKubah}(h]j3ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j:hjWhKhj7hhubh desc_content)}(hhh]h)}(h)struct for all page table implementationsh]h)struct for all page table implementations}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK1hjhhubah}(h]h ]h"]h$]h&]uh1jhj7hhhjWhKubeh}(h]h ](cstructeh"]h$]h&]domainjobjtypejdesctypejnoindex noindexentrynocontentsentryuh1j5hhhjhNhNubh container)}(hX]**Definition**:: struct pt_common { uintptr_t top_of_table; u8 max_oasz_lg2; u8 max_vasz_lg2; unsigned int features; }; **Members** ``top_of_table`` Encodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level. ``max_oasz_lg2`` Maximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more. ``max_vasz_lg2`` Maximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability. ``features`` Bitmap of `enum pt_features`h](h)}(h**Definition**::h](hstrong)}(h**Definition**h]h Definition}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh:}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK5hjubj)}(hvstruct pt_common { uintptr_t top_of_table; u8 max_oasz_lg2; u8 max_vasz_lg2; unsigned int features; };h]hvstruct pt_common { uintptr_t top_of_table; u8 max_oasz_lg2; u8 max_vasz_lg2; unsigned int features; };}hjsbah}(h]h ]h"]h$]h&]hhuh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK7hjubh)}(h **Members**h]j)}(hjh]hMembers}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK>hjubjO)}(hhh](jT)}(h``top_of_table`` Encodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level. h](jZ)}(h``top_of_table``h]hliteral)}(hjh]h top_of_table}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK8hjubjk)}(hhh]h)}(hEncodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level.h]hEncodes the table top pointer and the top level in a single value. Must use READ_ONCE/WRITE_ONCE to access it. The lower bits of the aligned table pointer are used for the level.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK6hj0ubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShj/hK8hjubjT)}(h``max_oasz_lg2`` Maximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more. h](jZ)}(h``max_oasz_lg2``h]j)}(hjTh]h max_oasz_lg2}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK>hjNubjk)}(hhh]h)}(hMaximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more.h]hMaximum number of bits the OA can contain. Upper bits must be zero. This may be less than what the page table format supports, but must not be more.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKhjubjT)}(hX``max_vasz_lg2`` Maximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability. h](jZ)}(h``max_vasz_lg2``h]j)}(hjh]h max_vasz_lg2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKEhjubjk)}(hhh]h)}(hMaximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability.h]hMaximum number of bits the VA can contain. Upper bits are 0 or 1 depending on pt_full_va_prefix(). This may be less than what the page table format supports, but must not be more. When PT_FEAT_DYNAMIC_TOP is set this reflects the maximum VA capability.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKBhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKEhjubjT)}(h)``features`` Bitmap of `enum pt_features`h](jZ)}(h ``features``h]j)}(hjh]hfeatures}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKHhjubjk)}(hhh]h)}(hBitmap of `enum pt_features`h](h Bitmap of }(hjhhhNhNubhtitle_reference)}(h`enum pt_features`h]henum pt_features}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKIhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKHhjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_features (C enum) c.pt_featureshNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h pt_featuresh]jA)}(henum pt_featuresh](jG)}(henumh]henum}(hj2hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj.hhhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKOubjY)}(h h]h }(hjAhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj.hhhj@hKOubjj)}(h pt_featuresh]jp)}(hj,h]h pt_features}(hjShhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjOubah}(h]h ](jjeh"]h$]h&]hhuh1jihj.hhhj@hKOubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj*hhhj@hKOubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1j:hj@hKOhj'hhubj)}(hhh]h)}(h?Features turned on in the table. Each symbol is a bit position.h]h?Features turned on in the table. Each symbol is a bit position.}(hjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKThjrhhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj@hKOubeh}(h]h ](jenumeh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(hX-**Constants** ``PT_FEAT_DMA_INCOHERENT`` Cache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it. ``PT_FEAT_FULL_VA`` The table can span the full VA range from 0 to PT_VADDR_MAX. ``PT_FEAT_DYNAMIC_TOP`` The table's top level can be increased dynamically during map. This requires HW support for atomically setting both the table top pointer and the starting table level. ``PT_FEAT_SIGN_EXTEND`` The top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges:: 0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper In this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated. If not set there is no sign extension and valid VA goes from 0 to 2^N - 1. ``PT_FEAT_FLUSH_RANGE`` IOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed. ``PT_FEAT_FLUSH_RANGE_NO_GAPS`` Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.h](h)}(h **Constants**h]j)}(hjh]h Constants}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKXhjubjO)}(hhh](jT)}(h``PT_FEAT_DMA_INCOHERENT`` Cache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it. h](jZ)}(h``PT_FEAT_DMA_INCOHERENT``h]j)}(hjh]hPT_FEAT_DMA_INCOHERENT}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK]hjubjk)}(hhh]h)}(hzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.h]hzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK[hjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhK]hjubjT)}(hQ``PT_FEAT_FULL_VA`` The table can span the full VA range from 0 to PT_VADDR_MAX. h](jZ)}(h``PT_FEAT_FULL_VA``h]j)}(hjh]hPT_FEAT_FULL_VA}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKahjubjk)}(hhh]h)}(h 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper In this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated. If not set there is no sign extension and valid VA goes from 0 to 2^N - 1. h](jZ)}(h``PT_FEAT_SIGN_EXTEND``h]j)}(hjd h]hPT_FEAT_SIGN_EXTEND}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKuhj^ ubjk)}(hhh](h)}(hThe top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges::h]hThe top most bit of the valid VA range sign extends up to the full pt_vaddr_t. This divides the page table into three VA ranges:}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKihjz ubj)}(h|0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upperh]h|0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper}hj sbah}(h]h ]h"]h$]h&]hhuh1jhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKmhjz ubh)}(hIn this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don't fall within the translation are just validated.h]hIn this mode pt_common::max_vasz_lg2 includes the sign bit and the upper bits that don’t fall within the translation are just validated.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKqhjz ubh)}(hJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.h]hJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKthjz ubeh}(h]h ]h"]h$]h&]uh1jjhj^ ubeh}(h]h ]h"]h$]h&]uh1jShjy hKuhjubjT)}(hX``PT_FEAT_FLUSH_RANGE`` IOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed. h](jZ)}(h``PT_FEAT_FLUSH_RANGE``h]j)}(hj h]hPT_FEAT_FLUSH_RANGE}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhK|hj ubjk)}(hhh]h)}(hXIOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed.h]hXIOTLB maintenance is done by flushing IOVA ranges which will clean out any walk cache or any IOPTE fully contained by the range. The optimization objective is to minimize the number of flushes even if ranges include IOVA gaps that do not need to be flushed.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKxhj ubah}(h]h ]h"]h$]h&]uh1jjhj ubeh}(h]h ]h"]h$]h&]uh1jShj hK|hjubjT)}(hX,``PT_FEAT_FLUSH_RANGE_NO_GAPS`` Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.h](jZ)}(h``PT_FEAT_FLUSH_RANGE_NO_GAPS``h]j)}(hj h]hPT_FEAT_FLUSH_RANGE_NO_GAPS}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jYhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKhj ubjk)}(hhh]h)}(hX Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.h]hX Like PT_FEAT_FLUSH_RANGE except that the optimization objective is to only flush IOVA that has been changed. This mode is suitable for cases like hypervisor shadowing where flushing unchanged ranges may cause the hypervisor to reparse significant amount of page table.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.hhKhj ubah}(h]h ]h"]h$]h&]uh1jjhj ubeh}(h]h ]h"]h$]h&]uh1jShj hKhjubeh}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_attr_from_entry (C function)c.pt_attr_from_entryhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hRvoid pt_attr_from_entry (const struct pt_state *pts, struct pt_write_attrs *attrs)h]jA)}(hQvoid pt_attr_from_entry(const struct pt_state *pts, struct pt_write_attrs *attrs)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hja hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j_ hj[ hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK ubjY)}(h h]h }(hjq hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[ hhhjp hK ubjj)}(hpt_attr_from_entryh]jp)}(hpt_attr_from_entryh]hpt_attr_from_entry}(hj hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj[ hhhjp hK ubhdesc_parameterlist)}(h:(const struct pt_state *pts, struct pt_write_attrs *attrs)h](hdesc_parameter)}(hconst struct pt_state *ptsh](jG)}(hconsth]hconst}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubjG)}(hjJh]hstruct}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetj modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}j j sbc.pt_attr_from_entryasbuh1hhj ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubhdesc_sig_punctuation)}(h*h]h*}(hj hhhNhNubah}(h]h ]pah"]h$]h&]uh1j hj ubjp)}(hptsh]hpts}(hj$ hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubj )}(hstruct pt_write_attrs *attrsh](jG)}(hjJh]hstruct}(hj= hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj9 ubjY)}(h h]h }(hjJ hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj9 ubh)}(hhh]jp)}(hpt_write_attrsh]hpt_write_attrs}(hj[ hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjX ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj] modnameN classnameNj j )}j ]j c.pt_attr_from_entryasbuh1hhj9 ubjY)}(h h]h }(hjy hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj9 ubj )}(hj h]h*}(hj hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj9 ubjp)}(hattrsh]hattrs}(hj hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj9 ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubeh}(h]h ]h"]h$]h&]hhuh1j hj[ hhhjp hK ubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjW hhhjp hK ubah}(h]jR ah ](jjeh"]h$]h&]jj)jhuh1j:hjp hK hjT hhubj)}(hhh]h)}(h)Convert the permission bits back to attrsh]h)Convert the permission bits back to attrs}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK hj hhubah}(h]h ]h"]h$]h&]uh1jhjT hhhjp hK ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j5hhhjhNhNubj)}(hX1**Parameters** ``const struct pt_state *pts`` Entry to convert from ``struct pt_write_attrs *attrs`` Resulting attrs **Description** Fill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK$hj ubjO)}(hhh](jT)}(h5``const struct pt_state *pts`` Entry to convert from h](jZ)}(h``const struct pt_state *pts``h]j)}(hj h]hconst struct pt_state *pts}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK!hj ubjk)}(hhh]h)}(hEntry to convert fromh]hEntry to convert from}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK!hj ubah}(h]h ]h"]h$]h&]uh1jjhj ubeh}(h]h ]h"]h$]h&]uh1jShj hK!hj ubjT)}(h1``struct pt_write_attrs *attrs`` Resulting attrs h](jZ)}(h ``struct pt_write_attrs *attrs``h]j)}(hj8 h]hstruct pt_write_attrs *attrs}(hj: hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6 ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK"hj2 ubjk)}(hhh]h)}(hResulting attrsh]hResulting attrs}(hjQ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjM hK"hjN ubah}(h]h ]h"]h$]h&]uh1jjhj2 ubeh}(h]h ]h"]h$]h&]uh1jShjM hK"hj ubeh}(h]h ]h"]h$]h&]uh1jNhj ubh)}(h**Description**h]j)}(hjs h]h Description}(hju hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjq ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK$hj ubh)}(hFill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.h]hFill in the attrs with the permission bits encoded in the current leaf entry. The attrs should be usable with pt_install_leaf_entry() to reconstruct the same entry.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK#hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_can_have_leaf (C function)c.pt_can_have_leafhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h2bool pt_can_have_leaf (const struct pt_state *pts)h]jA)}(h1bool pt_can_have_leaf(const struct pt_state *pts)h](j` )}(hboolh]hbool}(hj hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK,ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj hhhj hK,ubjj)}(hpt_can_have_leafh]jp)}(hpt_can_have_leafh]hpt_can_have_leaf}(hj hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj hhhj hK,ubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubjG)}(hjJh]hstruct}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj ubjY)}(h h]h }(hj hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj. hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj+ ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0 modnameN classnameNj j )}j ]j )}j j sbc.pt_can_have_leafasbuh1hhj ubjY)}(h h]h }(hjN hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj ubj )}(hj h]h*}(hj\ hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj ubjp)}(hptsh]hpts}(hji hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj ubah}(h]h ]h"]h$]h&]hhuh1j hj hhhj hK,ubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj hhhj hK,ubah}(h]j ah ](jjeh"]h$]h&]jj)jhuh1j:hj hK,hj hhubj)}(hhh]h)}(h.True if the current level can have an OA entryh]h.True if the current level can have an OA entry}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK,hj hhubah}(h]h ]h"]h$]h&]uh1jhj hhhj hK,ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj jj jjjuh1j5hhhjhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` The current level **Description** True if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK0hj ubjO)}(hhh]jT)}(h1``const struct pt_state *pts`` The current level h](jZ)}(h``const struct pt_state *pts``h]j)}(hj h]hconst struct pt_state *pts}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK-hj ubjk)}(hhh]h)}(hThe current levelh]hThe current level}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hK-hj ubah}(h]h ]h"]h$]h&]uh1jjhj ubeh}(h]h ]h"]h$]h&]uh1jShj hK-hj ubah}(h]h ]h"]h$]h&]uh1jNhj ubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK/hj ubh)}(hZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.h]hZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK.hj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_can_have_table (C function)c.pt_can_have_tablehNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h3bool pt_can_have_table (const struct pt_state *pts)h]jA)}(h2bool pt_can_have_table(const struct pt_state *pts)h](j` )}(hj h]hbool}(hjThhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjPhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK5ubjY)}(h h]h }(hjbhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjPhhhjahK5ubjj)}(hpt_can_have_tableh]jp)}(hpt_can_have_tableh]hpt_can_have_table}(hjthhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjpubah}(h]h ](jjeh"]h$]h&]hhuh1jihjPhhhjahK5ubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubjG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jvsbc.pt_can_have_tableasbuh1hhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjPhhhjahK5ubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjLhhhjahK5ubah}(h]jGah ](jjeh"]h$]h&]jj)jhuh1j:hjahK5hjIhhubj)}(hhh]h)}(h0True if the current level can have a lower tableh]h0True if the current level can have a lower table}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK5hj+hhubah}(h]h ]h"]h$]h&]uh1jhjIhhhjahK5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjFjjFjjjuh1j5hhhjhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` The current level **Description** Every level except 0 is allowed to have a lower table.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK9hjJubjO)}(hhh]jT)}(h1``const struct pt_state *pts`` The current level h](jZ)}(h``const struct pt_state *pts``h]j)}(hjoh]hconst struct pt_state *pts}(hjqhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK6hjiubjk)}(hhh]h)}(hThe current levelh]hThe current level}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK6hjubah}(h]h ]h"]h$]h&]uh1jjhjiubeh}(h]h ]h"]h$]h&]uh1jShjhK6hjfubah}(h]h ]h"]h$]h&]uh1jNhjJubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK8hjJubh)}(h6Every level except 0 is allowed to have a lower table.h]h6Every level except 0 is allowed to have a lower table.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK7hjJubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_clear_entries (C function)c.pt_clear_entrieshNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hIvoid pt_clear_entries (struct pt_state *pts, unsigned int num_contig_lg2)h]jA)}(hHvoid pt_clear_entries(struct pt_state *pts, unsigned int num_contig_lg2)h](j` )}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKAubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKAubjj)}(hpt_clear_entriesh]jp)}(hpt_clear_entriesh]hpt_clear_entries}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKAubj )}(h3(struct pt_state *pts, unsigned int num_contig_lg2)h](j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj,hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj(ubjY)}(h h]h }(hj9hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjJhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjLmodnameN classnameNj j )}j ]j )}j jsbc.pt_clear_entriesasbuh1hhj(ubjY)}(h h]h }(hjjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(ubj )}(hj h]h*}(hjxhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$ubj )}(hunsigned int num_contig_lg2h](j` )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj` )}(hinth]hint}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubjp)}(hnum_contig_lg2h]hnum_contig_lg2}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj$ubeh}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKAubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhjhKAubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hjhKAhjhhubj)}(hhh]h)}(h Make entries empty (non-present)h]h Make entries empty (non-present)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKAhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKAubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(hXF**Parameters** ``struct pt_state *pts`` Starting table index ``unsigned int num_contig_lg2`` Number of contiguous items to clear **Description** Clear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.h](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKEhjubjO)}(hhh](jT)}(h.``struct pt_state *pts`` Starting table index h](jZ)}(h``struct pt_state *pts``h]j)}(hjAh]hstruct pt_state *pts}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKBhj;ubjk)}(hhh]h)}(hStarting table indexh]hStarting table index}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhKBhjWubah}(h]h ]h"]h$]h&]uh1jjhj;ubeh}(h]h ]h"]h$]h&]uh1jShjVhKBhj8ubjT)}(hD``unsigned int num_contig_lg2`` Number of contiguous items to clear h](jZ)}(h``unsigned int num_contig_lg2``h]j)}(hjzh]hunsigned int num_contig_lg2}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjxubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKChjtubjk)}(hhh]h)}(h#Number of contiguous items to clearh]h#Number of contiguous items to clear}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKChjubah}(h]h ]h"]h$]h&]uh1jjhjtubeh}(h]h ]h"]h$]h&]uh1jShjhKChj8ubeh}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKEhjubh)}(hClear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.h]hClear a run of entries. A cleared entry will load back as PT_ENTRY_EMPTY and does not have any effect on table walking. The starting index must be aligned to num_contig_lg2.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1&pt_entry_make_write_dirty (C function)c.pt_entry_make_write_dirtyhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h5bool pt_entry_make_write_dirty (struct pt_state *pts)h]jA)}(h4bool pt_entry_make_write_dirty(struct pt_state *pts)h](j` )}(hj h]hbool}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKMubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKMubjj)}(hpt_entry_make_write_dirtyh]jp)}(hpt_entry_make_write_dirtyh]hpt_entry_make_write_dirty}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKMubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj6hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj2ubjY)}(h h]h }(hjChhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj2ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjQubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNj j )}j ]j )}j jsbc.pt_entry_make_write_dirtyasbuh1hhj2ubjY)}(h h]h }(hjthhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj2ubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhjhKMubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hjhKMhjhhubj)}(hhh]h)}(hMake an entry dirtyh]hMake an entry dirty}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKMhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``struct pt_state *pts`` Table entry to change **Description** Make pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKQhjubjO)}(hhh]jT)}(h/``struct pt_state *pts`` Table entry to change h](jZ)}(h``struct pt_state *pts``h]j)}(hjh]hstruct pt_state *pts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKNhjubjk)}(hhh]h)}(hTable entry to changeh]hTable entry to change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKNhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKNhjubah}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hj5h]h Description}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKPhjubh)}(hMake pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.h]hMake pt_entry_is_write_dirty() return true for this entry. This can be called asynchronously with any other table manipulation under a RCU lock and must not corrupt the table.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKOhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1&pt_entry_make_write_clean (C function)c.pt_entry_make_write_cleanhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h5void pt_entry_make_write_clean (struct pt_state *pts)h]jA)}(h4void pt_entry_make_write_clean(struct pt_state *pts)h](j` )}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjvhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKWubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjvhhhjhKWubjj)}(hpt_entry_make_write_cleanh]jp)}(hpt_entry_make_write_cleanh]hpt_entry_make_write_clean}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ](jjeh"]h$]h&]hhuh1jihjvhhhjhKWubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.pt_entry_make_write_cleanasbuh1hhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjvhhhjhKWubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjrhhhjhKWubah}(h]jmah ](jjeh"]h$]h&]jj)jhuh1j:hjhKWhjohhubj)}(hhh]h)}(hMake the entry write cleanh]hMake the entry write clean}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKWhj7hhubah}(h]h ]h"]h$]h&]uh1jhjohhhjhKWubeh}(h]h ](jfunctioneh"]h$]h&]jjjjRjjRjjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``struct pt_state *pts`` Table entry to change **Description** Modify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any "write dirty" prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty. The format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK[hjVubjO)}(hhh]jT)}(h/``struct pt_state *pts`` Table entry to change h](jZ)}(h``struct pt_state *pts``h]j)}(hj{h]hstruct pt_state *pts}(hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKXhjuubjk)}(hhh]h)}(hTable entry to changeh]hTable entry to change}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKXhjubah}(h]h ]h"]h$]h&]uh1jjhjuubeh}(h]h ]h"]h$]h&]uh1jShjhKXhjrubah}(h]h ]h"]h$]h&]uh1jNhjVubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKZhjVubh)}(hX?Modify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any "write dirty" prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty.h]hXCModify the entry so that pt_entry_is_write_dirty() == false. The HW will eventually be notified of this change via a TLB flush, which is the point that the HW must become synchronized. Any “write dirty” prior to the TLB flush can be lost, but once the TLB flush completes all writes must make their entries write dirty.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKYhjVubh)}(hThe format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.h]hThe format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhK_hjVubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1$pt_entry_is_write_dirty (C function)c.pt_entry_is_write_dirtyhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h9bool pt_entry_is_write_dirty (const struct pt_state *pts)h]jA)}(h8bool pt_entry_is_write_dirty(const struct pt_state *pts)h](j` )}(hj h]hbool}(hj hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKfubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKfubjj)}(hpt_entry_is_write_dirtyh]jp)}(hpt_entry_is_write_dirtyh]hpt_entry_is_write_dirty}(hj*hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj&ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKfubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjFhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjBubjY)}(h h]h }(hjShhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjBubjG)}(hjJh]hstruct}(hjahhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjBubjY)}(h h]h }(hjnhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjBubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj|ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j j,sbc.pt_entry_is_write_dirtyasbuh1hhjBubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjBubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj>ubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKfubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhjhKfubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hjhKfhjhhubj)}(hhh]h)}(h%True if the entry has been written toh]h%True if the entry has been written to}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKfhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKfubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``const struct pt_state *pts`` Entry to query **Description** "write dirty" means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated "write dirty" for all the items must be returned.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKjhjubjO)}(hhh]jT)}(h.``const struct pt_state *pts`` Entry to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hj%h]hconst struct pt_state *pts}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKghjubjk)}(hhh]h)}(hEntry to queryh]hEntry to query}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hKghj;ubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShj:hKghjubah}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hj`h]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKihjubh)}(h"write dirty" means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated "write dirty" for all the items must be returned.h]h“write dirty” means that the HW has written to the OA translated by this entry. If the entry is contiguous then the consolidated “write dirty” for all the items must be returned.}(hjvhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_dirty_supported (C function)c.pt_dirty_supportedhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h2bool pt_dirty_supported (struct pt_common *common)h]jA)}(h1bool pt_dirty_supported(struct pt_common *common)h](j` )}(hj h]hbool}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKpubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKpubjj)}(hpt_dirty_supportedh]jp)}(hpt_dirty_supportedh]hpt_dirty_supported}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKpubj )}(h(struct pt_common *common)h]j )}(hstruct pt_common *commonh](jG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.pt_dirty_supportedasbuh1hhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hj-hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hcommonh]hcommon}(hj:hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKpubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhjhKpubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hjhKphjhhubj)}(hhh]h)}(h.True if the page table supports dirty trackingh]h.True if the page table supports dirty tracking}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKphjahhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKpubeh}(h]h ](jfunctioneh"]h$]h&]jjjj|jj|jjjuh1j5hhhjhNhNubj)}(hB**Parameters** ``struct pt_common *common`` Page table to queryh](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKthjubjO)}(hhh]jT)}(h0``struct pt_common *common`` Page table to queryh](jZ)}(h``struct pt_common *common``h]j)}(hjh]hstruct pt_common *common}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKvhjubjk)}(hhh]h)}(hPage table to queryh]hPage table to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKqhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKvhjubah}(h]h ]h"]h$]h&]uh1jNhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1$pt_entry_num_contig_lg2 (C function)c.pt_entry_num_contig_lg2hNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hAunsigned int pt_entry_num_contig_lg2 (const struct pt_state *pts)h]jA)}(h@unsigned int pt_entry_num_contig_lg2(const struct pt_state *pts)h](j` )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKvubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhj hKvubj` )}(hinth]hint}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj hKvubjY)}(h h]h }(hj*hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhj hKvubjj)}(hpt_entry_num_contig_lg2h]jp)}(hpt_entry_num_contig_lg2h]hpt_entry_num_contig_lg2}(hj<hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj8ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhj hKvubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjXhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjTubjY)}(h h]h }(hjehhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjTubjG)}(hjJh]hstruct}(hjshhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjTubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjTubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j j>sbc.pt_entry_num_contig_lg2asbuh1hhjTubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjTubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjTubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjTubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjPubah}(h]h ]h"]h$]h&]hhuh1j hjhhhj hKvubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhj hKvubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hj hKvhjhhubj)}(hhh]h)}(h.Number of contiguous items for this leaf entryh]h.Number of contiguous items for this leaf entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKvhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhj hKvubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` Entry to query **Description** Return the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKzhjubjO)}(hhh]jT)}(h.``const struct pt_state *pts`` Entry to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hj7h]hconst struct pt_state *pts}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKwhj1ubjk)}(hhh]h)}(hEntry to queryh]hEntry to query}(hjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKwhjMubah}(h]h ]h"]h$]h&]uh1jjhj1ubeh}(h]h ]h"]h$]h&]uh1jShjLhKwhj.ubah}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hjrh]h Description}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKyhjubh)}(hmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).h]hmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKxhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_entry_oa (C function) c.pt_entry_oahNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h3pt_oaddr_t pt_entry_oa (const struct pt_state *pts)h]jA)}(h2pt_oaddr_t pt_entry_oa(const struct pt_state *pts)h](h)}(hhh]jp)}(h pt_oaddr_th]h pt_oaddr_t}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j pt_entry_oasb c.pt_entry_oaasbuh1hhjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKubjj)}(h pt_entry_oah]jp)}(hjh]h pt_entry_oa}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubjG)}(hjJh]hstruct}(hj$hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hj1hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjBhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj?ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDmodnameN classnameNj j )}j ]j c.pt_entry_oaasbuh1hhjubjY)}(h h]h }(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hjnhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hptsh]hpts}(hj{hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjhhhjhKubah}(h]jah ](jjeh"]h$]h&]jj)jhuh1j:hjhKhjhhubj)}(hhh]h)}(h"Output Address for this leaf entryh]h"Output Address for this leaf entry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``const struct pt_state *pts`` Entry to query **Description** Return the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.:: log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0 See pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubjO)}(hhh]jT)}(h.``const struct pt_state *pts`` Entry to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hjh]hconst struct pt_state *pts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubjk)}(hhh]h)}(hEntry to queryh]hEntry to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKhjubah}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hj!h]h Description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubh)}(hReturn the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.::h]hReturn the output address for the start of the entry. If the entry is contiguous this returns the same value for each sub-item. I.e.:}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubj)}(h1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0h]h1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0}hjFsbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubh)}(hySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.h]hySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_entry_oa_lg2sz (C function)c.pt_entry_oa_lg2szhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h;unsigned int pt_entry_oa_lg2sz (const struct pt_state *pts)h]jA)}(h:unsigned int pt_entry_oa_lg2sz(const struct pt_state *pts)h](j` )}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKubj` )}(hinth]hint}(hjhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjhhhjhKubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjhhhjhKubjj)}(hpt_entry_oa_lg2szh]jp)}(hpt_entry_oa_lg2szh]hpt_entry_oa_lg2sz}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ](jjeh"]h$]h&]hhuh1jihjhhhjhKubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubjG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j )}j jsbc.pt_entry_oa_lg2szasbuh1hhjubjY)}(h h]h }(hj6hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hjDhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hptsh]hpts}(hjQhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hjhhhjhKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj|hhhjhKubah}(h]jwah ](jjeh"]h$]h&]jj)jhuh1j:hjhKhjyhhubj)}(hhh]h)}(hReturn the size of an OA entryh]hReturn the size of an OA entry}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjxhhubah}(h]h ]h"]h$]h&]uh1jhjyhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjjjjjjuh1j5hhhjhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` Entry to query **Description** If the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubjO)}(hhh]jT)}(h.``const struct pt_state *pts`` Entry to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hjh]hconst struct pt_state *pts}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubjk)}(hhh]h)}(hEntry to queryh]hEntry to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jjhjubeh}(h]h ]h"]h$]h&]uh1jShjhKhjubah}(h]h ]h"]h$]h&]uh1jNhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubh)}(hIf the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.h]hIf the entry is not contiguous this returns pt_table_item_lg2sz(), otherwise it returns the total VA/OA size of the entire contiguous entry.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_entry_oa_exact (C function)c.pt_entry_oa_exacthNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h9pt_oaddr_t pt_entry_oa_exact (const struct pt_state *pts)h]jA)}(h8pt_oaddr_t pt_entry_oa_exact(const struct pt_state *pts)h](h)}(hhh]jp)}(h pt_oaddr_th]h pt_oaddr_t}(hj?hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjAmodnameN classnameNj j )}j ]j )}j pt_entry_oa_exactsbc.pt_entry_oa_exactasbuh1hhj8hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hjahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj8hhhj`hKubjj)}(hpt_entry_oa_exacth]jp)}(hj]h]hpt_entry_oa_exact}(hjshhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjoubah}(h]h ](jjeh"]h$]h&]hhuh1jihj8hhhj`hKubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubjG)}(hjJh]hstruct}(hjhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNj j )}j ]j[c.pt_entry_oa_exactasbuh1hhjubjY)}(h h]h }(hjhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjubj )}(hj h]h*}(hjhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjubjp)}(hptsh]hpts}(hjhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjubah}(h]h ]h"]h$]h&]hhuh1j hj8hhhj`hKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj4hhhj`hKubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j:hj`hKhj1hhubj)}(hhh]h)}(h#Return the complete OA for an entryh]h#Return the complete OA for an entry}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj'hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj`hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1j5hhhjhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` Entry to query **Description** During iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts's VA offset.h](h)}(h**Parameters**h]j)}(hjLh]h Parameters}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjFubjO)}(hhh]jT)}(h.``const struct pt_state *pts`` Entry to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hjkh]hconst struct pt_state *pts}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjeubjk)}(hhh]h)}(hEntry to queryh]hEntry to query}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jjhjeubeh}(h]h ]h"]h$]h&]uh1jShjhKhjbubah}(h]h ]h"]h$]h&]uh1jNhjFubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjFubh)}(hDuring iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts's VA offset.h]hDuring iteration the first entry could have a VA with an offset from the natural start of the entry. Return the exact OA including the pts’s VA offset.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_full_va_prefix (C function)c.pt_full_va_prefixhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h=pt_vaddr_t pt_full_va_prefix (const struct pt_common *common)h]jA)}(h%ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj5$ubh)}(htA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.h]htA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.}(hjV%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj5$ubh)}(hFor a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2.h]hFor a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2.}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj5$ubh)}(hThis must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.h]hThis must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.}(hjt%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj5$ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_install_table (C function)c.pt_install_tablehNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hebool pt_install_table (struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)h]jA)}(hdbool pt_install_table(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)h](j` )}(hj h]hbool}(hj%hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj%hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hj%hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj%hhhj%hKubjj)}(hpt_install_tableh]jp)}(hpt_install_tableh]hpt_install_table}(hj%hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj%ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj%hhhj%hKubj )}(hO(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)h](j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj%hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj%ubjY)}(h h]h }(hj%hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj%ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj%hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj%ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj%modnameN classnameNj j )}j ]j )}j j%sbc.pt_install_tableasbuh1hhj%ubjY)}(h h]h }(hj&hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj%ubj )}(hj h]h*}(hj+&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj%ubjp)}(hptsh]hpts}(hj8&hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubj )}(hpt_oaddr_t table_pah](h)}(hhh]jp)}(h pt_oaddr_th]h pt_oaddr_t}(hjT&hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjQ&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjV&modnameN classnameNj j )}j ]j&c.pt_install_tableasbuh1hhjM&ubjY)}(h h]h }(hjr&hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjM&ubjp)}(htable_pah]htable_pa}(hj&hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjM&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubj )}(h"const struct pt_write_attrs *attrsh](jG)}(hj h]hconst}(hj&hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj&ubjY)}(h h]h }(hj&hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj&ubjG)}(hjJh]hstruct}(hj&hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj&ubjY)}(h h]h }(hj&hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj&ubh)}(hhh]jp)}(hpt_write_attrsh]hpt_write_attrs}(hj&hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj&ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj&modnameN classnameNj j )}j ]j&c.pt_install_tableasbuh1hhj&ubjY)}(h h]h }(hj&hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj&ubj )}(hj h]h*}(hj&hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&ubjp)}(hattrsh]hattrs}(hj 'hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj&ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj%ubeh}(h]h ]h"]h$]h&]hhuh1j hj%hhhj%hKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj%hhhj%hKubah}(h]j%ah ](jjeh"]h$]h&]jj)jhuh1j:hj%hKhj%hhubj)}(hhh]h)}(h Write a table entry to the tableh]h Write a table entry to the table}(hj5'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj2'hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj%hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjM'jjM'jjjuh1j5hhhjhNhNubj)}(hX>**Parameters** ``struct pt_state *pts`` Table index to change ``pt_oaddr_t table_pa`` CPU physical address of the lower table's memory ``const struct pt_write_attrs *attrs`` Attributes to modify the table index **Description** A table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry. This must not be called if pt_can_have_table() == false. **Return** true if the table was installed successfully.h](h)}(h**Parameters**h]j)}(hjW'h]h Parameters}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU'ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubjO)}(hhh](jT)}(h/``struct pt_state *pts`` Table index to change h](jZ)}(h``struct pt_state *pts``h]j)}(hjv'h]hstruct pt_state *pts}(hjx'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt'ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjp'ubjk)}(hhh]h)}(hTable index to changeh]hTable index to change}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jjhjp'ubeh}(h]h ]h"]h$]h&]uh1jShj'hKhjm'ubjT)}(hI``pt_oaddr_t table_pa`` CPU physical address of the lower table's memory h](jZ)}(h``pt_oaddr_t table_pa``h]j)}(hj'h]hpt_oaddr_t table_pa}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj'ubjk)}(hhh]h)}(h0CPU physical address of the lower table's memoryh]h2CPU physical address of the lower table’s memory}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jjhj'ubeh}(h]h ]h"]h$]h&]uh1jShj'hKhjm'ubjT)}(hL``const struct pt_write_attrs *attrs`` Attributes to modify the table index h](jZ)}(h&``const struct pt_write_attrs *attrs``h]j)}(hj'h]h"const struct pt_write_attrs *attrs}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj'ubjk)}(hhh]h)}(h$Attributes to modify the table indexh]h$Attributes to modify the table index}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hKhj'ubah}(h]h ]h"]h$]h&]uh1jjhj'ubeh}(h]h ]h"]h$]h&]uh1jShj'hKhjm'ubeh}(h]h ]h"]h$]h&]uh1jNhjQ'ubh)}(h**Description**h]j)}(hj#(h]h Description}(hj%(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!(ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubh)}(hA table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry.h]hA table entry will return PT_ENTRY_TABLE from pt_load_entry(). The table_pa is the table at pts->level - 1. This is done by cmpxchg so pts must have the current entry loaded. The pts is updated with the installed entry.}(hj9(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubh)}(h8This must not be called if pt_can_have_table() == false.h]h8This must not be called if pt_can_have_table() == false.}(hjH(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubh)}(h **Return**h]j)}(hjY(h]hReturn}(hj[(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjW(ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubh)}(h-true if the table was installed successfully.h]h-true if the table was installed successfully.}(hjo(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjQ'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_item_oa (C function) c.pt_item_oahNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h2pt_oaddr_t pt_item_oa (const struct pt_state *pts)h]jA)}(h1pt_oaddr_t pt_item_oa(const struct pt_state *pts)h](h)}(hhh]jp)}(h pt_oaddr_th]h pt_oaddr_t}(hj(hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNj j )}j ]j )}j pt_item_oasb c.pt_item_oaasbuh1hhj(hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hj(hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(hhhj(hKubjj)}(h pt_item_oah]jp)}(hj(h]h pt_item_oa}(hj(hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj(ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj(hhhj(hKubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj(hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj(ubjY)}(h h]h }(hj(hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(ubjG)}(hjJh]hstruct}(hj )hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj(ubjY)}(h h]h }(hj)hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj))hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj&)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj+)modnameN classnameNj j )}j ]j( c.pt_item_oaasbuh1hhj(ubjY)}(h h]h }(hjG)hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj(ubj )}(hj h]h*}(hjU)hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj(ubjp)}(hptsh]hpts}(hjb)hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(ubah}(h]h ]h"]h$]h&]hhuh1j hj(hhhj(hKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj(hhhj(hKubah}(h]j(ah ](jjeh"]h$]h&]jj)jhuh1j:hj(hKhj(hhubj)}(hhh]h)}(h!Output Address for this leaf itemh]h!Output Address for this leaf item}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)hhubah}(h]h ]h"]h$]h&]uh1jhj(hhhj(hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj)jj)jjjuh1j5hhhjhNhNubj)}(hX]**Parameters** ``const struct pt_state *pts`` Item to query **Description** Return the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item. See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA's in the table.h](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)ubjO)}(hhh]jT)}(h-``const struct pt_state *pts`` Item to query h](jZ)}(h``const struct pt_state *pts``h]j)}(hj)h]hconst struct pt_state *pts}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)ubjk)}(hhh]h)}(h Item to queryh]h Item to query}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jjhj)ubeh}(h]h ]h"]h$]h&]uh1jShj)hKhj)ubah}(h]h ]h"]h$]h&]uh1jNhj)ubh)}(h**Description**h]j)}(hj*h]h Description}(hj *hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)ubh)}(hReturn the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item.h]hReturn the output address for this item. If the item is part of a contiguous entry it returns the value of the OA for this individual sub item.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)ubh)}(h{See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA's in the table.h]h}See pt_entry_oa(). The format should implement one of these two functions depending on how it stores the OA’s in the table.}(hj-*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_load_entry_raw (C function)c.pt_load_entry_rawhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h;enum pt_entry_type pt_load_entry_raw (struct pt_state *pts)h]jA)}(h:enum pt_entry_type pt_load_entry_raw(struct pt_state *pts)h](jG)}(hj4h]henum}(hj\*hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjX*hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hjj*hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjX*hhhji*hKubh)}(hhh]jp)}(h pt_entry_typeh]h pt_entry_type}(hj{*hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjx*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}*modnameN classnameNj j )}j ]j )}j pt_load_entry_rawsbc.pt_load_entry_rawasbuh1hhjX*hhhji*hKubjY)}(h h]h }(hj*hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjX*hhhji*hKubjj)}(hpt_load_entry_rawh]jp)}(hj*h]hpt_load_entry_raw}(hj*hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj*ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjX*hhhji*hKubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj*hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj*ubjY)}(h h]h }(hj*hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj*ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj*hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj*ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj*modnameN classnameNj j )}j ]j*c.pt_load_entry_rawasbuh1hhj*ubjY)}(h h]h }(hj+hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj*ubj )}(hj h]h*}(hj+hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj*ubjp)}(hptsh]hpts}(hj +hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj*ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj*ubah}(h]h ]h"]h$]h&]hhuh1j hjX*hhhji*hKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjT*hhhji*hKubah}(h]jO*ah ](jjeh"]h$]h&]jj)jhuh1j:hji*hKhjQ*hhubj)}(hhh]h)}(h1Read from the location pts points at into the ptsh]h1Read from the location pts points at into the pts}(hjJ+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjG+hhubah}(h]h ]h"]h$]h&]uh1jhjQ*hhhji*hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjb+jjb+jjjuh1j5hhhjhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Table index to load **Description** Return the type of entry that was loaded. pts->entry will be filled in with the entry's content. See pt_load_entry()h](h)}(h**Parameters**h]j)}(hjl+h]h Parameters}(hjn+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj+ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjf+ubjO)}(hhh]jT)}(h-``struct pt_state *pts`` Table index to load h](jZ)}(h``struct pt_state *pts``h]j)}(hj+h]hstruct pt_state *pts}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj+ubjk)}(hhh]h)}(hTable index to loadh]hTable index to load}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jjhj+ubeh}(h]h ]h"]h$]h&]uh1jShj+hKhj+ubah}(h]h ]h"]h$]h&]uh1jNhjf+ubh)}(h**Description**h]j)}(hj+h]h Description}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjf+ubh)}(htReturn the type of entry that was loaded. pts->entry will be filled in with the entry's content. See pt_load_entry()h]hvReturn the type of entry that was loaded. pts->entry will be filled in with the entry’s content. See pt_load_entry()}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhjf+ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_max_oa_lg2 (C function)c.pt_max_oa_lg2hNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h;unsigned int pt_max_oa_lg2 (const struct pt_common *common)h]jA)}(h:unsigned int pt_max_oa_lg2(const struct pt_common *common)h](j` )}(hunsignedh]hunsigned}(hj ,hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj,hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKubjY)}(h h]h }(hj,hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj,hhhj,hKubj` )}(hinth]hint}(hj(,hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj,hhhj,hKubjY)}(h h]h }(hj6,hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj,hhhj,hKubjj)}(h pt_max_oa_lg2h]jp)}(h pt_max_oa_lg2h]h pt_max_oa_lg2}(hjH,hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjD,ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj,hhhj,hKubj )}(h (const struct pt_common *common)h]j )}(hconst struct pt_common *commonh](jG)}(hj h]hconst}(hjd,hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj`,ubjY)}(h h]h }(hjq,hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`,ubjG)}(hjJh]hstruct}(hj,hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj`,ubjY)}(h h]h }(hj,hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`,ubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hj,hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNj j )}j ]j )}j jJ,sbc.pt_max_oa_lg2asbuh1hhj`,ubjY)}(h h]h }(hj,hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`,ubj )}(hj h]h*}(hj,hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj`,ubjp)}(hcommonh]hcommon}(hj,hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj`,ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj\,ubah}(h]h ]h"]h$]h&]hhuh1j hj,hhhj,hKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj,hhhj,hKubah}(h]j+ah ](jjeh"]h$]h&]jj)jhuh1j:hj,hKhj,hhubj)}(hhh]h)}(h/Return the maximum OA the table format can holdh]h/Return the maximum OA the table format can hold}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj,hhubah}(h]h ]h"]h$]h&]uh1jhj,hhhj,hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjj-jj-jjjuh1j5hhhjhNhNubj)}(hX***Parameters** ``const struct pt_common *common`` Page table to query **Description** The value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.h](h)}(h**Parameters**h]j)}(hj$-h]h Parameters}(hj&-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"-ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj-ubjO)}(hhh]jT)}(h7``const struct pt_common *common`` Page table to query h](jZ)}(h"``const struct pt_common *common``h]j)}(hjC-h]hconst struct pt_common *common}(hjE-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA-ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj=-ubjk)}(hhh]h)}(hPage table to queryh]hPage table to query}(hj\-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjX-hKhjY-ubah}(h]h ]h"]h$]h&]uh1jjhj=-ubeh}(h]h ]h"]h$]h&]uh1jShjX-hKhj:-ubah}(h]h ]h"]h$]h&]uh1jNhj-ubh)}(h**Description**h]j)}(hj~-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj|-ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj-ubh)}(hThe value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.h]hThe value oalog2_to_max_int(pt_max_oa_lg2()) is the MAX for the OA. This is the absolute maximum address the table can hold. struct pt_common max_oasz_lg2 sets a lower dynamic maximum based on HW capability.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhKhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_num_items_lg2 (C function)c.pt_num_items_lg2hNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h:unsigned int pt_num_items_lg2 (const struct pt_state *pts)h]jA)}(h9unsigned int pt_num_items_lg2(const struct pt_state *pts)h](j` )}(hunsignedh]hunsigned}(hj-hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj-hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMubjY)}(h h]h }(hj-hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj-hhhj-hMubj` )}(hinth]hint}(hj-hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj-hhhj-hMubjY)}(h h]h }(hj-hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj-hhhj-hMubjj)}(hpt_num_items_lg2h]jp)}(hpt_num_items_lg2h]hpt_num_items_lg2}(hj.hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj-ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj-hhhj-hMubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj.hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj.ubjY)}(h h]h }(hj).hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj.ubjG)}(hjJh]hstruct}(hj7.hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj.ubjY)}(h h]h }(hjD.hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj.ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjU.hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjR.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjW.modnameN classnameNj j )}j ]j )}j j.sbc.pt_num_items_lg2asbuh1hhj.ubjY)}(h h]h }(hju.hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj.ubj )}(hj h]h*}(hj.hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj.ubjp)}(hptsh]hpts}(hj.hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj.ubah}(h]h ]h"]h$]h&]hhuh1j hj-hhhj-hMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj-hhhj-hMubah}(h]j-ah ](jjeh"]h$]h&]jj)jhuh1j:hj-hMhj-hhubj)}(hhh]h)}(h.Return the number of items in this table levelh]h.Return the number of items in this table level}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.hhubah}(h]h ]h"]h$]h&]uh1jhj-hhhj-hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj.jj.jjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``const struct pt_state *pts`` The current level **Description** The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2. The value is used as part of determining the table indexes via the equation:: log2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())h](h)}(h**Parameters**h]j)}(hj.h]h Parameters}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.ubjO)}(hhh]jT)}(h1``const struct pt_state *pts`` The current level h](jZ)}(h``const struct pt_state *pts``h]j)}(hj.h]hconst struct pt_state *pts}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.ubjk)}(hhh]h)}(hThe current levelh]hThe current level}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hMhj/ubah}(h]h ]h"]h$]h&]uh1jjhj.ubeh}(h]h ]h"]h$]h&]uh1jShj/hMhj.ubah}(h]h ]h"]h$]h&]uh1jNhj.ubh)}(h**Description**h]j)}(hj6/h]h Description}(hj8/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4/ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.ubh)}(hX The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2.h]hX The number of items in a table level defines the number of bits this level decodes from the VA. This function is not called for the top level, so it does not need to compute a special value for the top case. The result for the top is based on pt_common max_vasz_lg2.}(hjL/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.ubh)}(hMThe value is used as part of determining the table indexes via the equation::h]hLThe value is used as part of determining the table indexes via the equation:}(hj[/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj.ubj)}(hAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())h]hAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())}hjj/sbah}(h]h ]h"]h$]h&]hhuh1jhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM hj.ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1!pt_pgsz_lg2_to_level (C function)c.pt_pgsz_lg2_to_levelhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hUunsigned int pt_pgsz_lg2_to_level (struct pt_common *common, unsigned int pgsize_lg2)h]jA)}(hTunsigned int pt_pgsz_lg2_to_level(struct pt_common *common, unsigned int pgsize_lg2)h](j` )}(hunsignedh]hunsigned}(hj/hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj/hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMubjY)}(h h]h }(hj/hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj/hhhj/hMubj` )}(hinth]hint}(hj/hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj/hhhj/hMubjY)}(h h]h }(hj/hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj/hhhj/hMubjj)}(hpt_pgsz_lg2_to_levelh]jp)}(hpt_pgsz_lg2_to_levelh]hpt_pgsz_lg2_to_level}(hj/hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj/ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj/hhhj/hMubj )}(h3(struct pt_common *common, unsigned int pgsize_lg2)h](j )}(hstruct pt_common *commonh](jG)}(hjJh]hstruct}(hj/hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj/ubjY)}(h h]h }(hj/hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj/ubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hj0hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj 0ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0modnameN classnameNj j )}j ]j )}j j/sbc.pt_pgsz_lg2_to_levelasbuh1hhj/ubjY)}(h h]h }(hj00hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj/ubj )}(hj h]h*}(hj>0hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj/ubjp)}(hcommonh]hcommon}(hjK0hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj/ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubj )}(hunsigned int pgsize_lg2h](j` )}(hunsignedh]hunsigned}(hjd0hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj`0ubjY)}(h h]h }(hjr0hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`0ubj` )}(hinth]hint}(hj0hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj`0ubjY)}(h h]h }(hj0hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`0ubjp)}(h pgsize_lg2h]h pgsize_lg2}(hj0hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj`0ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj/ubeh}(h]h ]h"]h$]h&]hhuh1j hj/hhhj/hMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj/hhhj/hMubah}(h]j/ah ](jjeh"]h$]h&]jj)jhuh1j:hj/hMhj/hhubj)}(hhh]h)}(h(Return the level that maps the page sizeh]h(Return the level that maps the page size}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj0hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj0jj0jjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``struct pt_common *common`` Page table to query ``unsigned int pgsize_lg2`` Log2 page size **Description** Returns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.h](h)}(h**Parameters**h]j)}(hj0h]h Parameters}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj0ubjO)}(hhh](jT)}(h1``struct pt_common *common`` Page table to query h](jZ)}(h``struct pt_common *common``h]j)}(hj1h]hstruct pt_common *common}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj1ubjk)}(hhh]h)}(hPage table to queryh]hPage table to query}(hj 1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj1hMhj1ubah}(h]h ]h"]h$]h&]uh1jjhj1ubeh}(h]h ]h"]h$]h&]uh1jShj1hMhj0ubjT)}(h+``unsigned int pgsize_lg2`` Log2 page size h](jZ)}(h``unsigned int pgsize_lg2``h]j)}(hj@1h]hunsigned int pgsize_lg2}(hjB1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>1ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj:1ubjk)}(hhh]h)}(hLog2 page sizeh]hLog2 page size}(hjY1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU1hMhjV1ubah}(h]h ]h"]h$]h&]uh1jjhj:1ubeh}(h]h ]h"]h$]h&]uh1jShjU1hMhj0ubeh}(h]h ]h"]h$]h&]uh1jNhj0ubh)}(h**Description**h]j)}(hj{1h]h Description}(hj}1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy1ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj0ubh)}(hReturns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.h]hReturns the table level that will map the given page size. The page size must be part of the pt_possible_sizes() for some level.}(hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj0ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_possible_sizes (C function)c.pt_possible_sizeshNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h9pt_vaddr_t pt_possible_sizes (const struct pt_state *pts)h]jA)}(h8pt_vaddr_t pt_possible_sizes(const struct pt_state *pts)h](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hj1hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNj j )}j ]j )}j pt_possible_sizessbc.pt_possible_sizesasbuh1hhj1hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMubjY)}(h h]h }(hj1hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj1hhhj1hMubjj)}(hpt_possible_sizesh]jp)}(hj1h]hpt_possible_sizes}(hj1hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj1ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj1hhhj1hMubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj2hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj2ubjY)}(h h]h }(hj2hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj2ubjG)}(hjJh]hstruct}(hj-2hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj2ubjY)}(h h]h }(hj:2hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj2ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjK2hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjH2ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjM2modnameN classnameNj j )}j ]j1c.pt_possible_sizesasbuh1hhj2ubjY)}(h h]h }(hji2hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj2ubj )}(hj h]h*}(hjw2hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj2ubjp)}(hptsh]hpts}(hj2hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj 2ubah}(h]h ]h"]h$]h&]hhuh1j hj1hhhj1hMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj1hhhj1hMubah}(h]j1ah ](jjeh"]h$]h&]jj)jhuh1j:hj1hMhj1hhubj)}(hhh]h)}(h6Return a bitmap of possible output sizes at this levelh]h6Return a bitmap of possible output sizes at this level}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj2hhubah}(h]h ]h"]h$]h&]uh1jhj1hhhj1hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj2jj2jjjuh1j5hhhjhNhNubj)}(hX**Parameters** ``const struct pt_state *pts`` The current level **Description** Each level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero. Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table. The OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj2ubjO)}(hhh]jT)}(h1``const struct pt_state *pts`` The current level h](jZ)}(h``const struct pt_state *pts``h]j)}(hj2h]hconst struct pt_state *pts}(hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj2ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj2ubjk)}(hhh]h)}(hThe current levelh]hThe current level}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hMhj3ubah}(h]h ]h"]h$]h&]uh1jjhj2ubeh}(h]h ]h"]h$]h&]uh1jShj3hMhj2ubah}(h]h ]h"]h$]h&]uh1jNhj2ubh)}(h**Description**h]j)}(hj*3h]h Description}(hj,3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(3ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj2ubh)}(hEach level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero.h]hEach level has a list of possible output sizes that can be installed as leaf entries. If pt_can_have_leaf() is false returns zero.}(hj@3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMhj2ubh)}(hX`Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table.h]hX`Otherwise the bit in position pt_table_item_lg2sz() should be set indicating that a non-contiguous single item leaf entry is supported. The following pt_num_items_lg2() number of bits can be set indicating contiguous entries are supported. Bit pt_table_item_lg2sz() + pt_num_items_lg2() must not be set, contiguous entries cannot span the entire table.}(hjO3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM hj2ubh)}(hnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.h]hnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.}(hj^3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM&hj2ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1 pt_table_item_lg2sz (C function)c.pt_table_item_lg2szhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h=unsigned int pt_table_item_lg2sz (const struct pt_state *pts)h]jA)}(hReturn the maximum software bit usable for any level and entryh]h>Return the maximum software bit usable for any level and entry}(hjn;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMZhjk;hhubah}(h]h ]h"]h$]h&]uh1jhj:hhhj:hMZubeh}(h]h ](jfunctioneh"]h$]h&]jjjj;jj;jjjuh1j5hhhjhNhNubj)}(h**Parameters** ``struct pt_common *common`` Page table **Description** The swbit can be passed as bitnr to the other sw_bit functions.h](h)}(h**Parameters**h]j)}(hj;h]h Parameters}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM^hj;ubjO)}(hhh]jT)}(h(``struct pt_common *common`` Page table h](jZ)}(h``struct pt_common *common``h]j)}(hj;h]hstruct pt_common *common}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM\hj;ubjk)}(hhh]h)}(h Page tableh]h Page table}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hM\hj;ubah}(h]h ]h"]h$]h&]uh1jjhj;ubeh}(h]h ]h"]h$]h&]uh1jShj;hM\hj;ubah}(h]h ]h"]h$]h&]uh1jNhj;ubh)}(h**Description**h]j)}(hj;h]h Description}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM^hj;ubh)}(h?The swbit can be passed as bitnr to the other sw_bit functions.h]h?The swbit can be passed as bitnr to the other sw_bit functions.}(hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM]hj;ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1#pt_test_sw_bit_acquire (C function)c.pt_test_sw_bit_acquirehNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hFbool pt_test_sw_bit_acquire (struct pt_state *pts, unsigned int bitnr)h]jA)}(hEbool pt_test_sw_bit_acquire(struct pt_state *pts, unsigned int bitnr)h](j` )}(hj h]hbool}(hj/<hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj+<hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMcubjY)}(h h]h }(hj=<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj+<hhhj<<hMcubjj)}(hpt_test_sw_bit_acquireh]jp)}(hpt_test_sw_bit_acquireh]hpt_test_sw_bit_acquire}(hjO<hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjK<ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj+<hhhj<<hMcubj )}(h*(struct pt_state *pts, unsigned int bitnr)h](j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjk<hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjg<ubjY)}(h h]h }(hjx<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjg<ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj<hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj<modnameN classnameNj j )}j ]j )}j jQ<sbc.pt_test_sw_bit_acquireasbuh1hhjg<ubjY)}(h h]h }(hj<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjg<ubj )}(hj h]h*}(hj<hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjg<ubjp)}(hptsh]hpts}(hj<hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjg<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjc<ubj )}(hunsigned int bitnrh](j` )}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj<ubjY)}(h h]h }(hj<hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj<ubj` )}(hinth]hint}(hj<hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj<ubjY)}(h h]h }(hj=hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj<ubjp)}(hbitnrh]hbitnr}(hj=hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjc<ubeh}(h]h ]h"]h$]h&]hhuh1j hj+<hhhj<<hMcubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj'<hhhj<<hMcubah}(h]j"<ah ](jjeh"]h$]h&]jj)jhuh1j:hj<<hMchj$<hhubj)}(hhh]h)}(hRead a software bit in an itemh]hRead a software bit in an item}(hj?=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMchj<=hhubah}(h]h ]h"]h$]h&]uh1jhj$<hhhj<<hMcubeh}(h]h ](jfunctioneh"]h$]h&]jjjjW=jjW=jjjuh1j5hhhjhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Entry to read ``unsigned int bitnr`` Bit to read **Description** Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.h](h)}(h**Parameters**h]j)}(hja=h]h Parameters}(hjc=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_=ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMghj[=ubjO)}(hhh](jT)}(h'``struct pt_state *pts`` Entry to read h](jZ)}(h``struct pt_state *pts``h]j)}(hj=h]hstruct pt_state *pts}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj~=ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMdhjz=ubjk)}(hhh]h)}(h Entry to readh]h Entry to read}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMdhj=ubah}(h]h ]h"]h$]h&]uh1jjhjz=ubeh}(h]h ]h"]h$]h&]uh1jShj=hMdhjw=ubjT)}(h#``unsigned int bitnr`` Bit to read h](jZ)}(h``unsigned int bitnr``h]j)}(hj=h]hunsigned int bitnr}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMehj=ubjk)}(hhh]h)}(h Bit to readh]h Bit to read}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=hMehj=ubah}(h]h ]h"]h$]h&]uh1jjhj=ubeh}(h]h ]h"]h$]h&]uh1jShj=hMehjw=ubeh}(h]h ]h"]h$]h&]uh1jNhj[=ubh)}(h**Description**h]j)}(hj=h]h Description}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMghj[=ubh)}(h|Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.h]h|Software bits are ignored by HW and can be used for any purpose by the software. This does a test bit and acquire operation.}(hj >hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMfhj[=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1"pt_set_sw_bit_release (C function)c.pt_set_sw_bit_releasehNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(hEvoid pt_set_sw_bit_release (struct pt_state *pts, unsigned int bitnr)h]jA)}(hDvoid pt_set_sw_bit_release(struct pt_state *pts, unsigned int bitnr)h](j` )}(hvoidh]hvoid}(hj9>hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj5>hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMnubjY)}(h h]h }(hjH>hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj5>hhhjG>hMnubjj)}(hpt_set_sw_bit_releaseh]jp)}(hpt_set_sw_bit_releaseh]hpt_set_sw_bit_release}(hjZ>hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjV>ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj5>hhhjG>hMnubj )}(h*(struct pt_state *pts, unsigned int bitnr)h](j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjv>hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjr>ubjY)}(h h]h }(hj>hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjr>ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj>hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj>ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj>modnameN classnameNj j )}j ]j )}j j\>sbc.pt_set_sw_bit_releaseasbuh1hhjr>ubjY)}(h h]h }(hj>hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjr>ubj )}(hj h]h*}(hj>hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjr>ubjp)}(hptsh]hpts}(hj>hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjr>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjn>ubj )}(hunsigned int bitnrh](j` )}(hunsignedh]hunsigned}(hj>hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj>ubjY)}(h h]h }(hj>hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj>ubj` )}(hinth]hint}(hj?hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj>ubjY)}(h h]h }(hj?hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj>ubjp)}(hbitnrh]hbitnr}(hj ?hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj>ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjn>ubeh}(h]h ]h"]h$]h&]hhuh1j hj5>hhhjG>hMnubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj1>hhhjG>hMnubah}(h]j,>ah ](jjeh"]h$]h&]jj)jhuh1j:hjG>hMnhj.>hhubj)}(hhh]h)}(hSet a software bit in an itemh]hSet a software bit in an item}(hjJ?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMnhjG?hhubah}(h]h ]h"]h$]h&]uh1jhj.>hhhjG>hMnubeh}(h]h ](jfunctioneh"]h$]h&]jjjjb?jjb?jjjuh1j5hhhjhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Entry to set ``unsigned int bitnr`` Bit to set **Description** Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.h](h)}(h**Parameters**h]j)}(hjl?h]h Parameters}(hjn?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjj?ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMrhjf?ubjO)}(hhh](jT)}(h&``struct pt_state *pts`` Entry to set h](jZ)}(h``struct pt_state *pts``h]j)}(hj?h]hstruct pt_state *pts}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMohj?ubjk)}(hhh]h)}(h Entry to seth]h Entry to set}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMohj?ubah}(h]h ]h"]h$]h&]uh1jjhj?ubeh}(h]h ]h"]h$]h&]uh1jShj?hMohj?ubjT)}(h"``unsigned int bitnr`` Bit to set h](jZ)}(h``unsigned int bitnr``h]j)}(hj?h]hunsigned int bitnr}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMphj?ubjk)}(hhh]h)}(h Bit to seth]h Bit to set}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMphj?ubah}(h]h ]h"]h$]h&]uh1jjhj?ubeh}(h]h ]h"]h$]h&]uh1jShj?hMphj?ubeh}(h]h ]h"]h$]h&]uh1jNhjf?ubh)}(h**Description**h]j)}(hj?h]h Description}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMrhjf?ubh)}(h{Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.h]h{Software bits are ignored by HW and can be used for any purpose by the software. This does a set bit and release operation.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMqhjf?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_load_entry (C function)c.pt_load_entryhNtauh1j$hjhhhNhNubj6)}(hhh](j;)}(h)void pt_load_entry (struct pt_state *pts)h]jA)}(h(void pt_load_entry(struct pt_state *pts)h](j` )}(hvoidh]hvoid}(hjD@hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj@@hhhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMyubjY)}(h h]h }(hjS@hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj@@hhhjR@hMyubjj)}(h pt_load_entryh]jp)}(h pt_load_entryh]h pt_load_entry}(hje@hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johja@ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj@@hhhjR@hMyubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj@hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj}@ubjY)}(h h]h }(hj@hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj}@ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj@hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj@modnameN classnameNj j )}j ]j )}j jg@sbc.pt_load_entryasbuh1hhj}@ubjY)}(h h]h }(hj@hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj}@ubj )}(hj h]h*}(hj@hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj}@ubjp)}(hptsh]hpts}(hj@hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj}@ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjy@ubah}(h]h ]h"]h$]h&]hhuh1j hj@@hhhjR@hMyubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj<@hhhjR@hMyubah}(h]j7@ah ](jjeh"]h$]h&]jj)jhuh1j:hjR@hMyhj9@hhubj)}(hhh]h)}(h1Read from the location pts points at into the ptsh]h1Read from the location pts points at into the pts}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMyhjAhhubah}(h]h ]h"]h$]h&]uh1jhj9@hhhjR@hMyubeh}(h]h ](jfunctioneh"]h$]h&]jjjjAjjAjjjuh1j5hhhjhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Table index to load **Description** Set the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry's content.h](h)}(h**Parameters**h]j)}(hj&Ah]h Parameters}(hj(AhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$Aubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM}hj AubjO)}(hhh]jT)}(h-``struct pt_state *pts`` Table index to load h](jZ)}(h``struct pt_state *pts``h]j)}(hjEAh]hstruct pt_state *pts}(hjGAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCAubah}(h]h ]h"]h$]h&]uh1jYhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhMzhj?Aubjk)}(hhh]h)}(hTable index to loadh]hTable index to load}(hj^AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZAhMzhj[Aubah}(h]h ]h"]h$]h&]uh1jjhj?Aubeh}(h]h ]h"]h$]h&]uh1jShjZAhMzhjentry and pts->table_lower will be filled in with the entry's content.h]htSet the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry’s content.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.hhM{hj Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h].format-functions-at-the-struct-pt-common-levelah ]h"].format functions at the struct pt_common levelah$]h&]uh1hhjfhhhhhK@ubh)}(hhh](h)}(hIteration Helpersh]hIteration Helpers}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhhhhhKGubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_check_range (C function)c.pt_check_rangehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h+int pt_check_range (struct pt_range *range)h]jA)}(h*int pt_check_range(struct pt_range *range)h](j` )}(hinth]hint}(hjAhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjAhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKubjY)}(h h]h }(hjAhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjAhhhjAhKubjj)}(hpt_check_rangeh]jp)}(hpt_check_rangeh]hpt_check_range}(hjAhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjAubah}(h]h ](jjeh"]h$]h&]hhuh1jihjAhhhjAhKubj )}(h(struct pt_range *range)h]j )}(hstruct pt_range *rangeh](jG)}(hjJh]hstruct}(hjBhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjBubjY)}(h h]h }(hj(BhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjBubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hj9BhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj6Bubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj;BmodnameN classnameNj j )}j ]j )}j jBsbc.pt_check_rangeasbuh1hhjBubjY)}(h h]h }(hjYBhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjBubj )}(hj h]h*}(hjgBhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjBubjp)}(hrangeh]hrange}(hjtBhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjBubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjBubah}(h]h ]h"]h$]h&]hhuh1j hjAhhhjAhKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjAhhhjAhKubah}(h]jAah ](jjeh"]h$]h&]jj)jhuh1j:hjAhKhjAhhubj)}(hhh]h)}(h"Validate the range can be iteratedh]h"Validate the range can be iterated}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjBhhubah}(h]h ]h"]h$]h&]uh1jhjAhhhjAhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjBjjBjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_range *range`` Range to validate **Description** Check that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.h](h)}(h**Parameters**h]j)}(hjBh]h Parameters}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjBubjO)}(hhh]jT)}(h-``struct pt_range *range`` Range to validate h](jZ)}(h``struct pt_range *range``h]j)}(hjBh]hstruct pt_range *range}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjBubjk)}(hhh]h)}(hRange to validateh]hRange to validate}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhKhjBubah}(h]h ]h"]h$]h&]uh1jjhjBubeh}(h]h ]h"]h$]h&]uh1jShjBhKhjBubah}(h]h ]h"]h$]h&]uh1jNhjBubh)}(h**Description**h]j)}(hjCh]h Description}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjBubh)}(hCheck that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.h]hCheck that VA and last_va fall within the permitted range of VAs. If the format is using PT_FEAT_SIGN_EXTEND then this also checks the sign extension is correct.}(hj0ChhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjBubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_index_to_va (C function)c.pt_index_to_vahNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h*void pt_index_to_va (struct pt_state *pts)h]jA)}(h)void pt_index_to_va(struct pt_state *pts)h](j` )}(hvoidh]hvoid}(hj_ChhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj[Chhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK2ubjY)}(h h]h }(hjnChhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[ChhhjmChK2ubjj)}(hpt_index_to_vah]jp)}(hpt_index_to_vah]hpt_index_to_va}(hjChhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj|Cubah}(h]h ](jjeh"]h$]h&]hhuh1jihj[ChhhjmChK2ubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjChhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjCubjY)}(h h]h }(hjChhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjCubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjChhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjCmodnameN classnameNj j )}j ]j )}j jCsbc.pt_index_to_vaasbuh1hhjCubjY)}(h h]h }(hjChhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjCubj )}(hj h]h*}(hjChhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjCubjp)}(hptsh]hpts}(hjChhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjCubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjCubah}(h]h ]h"]h$]h&]hhuh1j hj[ChhhjmChK2ubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjWChhhjmChK2ubah}(h]jRCah ](jjeh"]h$]h&]jj)jhuh1j:hjmChK2hjTChhubj)}(hhh]h)}(h*Update range->va to the current pts->indexh]h*Update range->va to the current pts->index}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK2hjDhhubah}(h]h ]h"]h$]h&]uh1jhjTChhhjmChK2ubeh}(h]h ](jfunctioneh"]h$]h&]jjjj7Djj7Djjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Iteration State **Description** Adjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.h](h)}(h**Parameters**h]j)}(hjADh]h Parameters}(hjCDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?Dubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK6hj;DubjO)}(hhh]jT)}(h)``struct pt_state *pts`` Iteration State h](jZ)}(h``struct pt_state *pts``h]j)}(hj`Dh]hstruct pt_state *pts}(hjbDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Dubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK3hjZDubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjyDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuDhK3hjvDubah}(h]h ]h"]h$]h&]uh1jjhjZDubeh}(h]h ]h"]h$]h&]uh1jShjuDhK3hjWDubah}(h]h ]h"]h$]h&]uh1jNhj;Dubh)}(h**Description**h]j)}(hjDh]h Description}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK5hj;Dubh)}(hAdjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.h]hAdjust range->va to match the current index. This is done in a lazy manner since computing the VA takes several instructions and is rarely required.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK4hj;Dubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1#pt_entry_fully_covered (C function)c.pt_entry_fully_coveredhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hObool pt_entry_fully_covered (const struct pt_state *pts, unsigned int oasz_lg2)h]jA)}(hNbool pt_entry_fully_covered(const struct pt_state *pts, unsigned int oasz_lg2)h](j` )}(hj h]hbool}(hjDhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjDhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKMubjY)}(h h]h }(hjDhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjDhhhjDhKMubjj)}(hpt_entry_fully_coveredh]jp)}(hpt_entry_fully_coveredh]hpt_entry_fully_covered}(hjEhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjDubah}(h]h ](jjeh"]h$]h&]hhuh1jihjDhhhjDhKMubj )}(h3(const struct pt_state *pts, unsigned int oasz_lg2)h](j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjEhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjEubjY)}(h h]h }(hj)EhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjEubjG)}(hjJh]hstruct}(hj7EhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjEubjY)}(h h]h }(hjDEhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjEubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjUEhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjREubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWEmodnameN classnameNj j )}j ]j )}j jEsbc.pt_entry_fully_coveredasbuh1hhjEubjY)}(h h]h }(hjuEhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjEubj )}(hj h]h*}(hjEhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjEubjp)}(hptsh]hpts}(hjEhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubj )}(hunsigned int oasz_lg2h](j` )}(hunsignedh]hunsigned}(hjEhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjEubjY)}(h h]h }(hjEhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjEubj` )}(hinth]hint}(hjEhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjEubjY)}(h h]h }(hjEhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjEubjp)}(hoasz_lg2h]hoasz_lg2}(hjEhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjEubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjEubeh}(h]h ]h"]h$]h&]hhuh1j hjDhhhjDhKMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjDhhhjDhKMubah}(h]jDah ](jjeh"]h$]h&]jj)jhuh1j:hjDhKMhjDhhubj)}(hhh]h)}(hBCheck if the item or entry is entirely contained within pts->rangeh]hBCheck if the item or entry is entirely contained within pts->range}(hj FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKMhjFhhubah}(h]h ]h"]h$]h&]uh1jhjDhhhjDhKMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj#Fjj#Fjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``const struct pt_state *pts`` Iteration State ``unsigned int oasz_lg2`` The size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz() **Return** true if the item is fully enclosed by the pts->range.h](h)}(h**Parameters**h]j)}(hj-Fh]h Parameters}(hj/FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Fubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKQhj'FubjO)}(hhh](jT)}(h/``const struct pt_state *pts`` Iteration State h](jZ)}(h``const struct pt_state *pts``h]j)}(hjLFh]hconst struct pt_state *pts}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJFubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKOhjFFubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjeFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaFhKOhjbFubah}(h]h ]h"]h$]h&]uh1jjhjFFubeh}(h]h ]h"]h$]h&]uh1jShjaFhKOhjCFubjT)}(hf``unsigned int oasz_lg2`` The size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz() h](jZ)}(h``unsigned int oasz_lg2``h]j)}(hjFh]hunsigned int oasz_lg2}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKQhjFubjk)}(hhh]h)}(hKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()h]hKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKPhjFubah}(h]h ]h"]h$]h&]uh1jjhjFubeh}(h]h ]h"]h$]h&]uh1jShjFhKQhjCFubeh}(h]h ]h"]h$]h&]uh1jNhj'Fubh)}(h **Return**h]j)}(hjFh]hReturn}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKShj'Fubh)}(h5true if the item is fully enclosed by the pts->range.h]h5true if the item is fully enclosed by the pts->range.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKShj'Fubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_range_to_index (C function)c.pt_range_to_indexhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h;unsigned int pt_range_to_index (const struct pt_state *pts)h]jA)}(h:unsigned int pt_range_to_index(const struct pt_state *pts)h](j` )}(hunsignedh]hunsigned}(hjGhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjGhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKgubjY)}(h h]h }(hjGhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjGhhhjGhKgubj` )}(hinth]hint}(hj#GhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjGhhhjGhKgubjY)}(h h]h }(hj1GhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjGhhhjGhKgubjj)}(hpt_range_to_indexh]jp)}(hpt_range_to_indexh]hpt_range_to_index}(hjCGhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj?Gubah}(h]h ](jjeh"]h$]h&]hhuh1jihjGhhhjGhKgubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hj_GhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj[GubjY)}(h h]h }(hjlGhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[GubjG)}(hjJh]hstruct}(hjzGhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj[GubjY)}(h h]h }(hjGhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[Gubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjGhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjGubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjGmodnameN classnameNj j )}j ]j )}j jEGsbc.pt_range_to_indexasbuh1hhj[GubjY)}(h h]h }(hjGhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[Gubj )}(hj h]h*}(hjGhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj[Gubjp)}(hptsh]hpts}(hjGhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj[Gubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjWGubah}(h]h ]h"]h$]h&]hhuh1j hjGhhhjGhKgubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjFhhhjGhKgubah}(h]jFah ](jjeh"]h$]h&]jj)jhuh1j:hjGhKghjFhhubj)}(hhh]h)}(hStarting index for an iterationh]hStarting index for an iteration}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKghjGhhubah}(h]h ]h"]h$]h&]uh1jhjFhhhjGhKgubeh}(h]h ](jfunctioneh"]h$]h&]jjjjHjjHjjjuh1j5hhhjAhNhNubj)}(hz**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the starting index for the iteration in pts.h](h)}(h**Parameters**h]j)}(hjHh]h Parameters}(hj!HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKkhjHubjO)}(hhh]jT)}(h/``const struct pt_state *pts`` Iteration State h](jZ)}(h``const struct pt_state *pts``h]j)}(hj>Hh]hconst struct pt_state *pts}(hj@HhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjunsigned int pt_range_to_end_index(const struct pt_state *pts)h](j` )}(hunsignedh]hunsigned}(hjHhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjHhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKzubjY)}(h h]h }(hjHhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjHhhhjHhKzubj` )}(hinth]hint}(hjHhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjHhhhjHhKzubjY)}(h h]h }(hjHhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjHhhhjHhKzubjj)}(hpt_range_to_end_indexh]jp)}(hpt_range_to_end_indexh]hpt_range_to_end_index}(hjHhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjHubah}(h]h ](jjeh"]h$]h&]hhuh1jihjHhhhjHhKzubj )}(h(const struct pt_state *pts)h]j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjIhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjIubjY)}(h h]h }(hj$IhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjIubjG)}(hjJh]hstruct}(hj2IhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjIubjY)}(h h]h }(hj?IhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjIubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjPIhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjMIubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRImodnameN classnameNj j )}j ]j )}j jHsbc.pt_range_to_end_indexasbuh1hhjIubjY)}(h h]h }(hjpIhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjIubj )}(hj h]h*}(hj~IhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjIubjp)}(hptsh]hpts}(hjIhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjIubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjIubah}(h]h ]h"]h$]h&]hhuh1j hjHhhhjHhKzubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjHhhhjHhKzubah}(h]jHah ](jjeh"]h$]h&]jj)jhuh1j:hjHhKzhjHhhubj)}(hhh]h)}(hEnding index iterationh]hEnding index iteration}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKzhjIhhubah}(h]h ]h"]h$]h&]uh1jhjHhhhjHhKzubeh}(h]h ](jfunctioneh"]h$]h&]jjjjIjjIjjjuh1j5hhhjAhNhNubj)}(hv**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the last index for the iteration in pts.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK~hjIubjO)}(hhh]jT)}(h/``const struct pt_state *pts`` Iteration State h](jZ)}(h``const struct pt_state *pts``h]j)}(hjIh]hconst struct pt_state *pts}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK{hjIubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj JhK{hj Jubah}(h]h ]h"]h$]h&]uh1jjhjIubeh}(h]h ]h"]h$]h&]uh1jShj JhK{hjIubah}(h]h ]h"]h$]h&]uh1jNhjIubh)}(h **Return**h]j)}(hj1Jh]hReturn}(hj3JhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/Jubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK}hjIubh)}(h(the last index for the iteration in pts.h]h(the last index for the iteration in pts.}(hjGJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhK}hjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_next_entry (C function)c.pt_next_entryhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h)void pt_next_entry (struct pt_state *pts)h]jA)}(h(void pt_next_entry(struct pt_state *pts)h](j` )}(hvoidh]hvoid}(hjvJhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjrJhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKubjY)}(h h]h }(hjJhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjrJhhhjJhKubjj)}(h pt_next_entryh]jp)}(h pt_next_entryh]h pt_next_entry}(hjJhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjJubah}(h]h ](jjeh"]h$]h&]hhuh1jihjrJhhhjJhKubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjJhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjJubjY)}(h h]h }(hjJhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjJubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjJhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjJubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJmodnameN classnameNj j )}j ]j )}j jJsbc.pt_next_entryasbuh1hhjJubjY)}(h h]h }(hjJhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjJubj )}(hj h]h*}(hjJhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjJubjp)}(hptsh]hpts}(hj KhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjJubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjJubah}(h]h ]h"]h$]h&]hhuh1j hjrJhhhjJhKubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjnJhhhjJhKubah}(h]jiJah ](jjeh"]h$]h&]jj)jhuh1j:hjJhKhjkJhhubj)}(hhh]h)}(hAdvance pts to the next entryh]hAdvance pts to the next entry}(hj6KhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhj3Khhubah}(h]h ]h"]h$]h&]uh1jhjkJhhhjJhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjNKjjNKjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Iteration State **Description** Update pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.h](h)}(h**Parameters**h]j)}(hjXKh]h Parameters}(hjZKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVKubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjRKubjO)}(hhh]jT)}(h)``struct pt_state *pts`` Iteration State h](jZ)}(h``struct pt_state *pts``h]j)}(hjwKh]hstruct pt_state *pts}(hjyKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjuKubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjqKubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKhjKubah}(h]h ]h"]h$]h&]uh1jjhjqKubeh}(h]h ]h"]h$]h&]uh1jShjKhKhjnKubah}(h]h ]h"]h$]h&]uh1jNhjRKubh)}(h**Description**h]j)}(hjKh]h Description}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjKubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjRKubh)}(hUpdate pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.h]hUpdate pts to go to the next index at this level. If pts is pointing at a contiguous entry then the index may advance my more than one.}(hjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjRKubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1!for_each_pt_level_entry (C macro)c.for_each_pt_level_entryhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hfor_each_pt_level_entryh]jA)}(hfor_each_pt_level_entryh]jj)}(hfor_each_pt_level_entryh]jp)}(hjKh]hfor_each_pt_level_entry}(hjKhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjKubah}(h]h ](jjeh"]h$]h&]hhuh1jihjKhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKubah}(h]h ]h"]h$]h&]hhjuh1j@jjhjKhhhjLhKubah}(h]jKah ](jjeh"]h$]h&]jj)jhuh1j:hjLhKhjKhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjKhhhjLhKubeh}(h]h ](jmacroeh"]h$]h&]jjjj'Ljj'Ljjjuh1j5hhhjAhNhNubh)}(h!``for_each_pt_level_entry (pts)``h]j)}(hj-Lh]hfor_each_pt_level_entry (pts)}(hj/LhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+Lubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjAhhubh)}(h+For loop wrapper over entries in the range h]h)}(h*For loop wrapper over entries in the rangeh]h*For loop wrapper over entries in the range}(hjGLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhjCLubah}(h]h ]h"]h$]h&]uh1hhjULhKhjAhhubj)}(h**Parameters** ``pts`` Iteration State **Description** This is the basic iteration primitive. It iterates over all the entries in pts->range that fall within the pts's current table level. Each step does pt_load_entry(pts).h](h)}(h**Parameters**h]j)}(hjbLh]h Parameters}(hjdLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`Lubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhj\LubjO)}(hhh]jT)}(h``pts`` Iteration State h](jZ)}(h``pts``h]j)}(hjLh]hpts}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhj{Lubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhKhjLubah}(h]h ]h"]h$]h&]uh1jjhj{Lubeh}(h]h ]h"]h$]h&]uh1jShjLhKhjxLubah}(h]h ]h"]h$]h&]uh1jNhj\Lubh)}(h**Description**h]j)}(hjLh]h Description}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhj\Lubh)}(hThis is the basic iteration primitive. It iterates over all the entries in pts->range that fall within the pts's current table level. Each step does pt_load_entry(pts).h]hThis is the basic iteration primitive. It iterates over all the entries in pts->range that fall within the pts’s current table level. Each step does pt_load_entry(pts).}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKhj\Lubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1!pt_load_single_entry (C function)c.pt_load_single_entryhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h>enum pt_entry_type pt_load_single_entry (struct pt_state *pts)h]jA)}(h=enum pt_entry_type pt_load_single_entry(struct pt_state *pts)h](jG)}(hj4h]henum}(hjMhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjLhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhKubjY)}(h h]h }(hjMhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjLhhhjMhKubh)}(hhh]jp)}(h pt_entry_typeh]h pt_entry_type}(hj MhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj"MmodnameN classnameNj j )}j ]j )}j pt_load_single_entrysbc.pt_load_single_entryasbuh1hhjLhhhjMhKubjY)}(h h]h }(hjAMhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjLhhhjMhKubjj)}(hpt_load_single_entryh]jp)}(hj>Mh]hpt_load_single_entry}(hjSMhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjOMubah}(h]h ](jjeh"]h$]h&]hhuh1jihjLhhhjMhKubj )}(h(struct pt_state *pts)h]j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hjnMhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjjMubjY)}(h h]h }(hj{MhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjjMubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjMhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjMubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjMmodnameN classnameNj j )}j ]jva and range->last_va will be incorrect during the iteration and must not be accessed.h](h)}(h**Parameters**h]j)}(hjoQh]h Parameters}(hjqQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjmQubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM hjiQubjO)}(hhh]jT)}(h#``struct pt_common *common`` Table h](jZ)}(h``struct pt_common *common``h]j)}(hjQh]hstruct pt_common *common}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjQubjk)}(hhh]h)}(hTableh]hTable}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQhMhjQubah}(h]h ]h"]h$]h&]uh1jjhjQubeh}(h]h ]h"]h$]h&]uh1jShjQhMhjQubah}(h]h ]h"]h$]h&]uh1jNhjiQubh)}(h**Description**h]j)}(hjQh]h Description}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjiQubh)}(hThe returned range spans the whole page table. Due to how PT_FEAT_SIGN_EXTEND is supported range->va and range->last_va will be incorrect during the iteration and must not be accessed.h]hThe returned range spans the whole page table. Due to how PT_FEAT_SIGN_EXTEND is supported range->va and range->last_va will be incorrect during the iteration and must not be accessed.}(hjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjiQubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_upper_range (C function)c.pt_upper_rangehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h9struct pt_range pt_upper_range (struct pt_common *common)h]jA)}(h8struct pt_range pt_upper_range(struct pt_common *common)h](jG)}(hjJh]hstruct}(hjRhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj Rhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMubjY)}(h h]h }(hjRhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj RhhhjRhMubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hj-RhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj*Rubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj/RmodnameN classnameNj j )}j ]j )}j pt_upper_rangesbc.pt_upper_rangeasbuh1hhj RhhhjRhMubjY)}(h h]h }(hjNRhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj RhhhjRhMubjj)}(hpt_upper_rangeh]jp)}(hjKRh]hpt_upper_range}(hj`RhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj\Rubah}(h]h ](jjeh"]h$]h&]hhuh1jihj RhhhjRhMubj )}(h(struct pt_common *common)h]j )}(hstruct pt_common *commonh](jG)}(hjJh]hstruct}(hj{RhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjwRubjY)}(h h]h }(hjRhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjwRubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hjRhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjRubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjRmodnameN classnameNj j )}j ]jIRc.pt_upper_rangeasbuh1hhjwRubjY)}(h h]h }(hjRhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjwRubj )}(hj h]h*}(hjRhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjwRubjp)}(hcommonh]hcommon}(hjRhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjwRubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjsRubah}(h]h ]h"]h$]h&]hhuh1j hj RhhhjRhMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjRhhhjRhMubah}(h]jRah ](jjeh"]h$]h&]jj)jhuh1j:hjRhMhjRhhubj)}(hhh]h)}(h/Return a range that spans part of the top levelh]h/Return a range that spans part of the top level}(hjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjRhhubah}(h]h ]h"]h$]h&]uh1jhjRhhhjRhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSjjSjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_common *common`` Table **Description** For PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hj ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM hjSubjO)}(hhh]jT)}(h#``struct pt_common *common`` Table h](jZ)}(h``struct pt_common *common``h]j)}(hj=Sh]hstruct pt_common *common}(hj?ShhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;Subah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj7Subjk)}(hhh]h)}(hTableh]hTable}(hjVShhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRShMhjSSubah}(h]h ]h"]h$]h&]uh1jjhj7Subeh}(h]h ]h"]h$]h&]uh1jShjRShMhj4Subah}(h]h ]h"]h$]h&]uh1jNhjSubh)}(h**Description**h]j)}(hjxSh]h Description}(hjzShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvSubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjSubh)}(hFor PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.h]hFor PT_FEAT_SIGN_EXTEND this will return the upper range, and cover half the total page table. Otherwise it returns the entire page table.}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjSubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_make_range (C function)c.pt_make_rangehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h[struct pt_range pt_make_range (struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)h]jA)}(hZstruct pt_range pt_make_range(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)h](jG)}(hjJh]hstruct}(hjShhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjShhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM/ubjY)}(h h]h }(hjShhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjShhhjShM/ubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hjShhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjSubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjSmodnameN classnameNj j )}j ]j )}j pt_make_rangesbc.pt_make_rangeasbuh1hhjShhhjShM/ubjY)}(h h]h }(hjShhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjShhhjShM/ubjj)}(h pt_make_rangeh]jp)}(hjSh]h pt_make_range}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj Tubah}(h]h ](jjeh"]h$]h&]hhuh1jihjShhhjShM/ubj )}(h=(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)h](j )}(hstruct pt_common *commonh](jG)}(hjJh]hstruct}(hj*ThhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj&TubjY)}(h h]h }(hj7ThhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj&Tubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hjHThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjETubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjJTmodnameN classnameNj j )}j ]jSc.pt_make_rangeasbuh1hhj&TubjY)}(h h]h }(hjfThhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj&Tubj )}(hj h]h*}(hjtThhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj&Tubjp)}(hcommonh]hcommon}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj&Tubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj"Tubj )}(h pt_vaddr_t vah](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNj j )}j ]jSc.pt_make_rangeasbuh1hhjTubjY)}(h h]h }(hjThhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjTubjp)}(hvah]hva}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjTubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj"Tubj )}(hpt_vaddr_t last_vah](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hjThhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjTubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjTmodnameN classnameNj j )}j ]jSc.pt_make_rangeasbuh1hhjTubjY)}(h h]h }(hjUhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjTubjp)}(hlast_vah]hlast_va}(hjUhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjTubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj"Tubeh}(h]h ]h"]h$]h&]hhuh1j hjShhhjShM/ubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjShhhjShM/ubah}(h]jSah ](jjeh"]h$]h&]jj)jhuh1j:hjShM/hjShhubj)}(hhh]h)}(h+Return a range that spans part of the tableh]h+Return a range that spans part of the table}(hj;UhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM/hj8Uhhubah}(h]h ]h"]h$]h&]uh1jhjShhhjShM/ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjSUjjSUjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_common *common`` Table ``pt_vaddr_t va`` Start address ``pt_vaddr_t last_va`` Last address **Description** The caller must validate the range with pt_check_range() before using it.h](h)}(h**Parameters**h]j)}(hj]Uh]h Parameters}(hj_UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj[Uubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM3hjWUubjO)}(hhh](jT)}(h#``struct pt_common *common`` Table h](jZ)}(h``struct pt_common *common``h]j)}(hj|Uh]hstruct pt_common *common}(hj~UhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzUubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM0hjvUubjk)}(hhh]h)}(hTableh]hTable}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM0hjUubah}(h]h ]h"]h$]h&]uh1jjhjvUubeh}(h]h ]h"]h$]h&]uh1jShjUhM0hjsUubjT)}(h ``pt_vaddr_t va`` Start address h](jZ)}(h``pt_vaddr_t va``h]j)}(hjUh]h pt_vaddr_t va}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM1hjUubjk)}(hhh]h)}(h Start addressh]h Start address}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhM1hjUubah}(h]h ]h"]h$]h&]uh1jjhjUubeh}(h]h ]h"]h$]h&]uh1jShjUhM1hjsUubjT)}(h$``pt_vaddr_t last_va`` Last address h](jZ)}(h``pt_vaddr_t last_va``h]j)}(hjUh]hpt_vaddr_t last_va}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM2hjUubjk)}(hhh]h)}(h Last addressh]h Last address}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhM2hjVubah}(h]h ]h"]h$]h&]uh1jjhjUubeh}(h]h ]h"]h$]h&]uh1jShjVhM2hjsUubeh}(h]h ]h"]h$]h&]uh1jNhjWUubh)}(h**Description**h]j)}(hj)Vh]h Description}(hj+VhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj'Vubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM4hjWUubh)}(hIThe caller must validate the range with pt_check_range() before using it.h]hIThe caller must validate the range with pt_check_range() before using it.}(hj?VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM3hjWUubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_init (C function) c.pt_inithNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h^struct pt_state pt_init (struct pt_range *range, unsigned int level, struct pt_table_p *table)h]jA)}(h]struct pt_state pt_init(struct pt_range *range, unsigned int level, struct pt_table_p *table)h](jG)}(hjJh]hstruct}(hjnVhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjjVhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMVubjY)}(h h]h }(hj|VhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjjVhhhj{VhMVubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjVhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNj j )}j ]j )}j pt_initsb c.pt_initasbuh1hhjjVhhhj{VhMVubjY)}(h h]h }(hjVhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjjVhhhj{VhMVubjj)}(hpt_inith]jp)}(hjVh]hpt_init}(hjVhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjVubah}(h]h ](jjeh"]h$]h&]hhuh1jihjjVhhhj{VhMVubj )}(hF(struct pt_range *range, unsigned int level, struct pt_table_p *table)h](j )}(hstruct pt_range *rangeh](jG)}(hjJh]hstruct}(hjVhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjVubjY)}(h h]h }(hjVhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjVubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hjVhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjVubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjVmodnameN classnameNj j )}j ]jV c.pt_initasbuh1hhjVubjY)}(h h]h }(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjVubj )}(hj h]h*}(hj%WhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjVubjp)}(hrangeh]hrange}(hj2WhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjVubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjVubj )}(hunsigned int levelh](j` )}(hunsignedh]hunsigned}(hjKWhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjGWubjY)}(h h]h }(hjYWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjGWubj` )}(hinth]hint}(hjgWhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjGWubjY)}(h h]h }(hjuWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjGWubjp)}(hlevelh]hlevel}(hjWhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjGWubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjVubj )}(hstruct pt_table_p *tableh](jG)}(hjJh]hstruct}(hjWhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjWubjY)}(h h]h }(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjWubh)}(hhh]jp)}(h pt_table_ph]h pt_table_p}(hjWhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjWubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjWmodnameN classnameNj j )}j ]jV c.pt_initasbuh1hhjWubjY)}(h h]h }(hjWhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjWubj )}(hj h]h*}(hjWhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjWubjp)}(htableh]htable}(hjWhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjWubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjVubeh}(h]h ]h"]h$]h&]hhuh1j hjjVhhhj{VhMVubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjfVhhhj{VhMVubah}(h]jaVah ](jjeh"]h$]h&]jj)jhuh1j:hj{VhMVhjcVhhubj)}(hhh]h)}(h"Initialize a pt_state on the stackh]h"Initialize a pt_state on the stack}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMVhjXhhubah}(h]h ]h"]h$]h&]uh1jhjcVhhhj{VhMVubeh}(h]h ](jfunctioneh"]h$]h&]jjjj5Xjj5Xjjjuh1j5hhhjAhNhNubj)}(hX**Parameters** ``struct pt_range *range`` Range pointer to embed in the state ``unsigned int level`` Table level for the state ``struct pt_table_p *table`` Pointer to the table memory at level **Description** Helper to initialize the on-stack pt_state from walker arguments.h](h)}(h**Parameters**h]j)}(hj?Xh]h Parameters}(hjAXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=Xubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMZhj9XubjO)}(hhh](jT)}(h?``struct pt_range *range`` Range pointer to embed in the state h](jZ)}(h``struct pt_range *range``h]j)}(hj^Xh]hstruct pt_range *range}(hj`XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\Xubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMWhjXXubjk)}(hhh]h)}(h#Range pointer to embed in the stateh]h#Range pointer to embed in the state}(hjwXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsXhMWhjtXubah}(h]h ]h"]h$]h&]uh1jjhjXXubeh}(h]h ]h"]h$]h&]uh1jShjsXhMWhjUXubjT)}(h1``unsigned int level`` Table level for the state h](jZ)}(h``unsigned int level``h]j)}(hjXh]hunsigned int level}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMXhjXubjk)}(hhh]h)}(hTable level for the stateh]hTable level for the state}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMXhjXubah}(h]h ]h"]h$]h&]uh1jjhjXubeh}(h]h ]h"]h$]h&]uh1jShjXhMXhjUXubjT)}(hB``struct pt_table_p *table`` Pointer to the table memory at level h](jZ)}(h``struct pt_table_p *table``h]j)}(hjXh]hstruct pt_table_p *table}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMYhjXubjk)}(hhh]h)}(h$Pointer to the table memory at levelh]h$Pointer to the table memory at level}(hjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMYhjXubah}(h]h ]h"]h$]h&]uh1jjhjXubeh}(h]h ]h"]h$]h&]uh1jShjXhMYhjUXubeh}(h]h ]h"]h$]h&]uh1jNhj9Xubh)}(h**Description**h]j)}(hj Yh]h Description}(hj YhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj Yubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM[hj9Xubh)}(hAHelper to initialize the on-stack pt_state from walker arguments.h]hAHelper to initialize the on-stack pt_state from walker arguments.}(hj!YhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMZhj9Xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_init_top (C function) c.pt_init_tophNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(h4struct pt_state pt_init_top (struct pt_range *range)h]jA)}(h3struct pt_state pt_init_top(struct pt_range *range)h](jG)}(hjJh]hstruct}(hjPYhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjLYhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMiubjY)}(h h]h }(hj^YhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjLYhhhj]YhMiubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjoYhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjlYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjqYmodnameN classnameNj j )}j ]j )}j pt_init_topsb c.pt_init_topasbuh1hhjLYhhhj]YhMiubjY)}(h h]h }(hjYhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjLYhhhj]YhMiubjj)}(h pt_init_toph]jp)}(hjYh]h pt_init_top}(hjYhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjYubah}(h]h ](jjeh"]h$]h&]hhuh1jihjLYhhhj]YhMiubj )}(h(struct pt_range *range)h]j )}(hstruct pt_range *rangeh](jG)}(hjJh]hstruct}(hjYhhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjYubjY)}(h h]h }(hjYhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjYubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hjYhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjYubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjYmodnameN classnameNj j )}j ]jY c.pt_init_topasbuh1hhjYubjY)}(h h]h }(hjYhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjYubj )}(hj h]h*}(hjZhhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjYubjp)}(hrangeh]hrange}(hjZhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjYubeh}(h]h ]h"]h$]h&]noemphhhuh1j hjYubah}(h]h ]h"]h$]h&]hhuh1j hjLYhhhj]YhMiubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjHYhhhj]YhMiubah}(h]jCYah ](jjeh"]h$]h&]jj)jhuh1j:hj]YhMihjEYhhubj)}(hhh]h)}(h"Initialize a pt_state on the stackh]h"Initialize a pt_state on the stack}(hj>ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMihj;Zhhubah}(h]h ]h"]h$]h&]uh1jhjEYhhhj]YhMiubeh}(h]h ](jfunctioneh"]h$]h&]jjjjVZjjVZjjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_range *range`` Range pointer to embed in the state **Description** The pt_state points to the top most level.h](h)}(h**Parameters**h]j)}(hj`Zh]h Parameters}(hjbZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^Zubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMmhjZZubjO)}(hhh]jT)}(h?``struct pt_range *range`` Range pointer to embed in the state h](jZ)}(h``struct pt_range *range``h]j)}(hjZh]hstruct pt_range *range}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Zubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMjhjyZubjk)}(hhh]h)}(h#Range pointer to embed in the stateh]h#Range pointer to embed in the state}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMjhjZubah}(h]h ]h"]h$]h&]uh1jjhjyZubeh}(h]h ]h"]h$]h&]uh1jShjZhMjhjvZubah}(h]h ]h"]h$]h&]uh1jNhjZZubh)}(h**Description**h]j)}(hjZh]h Description}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMlhjZZubh)}(h*The pt_state points to the top most level.h]h*The pt_state points to the top most level.}(hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMkhjZZubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_descend (C function) c.pt_descendhNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hBint pt_descend (struct pt_state *pts, void *arg, pt_level_fn_t fn)h]jA)}(hAint pt_descend(struct pt_state *pts, void *arg, pt_level_fn_t fn)h](j` )}(hinth]hint}(hjZhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjZhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMwubjY)}(h h]h }(hj[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjZhhhj [hMwubjj)}(h pt_descendh]jp)}(h pt_descendh]h pt_descend}(hj [hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj[ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjZhhhj [hMwubj )}(h3(struct pt_state *pts, void *arg, pt_level_fn_t fn)h](j )}(hstruct pt_state *ptsh](jG)}(hjJh]hstruct}(hj<[hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj8[ubjY)}(h h]h }(hjI[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj8[ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hjZ[hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjW[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj\[modnameN classnameNj j )}j ]j )}j j"[sb c.pt_descendasbuh1hhj8[ubjY)}(h h]h }(hjz[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj8[ubj )}(hj h]h*}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj8[ubjp)}(hptsh]hpts}(hj[hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj8[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4[ubj )}(h void *argh](j` )}(hvoidh]hvoid}(hj[hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj[ubjY)}(h h]h }(hj[hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[ubj )}(hj h]h*}(hj[hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj[ubjp)}(hargh]harg}(hj[hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4[ubj )}(hpt_level_fn_t fnh](h)}(hhh]jp)}(h pt_level_fn_th]h pt_level_fn_t}(hj[hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj[ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj[modnameN classnameNj j )}j ]jv[ c.pt_descendasbuh1hhj[ubjY)}(h h]h }(hj\hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj[ubjp)}(hfnh]hfn}(hj\hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj4[ubeh}(h]h ]h"]h$]h&]hhuh1j hjZhhhj [hMwubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjZhhhj [hMwubah}(h]jZah ](jjeh"]h$]h&]jj)jhuh1j:hj [hMwhjZhhubj)}(hhh]h)}(h1Recursively invoke the walker for the lower levelh]h1Recursively invoke the walker for the lower level}(hjI\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMwhjF\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj [hMwubeh}(h]h ](jfunctioneh"]h$]h&]jjjja\jja\jjjuh1j5hhhjAhNhNubj)}(h**Parameters** ``struct pt_state *pts`` Iteration State ``void *arg`` Value to pass to the function ``pt_level_fn_t fn`` Walker function to call **Description** pts must point to a table item. Invoke fn as a walker on the table pts points to.h](h)}(h**Parameters**h]j)}(hjk\h]h Parameters}(hjm\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhji\ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM{hje\ubjO)}(hhh](jT)}(h)``struct pt_state *pts`` Iteration State h](jZ)}(h``struct pt_state *pts``h]j)}(hj\h]hstruct pt_state *pts}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMxhj\ubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMxhj\ubah}(h]h ]h"]h$]h&]uh1jjhj\ubeh}(h]h ]h"]h$]h&]uh1jShj\hMxhj\ubjT)}(h,``void *arg`` Value to pass to the function h](jZ)}(h ``void *arg``h]j)}(hj\h]h void *arg}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMyhj\ubjk)}(hhh]h)}(hValue to pass to the functionh]hValue to pass to the function}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hMyhj\ubah}(h]h ]h"]h$]h&]uh1jjhj\ubeh}(h]h ]h"]h$]h&]uh1jShj\hMyhj\ubjT)}(h-``pt_level_fn_t fn`` Walker function to call h](jZ)}(h``pt_level_fn_t fn``h]j)}(hj\h]hpt_level_fn_t fn}(hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMzhj\ubjk)}(hhh]h)}(hWalker function to callh]hWalker function to call}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMzhj]ubah}(h]h ]h"]h$]h&]uh1jjhj\ubeh}(h]h ]h"]h$]h&]uh1jShj]hMzhj\ubeh}(h]h ]h"]h$]h&]uh1jNhje\ubh)}(h**Description**h]j)}(hj7]h]h Description}(hj9]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5]ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM|hje\ubh)}(hQpts must point to a table item. Invoke fn as a walker on the table pts points to.h]hQpts must point to a table item. Invoke fn as a walker on the table pts points to.}(hjM]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM{hje\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_walk_range (C function)c.pt_walk_rangehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hGint pt_walk_range (struct pt_range *range, pt_level_fn_t fn, void *arg)h]jA)}(hFint pt_walk_range(struct pt_range *range, pt_level_fn_t fn, void *arg)h](j` )}(hinth]hint}(hj|]hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjx]hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMubjY)}(h h]h }(hj]hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjx]hhhj]hMubjj)}(h pt_walk_rangeh]jp)}(h pt_walk_rangeh]h pt_walk_range}(hj]hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj]ubah}(h]h ](jjeh"]h$]h&]hhuh1jihjx]hhhj]hMubj )}(h5(struct pt_range *range, pt_level_fn_t fn, void *arg)h](j )}(hstruct pt_range *rangeh](jG)}(hjJh]hstruct}(hj]hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj]ubjY)}(h h]h }(hj]hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj]ubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hj]hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj]ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNj j )}j ]j )}j j]sbc.pt_walk_rangeasbuh1hhj]ubjY)}(h h]h }(hj]hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj]ubj )}(hj h]h*}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj]ubjp)}(hrangeh]hrange}(hj^hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj]ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]ubj )}(hpt_level_fn_t fnh](h)}(hhh]jp)}(h pt_level_fn_th]h pt_level_fn_t}(hj.^hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj+^ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj0^modnameN classnameNj j )}j ]j]c.pt_walk_rangeasbuh1hhj'^ubjY)}(h h]h }(hjL^hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj'^ubjp)}(hfnh]hfn}(hjZ^hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj'^ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]ubj )}(h void *argh](j` )}(hvoidh]hvoid}(hjs^hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjo^ubjY)}(h h]h }(hj^hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjo^ubj )}(hj h]h*}(hj^hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjo^ubjp)}(hargh]harg}(hj^hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjo^ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj]ubeh}(h]h ]h"]h$]h&]hhuh1j hjx]hhhj]hMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjt]hhhj]hMubah}(h]jo]ah ](jjeh"]h$]h&]jj)jhuh1j:hj]hMhjq]hhubj)}(hhh]h)}(hWalk over a VA rangeh]hWalk over a VA range}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj^hhubah}(h]h ]h"]h$]h&]uh1jhjq]hhhj]hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjj^jj^jjjuh1j5hhhjAhNhNubj)}(hXR**Parameters** ``struct pt_range *range`` Range pointer ``pt_level_fn_t fn`` Walker function to call ``void *arg`` Value to pass to the function **Description** Walk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.h](h)}(h**Parameters**h]j)}(hj^h]h Parameters}(hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj^ubjO)}(hhh](jT)}(h)``struct pt_range *range`` Range pointer h](jZ)}(h``struct pt_range *range``h]j)}(hj_h]hstruct pt_range *range}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj_ubjk)}(hhh]h)}(h Range pointerh]h Range pointer}(hj _hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jjhj_ubeh}(h]h ]h"]h$]h&]uh1jShj_hMhj^ubjT)}(h-``pt_level_fn_t fn`` Walker function to call h](jZ)}(h``pt_level_fn_t fn``h]j)}(hj@_h]hpt_level_fn_t fn}(hjB_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>_ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj:_ubjk)}(hhh]h)}(hWalker function to callh]hWalker function to call}(hjY_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU_hMhjV_ubah}(h]h ]h"]h$]h&]uh1jjhj:_ubeh}(h]h ]h"]h$]h&]uh1jShjU_hMhj^ubjT)}(h,``void *arg`` Value to pass to the function h](jZ)}(h ``void *arg``h]j)}(hjy_h]h void *arg}(hj{_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw_ubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjs_ubjk)}(hhh]h)}(hValue to pass to the functionh]hValue to pass to the function}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_hMhj_ubah}(h]h ]h"]h$]h&]uh1jjhjs_ubeh}(h]h ]h"]h$]h&]uh1jShj_hMhj^ubeh}(h]h ]h"]h$]h&]uh1jNhj^ubh)}(h**Description**h]j)}(hj_h]h Description}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj^ubh)}(hWalk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.h]hWalk over a VA range. The caller should have done a validity check, at least calling pt_check_range(), when building range. The walk will start at the top most table.}(hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_range_slice (C function)c.pt_range_slicehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hmstruct pt_range pt_range_slice (const struct pt_state *pts, unsigned int start_index, unsigned int end_index)h]jA)}(hlstruct pt_range pt_range_slice(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)h](jG)}(hjJh]hstruct}(hj_hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj_hhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMubjY)}(h h]h }(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj_hhhj`hMubh)}(hhh]jp)}(hpt_rangeh]hpt_range}(hj`hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNj j )}j ]j )}j pt_range_slicesbc.pt_range_sliceasbuh1hhj_hhhj`hMubjY)}(h h]h }(hj9`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj_hhhj`hMubjj)}(hpt_range_sliceh]jp)}(hj6`h]hpt_range_slice}(hjK`hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjG`ubah}(h]h ](jjeh"]h$]h&]hhuh1jihj_hhhj`hMubj )}(hN(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)h](j )}(hconst struct pt_state *ptsh](jG)}(hj h]hconst}(hjf`hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjb`ubjY)}(h h]h }(hjs`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjb`ubjG)}(hjJh]hstruct}(hj`hhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhjb`ubjY)}(h h]h }(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjb`ubh)}(hhh]jp)}(hpt_stateh]hpt_state}(hj`hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj`ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj`modnameN classnameNj j )}j ]j4`c.pt_range_sliceasbuh1hhjb`ubjY)}(h h]h }(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjb`ubj )}(hj h]h*}(hj`hhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hjb`ubjp)}(hptsh]hpts}(hj`hhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjb`ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj^`ubj )}(hunsigned int start_indexh](j` )}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj`ubjY)}(h h]h }(hj`hhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`ubj` )}(hinth]hint}(hj ahhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj`ubjY)}(h h]h }(hjahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj`ubjp)}(h start_indexh]h start_index}(hj)ahhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj`ubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj^`ubj )}(hunsigned int end_indexh](j` )}(hunsignedh]hunsigned}(hjBahhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj>aubjY)}(h h]h }(hjPahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj>aubj` )}(hinth]hint}(hj^ahhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hj>aubjY)}(h h]h }(hjlahhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj>aubjp)}(h end_indexh]h end_index}(hjzahhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj>aubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj^`ubeh}(h]h ]h"]h$]h&]hhuh1j hj_hhhj`hMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhj_hhhj`hMubah}(h]j_ah ](jjeh"]h$]h&]jj)jhuh1j:hj`hMhj_hhubj)}(hhh]h)}(h!Return a range that spans indexesh]h!Return a range that spans indexes}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjahhubah}(h]h ]h"]h$]h&]uh1jhj_hhhj`hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjajjajjjuh1j5hhhjAhNhNubj)}(hX**Parameters** ``const struct pt_state *pts`` Iteration State ``unsigned int start_index`` Starting index within pts ``unsigned int end_index`` Ending index within pts **Description** Create a range than spans an index range of the current table level pt_state points at.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjaubjO)}(hhh](jT)}(h/``const struct pt_state *pts`` Iteration State h](jZ)}(h``const struct pt_state *pts``h]j)}(hjah]hconst struct pt_state *pts}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjaubjk)}(hhh]h)}(hIteration Stateh]hIteration State}(hjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahMhjaubah}(h]h ]h"]h$]h&]uh1jjhjaubeh}(h]h ]h"]h$]h&]uh1jShjahMhjaubjT)}(h7``unsigned int start_index`` Starting index within pts h](jZ)}(h``unsigned int start_index``h]j)}(hjbh]hunsigned int start_index}(hj bhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjbubjk)}(hhh]h)}(hStarting index within ptsh]hStarting index within pts}(hj7bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3bhMhj4bubah}(h]h ]h"]h$]h&]uh1jjhjbubeh}(h]h ]h"]h$]h&]uh1jShj3bhMhjaubjT)}(h3``unsigned int end_index`` Ending index within pts h](jZ)}(h``unsigned int end_index``h]j)}(hjWbh]hunsigned int end_index}(hjYbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjUbubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjQbubjk)}(hhh]h)}(hEnding index within ptsh]hEnding index within pts}(hjpbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlbhMhjmbubah}(h]h ]h"]h$]h&]uh1jjhjQbubeh}(h]h ]h"]h$]h&]uh1jShjlbhMhjaubeh}(h]h ]h"]h$]h&]uh1jNhjaubh)}(h**Description**h]j)}(hjbh]h Description}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjaubh)}(hWCreate a range than spans an index range of the current table level pt_state points at.h]hWCreate a range than spans an index range of the current table level pt_state points at.}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1pt_top_memsize_lg2 (C function)c.pt_top_memsize_lg2hNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hRunsigned int pt_top_memsize_lg2 (struct pt_common *common, uintptr_t top_of_table)h]jA)}(hQunsigned int pt_top_memsize_lg2(struct pt_common *common, uintptr_t top_of_table)h](j` )}(hunsignedh]hunsigned}(hjbhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjbhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMubjY)}(h h]h }(hjbhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjbhhhjbhMubj` )}(hinth]hint}(hjbhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjbhhhjbhMubjY)}(h h]h }(hjchhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjbhhhjbhMubjj)}(hpt_top_memsize_lg2h]jp)}(hpt_top_memsize_lg2h]hpt_top_memsize_lg2}(hjchhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjcubah}(h]h ](jjeh"]h$]h&]hhuh1jihjbhhhjbhMubj )}(h2(struct pt_common *common, uintptr_t top_of_table)h](j )}(hstruct pt_common *commonh](jG)}(hjJh]hstruct}(hj0chhhNhNubah}(h]h ]jSah"]h$]h&]uh1jFhj,cubjY)}(h h]h }(hj=chhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj,cubh)}(hhh]jp)}(h pt_commonh]h pt_common}(hjNchhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjKcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjPcmodnameN classnameNj j )}j ]j )}j jcsbc.pt_top_memsize_lg2asbuh1hhj,cubjY)}(h h]h }(hjnchhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj,cubj )}(hj h]h*}(hj|chhhNhNubah}(h]h ]j ah"]h$]h&]uh1j hj,cubjp)}(hcommonh]hcommon}(hjchhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj,cubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(cubj )}(huintptr_t top_of_tableh](h)}(hhh]jp)}(h uintptr_th]h uintptr_t}(hjchhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjcubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjcmodnameN classnameNj j )}j ]jjcc.pt_top_memsize_lg2asbuh1hhjcubjY)}(h h]h }(hjchhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjcubjp)}(h top_of_tableh]h top_of_table}(hjchhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjcubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj(cubeh}(h]h ]h"]h$]h&]hhuh1j hjbhhhjbhMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]jj)jhuh1j:hjbhMhjbhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjdjjdjjjuh1j5hhhjAhNhNubj)}(hX **Parameters** ``struct pt_common *common`` Table ``uintptr_t top_of_table`` Top of table value from _pt_top_set() **Description** Compute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.h](h)}(h**Parameters**h]j)}(hjdh]h Parameters}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj dubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjdubjO)}(hhh](jT)}(h#``struct pt_common *common`` Table h](jZ)}(h``struct pt_common *common``h]j)}(hj-dh]hstruct pt_common *common}(hj/dhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+dubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj'dubjk)}(hhh]h)}(hTableh]hTable}(hjFdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBdhMhjCdubah}(h]h ]h"]h$]h&]uh1jjhj'dubeh}(h]h ]h"]h$]h&]uh1jShjBdhMhj$dubjT)}(hA``uintptr_t top_of_table`` Top of table value from _pt_top_set() h](jZ)}(h``uintptr_t top_of_table``h]j)}(hjfdh]huintptr_t top_of_table}(hjhdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjddubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhj`dubjk)}(hhh]h)}(h%Top of table value from _pt_top_set()h]h%Top of table value from _pt_top_set()}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{dhMhj|dubah}(h]h ]h"]h$]h&]uh1jjhj`dubeh}(h]h ]h"]h$]h&]uh1jShj{dhMhj$dubeh}(h]h ]h"]h$]h&]uh1jNhjdubh)}(h**Description**h]j)}(hjdh]h Description}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjdubh)}(hCompute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.h]hCompute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.}(hjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjdubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1#pt_compute_best_pgsize (C function)c.pt_compute_best_pgsizehNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hnunsigned int pt_compute_best_pgsize (pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)h]jA)}(hmunsigned int pt_compute_best_pgsize(pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)h](j` )}(hunsignedh]hunsigned}(hjdhhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjdhhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMubjY)}(h h]h }(hjdhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjdhhhjdhMubj` )}(hinth]hint}(hjehhhNhNubah}(h]h ]jl ah"]h$]h&]uh1j_ hjdhhhjdhMubjY)}(h h]h }(hjehhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjdhhhjdhMubjj)}(hpt_compute_best_pgsizeh]jp)}(hpt_compute_best_pgsizeh]hpt_compute_best_pgsize}(hj#ehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjeubah}(h]h ](jjeh"]h$]h&]hhuh1jihjdhhhjdhMubj )}(hJ(pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)h](j )}(hpt_vaddr_t pgsz_bitmaph](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hjBehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj?eubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjDemodname_N classnameNj j )}j ]j )}j j%esbc.pt_compute_best_pgsizeasbuh1hhj;eubjY)}(h h]h }(hjbehhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhj;eubjp)}(h pgsz_bitmaph]h pgsz_bitmap}(hjpehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johj;eubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7eubj )}(h pt_vaddr_t vah](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hjehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNj j )}j ]j^ec.pt_compute_best_pgsizeasbuh1hhjeubjY)}(h h]h }(hjehhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjeubjp)}(hvah]hva}(hjehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjeubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7eubj )}(hpt_vaddr_t last_vah](h)}(hhh]jp)}(h pt_vaddr_th]h pt_vaddr_t}(hjehhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjeubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjemodnameN classnameNj j )}j ]j^ec.pt_compute_best_pgsizeasbuh1hhjeubjY)}(h h]h }(hjehhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjeubjp)}(hlast_vah]hlast_va}(hjfhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjeubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7eubj )}(h pt_oaddr_t oah](h)}(hhh]jp)}(h pt_oaddr_th]h pt_oaddr_t}(hjfhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjfubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjfmodnameN classnameNj j )}j ]j^ec.pt_compute_best_pgsizeasbuh1hhjfubjY)}(h h]h }(hj:fhhhNhNubah}(h]h ]jeah"]h$]h&]uh1jXhjfubjp)}(hoah]hoa}(hjHfhhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjfubeh}(h]h ]h"]h$]h&]noemphhhuh1j hj7eubeh}(h]h ]h"]h$]h&]hhuh1j hjdhhhjdhMubeh}(h]h ]h"]h$]h&]hhjuh1j@jjhjdhhhjdhMubah}(h]jdah ](jjeh"]h$]h&]jj)jhuh1j:hjdhMhjdhhubj)}(hhh]h)}(h-Determine the best page size for leaf entriesh]h-Determine the best page size for leaf entries}(hjrfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjofhhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjfjjfjjjuh1j5hhhjAhNhNubj)}(hXK**Parameters** ``pt_vaddr_t pgsz_bitmap`` Permitted page sizes ``pt_vaddr_t va`` Starting virtual address for the leaf entry ``pt_vaddr_t last_va`` Last virtual address for the leaf entry, sets the max page size ``pt_oaddr_t oa`` Starting output address for the leaf entry **Description** Compute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format's supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.h](h)}(h**Parameters**h]j)}(hjfh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjfubjO)}(hhh](jT)}(h0``pt_vaddr_t pgsz_bitmap`` Permitted page sizes h](jZ)}(h``pt_vaddr_t pgsz_bitmap``h]j)}(hjfh]hpt_vaddr_t pgsz_bitmap}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjfubjk)}(hhh]h)}(hPermitted page sizesh]hPermitted page sizes}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jjhjfubeh}(h]h ]h"]h$]h&]uh1jShjfhMhjfubjT)}(h>``pt_vaddr_t va`` Starting virtual address for the leaf entry h](jZ)}(h``pt_vaddr_t va``h]j)}(hjfh]h pt_vaddr_t va}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjfubjk)}(hhh]h)}(h+Starting virtual address for the leaf entryh]h+Starting virtual address for the leaf entry}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjghMhjgubah}(h]h ]h"]h$]h&]uh1jjhjfubeh}(h]h ]h"]h$]h&]uh1jShjghMhjfubjT)}(hW``pt_vaddr_t last_va`` Last virtual address for the leaf entry, sets the max page size h](jZ)}(h``pt_vaddr_t last_va``h]j)}(hj%gh]hpt_vaddr_t last_va}(hj'ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#gubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjgubjk)}(hhh]h)}(h?Last virtual address for the leaf entry, sets the max page sizeh]h?Last virtual address for the leaf entry, sets the max page size}(hj>ghhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ghMhj;gubah}(h]h ]h"]h$]h&]uh1jjhjgubeh}(h]h ]h"]h$]h&]uh1jShj:ghMhjfubjT)}(h=``pt_oaddr_t oa`` Starting output address for the leaf entry h](jZ)}(h``pt_oaddr_t oa``h]j)}(hj^gh]h pt_oaddr_t oa}(hj`ghhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\gubah}(h]h ]h"]h$]h&]uh1jYhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjXgubjk)}(hhh]h)}(h*Starting output address for the leaf entryh]h*Starting output address for the leaf entry}(hjwghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjsghMhjtgubah}(h]h ]h"]h$]h&]uh1jjhjXgubeh}(h]h ]h"]h$]h&]uh1jShjsghMhjfubeh}(h]h ]h"]h$]h&]uh1jNhjfubh)}(h**Description**h]j)}(hjgh]h Description}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjfubh)}(hXCompute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format's supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.h]hXCompute the largest page size for va, last_va, and oa together and return it in lg2. The largest page size depends on the format’s supported page sizes at this level, and the relative alignment of the VA and OA addresses. 0 means the OA cannot be stored with the provided pgsz_bitmap.}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMhjfubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjAhhhNhNubj%)}(hhh]h}(h]h ]h"]h$]h&]entries](j1PT_MAKE_LEVELS (C macro)c.PT_MAKE_LEVELShNtauh1j$hjAhhhNhNubj6)}(hhh](j;)}(hPT_MAKE_LEVELSh]jA)}(hPT_MAKE_LEVELSh]jj)}(hPT_MAKE_LEVELSh]jp)}(hjgh]hPT_MAKE_LEVELS}(hjghhhNhNubah}(h]h ]j{ah"]h$]h&]uh1johjgubah}(h]h ](jjeh"]h$]h&]hhuh1jihjghhhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM`ubah}(h]h ]h"]h$]h&]hhjuh1j@jjhjghhhjghM`ubah}(h]jgah ](jjeh"]h$]h&]jj)jhuh1j:hjghM`hjghhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjghhhjghM`ubeh}(h]h ](jmacroeh"]h$]h&]jjjjhjjhjjjuh1j5hhhjAhNhNubh)}(h``PT_MAKE_LEVELS (fn, do_fn)``h]j)}(hjhh]hPT_MAKE_LEVELS (fn, do_fn)}(hjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhMbhjAhhubh)}(hBuild an unwound walker h]h)}(hBuild an unwound walkerh]hBuild an unwound walker}(hj.hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.hhM`hj*hubah}(h]h ]h"]h$]h&]uh1hhjjj;ju nametypes}(jVjjNjjAj:ijijFjjjj>juh}(jSjhjKjjfjAjj3j<j%j*jR jW j j jGjLjjjjjmjrjjjjjjjjjwj|j/j4jjj j j("j-"j%j%j(j(jO*jT*j+j,j-j-j/j/j1j1j3j3jG5jL5j6j7j8j8j:j:j"<j'<j,>j1>j7@j<@j7ijAjAjAjRCjWCjDjDjFjFjHjHjiJjnJjKjKjLjLjNjNjRPjWPjRjRjSjSjaVjfVjCYjHYjZjZjo]jt]j_j_jbjbjdjdjgjgjij=ijCjjijjjij;jjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.