€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ)/translations/zh_CN/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/zh_TW/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/it_IT/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ja_JP/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/ko_KR/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/pt_BR/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ)/translations/sp_SP/driver-api/generic_pt”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)�”}”(hŒ SPDX-License-Identifier: GPL-2.0”h]”hŒ SPDX-License-Identifier: GPL-2.0”…”�”}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒC/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt.rst”h´KubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒGeneric Radix Page Table”h]”hŒGeneric Radix Page Table”…”�”}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhŒ block_quote”“”)�”}”(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. Like the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms. The system is divided into three logical levels: - 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) 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. The generic framework supports a superset of functions across many HW implementations: - 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Œ 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.”…”�”}”(hhåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K hhßubhä)�”}”(hŒ“Like the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.”h]”hŒ“Like the mm subsystem each format contributes its parsing implementation under common names and the common code implements the required algorithms.”…”�”}”(hhôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khhßubhä)�”}”(hŒ0The system is divided into three logical levels:”h]”hŒ0The system is divided into three logical levels:”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhhßubhÞ)�”}”(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”“”)�”}”(hŒ4The page table format and its manipulation functions”h]”hä)�”}”(hjh]”hŒ4The page table format and its manipulation functions”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒHGeneric helpers to give a consistent API regardless of underlying format”h]”hä)�”}”(hj7h]”hŒHGeneric helpers to give a consistent API regardless of underlying format”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubj)�”}”(hŒ4An algorithm implementation (e.g. IOMMU/DRM/KVM/MM) ”h]”hä)�”}”(hŒ3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)”h]”hŒ3An algorithm implementation (e.g. IOMMU/DRM/KVM/MM)”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´KhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jh³j.h´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j.h´Khhßubhä)�”}”(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.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´Khhßubhä)�”}”(hŒVThe generic framework supports a superset of functions across many HW implementations:”h]”hŒVThe generic framework supports a superset of functions across many HW implementations:”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K!hhßubhÞ)�”}”(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]”j)�”}”(hhh]”(j)�”}”(hŒGEntries comprised of contiguous blocks of IO PTEs for larger page sizes”h]”hä)�”}”(hj›h]”hŒGEntries comprised of contiguous blocks of IO PTEs for larger page sizes”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K$hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubj)�”}”(hŒ>Multi-level tables, up to 6 levels. Runtime selected top level”h]”hä)�”}”(hj³h]”hŒ>Multi-level tables, up to 6 levels. Runtime selected top level”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K%hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubj)�”}”(hŒ=Runtime variable table level size (ARM's concatenated tables)”h]”hä)�”}”(hjËh]”hŒ?Runtime variable table level size (ARM’s concatenated tables)”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œf/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:7: ./include/linux/generic_pt/common.h”h´K&hjÉubah}”(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 */”…”�”}”hjÚsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³hÇh´K!hj�h²hubhä)�”}”(hŒÙiommu_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]”hŒÙiommu_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().”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K)hj�h²hubhä)�”}”(hŒ©Refer 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]”hŒ©Refer 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.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K-hj�h²hubhä)�”}”(hŒÍThe 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]”hŒÍThe 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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K1hj�h²hubhä)�”}”(hŒhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.”h]”hŒhExported symbols and other global names are mangled using a per-format string via the NS() helper macro.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K5hj�h²hubhä)�”}”(hŒ­The 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]”hŒ­The 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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K8hj�h²hubhä)�”}”(hŒqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.”h]”hŒqThe implementation will further wrap struct pt_common in its own top-level struct, such as struct pt_iommu_amdv1.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Khjîubjq)�”}”(hhh]”(jv)�”}”(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]”(j|)�”}”(hŒ``top_of_table``”h]”hŒliteral”“”)�”}”(hjKh]”hŒ top_of_table”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K8hjEubj�)�”}”(hhh]”hä)�”}”(hŒ²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]”hŒ²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.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K6hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jbh´K8hjBubjv)�”}”(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]”(j|)�”}”(hŒ``max_oasz_lg2``”h]”jN)�”}”(hj‡h]”hŒ max_oasz_lg2”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K>hj�ubj�)�”}”(hhh]”hä)�”}”(hŒ”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]”hŒ”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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KhjBubjv)�”}”(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]”(j|)�”}”(hŒ``max_vasz_lg2``”h]”jN)�”}”(hjÁh]”hŒ max_vasz_lg2”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KEhj»ubj�)�”}”(hhh]”hä)�”}”(hŒü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]”hŒü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.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KBhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÖh´KEhjBubjv)�”}”(hŒ)``features`` Bitmap of `enum pt_features`”h]”(j|)�”}”(hŒ ``features``”h]”jN)�”}”(hjûh]”hŒfeatures”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KHhjõubj�)�”}”(hhh]”hä)�”}”(hŒBitmap of `enum pt_features`”h]”(hŒ Bitmap of ”…”�”}”(hjh²hh³Nh´NubhŒtitle_reference”“”)�”}”(hŒ`enum pt_features`”h]”hŒenum pt_features”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KIhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jh´KHhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_features (C enum)”Œ c.pt_features”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ pt_features”h]”jj)�”}”(hŒenum pt_features”h]”(jp)�”}”(hŒenum”h]”hŒenum”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjah²hh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KOubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjah²hh³jsh´KOubj“)�”}”(hŒ pt_features”h]”j™)�”}”(hj_h]”hŒ pt_features”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj‚ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjah²hh³jsh´KOubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj]h²hh³jsh´KOubah}”(h]”jXah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jsh´KOhjZh²hubjÅ)�”}”(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.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KThj¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjZh²hh³jsh´KOubeh}”(h]”h ]”(jáŒenum”eh"]”h$]”h&]”jæjájçjÀjèjÀjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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. ``PT_FEAT_DETAILED_GATHER`` Fill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”(hä)�”}”(hŒ **Constants**”h]”jû)�”}”(hjÊh]”hŒ Constants”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KXhjÄubjq)�”}”(hhh]”(jv)�”}”(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]”(j|)�”}”(hŒ``PT_FEAT_DMA_INCOHERENT``”h]”jN)�”}”(hjéh]”hŒPT_FEAT_DMA_INCOHERENT”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K]hjãubj�)�”}”(hhh]”hä)�”}”(hŒzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.”h]”hŒzCache flush page table memory before assuming the HW can read it. Otherwise a SMP release is sufficient for HW to read it.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K[hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jþh´K]hjàubjv)�”}”(hŒQ``PT_FEAT_FULL_VA`` The table can span the full VA range from 0 to PT_VADDR_MAX. ”h]”(j|)�”}”(hŒ``PT_FEAT_FULL_VA``”h]”jN)�”}”(hj# h]”hŒPT_FEAT_FULL_VA”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj! ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kahj ubj�)�”}”(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]”(j|)�”}”(hŒ``PT_FEAT_SIGN_EXTEND``”h]”jN)�”}”(hj— h]”hŒPT_FEAT_SIGN_EXTEND”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kuhj‘ ubj�)�”}”(hhh]”(hä)�”}”(hŒ�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::”h]”hŒ€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:”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kihj­ ubjÙ)�”}”(hŒ|0 -> 2^N - 1 Lower 2^N -> (MAX - 2^N - 1) Non-Canonical MAX - 2^N -> MAX Upper”h]”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&]”hÅhÆuh1jØh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kmhj­ ubhä)�”}”(hŒˆ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.”h]”hŒŠ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.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kqhj­ ubhä)�”}”(hŒJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.”h]”hŒJIf not set there is no sign extension and valid VA goes from 0 to 2^N - 1.”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kthj­ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¬ h´Kuhjàubjv)�”}”(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]”(j|)�”}”(hŒ``PT_FEAT_FLUSH_RANGE``”h]”jN)�”}”(hjþ h]”hŒPT_FEAT_FLUSH_RANGE”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjü ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K|hjø ubj�)�”}”(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 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kxhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjø ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j h´K|hjàubjv)�”}”(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]”(j|)�”}”(hŒ``PT_FEAT_FLUSH_RANGE_NO_GAPS``”h]”jN)�”}”(hj8 h]”hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´Kƒhj2 ubj�)�”}”(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.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´KhjN ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jM h´Kƒhjàubjv)�”}”(hŒ„``PT_FEAT_DETAILED_GATHER`` Fill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”(j|)�”}”(hŒ``PT_FEAT_DETAILED_GATHER``”h]”jN)�”}”(hjr h]”hŒPT_FEAT_DETAILED_GATHER”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjp ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œg/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:66: ./include/linux/generic_pt/common.h”h´K†hjl ubj�)�”}”(hhh]”hä)�”}”(hŒhFill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”h]”hŒhFill in the struct iommu_iotlb_gather pt sub structure with information about which levels were changed.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j‡ h´K†hjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j‡ h´K†hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_attr_from_entry (C function)”Œc.pt_attr_from_entry”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒRvoid pt_attr_from_entry (const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”jj)�”}”(hŒQvoid pt_attr_from_entry(const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jË hjÇ h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇ h²hh³jÜ h´K ubj“)�”}”(hŒpt_attr_from_entry”h]”j™)�”}”(hŒpt_attr_from_entry”h]”hŒpt_attr_from_entry”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjë ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÇ h²hh³jÜ h´K ubhŒdesc_parameterlist”“”)�”}”(hŒ:(const struct pt_state *pts, struct pt_write_attrs *attrs)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjF ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”Œ identifier”Œ reftarget”jK Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jd Œ ASTIdentifier”“”)�”}”j_ jñ sbŒc.pt_attr_from_entry”†”asbuh1hhj ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1j hj ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj ubj )�”}”(hŒstruct pt_write_attrs *attrs”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj¥ ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¥ ubh)�”}”(hhh]”j™)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÄ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÉ Œmodname”NŒ classname”Njc jf )�”}”ji ]”jm Œc.pt_attr_from_entry”†”asbuh1hhj¥ ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¥ ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj¥ ubj™)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÇ h²hh³jÜ h´K ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjà h²hh³jÜ h´K ubah}”(h]”j¾ ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÜ h´K hjÀ h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ)Convert the permission bits back to attrs”h]”hŒ)Convert the permission bits back to attrs”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K hj' h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÀ h²hh³jÜ h´K ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjB jèjB jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjL h]”hŒ Parameters”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjJ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K$hjF ubjq)�”}”(hhh]”(jv)�”}”(hŒ5``const struct pt_state *pts`` Entry to convert from ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjk h]”hŒconst struct pt_state *pts”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhji ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K!hje ubj�)�”}”(hhh]”hä)�”}”(hŒEntry to convert from”h]”hŒEntry to convert from”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j€ h´K!hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j€ h´K!hjb ubjv)�”}”(hŒ1``struct pt_write_attrs *attrs`` Resulting attrs ”h]”(j|)�”}”(hŒ ``struct pt_write_attrs *attrs``”h]”jN)�”}”(hj¤ h]”hŒstruct pt_write_attrs *attrs”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¢ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K"hjž ubj�)�”}”(hhh]”hä)�”}”(hŒResulting attrs”h]”hŒResulting attrs”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¹ h´K"hjº ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjž ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¹ h´K"hjb ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjF ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjß h]”hŒ Description”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÝ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K$hjF ubhä)�”}”(hŒ¤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Œ¤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.”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K#hjF ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_can_have_leaf (C function)”Œc.pt_can_have_leaf”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ2bool pt_can_have_leaf (const struct pt_state *pts)”h]”jj)�”}”(hŒ1bool pt_can_have_leaf(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒbool”h]”hŒbool”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K,ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj h²hh³j2 h´K,ubj“)�”}”(hŒpt_can_have_leaf”h]”j™)�”}”(hŒpt_can_have_leaf”h]”hŒpt_can_have_leaf”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjA ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj h²hh³j2 h´K,ubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj] ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj] ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj] ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj] ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj— ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jœ Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jG sbŒc.pt_can_have_leaf”†”asbuh1hhj] ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj] ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj] ub•j™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj] ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjY ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj h²hh³j2 h´K,ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj h²hh³j2 h´K,ubah}”(h]”j ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j2 h´K,hj h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ.True if the current level can have an OA entry”h]”hŒ.True if the current level can have an OA entry”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K,hjü h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj h²hh³j2 h´K,ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjjèjjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K0hjubjq)�”}”(hhh]”jv)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj@h]”hŒconst struct pt_state *pts”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K-hj:ubj�)�”}”(hhh]”hä)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jUh´K-hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jUh´K-hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj{h]”hŒ Description”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K/hjubhä)�”}”(hŒZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.”h]”hŒZTrue if the current level can support pt_install_leaf_entry(). A leaf entry produce an OA.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K.hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_can_have_table (C function)”Œc.pt_can_have_table”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ3bool pt_can_have_table (const struct pt_state *pts)”h]”jj)�”}”(hŒ2bool pt_can_have_table(const struct pt_state *pts)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj¼h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K5ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¼h²hh³jÍh´K5ubj“)�”}”(hŒpt_can_have_table”h]”j™)�”}”(hŒpt_can_have_table”h]”hŒpt_can_have_table”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÜubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj¼h²hh³jÍh´K5ubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjøubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjøubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjøubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjøubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j7Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jâsbŒc.pt_can_have_table”†”asbuh1hhjøubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjøubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjøubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjôubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj¼h²hh³jÍh´K5ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj¸h²hh³jÍh´K5ubah}”(h]”j³ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÍh´K5hjµh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ0True if the current level can have a lower table”h]”hŒ0True if the current level can have a lower table”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K5hj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjµh²hh³jÍh´K5ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj²jèj²jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj¼h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K9hj¶ubjq)�”}”(hhh]”jv)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjÛh]”hŒconst struct pt_state *pts”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K6hjÕubj�)�”}”(hhh]”hä)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jðh´K6hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jðh´K6hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj¶ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K8hj¶ubhä)�”}”(hŒ6Every level except 0 is allowed to have a lower table.”h]”hŒ6Every level except 0 is allowed to have a lower table.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K7hj¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_clear_entries (C function)”Œc.pt_clear_entries”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒIvoid pt_clear_entries (struct pt_state *pts, unsigned int num_contig_lg2)”h]”jj)�”}”(hŒHvoid pt_clear_entries(struct pt_state *pts, unsigned int num_contig_lg2)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjWh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KAubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjWh²hh³jih´KAubj“)�”}”(hŒpt_clear_entries”h]”j™)�”}”(hŒpt_clear_entries”h]”hŒpt_clear_entries”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjxubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjWh²hh³jih´KAubj )�”}”(hŒ3(struct pt_state *pts, unsigned int num_contig_lg2)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj”ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj”ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j¸Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j~sbŒc.pt_clear_entries”†”asbuh1hhj”ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj”ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj”ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj�ubj )�”}”(hŒunsigned int num_contig_lg2”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjubj™)�”}”(hŒnum_contig_lg2”h]”hŒnum_contig_lg2”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjWh²hh³jih´KAubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjSh²hh³jih´KAubah}”(h]”jNah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jih´KAhjPh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ Make entries empty (non-present)”h]”hŒ Make entries empty (non-present)”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KAhjih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjPh²hh³jih´KAubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj„jèj„jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KEhjˆubjq)�”}”(hhh]”(jv)�”}”(hŒ.``struct pt_state *pts`` Starting table index ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hj­h]”hŒstruct pt_state *pts”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KBhj§ubj�)�”}”(hhh]”hä)�”}”(hŒStarting table index”h]”hŒStarting table index”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÂh´KBhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÂh´KBhj¤ubjv)�”}”(hŒD``unsigned int num_contig_lg2`` Number of contiguous items to clear ”h]”(j|)�”}”(hŒ``unsigned int num_contig_lg2``”h]”jN)�”}”(hjæh]”hŒunsigned int num_contig_lg2”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KChjàubj�)�”}”(hhh]”hä)�”}”(hŒ#Number of contiguous items to clear”h]”hŒ#Number of contiguous items to clear”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jûh´KChjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jûh´KChj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjˆubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj!h]”hŒ Description”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KEhjˆubhä)�”}”(hŒ­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Œ­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.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KDhjˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ&pt_entry_make_write_dirty (C function)”Œc.pt_entry_make_write_dirty”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ5bool pt_entry_make_write_dirty (struct pt_state *pts)”h]”jj)�”}”(hŒ4bool pt_entry_make_write_dirty(struct pt_state *pts)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjbh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KMubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjbh²hh³jsh´KMubj“)�”}”(hŒpt_entry_make_write_dirty”h]”j™)�”}”(hŒpt_entry_make_write_dirty”h]”hŒpt_entry_make_write_dirty”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj‚ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjbh²hh³jsh´KMubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjžubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjžubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÂŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jˆsbŒc.pt_entry_make_write_dirty”†”asbuh1hhjžubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjžubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjžubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjšubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjbh²hh³jsh´KMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj^h²hh³jsh´KMubah}”(h]”jYah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jsh´KMhj[h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒMake an entry dirty”h]”hŒMake an entry dirty”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KMhj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj[h²hh³jsh´KMubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj=jèj=jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjGh]”hŒ Parameters”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KQhjAubjq)�”}”(hhh]”jv)�”}”(hŒ/``struct pt_state *pts`` Table entry to change ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjfh]”hŒstruct pt_state *pts”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KNhj`ubj�)�”}”(hhh]”hä)�”}”(hŒTable entry to change”h]”hŒTable entry to change”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j{h´KNhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j{h´KNhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjAubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj¡h]”hŒ Description”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KPhjAubhä)�”}”(hŒ¯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Œ¯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.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KOhjAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ&pt_entry_make_write_clean (C function)”Œc.pt_entry_make_write_clean”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ5void pt_entry_make_write_clean (struct pt_state *pts)”h]”jj)�”}”(hŒ4void pt_entry_make_write_clean(struct pt_state *pts)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjâh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KWubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjâh²hh³jôh´KWubj“)�”}”(hŒpt_entry_make_write_clean”h]”j™)�”}”(hŒpt_entry_make_write_clean”h]”hŒpt_entry_make_write_clean”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjâh²hh³jôh´KWubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jCŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j sbŒc.pt_entry_make_write_clean”†”asbuh1hhjubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjâh²hh³jôh´KWubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÞh²hh³jôh´KWubah}”(h]”jÙah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jôh´KWhjÛh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒMake the entry write clean”h]”hŒMake the entry write clean”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KWhj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÛh²hh³jôh´KWubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj¾jèj¾jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K[hjÂubjq)�”}”(hhh]”jv)�”}”(hŒ/``struct pt_state *pts`` Table entry to change ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjçh]”hŒstruct pt_state *pts”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KXhjáubj�)�”}”(hhh]”hä)�”}”(hŒTable entry to change”h]”hŒTable entry to change”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jüh´KXhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jüh´KXhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjÂubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj"h]”hŒ Description”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KZhjÂubhä)�”}”(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.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KYhjÂubhä)�”}”(hŒ‰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Œ‰The format should alter the entry in a way that is compatible with any concurrent update from HW. The entire contiguous entry is changed.”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K_hjÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ$pt_entry_is_write_dirty (C function)”Œc.pt_entry_is_write_dirty”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ9bool pt_entry_is_write_dirty (const struct pt_state *pts)”h]”jj)�”}”(hŒ8bool pt_entry_is_write_dirty(const struct pt_state *pts)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjrh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kfubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjrh²hh³jƒh´Kfubj“)�”}”(hŒpt_entry_is_write_dirty”h]”j™)�”}”(hŒpt_entry_is_write_dirty”h]”hŒpt_entry_is_write_dirty”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj’ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjrh²hh³jƒh´Kfubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj®ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj®ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj®ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj®ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jíŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j˜sbŒc.pt_entry_is_write_dirty”†”asbuh1hhj®ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj®ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj®ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjªubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjrh²hh³jƒh´Kfubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjnh²hh³jƒh´Kfubah}”(h]”jiah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jƒh´Kfhjkh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ%True if the entry has been written to”h]”hŒ%True if the entry has been written to”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KfhjMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjkh²hh³jƒh´Kfubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjhjèjhjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjrh]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kjhjlubjq)�”}”(hhh]”jv)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj‘h]”hŒconst struct pt_state *pts”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kghj‹ubj�)�”}”(hhh]”hä)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¦h´Kghj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¦h´Kghjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjlubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjÌh]”hŒ Description”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kihjlubhä)�”}”(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.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Khhjlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_dirty_supported (C function)”Œc.pt_dirty_supported”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ2bool pt_dirty_supported (struct pt_common *common)”h]”jj)�”}”(hŒ1bool pt_dirty_supported(struct pt_common *common)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kpubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj h²hh³jh´Kpubj“)�”}”(hŒpt_dirty_supported”h]”j™)�”}”(hŒpt_dirty_supported”h]”hŒpt_dirty_supported”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj-ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj h²hh³jh´Kpubj )�”}”(hŒ(struct pt_common *common)”h]”j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjIubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjIubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jmŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j3sbŒc.pt_dirty_supported”†”asbuh1hhjIubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjIubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjIubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjEubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj h²hh³jh´Kpubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj h²hh³jh´Kpubah}”(h]”jah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jh´Kphjh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ.True if the page table supports dirty tracking”h]”hŒ.True if the page table supports dirty tracking”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KphjÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjh²hh³jh´Kpubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjèjèjèjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(hŒB**Parameters** ``struct pt_common *common`` Page table to query”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kthjìubjq)�”}”(hhh]”jv)�”}”(hŒ0``struct pt_common *common`` Page table to query”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hjh]”hŒstruct pt_common *common”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvhj ubj�)�”}”(hhh]”hä)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kqhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j&h´Kvhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ$pt_entry_num_contig_lg2 (C function)”Œc.pt_entry_num_contig_lg2”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒAunsigned int pt_entry_num_contig_lg2 (const struct pt_state *pts)”h]”jj)�”}”(hŒ@unsigned int pt_entry_num_contig_lg2(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjgh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjgh²hh³jyh´KvubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjgh²hh³jyh´Kvubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjgh²hh³jyh´Kvubj“)�”}”(hŒpt_entry_num_contig_lg2”h]”j™)�”}”(hŒpt_entry_num_contig_lg2”h]”hŒpt_entry_num_contig_lg2”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¤ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjgh²hh³jyh´Kvubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÀubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÀubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÀubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÀubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÿŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jªsbŒc.pt_entry_num_contig_lg2”†”asbuh1hhjÀubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÀubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÀubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÀubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj¼ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjgh²hh³jyh´Kvubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjch²hh³jyh´Kvubah}”(h]”j^ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jyh´Kvhj`h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ.Number of contiguous items for this leaf entry”h]”hŒ.Number of contiguous items for this leaf entry”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kvhj_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj`h²hh³jyh´Kvubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjzjèjzjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj„h]”hŒ Parameters”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kzhj~ubjq)�”}”(hhh]”jv)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj£h]”hŒconst struct pt_state *pts”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kwhj�ubj�)�”}”(hhh]”hä)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¸h´Kwhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¸h´Kwhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj~ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjÞh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kyhj~ubhä)�”}”(hŒmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).”h]”hŒmReturn the number of contiguous items this leaf entry spans. If the entry is single item it returns ilog2(1).”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kxhj~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_entry_oa (C function)”Œ c.pt_entry_oa”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ3pt_oaddr_t pt_entry_oa (const struct pt_state *pts)”h]”jj)�”}”(hŒ2pt_oaddr_t pt_entry_oa(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j(Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_entry_oa”sbŒ c.pt_entry_oa”†”asbuh1hhjh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjh²hh³jGh´Kubj“)�”}”(hŒ pt_entry_oa”h]”j™)�”}”(hjDh]”hŒ pt_entry_oa”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjVubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjh²hh³jGh´Kubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjqubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjqubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjqubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjqubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j°Œmodname”NŒ classname”Njc jf )�”}”ji ]”jBŒ c.pt_entry_oa”†”asbuh1hhjqubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjqubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjqubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjmubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjh²hh³jGh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjh²hh³jGh´Kubah}”(h]”jah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jGh´Khjh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ"Output Address for this leaf entry”h]”hŒ"Output Address for this leaf entry”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Khjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjh²hh³jGh´Kubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj)jèj)jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj3h]”hŒ Parameters”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kƒhj-ubjq)�”}”(hhh]”jv)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjRh]”hŒconst struct pt_state *pts”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K€hjLubj�)�”}”(hhh]”hä)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jgh´K€hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jgh´K€hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj-ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K‚hj-ubhä)�”}”(hŒ†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.::”h]”hŒ…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.:”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hj-ubjÙ)�”}”(hŒ1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0”h]”hŒ1log2_mod(pt_entry_oa(), pt_entry_oa_lg2sz()) == 0”…”�”}”hj²sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K„hj-ubhä)�”}”(hŒySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.”h]”hŒySee pt_item_oa(). The format should implement one of these two functions depending on how it stores the OAs in the table.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K†hj-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_entry_oa_lg2sz (C function)”Œc.pt_entry_oa_lg2sz”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ;unsigned int pt_entry_oa_lg2sz (const struct pt_state *pts)”h]”jj)�”}”(hŒ:unsigned int pt_entry_oa_lg2sz(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjìh²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjìh²hh³jþh´K�ubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjìh²hh³jþh´K�ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjìh²hh³jþh´K�ubj“)�”}”(hŒpt_entry_oa_lg2sz”h]”j™)�”}”(hŒpt_entry_oa_lg2sz”h]”hŒpt_entry_oa_lg2sz”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj)ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjìh²hh³jþh´K�ubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjEubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjEubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjEubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjEubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j„Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j/sbŒc.pt_entry_oa_lg2sz”†”asbuh1hhjEubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjEubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjEubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjAubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjìh²hh³jþh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjèh²hh³jþh´K�ubah}”(h]”jãah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jþh´K�hjåh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒReturn the size of an OA entry”h]”hŒReturn the size of an OA entry”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjåh²hh³jþh´K�ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÿjèjÿjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K‘hjubjq)�”}”(hhh]”jv)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj(h]”hŒconst struct pt_state *pts”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KŽhj"ubj�)�”}”(hhh]”hä)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j=h´KŽhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j=h´KŽhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjch]”hŒ Description”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjubhä)�”}”(hŒŒ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ŒŒ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.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_entry_oa_exact (C function)”Œc.pt_entry_oa_exact”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ9pt_oaddr_t pt_entry_oa_exact (const struct pt_state *pts)”h]”jj)�”}”(hŒ8pt_oaddr_t pt_entry_oa_exact(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j­Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_entry_oa_exact”sbŒc.pt_entry_oa_exact”†”asbuh1hhj¤h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K™ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¤h²hh³jÌh´K™ubj“)�”}”(hŒpt_entry_oa_exact”h]”j™)�”}”(hjÉh]”hŒpt_entry_oa_exact”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÛubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj¤h²hh³jÌh´K™ubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjöubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjöubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjöubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjöubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j5Œmodname”NŒ classname”Njc jf )�”}”ji ]”jÇŒc.pt_entry_oa_exact”†”asbuh1hhjöubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjöubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjöubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjòubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj¤h²hh³jÌh´K™ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj h²hh³jÌh´K™ubah}”(h]”j›ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÌh´K™hj�h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ#Return the complete OA for an entry”h]”hŒ#Return the complete OA for an entry”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K™hj“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj�h²hh³jÌh´K™ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj®jèj®jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj¸h]”hŒ Parameters”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K�hj²ubjq)�”}”(hhh]”jv)�”}”(hŒ.``const struct pt_state *pts`` Entry to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj×h]”hŒconst struct pt_state *pts”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KšhjÑubj�)�”}”(hhh]”hä)�”}”(hŒEntry to query”h]”hŒEntry to query”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jìh´Kšhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jìh´KšhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj²ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kœhj²ubhä)�”}”(hŒ—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Œ™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.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K›hj²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_full_va_prefix (C function)”Œc.pt_full_va_prefix”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ=pt_vaddr_t pt_full_va_prefix (const struct pt_common *common)”h]”jj)�”}”(hŒ!ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO!h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj>!ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj]!h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj>!ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj!h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj>!ubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj{!h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjx!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j}!Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j(!sbŒc.pt_has_system_page_size”†”asbuh1hhj>!ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›!h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj>!ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj©!h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj>!ubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj¶!h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj>!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj:!ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj!h²hh³j!h´K±ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjþ h²hh³j!h´K±ubah}”(h]”jù ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j!h´K±hjû h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ.True if level 0 can install a PAGE_SHIFT entry”h]”hŒ.True if level 0 can install a PAGE_SHIFT entry”…”�”}”(hjà!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K±hjÝ!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjû h²hh³j!h´K±ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjø!jèjø!jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(hŒö**Parameters** ``const struct pt_common *common`` Page table to query **Description** If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hj"h]”hŒ Parameters”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kµhjü!ubjq)�”}”(hhh]”jv)�”}”(hŒ7``const struct pt_common *common`` Page table to query ”h]”(j|)�”}”(hŒ"``const struct pt_common *common``”h]”jN)�”}”(hj!"h]”hŒconst struct pt_common *common”…”�”}”(hj#"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K²hj"ubj�)�”}”(hhh]”hä)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hj:"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j6"h´K²hj7"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j6"h´K²hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjü!ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj\"h]”hŒ Description”…”�”}”(hj^"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjZ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K´hjü!ubhä)�”}”(hŒ›If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”h]”hŒ›If true the caller can use, at level 0, pt_install_leaf_entry(PAGE_SHIFT). This is useful to create optimized paths for common cases of PAGE_SIZE mappings.”…”�”}”(hjr"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K³hjü!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ"pt_install_leaf_entry (C function)”Œc.pt_install_leaf_entry”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ{void pt_install_leaf_entry (struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”h]”jj)�”}”(hŒzvoid pt_install_leaf_entry(struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”•.h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¡"h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj�"h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K»ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°"h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj�"h²hh³j¯"h´K»ubj“)�”}”(hŒpt_install_leaf_entry”h]”j™)�”}”(hŒpt_install_leaf_entry”h]”hŒpt_install_leaf_entry”…”�”}”(hjÂ"h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¾"ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj�"h²hh³j¯"h´K»ubj )�”}”(hŒ`(struct pt_state *pts, pt_oaddr_t oa, unsigned int oasz_lg2, const struct pt_write_attrs *attrs)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjÞ"h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÚ"ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë"h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÚ"ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjü"h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjù"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jþ"Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jÄ"sbŒc.pt_install_leaf_entry”†”asbuh1hhjÚ"ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÚ"ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj*#h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÚ"ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj7#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÚ"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÖ"ubj )�”}”(hŒ pt_oaddr_t oa”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hjS#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjP#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jU#Œmodname”NŒ classname”Njc jf )�”}”ji ]”j#Œc.pt_install_leaf_entry”†”asbuh1hhjL#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq#h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjL#ubj™)�”}”(hŒoa”h]”hŒoa”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjL#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÖ"ubj )�”}”(hŒunsigned int oasz_lg2”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj˜#h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj”#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦#h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj”#ubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj´#h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj”#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ#h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj”#ubj™)�”}”(hŒoasz_lg2”h]”hŒoasz_lg2”…”�”}”(hjÐ#h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj”#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÖ"ubj )�”}”(hŒ"const struct pt_write_attrs *attrs”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjé#h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjå#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö#h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjå#ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjå#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjå#ubh)�”}”(hhh]”j™)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(hj"$h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j$$Œmodname”NŒ classname”Njc jf )�”}”ji ]”j#Œc.pt_install_leaf_entry”†”asbuh1hhjå#ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@$h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjå#ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjN$h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjå#ubj™)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hj[$h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjå#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÖ"ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj�"h²hh³j¯"h´K»ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj™"h²hh³j¯"h´K»ubah}”(h]”j”"ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j¯"h´K»hj–"h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒWrite a leaf entry to the table”h]”hŒWrite a leaf entry to the table”…”�”}”(hj…$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K»hj‚$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj–"h²hh³j¯"h´K»ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj�$jèj�$jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(hX‰**Parameters** ``struct pt_state *pts`` Table index to change ``pt_oaddr_t oa`` Output Address for this leaf ``unsigned int oasz_lg2`` Size in VA/OA for this leaf ``const struct pt_write_attrs *attrs`` Attributes to modify the entry **Description** A leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA. For a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2. This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hj§$h]”hŒ Parameters”…”�”}”(hj©$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¥$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¿hj¡$ubjq)�”}”(hhh]”(jv)�”}”(hŒ/``struct pt_state *pts`` Table index to change ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjÆ$h]”hŒstruct pt_state *pts”…”�”}”(hjÈ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÄ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¼hjÀ$ubj�)�”}”(hhh]”hä)�”}”(hŒTable index to change”h]”hŒTable index to change”…”�”}”(hjß$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÛ$h´K¼hjÜ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÀ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÛ$h´K¼hj½$ubjv)�”}”(hŒ/``pt_oaddr_t oa`` Output Address for this leaf ”h]”(j|)�”}”(hŒ``pt_oaddr_t oa``”h]”jN)�”}”(hjÿ$h]”hŒ pt_oaddr_t oa”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjý$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K½hjù$ubj�)�”}”(hhh]”hä)�”}”(hŒOutput Address for this leaf”h]”hŒOutput Address for this leaf”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j%h´K½hj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjù$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j%h´K½hj½$ubjv)�”}”(hŒ6``unsigned int oasz_lg2`` Size in VA/OA for this leaf ”h]”(j|)�”}”(hŒ``unsigned int oasz_lg2``”h]”jN)�”}”(hj8%h]”hŒunsigned int oasz_lg2”…”�”}”(hj:%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj6%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¾hj2%ubj�)�”}”(hhh]”hä)�”}”(hŒSize in VA/OA for this leaf”h]”hŒSize in VA/OA for this leaf”…”�”}”(hjQ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jM%h´K¾hjN%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj2%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jM%h´K¾hj½$ubjv)�”}”(hŒF``const struct pt_write_attrs *attrs`` Attributes to modify the entry ”h]”(j|)�”}”(hŒ&``const struct pt_write_attrs *attrs``”h]”jN)�”}”(hjq%h]”hŒ"const struct pt_write_attrs *attrs”…”�”}”(hjs%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjo%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K¿hjk%ubj�)�”}”(hhh]”hä)�”}”(hŒAttributes to modify the entry”h]”hŒAttributes to modify the entry”…”�”}”(hjŠ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j†%h´K¿hj‡%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjk%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j†%h´K¿hj½$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj¡$ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj¬%h]”hŒ Description”…”�”}”(hj®%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjª%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÁhj¡$ubhä)�”}”(hŒtA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.”h]”hŒtA leaf OA entry will return PT_ENTRY_OA from pt_load_entry(). It translates the VA indicated by pts to the given OA.”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÀhj¡$ubhä)�”}”(hŒ†For 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]”hŒ†For a single item non-contiguous entry oasz_lg2 is pt_table_item_lg2sz(). For contiguous it is pt_table_item_lg2sz() + num_contig_lg2.”…”�”}”(hjÑ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÃhj¡$ubhä)�”}”(hŒ„This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”h]”hŒ„This must not be called if pt_can_have_leaf() == false. Contiguous sizes not indicated by pt_possible_sizes() must not be specified.”…”�”}”(hjà%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÆhj¡$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_install_table (C function)”Œc.pt_install_table”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒebool pt_install_table (struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”jj)�”}”(hŒdbool pt_install_table(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj &h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÏubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj &h²hh³j&h´KÏubj“)�”}”(hŒpt_install_table”h]”j™)�”}”(hŒpt_install_table”h]”hŒpt_install_table”…”�”}”(hj/&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj+&ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj &h²hh³j&h´KÏubj )�”}”(hŒO(struct pt_state *pts, pt_oaddr_t table_pa, const struct pt_write_attrs *attrs)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjK&h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjG&ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX&h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjG&ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hji&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjf&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jk&Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j1&sbŒc.pt_install_table”†”asbuh1hhjG&ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰&h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjG&ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj—&h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjG&ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj¤&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjG&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjC&ubj )�”}”(hŒpt_oaddr_t table_pa”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hjÀ&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj½&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÂ&Œmodname”NŒ classname”Njc jf )�”}”ji ]”j…&Œc.pt_install_table”†”asbuh1hhj¹&ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ&h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¹&ubj™)�”}”(hŒtable_pa”h]”hŒtable_pa”…”�”}”(hjì&h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¹&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjC&ubj )�”}”(hŒ"const struct pt_write_attrs *attrs”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj'ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj'ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj'ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-'h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj'ubh)�”}”(hhh]”j™)�”}”(hŒpt_write_attrs”h]”hŒpt_write_attrs”…”�”}”(hj>'h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj;'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j@'Œmodname”NŒ classname”Njc jf )�”}”ji ]”j…&Œc.pt_install_table”†”asbuh1hhj'ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\'h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj'ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjj'h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj'ubj™)�”}”(hŒattrs”h]”hŒattrs”…”�”}”(hjw'h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjC&ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj &h²hh³j&h´KÏubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj&h²hh³j&h´KÏubah}”(h]”j&ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j&h´KÏhj&h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ Write a table entry to the table”h]”hŒ Write a table entry to the table”…”�”}”(hj¡'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÏhjž'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj&h²hh³j&h´KÏubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj¹'jèj¹'jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjÃ'h]”hŒ Parameters”…”�”}”(hjÅ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÁ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÓhj½'ubjq)�”}”(hhh]”(jv)�”}”(hŒ/``struct pt_state *pts`` Table index to change ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjâ'h]”hŒstruct pt_state *pts”…”�”}”(hjä'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjà'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÐhjÜ'ubj�)�”}”(hhh]”hä)�”}”(hŒTable index to change”h]”hŒTable index to change”…”�”}”(hjû'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j÷'h´KÐhjø'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÜ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j÷'h´KÐhjÙ'ubjv)�”}”(hŒI``pt_oaddr_t table_pa`` CPU physical address of the lower table's memory ”h]”(j|)�”}”(hŒ``pt_oaddr_t table_pa``”h]”jN)�”}”(hj(h]”hŒpt_oaddr_t table_pa”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÑhj(ubj�)�”}”(hhh]”hä)�”}”(hŒ0CPU physical address of the lower table's memory”h]”hŒ2CPU physical address of the lower table’s memory”…”�”}”(hj4(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j0(h´KÑhj1(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j0(h´KÑhjÙ'ubjv)�”}”(hŒL``const struct pt_write_attrs *attrs`` Attributes to modify the table index ”h]”(j|)�”}”(hŒ&``const struct pt_write_attrs *attrs``”h]”jN)�”}”(hjT(h]”hŒ"const struct pt_write_attrs *attrs”…”�”}”(hjV(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjR(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÒhjN(ubj�)�”}”(hhh]”hä)�”}”(hŒ$Attributes to modify the table index”h]”hŒ$Attributes to modify the table index”…”�”}”(hjm(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³ji(h´KÒhjj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjN(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³ji(h´KÒhjÙ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj½'ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj�(h]”hŒ Description”…”�”}”(hj‘(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj�(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÔhj½'ubhä)�”}”(hŒÛ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.”h]”hŒÛ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.”…”�”}”(hj¥(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÓhj½'ubhä)�”}”(hŒ8This must not be called if pt_can_have_table() == false.”h]”hŒ8This must not be called if pt_can_have_table() == false.”…”�”}”(hj´(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K×hj½'ubhä)�”}”(hŒ **Return**”h]”jû)�”}”(hjÅ(h]”hŒReturn”…”�”}”(hjÇ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÃ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÙhj½'ubhä)�”}”(hŒ-true if the table was installed successfully.”h]”hŒ-true if the table was installed successfully.”…”�”}”(hjÛ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KÚhj½'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_item_oa (C function)”Œ c.pt_item_oa”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ2pt_oaddr_t pt_item_oa (const struct pt_state *pts)”h]”jj)�”}”(hŒ1pt_oaddr_t pt_item_oa(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj )ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j)Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_item_oa”sbŒ c.pt_item_oa”†”asbuh1hhj)h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kàubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/)h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj)h²hh³j.)h´Kàubj“)�”}”(hŒ pt_item_oa”h]”j™)�”}”(hj+)h]”hŒ pt_item_oa”…”�”}”(hjA)h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj=)ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj)h²hh³j.)h´Kàubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hj\)h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjX)ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji)h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjX)ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjw)h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjX)ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„)h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjX)ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj’)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j—)Œmodname”NŒ classname”Njc jf )�”}”ji ]”j))Œ c.pt_item_oa”†”asbuh1hhjX)ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³)h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjX)ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjÁ)h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjX)ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjÎ)h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjX)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjT)ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj)h²hh³j.)h´Kàubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj)h²hh³j.)h´Kàubah}”(h]”jý(ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j.)h´Kàhjÿ(h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ!Output Address for this leaf item”h]”hŒ!Output Address for this leaf item”…”�”}”(hjø)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kàhjõ)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÿ(h²hh³j.)h´Kàubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj*jèj*jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kähj*ubjq)�”}”(hhh]”jv)�”}”(hŒ-``const struct pt_state *pts`` Item to query ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj9*h]”hŒconst struct pt_state *pts”…”�”}”(hj;*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj7*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Káhj3*ubj�)�”}”(hhh]”hä)�”}”(hŒ Item to query”h]”hŒ Item to query”…”�”}”(hjR*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jN*h´KáhjO*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj3*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jN*h´Káhj0*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj*ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjt*h]”hŒ Description”…”�”}”(hjv*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjr*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kãhj*ubhä)�”}”(hŒ�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.”h]”hŒ�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.”…”�”}”(hjŠ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kâhj*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™*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kåhj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_load_entry_raw (C function)”Œc.pt_load_entry_raw”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ;enum pt_entry_type pt_load_entry_raw (struct pt_state *pts)”h]”jj)�”}”(hŒ:enum pt_entry_type pt_load_entry_raw(struct pt_state *pts)”h]”(jp)�”}”(hjgh]”hŒenum”…”�”}”(hjÈ*h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÄ*h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kìubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ*h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÄ*h²hh³jÕ*h´Kìubh)�”}”(hhh]”j™)�”}”(hŒ pt_entry_type”h]”hŒ pt_entry_type”…”�”}”(hjç*h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjä*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jé*Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_load_entry_raw”sbŒc.pt_load_entry_raw”†”asbuh1hhjÄ*h²hh³jÕ*h´Kìubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÄ*h²hh³jÕ*h´Kìubj“)�”}”(hŒpt_load_entry_raw”h]”j™)�”}”(hj+h]”hŒpt_load_entry_raw”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj+ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÄ*h²hh³jÕ*h´Kìubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj5+h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj1+ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB+h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj1+ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjS+h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjP+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jU+Œmodname”NŒ classname”Njc jf )�”}”ji ]”j+Œc.pt_load_entry_raw”†”asbuh1hhj1+ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq+h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj1+ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj1+ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjŒ+h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj1+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj-+ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÄ*h²hh³jÕ*h´Kìubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÀ*h²hh³jÕ*h´Kìubah}”(h]”j»*ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÕ*h´Kìhj½*h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ1Read from the location pts points at into the pts”h]”hŒ1Read from the location pts points at into the pts”…”�”}”(hj¶+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kìhj³+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj½*h²hh³jÕ*h´Kìubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÎ+jèjÎ+jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjØ+h]”hŒ Parameters”…”�”}”(hjÚ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÖ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KðhjÒ+ubjq)�”}”(hhh]”jv)�”}”(hŒ-``struct pt_state *pts`` Table index to load ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hj÷+h]”hŒstruct pt_state *pts”…”�”}”(hjù+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjõ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kíhjñ+ubj�)�”}”(hhh]”hä)�”}”(hŒTable index to load”h]”hŒTable index to load”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j ,h´Kíhj ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjñ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j ,h´Kíhjî+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjÒ+ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj2,h]”hŒ Description”…”�”}”(hj4,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj0,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KïhjÒ+ubhä)�”}”(hŒtReturn the type of entry that was loaded. pts->entry will be filled in with the entry's content. See pt_load_entry()”h]”hŒvReturn the type of entry that was loaded. pts->entry will be filled in with the entry’s content. See pt_load_entry()”…”�”}”(hjH,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KîhjÒ+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_max_oa_lg2 (C function)”Œc.pt_max_oa_lg2”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ;unsigned int pt_max_oa_lg2 (const struct pt_common *common)”h]”jj)�”}”(hŒ:unsigned int pt_max_oa_lg2(const struct pt_common *common)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjw,h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjs,h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kõubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†,h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjs,h²hh³j…,h´KõubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj”,h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjs,h²hh³j…,h´Kõubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢,h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjs,h²hh³j…,h´Kõubj“)�”}”(hŒ pt_max_oa_lg2”h]”j™)�”}”(hŒ pt_max_oa_lg2”h]”hŒ pt_max_oa_lg2”…”�”}”(hj´,h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj°,ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjs,h²hh³j…,h´Kõubj )�”}”(hŒ (const struct pt_common *common)”h]”j )�”}”(hŒconst struct pt_common *common”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjÐ,h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÌ,ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ,h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÌ,ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjë,h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÌ,ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø,h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÌ,ubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j -Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j¶,sbŒc.pt_max_oa_lg2”†”asbuh1hhjÌ,ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)-h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÌ,ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj7-h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÌ,ubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjD-h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÌ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÈ,ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjs,h²hh³j…,h´Kõubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjo,h²hh³j…,h´Kõubah}”(h]”jj,ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j…,h´Kõhjl,h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ/Return the maximum OA the table format can hold”h]”hŒ/Return the maximum OA the table format can hold”…”�”}”(hjn-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Kõhjk-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjl,h²hh³j…,h´Kõubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj†-jèj†-jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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’-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjŽ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KùhjŠ-ubjq)�”}”(hhh]”jv)�”}”(hŒ7``const struct pt_common *common`` Page table to query ”h]”(j|)�”}”(hŒ"``const struct pt_common *common``”h]”jN)�”}”(hj¯-h]”hŒconst struct pt_common *common”…”�”}”(hj±-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj­-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Köhj©-ubj�)�”}”(hhh]”hä)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hjÈ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÄ-h´KöhjÅ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj©-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÄ-h´Köhj¦-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŠ-ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjê-h]”hŒ Description”…”�”}”(hjì-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjè-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´KøhjŠ-ubhä)�”}”(hŒÏ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ŒÏ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.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´K÷hjŠ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_num_items_lg2 (C function)”Œc.pt_num_items_lg2”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ:unsigned int pt_num_items_lg2 (const struct pt_state *pts)”h]”jj)�”}”(hŒ9unsigned int pt_num_items_lg2(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj/.h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj+.h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>.h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj+.h²hh³j=.h´MubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjL.h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj+.h²hh³j=.h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ.h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj+.h²hh³j=.h´Mubj“)�”}”(hŒpt_num_items_lg2”h]”j™)�”}”(hŒpt_num_items_lg2”h]”hŒpt_num_items_lg2”…”�”}”(hjl.h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjh.ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj+.h²hh³j=.h´Mubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjˆ.h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj„.ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•.h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„.ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj£.h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj„.ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°.h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„.ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÁ.h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¾.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÃ.Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jn.sbŒc.pt_num_items_lg2”†”asbuh1hhj„.ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá.h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„.ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj„.ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjü.h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj„.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj€.ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj+.h²hh³j=.h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj'.h²hh³j=.h´Mubah}”(h]”j".ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j=.h´Mhj$.h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ.Return the number of items in this table level”h]”hŒ.Return the number of items in this table level”…”�”}”(hj&/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj#/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj$.h²hh³j=.h´Mubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj>/jèj>/jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjH/h]”hŒ Parameters”…”�”}”(hjJ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjF/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjB/ubjq)�”}”(hhh]”jv)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjg/h]”hŒconst struct pt_state *pts”…”�”}”(hji/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhje/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhja/ubj�)�”}”(hhh]”hä)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hj€/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j|/h´Mhj}/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhja/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j|/h´Mhj^/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjB/ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj¢/h]”hŒ Description”…”�”}”(hj¤/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj /ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjB/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.”…”�”}”(hj¸/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjB/ubhä)�”}”(hŒMThe value is used as part of determining the table indexes via the equation::”h]”hŒLThe value is used as part of determining the table indexes via the equation:”…”�”}”(hjÇ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjB/ubjÙ)�”}”(hŒAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())”h]”hŒAlog2_mod(log2_div(VA, pt_table_item_lg2sz()), pt_num_items_lg2())”…”�”}”hjÖ/sbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M hjB/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ!pt_pgsz_lg2_to_level (C function)”Œc.pt_pgsz_lg2_to_level”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒUunsigned int pt_pgsz_lg2_to_level (struct pt_common *common, unsigned int pgsize_lg2)”h]”jj)�”}”(hŒTunsigned int pt_pgsz_lg2_to_level(struct pt_common *common, unsigned int pgsize_lg2)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj0h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj0h²hh³j0h´MubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj"0h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj0h²hh³j0h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj00h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj0h²hh³j0h´Mubj“)�”}”(hŒpt_pgsz_lg2_to_level”h]”j™)�”}”(hŒpt_pgsz_lg2_to_level”h]”hŒpt_pgsz_lg2_to_level”…”�”}”(hjB0h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj>0ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj0h²hh³j0h´Mubj )�”}”(hŒ3(struct pt_common *common, unsigned int pgsize_lg2)”h]”(j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj^0h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjZ0ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjZ0ubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj|0h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjy0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j~0Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jD0sbŒc.pt_pgsz_lg2_to_level”†”asbuh1hhjZ0ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjZ0ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjZ0ubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj·0h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjZ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjV0ubj )�”}”(hŒunsigned int pgsize_lg2”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÐ0h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjÌ0ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÌ0ubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjì0h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjÌ0ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú0h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÌ0ubj™)�”}”(hŒ pgsize_lg2”h]”hŒ pgsize_lg2”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÌ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjV0ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj0h²hh³j0h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjý/h²hh³j0h´Mubah}”(h]”jø/ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j0h´Mhjú/h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ(Return the level that maps the page size”h]”hŒ(Return the level that maps the page size”…”�”}”(hj21h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj/1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjú/h²hh³j0h´Mubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjJ1jèjJ1jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjT1h]”hŒ Parameters”…”�”}”(hjV1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjR1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjN1ubjq)�”}”(hhh]”(jv)�”}”(hŒ1``struct pt_common *common`` Page table to query ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hjs1h]”hŒstruct pt_common *common”…”�”}”(hju1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjq1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhjm1ubj�)�”}”(hhh]”hä)�”}”(hŒPage table to query”h]”hŒPage table to query”…”�”}”(hjŒ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jˆ1h´Mhj‰1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjm1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jˆ1h´Mhjj1ubjv)�”}”(hŒ+``unsigned int pgsize_lg2`` Log2 page size ”h]”(j|)�”}”(hŒ``unsigned int pgsize_lg2``”h]”jN)�”}”(hj¬1h]”hŒunsigned int pgsize_lg2”…”�”}”(hj®1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjª1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj¦1ubj�)�”}”(hhh]”hä)�”}”(hŒLog2 page size”h]”hŒLog2 page size”…”�”}”(hjÅ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÁ1h´MhjÂ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj¦1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÁ1h´Mhjj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjN1ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjç1h]”hŒ Description”…”�”}”(hjé1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjå1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjN1ubhä)�”}”(hŒ€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Œ€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.”…”�”}”(hjý1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjN1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_possible_sizes (C function)”Œc.pt_possible_sizes”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ9pt_vaddr_t pt_possible_sizes (const struct pt_state *pts)”h]”jj)�”}”(hŒ8pt_vaddr_t pt_possible_sizes(const struct pt_state *pts)”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj/2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj,2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j12Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_possible_sizes”sbŒc.pt_possible_sizes”†”asbuh1hhj(2h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ2h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj(2h²hh³jP2h´Mubj“)�”}”(hŒpt_possible_sizes”h]”j™)�”}”(hjM2h]”hŒpt_possible_sizes”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj_2ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj(2h²hh³jP2h´Mubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hj~2h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjz2ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹2h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjz2ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj™2h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjz2ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦2h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjz2ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj·2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj´2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j¹2Œmodname”NŒ classname”Njc jf )�”}”ji ]”jK2Œc.pt_possible_sizes”†”asbuh1hhjz2ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ2h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjz2ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjã2h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjz2ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjð2h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjz2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjv2ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj(2h²hh³jP2h´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj$2h²hh³jP2h´Mubah}”(h]”j2ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jP2h´Mhj!2h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ6Return a bitmap of possible output sizes at this level”h]”hŒ6Return a bitmap of possible output sizes at this level”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj!2h²hh³jP2h´Mubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj23jèj23jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hj<3h]”hŒ Parameters”…”�”}”(hj>3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj:3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj63ubjq)�”}”(hhh]”jv)�”}”(hŒ1``const struct pt_state *pts`` The current level ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj[3h]”hŒconst struct pt_state *pts”…”�”}”(hj]3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjY3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MhjU3ubj�)�”}”(hhh]”hä)�”}”(hŒThe current level”h]”hŒThe current level”…”�”}”(hjt3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jp3h´Mhjq3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjU3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jp3h´MhjR3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj63ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj–3h]”hŒ Description”…”�”}”(hj˜3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj”3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj63ubhä)�”}”(hŒ‚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.”h]”hŒ‚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.”…”�”}”(hj¬3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mhj63ubhä)�”}”(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.”…”�”}”(hj»3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M hj63ubhä)�”}”(hŒnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.”h]”hŒnThe OR of pt_possible_sizes() of all levels is the typical bitmask of all supported sizes in the entire table.”…”�”}”(hjÊ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M&hj63ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ pt_table_item_lg2sz (C function)”Œc.pt_table_item_lg2sz”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ=unsigned int pt_table_item_lg2sz (const struct pt_state *pts)”h]”jj)�”}”(hŒReturn the maximum software bit usable for any level and entry”h]”hŒ>Return the maximum software bit usable for any level and entry”…”�”}”(hjÚ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MZhj×;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjó:h²hh³j ;h´MZubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjò;jèjò;jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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þ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjú;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M^hjö;ubjq)�”}”(hhh]”jv)�”}”(hŒ(``struct pt_common *common`` Page table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hj<h]”hŒstruct pt_common *common”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M\hj<ubj�)�”}”(hhh]”hä)�”}”(hŒ Page table”h]”hŒ Page table”…”�”}”(hj4<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j0<h´M\hj1<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j0<h´M\hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjö;ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjV<h]”hŒ Description”…”�”}”(hjX<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjT<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M^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.”…”�”}”(hjl<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M]hjö;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ#pt_test_sw_bit_acquire (C function)”Œc.pt_test_sw_bit_acquire”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒFbool pt_test_sw_bit_acquire (struct pt_state *pts, unsigned int bitnr)”h]”jj)�”}”(hŒEbool pt_test_sw_bit_acquire(struct pt_state *pts, unsigned int bitnr)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hj›<h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj—<h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mcubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©<h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj—<h²hh³j¨<h´Mcubj“)�”}”(hŒpt_test_sw_bit_acquire”h]”j™)�”}”(hŒpt_test_sw_bit_acquire”h]”hŒpt_test_sw_bit_acquire”…”�”}”(hj»<h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj·<ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj—<h²hh³j¨<h´Mcubj )�”}”(hŒ*(struct pt_state *pts, unsigned int bitnr)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj×<h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÓ<ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä<h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÓ<ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjõ<h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjò<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j÷<Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j½<sbŒc.pt_test_sw_bit_acquire”†”asbuh1hhjÓ<ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÓ<ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj#=h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÓ<ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj0=h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÓ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÏ<ubj )�”}”(hŒunsigned int bitnr”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjI=h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjE=ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW=h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjE=ubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hje=h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjE=ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs=h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjE=ubj™)�”}”(hŒbitnr”h]”hŒbitnr”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjE=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÏ<ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj—<h²hh³j¨<h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj“<h²hh³j¨<h´Mcubah}”(h]”jŽ<ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j¨<h´Mchj�<h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒRead a software bit in an item”h]”hŒRead a software bit in an item”…”�”}”(hj«=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mchj¨=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj�<h²hh³j¨<h´Mcubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÃ=jèjÃ=jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjÍ=h]”hŒ Parameters”…”�”}”(hjÏ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjË=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MghjÇ=ubjq)�”}”(hhh]”(jv)�”}”(hŒ'``struct pt_state *pts`` Entry to read ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjì=h]”hŒstruct pt_state *pts”…”�”}”(hjî=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjê=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mdhjæ=ubj�)�”}”(hhh]”hä)�”}”(hŒ Entry to read”h]”hŒ Entry to read”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j>h´Mdhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjæ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j>h´Mdhjã=ubjv)�”}”(hŒ#``unsigned int bitnr`` Bit to read ”h]”(j|)�”}”(hŒ``unsigned int bitnr``”h]”jN)�”}”(hj%>h]”hŒunsigned int bitnr”…”�”}”(hj'>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj#>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mehj>ubj�)�”}”(hhh]”hä)�”}”(hŒ Bit to read”h]”hŒ Bit to read”…”�”}”(hj>>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j:>h´Mehj;>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j:>h´Mehjã=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjÇ=ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj`>h]”hŒ Description”…”�”}”(hjb>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj^>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MghjÇ=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.”…”�”}”(hjv>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MfhjÇ=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ"pt_set_sw_bit_release (C function)”Œc.pt_set_sw_bit_release”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒEvoid pt_set_sw_bit_release (struct pt_state *pts, unsigned int bitnr)”h]”jj)�”}”(hŒDvoid pt_set_sw_bit_release(struct pt_state *pts, unsigned int bitnr)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¥>h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj¡>h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mnubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´>h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¡>h²hh³j³>h´Mnubj“)�”}”(hŒpt_set_sw_bit_release”h]”j™)�”}”(hŒpt_set_sw_bit_release”h]”hŒpt_set_sw_bit_release”…”�”}”(hjÆ>h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÂ>ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj¡>h²hh³j³>h´Mnubj )�”}”(hŒ*(struct pt_state *pts, unsigned int bitnr)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjâ>h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÞ>ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï>h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÞ>ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjý>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j?Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jÈ>sbŒc.pt_set_sw_bit_release”†”asbuh1hhjÞ>ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÞ>ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj.?h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÞ>ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj;?h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÞ>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÚ>ubj )�”}”(hŒunsigned int bitnr”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjT?h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjP?ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb?h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjP?ubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjp?h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjP?ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~?h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjP?ubj™)�”}”(hŒbitnr”h]”hŒbitnr”…”�”}”(hjŒ?h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjP?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÚ>ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj¡>h²hh³j³>h´Mnubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj�>h²hh³j³>h´Mnubah}”(h]”j˜>ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j³>h´Mnhjš>h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒSet a software bit in an item”h]”hŒSet a software bit in an item”…”�”}”(hj¶?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mnhj³?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjš>h²hh³j³>h´Mnubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÎ?jèjÎ?jé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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û)�”}”(hjØ?h]”hŒ Parameters”…”�”}”(hjÚ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÖ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MrhjÒ?ubjq)�”}”(hhh]”(jv)�”}”(hŒ&``struct pt_state *pts`` Entry to set ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hj÷?h]”hŒstruct pt_state *pts”…”�”}”(hjù?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjõ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mohjñ?ubj�)�”}”(hhh]”hä)�”}”(hŒ Entry to set”h]”hŒ Entry to set”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j @h´Mohj @ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjñ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j @h´Mohjî?ubjv)�”}”(hŒ"``unsigned int bitnr`` Bit to set ”h]”(j|)�”}”(hŒ``unsigned int bitnr``”h]”jN)�”}”(hj0@h]”hŒunsigned int bitnr”…”�”}”(hj2@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj.@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mphj*@ubj�)�”}”(hhh]”hä)�”}”(hŒ Bit to set”h]”hŒ Bit to set”…”�”}”(hjI@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jE@h´MphjF@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj*@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jE@h´Mphjî?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjÒ?ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjk@h]”hŒ Description”…”�”}”(hjm@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhji@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MrhjÒ?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�@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MqhjÒ?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_load_entry (C function)”Œc.pt_load_entry”hNt”auh1jMhj<h²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ)void pt_load_entry (struct pt_state *pts)”h]”jj)�”}”(hŒ(void pt_load_entry(struct pt_state *pts)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj°@h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj¬@h²hh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Myubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿@h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¬@h²hh³j¾@h´Myubj“)�”}”(hŒ pt_load_entry”h]”j™)�”}”(hŒ pt_load_entry”h]”hŒ pt_load_entry”…”�”}”(hjÑ@h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÍ@ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj¬@h²hh³j¾@h´Myubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjí@h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjé@ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú@h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjé@ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j AŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jÓ@sbŒc.pt_load_entry”†”asbuh1hhjé@ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Ah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjé@ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj9Ah²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjé@ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjFAh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjé@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjå@ubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj¬@h²hh³j¾@h´Myubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj¨@h²hh³j¾@h´Myubah}”(h]”j£@ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j¾@h´Myhj¥@h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ1Read from the location pts points at into the pts”h]”hŒ1Read from the location pts points at into the pts”…”�”}”(hjpAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´MyhjmAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj¥@h²hh³j¾@h´Myubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjˆAjèjˆAjé‰jê‰jë‰uh1j^h²hhj<h³Nh´Nubjí)�”}”(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”Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M}hjŒAubjq)�”}”(hhh]”jv)�”}”(hŒ-``struct pt_state *pts`` Table index to load ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hj±Ah]”hŒstruct pt_state *pts”…”�”}”(hj³Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¯Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´Mzhj«Aubj�)�”}”(hhh]”hä)�”}”(hŒTable index to load”h]”hŒTable index to load”…”�”}”(hjÊAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÆAh´MzhjÇAubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj«Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÆAh´Mzhj¨Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjŒAubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjìAh]”hŒ Description”…”�”}”(hjîAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjêAubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M|hjŒAubhä)�”}”(hŒrSet the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry's content.”h]”hŒtSet the type of entry that was loaded. pts->entry and pts->table_lower will be filled in with the entry’s content.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œj/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:68: ./drivers/iommu/generic_pt/pt_common.h”h´M{hjŒAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj<h²hh³Nh´Nubeh}”(h]”Œ.format-functions-at-the-struct-pt-common-level”ah ]”h"]”Œ.format functions at the struct pt_common level”ah$]”h&]”uh1hÈhj�h²hh³hÇh´K@ubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIteration Helpers”h]”hŒIteration Helpers”…”�”}”(hj#Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj Bh²hh³hÇh´KGubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_check_range (C function)”Œc.pt_check_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ+int pt_check_range (struct pt_range *range)”h]”jj)�”}”(hŒ*int pt_check_range(struct pt_range *range)”h]”(jÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjJBh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjFBh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYBh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjFBh²hh³jXBh´Kubj“)�”}”(hŒpt_check_range”h]”j™)�”}”(hŒpt_check_range”h]”hŒpt_check_range”…”�”}”(hjkBh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjgBubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjFBh²hh³jXBh´Kubj )�”}”(hŒ(struct pt_range *range)”h]”j )�”}”(hŒstruct pt_range *range”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj‡Bh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjƒBubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Bh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjƒBubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hj¥Bh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¢Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j§BŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jmBsbŒc.pt_check_range”†”asbuh1hhjƒBubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅBh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjƒBubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjÓBh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjƒBubj™)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjàBh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjƒBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjBubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjFBh²hh³jXBh´Kubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjBBh²hh³jXBh´Kubah}”(h]”j=Bah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jXBh´Khj?Bh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ"Validate the range can be iterated”h]”hŒ"Validate the range can be iterated”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj?Bh²hh³jXBh´Kubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj"Cjèj"Cjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hj,Ch]”hŒ Parameters”…”�”}”(hj.Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj*Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khj&Cubjq)�”}”(hhh]”jv)�”}”(hŒ-``struct pt_range *range`` Range to validate ”h]”(j|)�”}”(hŒ``struct pt_range *range``”h]”jN)�”}”(hjKCh]”hŒstruct pt_range *range”…”�”}”(hjMCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjICubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KhjECubj�)�”}”(hhh]”hä)�”}”(hŒRange to validate”h]”hŒRange to validate”…”�”}”(hjdCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j`Ch´KhjaCubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjECubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j`Ch´KhjBCubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj&Cubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj†Ch]”hŒ Description”…”�”}”(hjˆCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj„Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khj&Cubhä)�”}”(hŒ¡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Œ¡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.”…”�”}”(hjœCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khj&Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_index_to_va (C function)”Œc.pt_index_to_va”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ*void pt_index_to_va (struct pt_state *pts)”h]”jj)�”}”(hŒ)void pt_index_to_va(struct pt_state *pts)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjËCh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjÇCh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K2ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚCh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇCh²hh³jÙCh´K2ubj“)�”}”(hŒpt_index_to_va”h]”j™)�”}”(hŒpt_index_to_va”h]”hŒpt_index_to_va”…”�”}”(hjìCh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjèCubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÇCh²hh³jÙCh´K2ubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjDubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjDubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj&Dh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj#Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j(DŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jîCsbŒc.pt_index_to_va”†”asbuh1hhjDubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFDh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjDubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjTDh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjDubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjaDh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjDubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÇCh²hh³jÙCh´K2ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÃCh²hh³jÙCh´K2ubah}”(h]”j¾Cah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÙCh´K2hjÀCh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ*Update range->va to the current pts->index”h]”hŒ*Update range->va to the current pts->index”…”�”}”(hj‹Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K2hjˆDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÀCh²hh³jÙCh´K2ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj£Djèj£Djé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hj­Dh]”hŒ Parameters”…”�”}”(hj¯Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj«Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K6hj§Dubjq)�”}”(hhh]”jv)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjÌDh]”hŒstruct pt_state *pts”…”�”}”(hjÎDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÊDubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K3hjÆDubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjåDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jáDh´K3hjâDubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÆDubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jáDh´K3hjÃDubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj§Dubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjEh]”hŒ Description”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K5hj§Dubhä)�”}”(hŒ”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Œ”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.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K4hj§Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ#pt_entry_fully_covered (C function)”Œc.pt_entry_fully_covered”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒObool pt_entry_fully_covered (const struct pt_state *pts, unsigned int oasz_lg2)”h]”jj)�”}”(hŒNbool pt_entry_fully_covered(const struct pt_state *pts, unsigned int oasz_lg2)”h]”(jÌ )�”}”(hj& h]”hŒbool”…”�”}”(hjLEh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjHEh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KMubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZEh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjHEh²hh³jYEh´KMubj“)�”}”(hŒpt_entry_fully_covered”h]”j™)�”}”(hŒpt_entry_fully_covered”h]”hŒpt_entry_fully_covered”…”�”}”(hjlEh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjhEubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjHEh²hh³jYEh´KMubj )�”}”(hŒ3(const struct pt_state *pts, unsigned int oasz_lg2)”h]”(j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjˆEh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj„Eubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Eh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„Eubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hj£Eh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj„Eubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Eh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„Eubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÁEh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¾Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÃEŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jnEsbŒc.pt_entry_fully_covered”†”asbuh1hhj„Eubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáEh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj„Eubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjïEh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj„Eubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj„Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj€Eubj )�”}”(hŒunsigned int oasz_lg2”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjFubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Fh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjFubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj1Fh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjFubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Fh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjFubj™)�”}”(hŒoasz_lg2”h]”hŒoasz_lg2”…”�”}”(hjMFh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj€Eubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjHEh²hh³jYEh´KMubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjDEh²hh³jYEh´KMubah}”(h]”j?Eah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jYEh´KMhjAEh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒBCheck if the item or entry is entirely contained within pts->range”h]”hŒBCheck if the item or entry is entirely contained within pts->range”…”�”}”(hjwFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KMhjtFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjAEh²hh³jYEh´KMubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj�Fjèj�Fjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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›Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj—Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KQhj“Fubjq)�”}”(hhh]”(jv)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hj¸Fh]”hŒconst struct pt_state *pts”…”�”}”(hjºFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¶Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KOhj²Fubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjÑFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÍFh´KOhjÎFubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj²Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÍFh´KOhj¯Fubjv)�”}”(hŒf``unsigned int oasz_lg2`` The size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz() ”h]”(j|)�”}”(hŒ``unsigned int oasz_lg2``”h]”jN)�”}”(hjñFh]”hŒunsigned int oasz_lg2”…”�”}”(hjóFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjïFubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KQhjëFubj�)�”}”(hhh]”hä)�”}”(hŒKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()”h]”hŒKThe size of the item to check, pt_table_item_lg2sz() or pt_entry_oa_lg2sz()”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KPhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjëFubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jGh´KQhj¯Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj“Fubhä)�”}”(hŒ **Return**”h]”jû)�”}”(hj-Gh]”hŒReturn”…”�”}”(hj/Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj+Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KShj“Fubhä)�”}”(hŒ5true if the item is fully enclosed by the pts->range.”h]”hŒ5true if the item is fully enclosed by the pts->range.”…”�”}”(hjCGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KShj“Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_range_to_index (C function)”Œc.pt_range_to_index”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ;unsigned int pt_range_to_index (const struct pt_state *pts)”h]”jj)�”}”(hŒ:unsigned int pt_range_to_index(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrGh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjnGh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kgubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjnGh²hh³j€Gh´KgubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjnGh²hh³j€Gh´Kgubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjnGh²hh³j€Gh´Kgubj“)�”}”(hŒpt_range_to_index”h]”j™)�”}”(hŒpt_range_to_index”h]”hŒpt_range_to_index”…”�”}”(hj¯Gh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj«Gubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjnGh²hh³j€Gh´Kgubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjËGh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÇGubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØGh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇGubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjæGh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÇGubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóGh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇGubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jHŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j±GsbŒc.pt_range_to_index”†”asbuh1hhjÇGubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Hh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇGubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj2Hh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÇGubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj?Hh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÇGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÃGubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjnGh²hh³j€Gh´Kgubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjjGh²hh³j€Gh´Kgubah}”(h]”jeGah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j€Gh´KghjgGh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒStarting index for an iteration”h]”hŒStarting index for an iteration”…”�”}”(hjiHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KghjfHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjgGh²hh³j€Gh´Kgubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj�Hjèj�Hjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(hŒz**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the starting index for the iteration in pts.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hj‹Hh]”hŒ Parameters”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj‰Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kkhj…Hubjq)�”}”(hhh]”jv)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjªHh]”hŒconst struct pt_state *pts”…”�”}”(hj¬Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj¨Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Khhj¤Hubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjÃHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¿Hh´KhhjÀHubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj¤Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¿Hh´Khhj¡Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj…Hubhä)�”}”(hŒ **Return**”h]”jû)�”}”(hjåHh]”hŒReturn”…”�”}”(hjçHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjãHubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kjhj…Hubhä)�”}”(hŒ,the starting index for the iteration in pts.”h]”hŒ,the starting index for the iteration in pts.”…”�”}”(hjûHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kjhj…Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ"pt_range_to_end_index (C function)”Œc.pt_range_to_end_index”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ?unsigned int pt_range_to_end_index (const struct pt_state *pts)”h]”jj)�”}”(hŒ>unsigned int pt_range_to_end_index(const struct pt_state *pts)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*Ih²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj&Ih²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kzubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Ih²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj&Ih²hh³j8Ih´KzubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjGIh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj&Ih²hh³j8Ih´Kzubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUIh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj&Ih²hh³j8Ih´Kzubj“)�”}”(hŒpt_range_to_end_index”h]”j™)�”}”(hŒpt_range_to_end_index”h]”hŒpt_range_to_end_index”…”�”}”(hjgIh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjcIubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj&Ih²hh³j8Ih´Kzubj )�”}”(hŒ(const struct pt_state *pts)”h]”j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjƒIh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjIubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjIubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjžIh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjIubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Ih²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjIubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj¼Ih²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¹Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j¾IŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jiIsbŒc.pt_range_to_end_index”†”asbuh1hhjIubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜIh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjIubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjIubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj÷Ih²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj{Iubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj&Ih²hh³j8Ih´Kzubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj"Ih²hh³j8Ih´Kzubah}”(h]”jIah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j8Ih´KzhjIh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒEnding index iteration”h]”hŒEnding index iteration”…”�”}”(hj!Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KzhjJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjIh²hh³j8Ih´Kzubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj9Jjèj9Jjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(hŒv**Parameters** ``const struct pt_state *pts`` Iteration State **Return** the last index for the iteration in pts.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hjCJh]”hŒ Parameters”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjAJubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K~hj=Jubjq)�”}”(hhh]”jv)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjbJh]”hŒconst struct pt_state *pts”…”�”}”(hjdJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj`Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K{hj\Jubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hj{Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jwJh´K{hjxJubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj\Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jwJh´K{hjYJubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj=Jubhä)�”}”(hŒ **Return**”h]”jû)�”}”(hj�Jh]”hŒReturn”…”�”}”(hjŸJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj›Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K}hj=Jubhä)�”}”(hŒ(the last index for the iteration in pts.”h]”hŒ(the last index for the iteration in pts.”…”�”}”(hj³Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K}hj=Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_next_entry (C function)”Œc.pt_next_entry”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ)void pt_next_entry (struct pt_state *pts)”h]”jj)�”}”(hŒ(void pt_next_entry(struct pt_state *pts)”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâJh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjÞJh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K©ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñJh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÞJh²hh³jðJh´K©ubj“)�”}”(hŒ pt_next_entry”h]”j™)�”}”(hŒ pt_next_entry”h]”hŒ pt_next_entry”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÿJubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÞJh²hh³jðJh´K©ubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjKubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Kh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjKubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj=Kh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj:Kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j?KŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jKsbŒc.pt_next_entry”†”asbuh1hhjKubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Kh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjKubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjkKh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjKubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjxKh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjKubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÞJh²hh³jðJh´K©ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÚJh²hh³jðJh´K©ubah}”(h]”jÕJah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jðJh´K©hj×Jh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒAdvance pts to the next entry”h]”hŒAdvance pts to the next entry”…”�”}”(hj¢Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K©hjŸKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj×Jh²hh³jðJh´K©ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjºKjèjºKjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hjÄKh]”hŒ Parameters”…”�”}”(hjÆKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÂKubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K­hj¾Kubjq)�”}”(hhh]”jv)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjãKh]”hŒstruct pt_state *pts”…”�”}”(hjåKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjáKubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KªhjÝKubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjüKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jøKh´KªhjùKubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÝKubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jøKh´KªhjÚKubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj¾Kubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjLh]”hŒ Description”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¬hj¾Kubhä)�”}”(hŒ‡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Œ‡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.”…”�”}”(hj4Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K«hj¾Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ!for_each_pt_level_entry (C macro)”Œc.for_each_pt_level_entry”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒfor_each_pt_level_entry”h]”jj)�”}”(hŒfor_each_pt_level_entry”h]”j“)�”}”(hŒfor_each_pt_level_entry”h]”j™)�”}”(hj]Lh]”hŒfor_each_pt_level_entry”…”�”}”(hjgLh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjcLubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj_Lh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kºubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj[Lh²hh³jzLh´Kºubah}”(h]”jVLah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jzLh´KºhjXLh²hubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjXLh²hh³jzLh´Kºubeh}”(h]”h ]”(jáŒmacro”eh"]”h$]”h&]”jæjájçj“Ljèj“Ljé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubhä)�”}”(hŒ!``for_each_pt_level_entry (pts)``”h]”jN)�”}”(hj™Lh]”hŒfor_each_pt_level_entry (pts)”…”�”}”(hj›Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj—Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¼hj Bh²hubhÞ)�”}”(hŒ+For loop wrapper over entries in the range ”h]”hä)�”}”(hŒ*For loop wrapper over entries in the range”h]”hŒ*For loop wrapper over entries in the range”…”�”}”(hj³Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kºhj¯Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³jÁLh´Kºhj Bh²hubjí)�”}”(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û)�”}”(hjÎLh]”hŒ Parameters”…”�”}”(hjÐLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÌLubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¾hjÈLubjq)�”}”(hhh]”jv)�”}”(hŒ``pts`` Iteration State ”h]”(j|)�”}”(hŒ``pts``”h]”jN)�”}”(hjíLh]”hŒpts”…”�”}”(hjïLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjëLubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K»hjçLubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jMh´K»hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjçLubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jMh´K»hjäLubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjÈLubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj(Mh]”hŒ Description”…”�”}”(hj*Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj&Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K½hjÈLubhä)�”}”(hŒ¨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Œª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).”…”�”}”(•hj>Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K¼hjÈLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ!pt_load_single_entry (C function)”Œc.pt_load_single_entry”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ>enum pt_entry_type pt_load_single_entry (struct pt_state *pts)”h]”jj)�”}”(hŒ=enum pt_entry_type pt_load_single_entry(struct pt_state *pts)”h]”(jp)�”}”(hjgh]”hŒenum”…”�”}”(hjmMh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjiMh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÅubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Mh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjiMh²hh³jzMh´KÅubh)�”}”(hhh]”j™)�”}”(hŒ pt_entry_type”h]”hŒ pt_entry_type”…”�”}”(hjŒMh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj‰Mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jŽMŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_load_single_entry”sbŒc.pt_load_single_entry”†”asbuh1hhjiMh²hh³jzMh´KÅubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Mh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjiMh²hh³jzMh´KÅubj“)�”}”(hŒpt_load_single_entry”h]”j™)�”}”(hjªMh]”hŒpt_load_single_entry”…”�”}”(hj¿Mh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj»Mubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjiMh²hh³jzMh´KÅubj )�”}”(hŒ(struct pt_state *pts)”h]”j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjÚMh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÖMubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçMh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÖMubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjøMh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjõMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”júMŒmodname”NŒ classname”Njc jf )�”}”ji ]”j¨MŒc.pt_load_single_entry”†”asbuh1hhjÖMubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÖMubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj$Nh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÖMubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj1Nh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÖMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÒMubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjiMh²hh³jzMh´KÅubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjeMh²hh³jzMh´KÅubah}”(h]”j`Mah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jzMh´KÅhjbMh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ1Version of pt_load_entry() usable within a walker”h]”hŒ1Version of pt_load_entry() usable within a walker”…”�”}”(hj[Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÅhjXNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjbMh²hh³jzMh´KÅubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjsNjèjsNjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(hŒ¦**Parameters** ``struct pt_state *pts`` Iteration State **Description** Alternative to for_each_pt_level_entry() if the walker function uses only a single entry.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hj}Nh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj{Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÉhjwNubjq)�”}”(hhh]”jv)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjœNh]”hŒstruct pt_state *pts”…”�”}”(hjžNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjšNubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÆhj–Nubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjµNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j±Nh´KÆhj²Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj–Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j±Nh´KÆhj“Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjwNubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj×Nh]”hŒ Description”…”�”}”(hjÙNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÕNubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÈhjwNubhä)�”}”(hŒYAlternative to for_each_pt_level_entry() if the walker function uses only a single entry.”h]”hŒYAlternative to for_each_pt_level_entry() if the walker function uses only a single entry.”…”�”}”(hjíNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KÇhjwNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_top_range (C function)”Œc.pt_top_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ7struct pt_range pt_top_range (struct pt_common *common)”h]”jj)�”}”(hŒ6struct pt_range pt_top_range(struct pt_common *common)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjOh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Kôubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Oh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjOh²hh³j)Oh´Kôubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hj;Oh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj8Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j=OŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_top_range”sbŒc.pt_top_range”†”asbuh1hhjOh²hh³j)Oh´Kôubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Oh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjOh²hh³j)Oh´Kôubj“)�”}”(hŒ pt_top_range”h]”j™)�”}”(hjYOh]”hŒ pt_top_range”…”�”}”(hjnOh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjjOubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjOh²hh³j)Oh´Kôubj )�”}”(hŒ(struct pt_common *common)”h]”j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj‰Oh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj…Oubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Oh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj…Oubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj§Oh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¤Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j©OŒmodname”NŒ classname”Njc jf )�”}”ji ]”jWOŒc.pt_top_range”†”asbuh1hhj…Oubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅOh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj…Oubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjÓOh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj…Oubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjàOh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj…Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj�Oubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjOh²hh³j)Oh´Kôubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjOh²hh³j)Oh´Kôubah}”(h]”jOah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j)Oh´KôhjOh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ/Return a range that spans part of the top level”h]”hŒ/Return a range that spans part of the top level”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KôhjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjOh²hh³j)Oh´Kôubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj"Pjèj"Pjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(hŒÑ**Parameters** ``struct pt_common *common`` Table **Description** For PT_FEAT_SIGN_EXTEND this will return the lower range, and cover half the total page table. Otherwise it returns the entire page table.”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hj,Ph]”hŒ Parameters”…”�”}”(hj.Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj*Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Køhj&Pubjq)�”}”(hhh]”jv)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hjKPh]”hŒstruct pt_common *common”…”�”}”(hjMPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjIPubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´KõhjEPubj�)�”}”(hhh]”hä)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjdPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j`Ph´KõhjaPubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjEPubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j`Ph´KõhjBPubah}”(h]”h ]”h"]”h$]”h&]”uh1jphj&Pubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj†Ph]”hŒ Description”…”�”}”(hjˆPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj„Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´K÷hj&Pubhä)�”}”(hŒŠFor PT_FEAT_SIGN_EXTEND this will return the lower range, and cover half the total page table. Otherwise it returns the entire page table.”h]”hŒŠFor PT_FEAT_SIGN_EXTEND this will return the lower range, and cover half the total page table. Otherwise it returns the entire page table.”…”�”}”(hjœPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Köhj&Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_all_range (C function)”Œc.pt_all_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ7struct pt_range pt_all_range (struct pt_common *common)”h]”jj)�”}”(hŒ6struct pt_range pt_all_range(struct pt_common *common)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjËPh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÇPh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙPh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇPh²hh³jØPh´Mubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjêPh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjçPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jìPŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_all_range”sbŒc.pt_all_range”†”asbuh1hhjÇPh²hh³jØPh´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Qh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÇPh²hh³jØPh´Mubj“)�”}”(hŒ pt_all_range”h]”j™)�”}”(hjQh]”hŒ pt_all_range”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjQubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÇPh²hh³jØPh´Mubj )�”}”(hŒ(struct pt_common *common)”h]”j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj8Qh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj4Qubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEQh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj4Qubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjVQh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjSQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jXQŒmodname”NŒ classname”Njc jf )�”}”ji ]”jQŒc.pt_all_range”†”asbuh1hhj4Qubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtQh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj4Qubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj‚Qh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj4Qubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj�Qh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj4Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj0Qubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÇPh²hh³jØPh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÃPh²hh³jØPh´Mubah}”(h]”j¾Pah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jØPh´MhjÀPh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ/Return a range that spans the entire page table”h]”hŒ/Return a range that spans the entire page table”…”�”}”(hj¹Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj¶Qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÀPh²hh³jØPh´Mubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÑQjèjÑQjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(hŒÿ**Parameters** ``struct pt_common *common`` Table **Description** The 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]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hjÛQh]”hŒ Parameters”…”�”}”(hjÝQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÙQubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M hjÕQubjq)�”}”(hhh]”jv)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hjúQh]”hŒstruct pt_common *common”…”�”}”(hjüQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjøQubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjôQubj�)�”}”(hhh]”hä)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jRh´MhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjôQubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jRh´MhjñQubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjÕQubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj5Rh]”hŒ Description”…”�”}”(hj7Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj3Rubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÕQubhä)�”}”(hŒ¸The 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]”hŒ¸The 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.”…”�”}”(hjKRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÕQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_upper_range (C function)”Œc.pt_upper_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ9struct pt_range pt_upper_range (struct pt_common *common)”h]”jj)�”}”(hŒ8struct pt_range pt_upper_range(struct pt_common *common)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjzRh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjvRh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆRh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjvRh²hh³j‡Rh´Mubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hj™Rh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj–Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j›RŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_upper_range”sbŒc.pt_upper_range”†”asbuh1hhjvRh²hh³j‡Rh´Mubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºRh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjvRh²hh³j‡Rh´Mubj“)�”}”(hŒpt_upper_range”h]”j™)�”}”(hj·Rh]”hŒpt_upper_range”…”�”}”(hjÌRh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÈRubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjvRh²hh³j‡Rh´Mubj )�”}”(hŒ(struct pt_common *common)”h]”j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjçRh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjãRubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôRh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjãRubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jSŒmodname”NŒ classname”Njc jf )�”}”ji ]”jµRŒc.pt_upper_range”†”asbuh1hhjãRubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Sh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjãRubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj1Sh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjãRubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hj>Sh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjãRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjßRubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjvRh²hh³j‡Rh´Mubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjrRh²hh³j‡Rh´Mubah}”(h]”jmRah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j‡Rh´MhjoRh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ/Return a range that spans part of the top level”h]”hŒ/Return a range that spans part of the top level”…”�”}”(hjhSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjeSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjoRh²hh³j‡Rh´Mubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj€Sjèj€Sjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hjŠSh]”hŒ Parameters”…”�”}”(hjŒSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjˆSubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M hj„Subjq)�”}”(hhh]”jv)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hj©Sh]”hŒstruct pt_common *common”…”�”}”(hj«Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj§Subah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj£Subj�)�”}”(hhh]”hä)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjÂSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¾Sh´Mhj¿Subah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj£Subeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¾Sh´Mhj Subah}”(h]”h ]”h"]”h$]”h&]”uh1jphj„Subhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjäSh]”hŒ Description”…”�”}”(hjæSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjâSubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj„Subhä)�”}”(hŒŠ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ŒŠ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.”…”�”}”(hjúSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj„Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_make_range (C function)”Œc.pt_make_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ[struct pt_range pt_make_range (struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”jj)�”}”(hŒZstruct pt_range pt_make_range(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj)Th²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj%Th²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M/ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Th²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj%Th²hh³j6Th´M/ubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjHTh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjETubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jJTŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_make_range”sbŒc.pt_make_range”†”asbuh1hhj%Th²hh³j6Th´M/ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiTh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj%Th²hh³j6Th´M/ubj“)�”}”(hŒ pt_make_range”h]”j™)�”}”(hjfTh]”hŒ pt_make_range”…”�”}”(hj{Th²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjwTubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj%Th²hh³j6Th´M/ubj )�”}”(hŒ=(struct pt_common *common, pt_vaddr_t va, pt_vaddr_t last_va)”h]”(j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj–Th²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj’Tubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Th²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj’Tubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hj´Th²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj±Tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j¶TŒmodname”NŒ classname”Njc jf )�”}”ji ]”jdTŒc.pt_make_range”†”asbuh1hhj’Tubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒTh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj’Tubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjàTh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj’Tubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjíTh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj’Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjŽTubj )�”}”(hŒ pt_vaddr_t va”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j UŒmodname”NŒ classname”Njc jf )�”}”ji ]”jdTŒc.pt_make_range”†”asbuh1hhjUubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Uh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjUubj™)�”}”(hŒva”h]”hŒva”…”�”}”(hj5Uh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjŽTubj )�”}”(hŒpt_vaddr_t last_va”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hjQUh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjNUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jSUŒmodname”NŒ classname”Njc jf )�”}”ji ]”jdTŒc.pt_make_range”†”asbuh1hhjJUubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoUh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjJUubj™)�”}”(hŒlast_va”h]”hŒlast_va”…”�”}”(hj}Uh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjJUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjŽTubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj%Th²hh³j6Th´M/ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj!Th²hh³j6Th´M/ubah}”(h]”jTah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j6Th´M/hjTh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ+Return a range that spans part of the table”h]”hŒ+Return a range that spans part of the table”…”�”}”(hj§Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M/hj¤Uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjTh²hh³j6Th´M/ubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj¿Ujèj¿Ujé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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ËUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÇUubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M3hjÃUubjq)�”}”(hhh]”(jv)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hjèUh]”hŒstruct pt_common *common”…”�”}”(hjêUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjæUubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M0hjâUubj�)�”}”(hhh]”hä)�”}”(hŒTable”h]”hŒTable”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jýUh´M0hjþUubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjâUubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jýUh´M0hjßUubjv)�”}”(hŒ ``pt_vaddr_t va`` Start address ”h]”(j|)�”}”(hŒ``pt_vaddr_t va``”h]”jN)�”}”(hj!Vh]”hŒ pt_vaddr_t va”…”�”}”(hj#Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M1hjVubj�)�”}”(hhh]”hä)�”}”(hŒ Start address”h]”hŒ Start address”…”�”}”(hj:Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j6Vh´M1hj7Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j6Vh´M1hjßUubjv)�”}”(hŒ$``pt_vaddr_t last_va`` Last address ”h]”(j|)�”}”(hŒ``pt_vaddr_t last_va``”h]”jN)�”}”(hjZVh]”hŒpt_vaddr_t last_va”…”�”}”(hj\Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjXVubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M2hjTVubj�)�”}”(hhh]”hä)�”}”(hŒ Last address”h]”hŒ Last address”…”�”}”(hjsVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³joVh´M2hjpVubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjTVubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³joVh´M2hjßUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjÃUubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj•Vh]”hŒ Description”…”�”}”(hj—Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj“Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M4hjÃUubhä)�”}”(hŒIThe caller must validate the range with pt_check_range() before using it.”h]”hŒIThe caller must validate the range with pt_check_range() before using it.”…”�”}”(hj«Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M3hjÃUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_init (C function)”Œ c.pt_init”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ^struct pt_state pt_init (struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”jj)�”}”(hŒ]struct pt_state pt_init(struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjÚVh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÖVh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MVubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèVh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÖVh²hh³jçVh´MVubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjùVh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjöVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jûVŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_init”sbŒ c.pt_init”†”asbuh1hhjÖVh²hh³jçVh´MVubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÖVh²hh³jçVh´MVubj“)�”}”(hŒpt_init”h]”j™)�”}”(hjWh]”hŒpt_init”…”�”}”(hj,Wh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj(Wubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjÖVh²hh³jçVh´MVubj )�”}”(hŒF(struct pt_range *range, unsigned int level, struct pt_table_p *table)”h]”(j )�”}”(hŒstruct pt_range *range”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjGWh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjCWubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTWh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjCWubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjeWh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjbWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jgWŒmodname”NŒ classname”Njc jf )�”}”ji ]”jWŒ c.pt_init”†”asbuh1hhjCWubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒWh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjCWubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj‘Wh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjCWubj™)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjžWh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjCWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj?Wubj )�”}”(hŒunsigned int level”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj·Wh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj³Wubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅWh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj³WubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjÓWh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj³Wubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáWh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj³Wubj™)�”}”(hŒlevel”h]”hŒlevel”…”�”}”(hjïWh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj³Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj?Wubj )�”}”(hŒstruct pt_table_p *table”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjXubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjXubh)�”}”(hhh]”j™)�”}”(hŒ pt_table_p”h]”hŒ pt_table_p”…”�”}”(hj&Xh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj#Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j(XŒmodname”NŒ classname”Njc jf )�”}”ji ]”jWŒ c.pt_init”†”asbuh1hhjXubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDXh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjXubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjRXh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjXubj™)�”}”(hŒtable”h]”hŒtable”…”�”}”(hj_Xh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj?Wubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjÖVh²hh³jçVh´MVubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjÒVh²hh³jçVh´MVubah}”(h]”jÍVah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jçVh´MVhjÏVh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ"Initialize a pt_state on the stack”h]”hŒ"Initialize a pt_state on the stack”…”�”}”(hj‰Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MVhj†Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÏVh²hh³jçVh´MVubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj¡Xjèj¡Xjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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”…”�”}”(hj­Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj©Xubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MZhj¥Xubjq)�”}”(hhh]”(jv)�”}”(hŒ?``struct pt_range *range`` Range pointer to embed in the state ”h]”(j|)�”}”(hŒ``struct pt_range *range``”h]”jN)�”}”(hjÊXh]”hŒstruct pt_range *range”…”�”}”(hjÌXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÈXubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MWhjÄXubj�)�”}”(hhh]”hä)�”}”(hŒ#Range pointer to embed in the state”h]”hŒ#Range pointer to embed in the state”…”�”}”(hjãXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jßXh´MWhjàXubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÄXubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jßXh´MWhjÁXubjv)�”}”(hŒ1``unsigned int level`` Table level for the state ”h]”(j|)�”}”(hŒ``unsigned int level``”h]”jN)�”}”(hjYh]”hŒunsigned int level”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MXhjýXubj�)�”}”(hhh]”hä)�”}”(hŒTable level for the state”h]”hŒTable level for the state”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jYh´MXhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjýXubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jYh´MXhjÁXubjv)�”}”(hŒB``struct pt_table_p *table`` Pointer to the table memory at level ”h]”(j|)�”}”(hŒ``struct pt_table_p *table``”h]”jN)�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj:Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MYhj6Yubj�)�”}”(hhh]”hä)�”}”(hŒ$Pointer to the table memory at level”h]”hŒ$Pointer to the table memory at level”…”�”}”(hjUYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jQYh´MYhjRYubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj6Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jQYh´MYhjÁXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj¥Xubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjwYh]”hŒ Description”…”�”}”(hjyYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjuYubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M[hj¥Xubhä)�”}”(hŒAHelper to initialize the on-stack pt_state from walker arguments.”h]”hŒAHelper to initialize the on-stack pt_state from walker arguments.”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MZhj¥Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_init_top (C function)”Œ c.pt_init_top”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒ4struct pt_state pt_init_top (struct pt_range *range)”h]”jj)�”}”(hŒ3struct pt_state pt_init_top(struct pt_range *range)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj¼Yh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj¸Yh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Miubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊYh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¸Yh²hh³jÉYh´Miubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÛYh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjØYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÝYŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œ pt_init_top”sbŒ c.pt_init_top”†”asbuh1hhj¸Yh²hh³jÉYh´Miubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüYh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¸Yh²hh³jÉYh´Miubj“)�”}”(hŒ pt_init_top”h]”j™)�”}”(hjùYh]”hŒ pt_init_top”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj Zubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj¸Yh²hh³jÉYh´Miubj )�”}”(hŒ(struct pt_range *range)”h]”j )�”}”(hŒstruct pt_range *range”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj)Zh²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj%Zubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6Zh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj%Zubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjGZh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjDZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jIZŒmodname”NŒ classname”Njc jf )�”}”ji ]”j÷YŒ c.pt_init_top”†”asbuh1hhj%Zubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeZh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj%Zubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjsZh²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj%Zubj™)�”}”(hŒrange”h]”hŒrange”…”�”}”(hj€Zh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj%Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj!Zubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj¸Yh²hh³jÉYh´Miubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj´Yh²hh³jÉYh´Miubah}”(h]”j¯Yah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jÉYh´Mihj±Yh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ"Initialize a pt_state on the stack”h]”hŒ"Initialize a pt_state on the stack”…”�”}”(hjªZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mihj§Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj±Yh²hh³jÉYh´Miubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÂZjèjÂZjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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”…”�”}”(hjÎZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÊZubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MmhjÆZubjq)�”}”(hhh]”jv)�”}”(hŒ?``struct pt_range *range`` Range pointer to embed in the state ”h]”(j|)�”}”(hŒ``struct pt_range *range``”h]”jN)�”}”(hjëZh]”hŒstruct pt_range *range”…”�”}”(hjíZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjéZubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MjhjåZubj�)�”}”(hhh]”hä)�”}”(hŒ#Range pointer to embed in the state”h]”hŒ#Range pointer to embed in the state”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j[h´Mjhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjåZubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j[h´MjhjâZubah}”(h]”h ]”h"]”h$]”h&]”uh1jphjÆZubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj&[h]”hŒ Description”…”�”}”(hj([h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj$[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MlhjÆZubhä)�”}”(hŒ*The pt_state points to the top most level.”h]”hŒ*The pt_state points to the top most level.”…”�”}”(hj<[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MkhjÆZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_descend (C function)”Œ c.pt_descend”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒBint pt_descend (struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”jj)�”}”(hŒAint pt_descend(struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”(jÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjk[h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjg[h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mwubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz[h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjg[h²hh³jy[h´Mwubj“)�”}”(hŒ pt_descend”h]”j™)�”}”(hŒ pt_descend”h]”hŒ pt_descend”…”�”}”(hjŒ[h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjˆ[ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjg[h²hh³jy[h´Mwubj )�”}”(hŒ3(struct pt_state *pts, void *arg, pt_level_fn_t fn)”h]”(j )�”}”(hŒstruct pt_state *pts”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj¨[h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj¤[ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ[h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¤[ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hjÆ[h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÃ[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jÈ[Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ jŽ[sbŒ c.pt_descend”†”asbuh1hhj¤[ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ[h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj¤[ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjô[h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj¤[ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj¤[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj [ubj )�”}”(hŒ void *arg”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj\ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(\h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj\ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj6\h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj\ubj™)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjC\h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj [ubj )�”}”(hŒpt_level_fn_t fn”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_level_fn_t”h]”hŒ pt_level_fn_t”…”�”}”(hj_\h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj\\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”ja\Œmodname”NŒ classname”Njc jf )�”}”ji ]”jâ[Œ c.pt_descend”†”asbuh1hhjX\ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}\h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjX\ubj™)�”}”(hŒfn”h]”hŒfn”…”�”}”(hj‹\h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjX\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj [ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjg[h²hh³jy[h´Mwubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjc[h²hh³jy[h´Mwubah}”(h]”j^[ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jy[h´Mwhj`[h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ1Recursively invoke the walker for the lower level”h]”hŒ1Recursively invoke the walker for the lower level”…”�”}”(hjµ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mwhj²\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj`[h²hh³jy[h´Mwubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjÍ\jèjÍ\jé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hj×\h]”hŒ Parameters”…”�”}”(hjÙ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjÕ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M{hjÑ\ubjq)�”}”(hhh]”(jv)�”}”(hŒ)``struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``struct pt_state *pts``”h]”jN)�”}”(hjö\h]”hŒstruct pt_state *pts”…”�”}”(hjø\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjô\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mxhjð\ubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j ]h´Mxhj ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjð\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j ]h´Mxhjí\ubjv)�”}”(hŒ,``void *arg`` Value to pass to the function ”h]”(j|)�”}”(hŒ ``void *arg``”h]”jN)�”}”(hj/]h]”hŒ void *arg”…”�”}”(hj1]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj-]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Myhj)]ubj�)�”}”(hhh]”hä)�”}”(hŒValue to pass to the function”h]”hŒValue to pass to the function”…”�”}”(hjH]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jD]h´MyhjE]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj)]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jD]h´Myhjí\ubjv)�”}”(hŒ-``pt_level_fn_t fn`` Walker function to call ”h]”(j|)�”}”(hŒ``pt_level_fn_t fn``”h]”jN)�”}”(hjh]h]”hŒpt_level_fn_t fn”…”�”}”(hjj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjf]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mzhjb]ubj�)�”}”(hhh]”hä)�”}”(hŒWalker function to call”h]”hŒWalker function to call”…”�”}”(hj�]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j}]h´Mzhj~]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjb]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j}]h´Mzhjí\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjÑ\ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj£]h]”hŒ Description”…”�”}”(hj¥]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj¡]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M|hjÑ\ubhä)�”}”(hŒQpts must point to a table item. Invoke fn as a walker on the table pts points to.”h]”hŒQpts must point to a table item. Invoke fn as a walker on the table pts points to.”…”�”}”(hj¹]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M{hjÑ\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_walk_range (C function)”Œc.pt_walk_range”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒGint pt_walk_range (struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”jj)�”}”(hŒFint pt_walk_range(struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”(jÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjè]h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjä]h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MŒubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷]h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjä]h²hh³jö]h´MŒubj“)�”}”(hŒ pt_walk_range”h]”j™)�”}”(hŒ pt_walk_range”h]”hŒ pt_walk_range”…”�”}”(hj ^h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj^ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjä]h²hh³jö]h´MŒubj )�”}”(hŒ5(struct pt_range *range, pt_level_fn_t fn, void *arg)”h]”(j )�”}”(hŒstruct pt_range *range”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hj%^h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj!^ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2^h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj!^ubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hjC^h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj@^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jE^Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j ^sbŒc.pt_walk_range”†”asbuh1hhj!^ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc^h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj!^ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjq^h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj!^ubj™)�”}”(hŒrange”h]”hŒrange”…”�”}”(hj~^h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj!^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj^ubj )�”}”(hŒpt_level_fn_t fn”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_level_fn_t”h]”hŒ pt_level_fn_t”…”�”}”(hjš^h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj—^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jœ^Œmodname”NŒ classname”Njc jf )�”}”ji ]”j_^Œc.pt_walk_range”†”asbuh1hhj“^ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸^h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj“^ubj™)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjÆ^h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj“^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj^ubj )�”}”(hŒ void *arg”h]”(jÌ )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjß^h²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjÛ^ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí^h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÛ^ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjû^h²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÛ^ubj™)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÛ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj^ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjä]h²hh³jö]h´MŒubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjà]h²hh³jö]h´MŒubah}”(h]”jÛ]ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jö]h´MŒhjÝ]h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒWalk over a VA range”h]”hŒWalk over a VA range”…”�”}”(hj2_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MŒhj/_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjÝ]h²hh³jö]h´MŒubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjJ_jèjJ_jé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hjT_h]”hŒ Parameters”…”�”}”(hjV_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjR_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjN_ubjq)�”}”(hhh]”(jv)�”}”(hŒ)``struct pt_range *range`` Range pointer ”h]”(j|)�”}”(hŒ``struct pt_range *range``”h]”jN)�”}”(hjs_h]”hŒstruct pt_range *range”…”�”}”(hju_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjq_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjm_ubj�)�”}”(hhh]”hä)�”}”(hŒ Range pointer”h]”hŒ Range pointer”…”�”}”(hjŒ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jˆ_h´M�hj‰_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjm_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jˆ_h´M�hjj_ubjv)�”}”(hŒ-``pt_level_fn_t fn`` Walker function to call ”h]”(j|)�”}”(hŒ``pt_level_fn_t fn``”h]”jN)�”}”(hj¬_h]”hŒpt_level_fn_t fn”…”�”}”(hj®_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjª_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MŽhj¦_ubj�)�”}”(hhh]”hä)�”}”(hŒWalker function to call”h]”hŒWalker function to call”…”�”}”(hjÅ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jÁ_h´MŽhjÂ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj¦_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jÁ_h´MŽhjj_ubjv)�”}”(hŒ,``void *arg`` Value to pass to the function ”h]”(j|)�”}”(hŒ ``void *arg``”h]”jN)�”}”(hjå_h]”hŒ void *arg”…”�”}”(hjç_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjã_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjß_ubj�)�”}”(hhh]”hä)�”}”(hŒValue to pass to the function”h]”hŒValue to pass to the function”…”�”}”(hjþ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jú_h´M�hjû_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjß_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jú_h´M�hjj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjN_ubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj `h]”hŒ Description”…”�”}”(hj"`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M‘hjN_ubhä)�”}”(hŒ¦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Œ¦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.”…”�”}”(hj6`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M�hjN_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_range_slice (C function)”Œc.pt_range_slice”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒmstruct pt_range pt_range_slice (const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”jj)�”}”(hŒlstruct pt_range pt_range_slice(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hje`h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johja`h²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MËubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs`h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hja`h²hh³jr`h´MËubh)�”}”(hhh]”j™)�”}”(hŒpt_range”h]”hŒpt_range”…”�”}”(hj„`h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj�`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j†`Œmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ Œpt_range_slice”sbŒc.pt_range_slice”†”asbuh1hhja`h²hh³jr`h´MËubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥`h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hja`h²hh³jr`h´MËubj“)�”}”(hŒpt_range_slice”h]”j™)�”}”(hj¢`h]”hŒpt_range_slice”…”�”}”(hj·`h²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj³`ubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hja`h²hh³jr`h´MËubj )�”}”(hŒN(const struct pt_state *pts, unsigned int start_index, unsigned int end_index)”h]”(j )�”}”(hŒconst struct pt_state *pts”h]”(jp)�”}”(hj h]”hŒconst”…”�”}”(hjÒ`h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÎ`ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß`h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÎ`ubjp)�”}”(hjsh]”hŒstruct”…”�”}”(hjí`h²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johjÎ`ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú`h²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÎ`ubh)�”}”(hhh]”j™)�”}”(hŒpt_state”h]”hŒpt_state”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j aŒmodname”NŒ classname”Njc jf )�”}”ji ]”j `Œc.pt_range_slice”†”asbuh1hhjÎ`ubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)ah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjÎ`ubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hj7ah²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hjÎ`ubj™)�”}”(hŒpts”h]”hŒpts”…”�”}”(hjDah²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjÎ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÊ`ubj )�”}”(hŒunsigned int start_index”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj]ah²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjYaubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjYaubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjyah²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjYaubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjYaubj™)�”}”(hŒ start_index”h]”hŒ start_index”…”�”}”(hj•ah²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjYaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÊ`ubj )�”}”(hŒunsigned int end_index”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj®ah²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjªaubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjªaubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjÊah²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjªaubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØah²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjªaubj™)�”}”(hŒ end_index”h]”hŒ end_index”…”�”}”(hjæah²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjªaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hjÊ`ubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hja`h²hh³jr`h´MËubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj]`h²hh³jr`h´MËubah}”(h]”jX`ah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jr`h´MËhjZ`h²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ!Return a range that spans indexes”h]”hŒ!Return a range that spans indexes”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MËhj bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjZ`h²hh³jr`h´MËubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçj(bjèj(bjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hj2bh]”hŒ Parameters”…”�”}”(hj4bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj0bubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÏhj,bubjq)�”}”(hhh]”(jv)�”}”(hŒ/``const struct pt_state *pts`` Iteration State ”h]”(j|)�”}”(hŒ``const struct pt_state *pts``”h]”jN)�”}”(hjQbh]”hŒconst struct pt_state *pts”…”�”}”(hjSbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjObubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÌhjKbubj�)�”}”(hhh]”hä)�”}”(hŒIteration State”h]”hŒIteration State”…”�”}”(hjjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jfbh´MÌhjgbubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjKbubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jfbh´MÌhjHbubjv)�”}”(hŒ7``unsigned int start_index`` Starting index within pts ”h]”(j|)�”}”(hŒ``unsigned int start_index``”h]”jN)�”}”(hjŠbh]”hŒunsigned int start_index”…”�”}”(hjŒbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjˆbubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÍhj„bubj�)�”}”(hhh]”hä)�”}”(hŒStarting index within pts”h]”hŒStarting index within pts”…”�”}”(hj£bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jŸbh´MÍhj bubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj„bubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jŸbh´MÍhjHbubjv)�”}”(hŒ3``unsigned int end_index`` Ending index within pts ”h]”(j|)�”}”(hŒ``unsigned int end_index``”h]”jN)�”}”(hjÃbh]”hŒunsigned int end_index”…”�”}”(hjÅbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÁbubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÎhj½bubj�)�”}”(hhh]”hä)�”}”(hŒEnding index within pts”h]”hŒEnding index within pts”…”�”}”(hjÜbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jØbh´MÎhjÙbubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj½bubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jØbh´MÎhjHbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj,bubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjþbh]”hŒ Description”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjübubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÐhj,bubhä)�”}”(hŒWCreate a range than spans an index range of the current table level pt_state points at.”h]”hŒWCreate a range than spans an index range of the current table level pt_state points at.”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MÏhj,bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒpt_top_memsize_lg2 (C function)”Œc.pt_top_memsize_lg2”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒRunsigned int pt_top_memsize_lg2 (struct pt_common *common, uintptr_t top_of_table)”h]”jj)�”}”(hŒQunsigned int pt_top_memsize_lg2(struct pt_common *common, uintptr_t top_of_table)”h]”(jÌ )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjCch²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj?ch²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Måubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRch²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj?ch²hh³jQch´MåubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hj`ch²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hj?ch²hh³jQch´Måubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnch²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj?ch²hh³jQch´Måubj“)�”}”(hŒpt_top_memsize_lg2”h]”j™)�”}”(hŒpt_top_memsize_lg2”h]”hŒpt_top_memsize_lg2”…”�”}”(hj€ch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj|cubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hj?ch²hh³jQch´Måubj )�”}”(hŒ2(struct pt_common *common, uintptr_t top_of_table)”h]”(j )�”}”(hŒstruct pt_common *common”h]”(jp)�”}”(hjsh]”hŒstruct”…”�”}”(hjœch²hh³Nh´Nubah}”(h]”h ]”j|ah"]”h$]”h&]”uh1johj˜cubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ch²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj˜cubh)�”}”(hhh]”j™)�”}”(hŒ pt_common”h]”hŒ pt_common”…”�”}”(hjºch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj·cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j¼cŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j‚csbŒc.pt_top_memsize_lg2”†”asbuh1hhj˜cubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚch²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj˜cubj€ )�”}”(hjƒ h]”hŒ*”…”�”}”(hjèch²hh³Nh´Nubah}”(h]”h ]”jŒ ah"]”h$]”h&]”uh1j hj˜cubj™)�”}”(hŒcommon”h]”hŒcommon”…”�”}”(hjõch²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj˜cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj”cubj )�”}”(hŒuintptr_t top_of_table”h]”(h)�”}”(hhh]”j™)�”}”(hŒ uintptr_t”h]”h•ßtŒ uintptr_t”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jdŒmodname”NŒ classname”Njc jf )�”}”ji ]”jÖcŒc.pt_top_memsize_lg2”†”asbuh1hhj dubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/dh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj dubj™)�”}”(hŒ top_of_table”h]”hŒ top_of_table”…”�”}”(hj=dh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj”cubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hj?ch²hh³jQch´Måubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hj;ch²hh³jQch´Måubah}”(h]”j6cah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jQch´Måhj8ch²hubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj8ch²hh³jQch´Måubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjpdjèjpdjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hjzdh]”hŒ Parameters”…”�”}”(hj|dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjxdubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Méhjtdubjq)�”}”(hhh]”(jv)�”}”(hŒ#``struct pt_common *common`` Table ”h]”(j|)�”}”(hŒ``struct pt_common *common``”h]”jN)�”}”(hj™dh]”hŒstruct pt_common *common”…”�”}”(hj›dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj—dubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mæhj“dubj�)�”}”(hhh]”hä)�”}”(hŒTable”h]”hŒTable”…”�”}”(hj²dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j®dh´Mæhj¯dubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj“dubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j®dh´Mæhj�dubjv)�”}”(hŒA``uintptr_t top_of_table`` Top of table value from _pt_top_set() ”h]”(j|)�”}”(hŒ``uintptr_t top_of_table``”h]”jN)�”}”(hjÒdh]”hŒuintptr_t top_of_table”…”�”}”(hjÔdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÐdubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MçhjÌdubj�)�”}”(hhh]”hä)�”}”(hŒ%Top of table value from _pt_top_set()”h]”hŒ%Top of table value from _pt_top_set()”…”�”}”(hjëdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jçdh´Mçhjèdubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÌdubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jçdh´Mçhj�dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjtdubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hj eh]”hŒ Description”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj eubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Méhjtdubhä)�”}”(hŒ‚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Œ‚Compute the allocation size of the top table. For PT_FEAT_DYNAMIC_TOP this will compute the top size assuming the table will grow.”…”�”}”(hj#eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mèhjtdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒ#pt_compute_best_pgsize (C function)”Œc.pt_compute_best_pgsize”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒnunsigned int pt_compute_best_pgsize (pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)”h]”jj)�”}”(hŒmunsigned 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Ì )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjReh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjNeh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mþubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaeh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjNeh²hh³j`eh´MþubjÌ )�”}”(hŒint”h]”hŒint”…”�”}”(hjoeh²hh³Nh´Nubah}”(h]”h ]”jØ ah"]”h$]”h&]”uh1jË hjNeh²hh³j`eh´Mþubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}eh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjNeh²hh³j`eh´Mþubj“)�”}”(hŒpt_compute_best_pgsize”h]”j™)�”}”(hŒpt_compute_best_pgsize”h]”hŒpt_compute_best_pgsize”…”�”}”(hj�eh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj‹eubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjNeh²hh³j`eh´Mþubj )�”}”(hŒJ(pt_vaddr_t pgsz_bitmap, pt_vaddr_t va, pt_vaddr_t last_va, pt_oaddr_t oa)”h]”(j )�”}”(hŒpt_vaddr_t pgsz_bitmap”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj®eh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj«eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”j°eŒmodname”NŒ classname”Njc jf )�”}”ji ]”jl )�”}”j_ j‘esbŒc.pt_compute_best_pgsize”†”asbuh1hhj§eubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎeh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj§eubj™)�”}”(hŒ pgsz_bitmap”h]”hŒ pgsz_bitmap”…”�”}”(hjÜeh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj§eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj£eubj )�”}”(hŒ pt_vaddr_t va”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hjøeh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjõeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”júeŒmodname”NŒ classname”Njc jf )�”}”ji ]”jÊeŒc.pt_compute_best_pgsize”†”asbuh1hhjñeubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hjñeubj™)�”}”(hŒva”h]”hŒva”…”�”}”(hj$fh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjñeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj£eubj )�”}”(hŒpt_vaddr_t last_va”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_vaddr_t”h]”hŒ pt_vaddr_t”…”�”}”(hj@fh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj=fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jBfŒmodname”NŒ classname”Njc jf )�”}”ji ]”jÊeŒc.pt_compute_best_pgsize”†”asbuh1hhj9fubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^fh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj9fubj™)�”}”(hŒlast_va”h]”hŒlast_va”…”�”}”(hjlfh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj9fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj£eubj )�”}”(hŒ pt_oaddr_t oa”h]”(h)�”}”(hhh]”j™)�”}”(hŒ pt_oaddr_t”h]”hŒ pt_oaddr_t”…”�”}”(hjˆfh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj…fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jáŒreftype”j_ Œ reftarget”jŠfŒmodname”NŒ classname”Njc jf )�”}”ji ]”jÊeŒc.pt_compute_best_pgsize”†”asbuh1hhj�fubj‚)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦fh²hh³Nh´Nubah}”(h]”h ]”jŽah"]”h$]”h&]”uh1j�hj�fubj™)�”}”(hŒoa”h]”hŒoa”…”�”}”(hj´fh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hj�fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆhÅhÆuh1j hj£eubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1j hjNeh²hh³j`eh´Mþubeh}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjJeh²hh³j`eh´Mþubah}”(h]”jEeah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³j`eh´MþhjGeh²hubjÅ)�”}”(hhh]”hä)�”}”(hŒ-Determine the best page size for leaf entries”h]”hŒ-Determine the best page size for leaf entries”…”�”}”(hjÞfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MþhjÛfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjGeh²hh³j`eh´Mþubeh}”(h]”h ]”(jáŒfunction”eh"]”h$]”h&]”jæjájçjöfjèjöfjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubjí)�”}”(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û)�”}”(hjgh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjþfubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhjúfubjq)�”}”(hhh]”(jv)�”}”(hŒ0``pt_vaddr_t pgsz_bitmap`` Permitted page sizes ”h]”(j|)�”}”(hŒ``pt_vaddr_t pgsz_bitmap``”h]”jN)�”}”(hjgh]”hŒpt_vaddr_t pgsz_bitmap”…”�”}”(hj!gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mÿhjgubj�)�”}”(hhh]”hä)�”}”(hŒPermitted page sizes”h]”hŒPermitted page sizes”…”�”}”(hj8gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j4gh´Mÿhj5gubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j4gh´Mÿhjgubjv)�”}”(hŒ>``pt_vaddr_t va`` Starting virtual address for the leaf entry ”h]”(j|)�”}”(hŒ``pt_vaddr_t va``”h]”jN)�”}”(hjXgh]”hŒ pt_vaddr_t va”…”�”}”(hjZgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjVgubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjRgubj�)�”}”(hhh]”hä)�”}”(hŒ+Starting virtual address for the leaf entry”h]”hŒ+Starting virtual address for the leaf entry”…”�”}”(hjqgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jmgh´Mhjngubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjRgubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jmgh´Mhjgubjv)�”}”(hŒW``pt_vaddr_t last_va`` Last virtual address for the leaf entry, sets the max page size ”h]”(j|)�”}”(hŒ``pt_vaddr_t last_va``”h]”jN)�”}”(hj‘gh]”hŒpt_vaddr_t last_va”…”�”}”(hj“gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj�gubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhj‹gubj�)�”}”(hhh]”hä)�”}”(hŒ?Last virtual address for the leaf entry, sets the max page size”h]”hŒ?Last virtual address for the leaf entry, sets the max page size”…”�”}”(hjªgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j¦gh´Mhj§gubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhj‹gubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j¦gh´Mhjgubjv)�”}”(hŒ=``pt_oaddr_t oa`` Starting output address for the leaf entry ”h]”(j|)�”}”(hŒ``pt_oaddr_t oa``”h]”jN)�”}”(hjÊgh]”hŒ pt_oaddr_t oa”…”�”}”(hjÌgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÈgubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MhjÄgubj�)�”}”(hhh]”hä)�”}”(hŒ*Starting output address for the leaf entry”h]”hŒ*Starting output address for the leaf entry”…”�”}”(hjãgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jßgh´Mhjàgubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÄgubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jßgh´Mhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphjúfubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjhh]”hŒ Description”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhjúfubhä)�”}”(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.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mhjúfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´NubjN)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jZŒPT_MAKE_LEVELS (C macro)”Œc.PT_MAKE_LEVELS”hNt”auh1jMhj Bh²hh³Nh´Nubj_)�”}”(hhh]”(jd)�”}”(hŒPT_MAKE_LEVELS”h]”jj)�”}”(hŒPT_MAKE_LEVELS”h]”j“)�”}”(hŒPT_MAKE_LEVELS”h]”j™)�”}”(hjDhh]”hŒPT_MAKE_LEVELS”…”�”}”(hjNhh²hh³Nh´Nubah}”(h]”h ]”j¤ah"]”h$]”h&]”uh1j˜hjJhubah}”(h]”h ]”(j«j¬eh"]”h$]”h&]”hÅhÆuh1j’hjFhh²hh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mvubah}”(h]”h ]”h"]”h$]”h&]”hÅhÆj¶ˆuh1jij·j¸hjBhh²hh³jahh´Mvubah}”(h]”j=hah ]”(j¼j½eh"]”h$]”h&]”jÁˆjÂ)jÃhuh1jch³jahh´Mvhj?hh²hubjÅ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj?hh²hh³jahh´Mvubeh}”(h]”h ]”(jáŒmacro”eh"]”h$]”h&]”jæjájçjzhjèjzhjé‰jê‰jë‰uh1j^h²hhj Bh³Nh´Nubhä)�”}”(hŒ``PT_MAKE_LEVELS (fn, do_fn)``”h]”jN)�”}”(hj€hh]”hŒPT_MAKE_LEVELS (fn, do_fn)”…”�”}”(hj‚hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj~hubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mxhj Bh²hubhÞ)�”}”(hŒBuild an unwound walker ”h]”hä)�”}”(hŒBuild an unwound walker”h]”hŒBuild an unwound walker”…”�”}”(hjšhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mvhj–hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÝh³j¨hh´Mvhj Bh²hubjí)�”}”(hXé**Parameters** ``fn`` Name of the walker function ``do_fn`` Function to call at each level **Description** This builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function:: static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn) An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level. Note this can produce a lot of code!”h]”(hä)�”}”(hŒ**Parameters**”h]”jû)�”}”(hjµhh]”hŒ Parameters”…”�”}”(hj·hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhj³hubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mzhj¯hubjq)�”}”(hhh]”(jv)�”}”(hŒ#``fn`` Name of the walker function ”h]”(j|)�”}”(hŒ``fn``”h]”jN)�”}”(hjÔhh]”hŒfn”…”�”}”(hjÖhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhjÒhubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´MwhjÎhubj�)�”}”(hhh]”hä)�”}”(hŒName of the walker function”h]”hŒName of the walker function”…”�”}”(hjíhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³jéhh´Mwhjêhubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjÎhubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³jéhh´MwhjËhubjv)�”}”(hŒ)``do_fn`` Function to call at each level ”h]”(j|)�”}”(hŒ ``do_fn``”h]”jN)�”}”(hj ih]”hŒdo_fn”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jMhj iubah}”(h]”h ]”h"]”h$]”h&]”uh1j{h³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mxhjiubj�)�”}”(hhh]”hä)�”}”(hŒFunction to call at each level”h]”hŒFunction to call at each level”…”�”}”(hj&ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³j"ih´Mxhj#iubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1juh³j"ih´MxhjËhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jphj¯hubhä)�”}”(hŒ**Description**”h]”jû)�”}”(hjHih]”hŒ Description”…”�”}”(hjJih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1júhjFiubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Mzhj¯hubhä)�”}”(hŒ„This builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function::”h]”hŒƒThis builds a function call tree that can be fully inlined. The caller must provide a function body in an __always_inline function:”…”�”}”(hj^ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´Myhj¯hubjÙ)�”}”(hŒ™static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn)”h]”hŒ™static __always_inline int do_fn(struct pt_range *range, void *arg, unsigned int level, struct pt_table_p *table, pt_level_fn_t descend_fn)”…”�”}”hjmisbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M|hj¯hubhä)�”}”(hX,An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level.”h]”hX,An inline function will be created for each table level that calls do_fn with a compile time constant for level and a pointer to the next lower function. This generates an optimally inlined walk where each of the functions sees a constant level and can codegen the exact constants/etc for that level.”…”�”}”(hj|ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M€hj¯hubhä)�”}”(hŒ$Note this can produce a lot of code!”h]”hŒ$Note this can produce a lot of code!”…”�”}”(hj‹ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³Œh/var/lib/git/docbuild/linux/Documentation/driver-api/generic_pt:73: ./drivers/iommu/generic_pt/pt_iter.h”h´M…hj¯hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jìhj Bh²hh³Nh´Nubeh}”(h]”Œiteration-helpers”ah ]”h"]”Œiteration helpers”ah$]”h&]”uh1hÈhj�h²hh³hÇh´KGubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒWriting a Format”h]”hŒWriting a Format”…”�”}”(hj¬ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj©ih²hh³hÇh´KLubhä)�”}”(hŒ¨It is best to start from a simple format that is similar to the target. x86_64 is usually a good reference for something simple, and AMDv1 is something fairly complete.”h]”hŒ¨It is best to start from a simple format that is similar to the target. x86_64 is usually a good reference for something simple, and AMDv1 is something fairly complete.”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KNhj©ih²hubhä)�”}”(hŒ|The required inline functions need to be implemented in the format header. These should all follow the standard pattern of::”h]”hŒ{The required inline functions need to be implemented in the format header. These should all follow the standard pattern of:”…”�”}”(hjÈih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´KRhj©ih²hubjÙ)�”}”(hŒzstatic inline pt_oaddr_t amdv1pt_entry_oa(const struct pt_state *pts) { [..] } #define pt_entry_oa amdv1pt_entry_oa”h]”hŒzstatic inline pt_oaddr_t amdv1pt_entry_oa(const struct pt_state *pts) { [..] } #define pt_entry_oa amdv1pt_entry_oa”…”�”}”hjÖisbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³hÇh´KUhj©ih²hubhä)�”}”(hXAwhere a uniquely named per-format inline function provides the implementation and a define maps it to the generic name. This is intended to make debug symbols work better. inline functions should always be used as the prototypes in pt_common.h will cause the compiler to validate the function signature to prevent errors.”h]”hXAwhere a uniquely named per-format inline function provides the implementation and a define maps it to the generic name. This is intended to make debug symbols work better. inline functions should always be used as the prototypes in pt_common.h will cause the compiler to validate the function signature to prevent errors.”…”�”}”(hjäih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K[hj©ih²hubhä)�”}”(hŒDReview pt_fmt_defaults.h to understand some of the optional inlines.”h]”hŒDReview pt_fmt_defaults.h to understand some of the optional inlines.”…”�”}”(hjòih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kahj©ih²hubhä)�”}”(hŒ‰Once the format compiles then it should be run through the generic page table kunit test in kunit_generic_pt.h using kunit. For example::”h]”hŒˆOnce the format compiles then it should be run through the generic page table kunit test in kunit_generic_pt.h using kunit. For example:”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kchj©ih²hubjÙ)�”}”(hX+$ tools/testing/kunit/kunit.py run --build_dir build_kunit_x86_64 --arch x86_64 --kunitconfig ./drivers/iommu/generic_pt/.kunitconfig amdv1_fmt_test.* [...] [11:15:08] Testing complete. Ran 9 tests: passed: 9 [11:15:09] Elapsed time: 3.137s total, 0.001s configuring, 2.368s building, 0.311s running”h]”hX+$ tools/testing/kunit/kunit.py run --build_dir build_kunit_x86_64 --arch x86_64 --kunitconfig ./drivers/iommu/generic_pt/.kunitconfig amdv1_fmt_test.* [...] [11:15:08] Testing complete. Ran 9 tests: passed: 9 [11:15:09] Elapsed time: 3.137s total, 0.001s configuring, 2.368s building, 0.311s running”…”�”}”hjjsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jØh³hÇh´Kfhj©ih²hubhä)�”}”(hŒ·The generic tests are intended to prove out the format functions and give clearer failures to speed up finding the problems. Once those pass then the entire kunit suite should be run.”h]”hŒ·The generic tests are intended to prove out the format functions and give clearer failures to speed up finding the problems. Once those pass then the entire kunit suite should be run.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kkhj©ih²hubeh}”(h]”Œwriting-a-format”ah ]”h"]”Œwriting a format”ah$]”h&]”uh1hÈhj�h²hh³hÇh´KLubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒIOMMU Invalidation Features”h]”hŒIOMMU Invalidation Features”…”�”}”(hj5jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj2jh²hh³hÇh´Kpubhä)�”}”(hŒ˜Invalidation is how the page table algorithms synchronize with a HW cache of the page table memory, typically called the TLB (or IOTLB for IOMMU cases).”h]”hŒ˜Invalidation is how the page table algorithms synchronize with a HW cache of the page table memory, typically called the TLB (or IOTLB for IOMMU cases).”…”�”}”(hjCjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Krhj2jh²hubhä)�”}”(hŒËThe TLB can store present PTEs, non-present PTEs and table pointers, depending on its design. Every HW has its own approach on how to describe what has changed to have changed items removed from the TLB.”h]”hŒËThe TLB can store present PTEs, non-present PTEs and table pointers, depending on its design. Every HW has its own approach on how to describe what has changed to have changed items removed from the TLB.”…”�”}”(hjQjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´Kuhj2jh²hubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒPT_FEAT_FLUSH_RANGE”h]”hŒPT_FEAT_FLUSH_RANGE”…”�”}”(hjbjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj_jh²hh³hÇh´Kzubhä)�”}”(hXÏPT_FEAT_FLUSH_RANGE is the easiest scheme to understand. It tries to generate a single range invalidation for each operation, over-invalidating if there are gaps of VA that don't need invalidation. This trades off impacted VA for number of invalidation operations. It does not keep track of what is being invalidated; however, if pages have to be freed then page table pointers have to be cleaned from the walk cache. The range can start/end at any page boundary.”h]”hXÑPT_FEAT_FLUSH_RANGE is the easiest scheme to understand. It tries to generate a single range invalidation for each operation, over-invalidating if there are gaps of VA that don’t need invalidation. This trades off impacted VA for number of invalidation operations. It does not keep track of what is being invalidated; however, if pages have to be freed then page table pointers have to be cleaned from the walk cache. The range can start/end at any page boundary.”…”�”}”(hjpjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K|hj_jh²hubeh}”(h]”Œpt-feat-flush-range”ah ]”h"]”Œpt_feat_flush_range”ah$]”h&]”uh1hÈhj2jh²hh³hÇh´KzubhÉ)�”}”(hhh]”(hÎ)�”}”(hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”h]”hŒPT_FEAT_FLUSH_RANGE_NO_GAPS”…”�”}”(hj‰jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj†jh²hh³hÇh´K„ubhä)�”}”(hX.PT_FEAT_FLUSH_RANGE_NO_GAPS is similar to PT_FEAT_FLUSH_RANGE; however, it tries to minimize the amount of impacted VA by issuing extra flush operations. This is useful if the cost of processing VA is very high, for instance because a hypervisor is processing the page table with a shadowing algorithm.”h]”hX.PT_FEAT_FLUSH_RANGE_NO_GAPS is similar to PT_FEAT_FLUSH_RANGE; however, it tries to minimize the amount of impacted VA by issuing extra flush operations. This is useful if the cost of processing VA is very high, for instance because a hypervisor is processing the page table with a shadowing algorithm.”…”�”}”(hj—jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hãh³hÇh´K†hj†jh²hubeh}”(h]”Œpt-feat-flush-range-no-gaps”ah ]”h"]”Œpt_feat_flush_range_no_gaps”ah$]”h&]”uh1hÈhj2jh²hh³hÇh´K„ubeh}”(h]”Œiommu-invalidation-features”ah ]”h"]”Œiommu invalidation features”ah$]”h&]”uh1hÈhj�h²hh³hÇh´Kpubeh}”(h]”Œusage”ah ]”h"]”Œusage”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´Kubeh}”(h]”Œgeneric-radix-page-table”ah ]”h"]”Œgeneric radix page table”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jèjŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jÂjj¿jjºjj·jjBjBj¦ij£ij/jj,jj²jj¯jjƒjj€jjªjj§juŒ nametypes”}”(jÂj‰jºj‰jB‰j¦i‰j/j‰j²j‰jƒj‰jªj‰uh}”(j¿jhÊj·jj�jBj<j\jejXj]j¾ jà j j j³j¸jNjSjYj^jÙjÞjijnjj j^jcjjjãjèj›j jJjOjù jþ j”"j™"j&j&jý(j)j»*jÀ*jj,jo,j".j'.jø/jý/j2j$2jì3jñ3j³5j¸5jk7jp7j9j9jñ:jö:jŽ<j“<j˜>j�>j£@j¨@j£ij Bj=BjBBj¾CjÃCj?EjDEjeGjjGjIj"IjÕJjÚJjVLj[Lj`MjeMjOjOj¾PjÃPjmRjrRjTj!TjÍVjÒVj¯Yj´Yj^[jc[jÛ]jà]jX`j]`j6cj;cjEejJej=hjBhj,jj©ij¯jj2jj€jj_jj§jj†juŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.