class SmmuPmt

Defined at line 27 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

Public Methods

fbl::RefPtr<SmmuPmt> Create (SmmuBti & owner, PinnedVmObject pinned_vmo, BtiMode bti_mode, DeviceAspace::Allocation map_location)

Defined at line 17 of file ../../zircon/kernel/dev/iommu/arm_smmu/smmu_pmt.cc

void SmmuPmt (const SmmuPmt & )

Defined at line 46 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

void SmmuPmt (SmmuPmt && )

Defined at line 47 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

SmmuPmt & operator= (const SmmuPmt & )

Defined at line 48 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

SmmuPmt & operator= (SmmuPmt && )

Defined at line 49 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

zx::result<iommu::QueryAddressResult> QueryAddress (uint64_t query_offset, size_t query_size)

///////////////////////////////////////////////////////////////////////////

Implementation of iommu::Pmt

///////////////////////////////////////////////////////////////////////////

Defined at line 60 of file ../../zircon/kernel/dev/iommu/arm_smmu/smmu_pmt.cc

void AssertOwnerPmtLockHeld ()

end iommu::Pmt implementation

Defined at line 63 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

State state ()

Defined at line 67 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

void set_state (State new_state)

Defined at line 68 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

PinnedVmObject TakePinnedVmo ()

Defined at line 70 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

const PinnedVmObject & pinned_vmo ()

Defined at line 71 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

DeviceAspace::Allocation TakeMapLocation ()

Defined at line 73 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

const DeviceAspace::Allocation & map_location ()

Note: while PMT instances always have a "map location" which can be

queried, the map location instance itself is not always valid. Callers

need to know that the location is valid (which can be tested using an

implicit or explicit cast to bool, or a comparison against nullptr, before

using it.

Defined at line 82 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

void ReleasePinnedMemory ()

Defined at line 154 of file ../../zircon/kernel/dev/iommu/arm_smmu/smmu_pmt.cc

void OnDispatcherZeroHandles ()

Defined at line 155 of file ../../zircon/kernel/dev/iommu/arm_smmu/smmu_pmt.cc

Enumerations

enum class State
Name Value Comments
kInitial 0

PMT has been created, but not successfully mapped and added to its owner BTI

kActive 1

PMT has been created, mapped (or is in the process of mapping), and added to
its owner BTI.

kReleased 2

PMT has been explicitly unpinned. Its pinned VMO is released and it is not on
any BTI lists.

kQuarantined 3

Well... not really. Since we can enforce BTI access at a HW level, if a PMT
hits zero handle without an explicit unpin, we can still immediately return
the pages to the global page pool. So, the pinned VMO is released, and to
keep bookkeeping consistent, we still record the PMT state as having been
quarantined.

Defined at line 29 of file ../../zircon/kernel/dev/iommu/arm_smmu/include/dev/arm_smmu/smmu_pmt.h

Friends

class RefPtr