diff --git a/linux-ramdump-parser-v2/iommulib.py b/linux-ramdump-parser-v2/iommulib.py index 585f9e264d25f6e3df34e0dcac780fb5efe5c4f7..612473466ecb2462e0e764400e44e66423a80793 100644 --- a/linux-ramdump-parser-v2/iommulib.py +++ b/linux-ramdump-parser-v2/iommulib.py @@ -96,18 +96,22 @@ class IommuLib(object): pgtbl_ops_ptr = self.ramdump.read_structure_field( arm_smmu_domain_ptr, 'struct arm_smmu_domain', 'pgtbl_ops') - io_pgtable_ptr = self.ramdump.container_of( - pgtbl_ops_ptr, 'struct io_pgtable', 'ops') - - arm_lpae_io_pgtable_ptr = self.ramdump.container_of( - io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'iop') - - pg_table = self.ramdump.read_structure_field( - arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'pgd') - - level = self.ramdump.read_structure_field( - arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable', - 'levels') + pg_table = 0 + level = 0 + if pgtbl_ops_ptr != 0: + io_pgtable_ptr = self.ramdump.container_of( + pgtbl_ops_ptr, 'struct io_pgtable', 'ops') + + arm_lpae_io_pgtable_ptr = self.ramdump.container_of( + io_pgtable_ptr, 'struct arm_lpae_io_pgtable', 'iop') + + pg_table = self.ramdump.read_structure_field( + arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable', + 'pgd') + + level = self.ramdump.read_structure_field( + arm_lpae_io_pgtable_ptr, 'struct arm_lpae_io_pgtable', + 'levels') domain_create = Domain(pg_table, 0, [], client_name, ARM_SMMU_DOMAIN, level)