Key: ELF symbol (primary) ELF symbol source (with column ║) frame instruction +variable (range start) -variable (range end) inlining control-flow forwards branch ──>   backwards branch ══>

Compilation unit 0000af1c 0000c258 arch/arm64/kvm/hyp/nvhe/mem_protect.c instructions

header .debug_abbrev die abbreviation table .debug_info die tree .debug_line line number info .debug_line evaluated line info simple die tree simple die tree globals simple die tree locals inlined subroutine info inlined subroutine info by range **0000af1c <kvm_host_prepare_stage2>: 0000af1c <$x>: + kvm_host_prepare_stage2 params: +mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80) +dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78) kvm_host_prepare_stage2:80.0 (mem_protect.c) Sbepe ║{ +mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79 +dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79 +mmu var pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xaf1c 0xb380 (DW_OP_breg31 0x70) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:81 +params var pointer(struct kvm_nvhe_init_params<89e06>/<98494>) 0xaf1c 0xb380 (DW_OP_breg31 0x68) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:82 +ret var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x64) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83 +i var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x60) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83 ~ 0000af1c: d10643ff sub sp, sp, #0x190 <- 00009aa0(bl)<kvm_host_prepare_stage2> ~ 0000af20: a9177bfd stp x29, x30, [sp, #368] ~ 0000af24: f900c3fc str x28, [sp, #384] 0000af1c CFA:r31 r28:u r29:u r30:u ~ 0000af28: 9105c3fd add x29, sp, #0x170 ~ 0000af2c: f90043e0 str x0, [sp, #128] ~ 0000af30: f9003fe1 str x1, [sp, #120] kvm_host_prepare_stage2:81.21 (mem_protect.c) SbePe struct kvm_s2_mmu *║mmu = &host_kvm.arch.mmu; ~ 0000af34: b0000088 adrp x8, 1b000 <hyp_memory+0x460> ~ 0000af38: 910ec108 add x8, x8, #0x3b0 ~ 0000af3c: f9003be8 str x8, [sp, #112] kvm_host_prepare_stage2:85.2 (mem_protect.c) Sbepe ║prepare_host_vtcr(); ~ 0000af40: 94000110 bl b380 <prepare_host_vtcr> kvm_host_prepare_stage2:86.2 (mem_protect.c) Sbepe ║hyp_spin_lock_init(&host_kvm.lock); ~ ┌─0000af44: 14000001 b af48 <kvm_host_prepare_stage2+0x2c> <- 0000af40(bl-succ)<return> ~ └>0000af48: 2a1f03e8 mov w8, wzr <- 0000af44(b)<kvm_host_prepare_stage2+0x2c> kvm_host_prepare_stage2:86.2 (mem_protect.c) sbepe ║hyp_spin_lock_init(&host_kvm.lock); ~ 0000af4c: b9005be8 str w8, [sp, #88] ~ 0000af50: b0000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000af54: b9405be8 ldr w8, [sp, #88] ~ 0000af58: b9059928 str w8, [x9, #1432] ~ ┌─0000af5c: 14000001 b af60 <kvm_host_prepare_stage2+0x44> kvm_host_prepare_stage2:88.25 (mem_protect.c) Sbepe ret = prepare_s2_pools(║mem_pgt_pool, dev_pgt_pool); ~ └>0000af60: f94043e0 ldr x0, [sp, #128] <- 0000af5c(b)<kvm_host_prepare_stage2+0x44> kvm_host_prepare_stage2:88.39 (mem_protect.c) sbepe ret = prepare_s2_pools(mem_pgt_pool, ║dev_pgt_pool); ~ 0000af64: f9403fe1 ldr x1, [sp, #120] kvm_host_prepare_stage2:88.8 (mem_protect.c) sbepe ret = ║prepare_s2_pools(mem_pgt_pool, dev_pgt_pool); ~ 0000af68: 9400011e bl b3e0 <prepare_s2_pools> kvm_host_prepare_stage2:88.6 (mem_protect.c) sbepe ret ║= prepare_s2_pools(mem_pgt_pool, dev_pgt_pool); ~ 0000af6c: b90067e0 str w0, [sp, #100] <- 0000af68(bl-succ)<return> kvm_host_prepare_stage2:89.6 (mem_protect.c) Sbepe if (║ret) ~ 0000af70: b94067e8 ldr w8, [sp, #100] kvm_host_prepare_stage2:89.6 (mem_protect.c) sbepe if (║ret) ~ ┌──0000af74: 340000a8 cbz w8, af88 <kvm_host_prepare_stage2+0x6c> ~ │┌─0000af78: 14000001 b af7c <kvm_host_prepare_stage2+0x60> <- 0000af74(b.cc-succ)<fallthrough> ││ ││ kvm_host_prepare_stage2:90.10 (mem_protect.c) Sbepe return ║ret; ~ │└>0000af7c: b94067e8 ldr w8, [sp, #100] <- 0000af78(b)<kvm_host_prepare_stage2+0x60> kvm_host_prepare_stage2:90.3 (mem_protect.c) sbepe ║return ret; ~ 0000af80: b9008fe8 str w8, [sp, #140] ~ ┌──────┼──0000af84: 140000fa b b36c <kvm_host_prepare_stage2+0x450> │ │ │ │ kvm_host_prepare_stage2:92.8 (mem_protect.c) Sbepe ret = ║kvm_pgtable_stage2_init(&host_kvm.pgt, &host_kvm.arch, ~ │ └─>0000af88: b0000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000af74(b.cc)<kvm_host_prepare_stage2+0x6c> ~ 0000af8c: 910ec108 add x8, x8, #0x3b0 ~ 0000af90: 91062100 add x0, x8, #0x188 ~ 0000af94: 9106a102 add x2, x8, #0x1a8 ~ 0000af98: aa0803e1 mov x1, x8 ~ 0000af9c: 940026b1 bl 14a60 <kvm_pgtable_stage2_init> kvm_host_prepare_stage2:92.6 (mem_protect.c) sbepe ret ║= kvm_pgtable_stage2_init(&host_kvm.pgt, &host_kvm.arch, ~ 0000afa0: b90067e0 str w0, [sp, #100] <- 0000af9c(bl-succ)<return> kvm_host_prepare_stage2:94.6 (mem_protect.c) Sbepe if (║ret) ~ 0000afa4: b94067e9 ldr w9, [sp, #100] kvm_host_prepare_stage2:94.6 (mem_protect.c) sbepe if (║ret) ~ │ ┌──0000afa8: 340000a9 cbz w9, afbc <kvm_host_prepare_stage2+0xa0> │ │ ~ │ │┌─0000afac: 14000001 b afb0 <kvm_host_prepare_stage2+0x94> <- 0000afa8(b.cc-succ)<fallthrough> │ ││ │ ││ kvm_host_prepare_stage2:95.10 (mem_protect.c) Sbepe return ║ret; ~ │ │└>0000afb0: b94067e8 ldr w8, [sp, #100] <- 0000afac(b)<kvm_host_prepare_stage2+0x94> │ │ kvm_host_prepare_stage2:95.3 (mem_protect.c) sbepe ║return ret; ~ │ │ 0000afb4: b9008fe8 str w8, [sp, #140] ~ │ ┌────┼──0000afb8: 140000ed b b36c <kvm_host_prepare_stage2+0x450> │ │ │ │ │ │ kvm_host_prepare_stage2:97.18 (mem_protect.c) Sbepe mmu->pgd_phys = ║__hyp_pa(host_kvm.pgt.pgd); ~ │ │ └─>0000afbc: b0000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000afa8(b.cc)<kvm_host_prepare_stage2+0xa0> ~ │ │ 0000afc0: 910ec108 add x8, x8, #0x3b0 ~ │ │ 0000afc4: 91062109 add x9, x8, #0x188 ~ │ │ 0000afc8: f940c90a ldr x10, [x8, #400] ~ │ │ 0000afcc: 9000008b adrp x11, 1a000 <hyp_cpu_logical_map+0xe0> ~ │ │ 0000afd0: f9439d6b ldr x11, [x11, #1848] ~ │ │ 0000afd4: 8b0b014a add x10, x10, x11 │ │ kvm_host_prepare_stage2:97.2 (mem_protect.c) sbepe ║mmu->pgd_phys = __hyp_pa(host_kvm.pgt.pgd); ~ │ │ 0000afd8: f9403beb ldr x11, [sp, #112] │ │ kvm_host_prepare_stage2:97.16 (mem_protect.c) sbepe mmu->pgd_phys ║= __hyp_pa(host_kvm.pgt.pgd); ~ │ │ 0000afdc: f900096a str x10, [x11, #16] │ │ kvm_host_prepare_stage2:98.2 (mem_protect.c) Sbepe ║mmu->arch = &host_kvm.arch; ~ │ │ 0000afe0: f9403bea ldr x10, [sp, #112] │ │ kvm_host_prepare_stage2:98.12 (mem_protect.c) sbepe mmu->arch ║= &host_kvm.arch; ~ │ │ 0000afe4: f9001548 str x8, [x10, #40] │ │ kvm_host_prepare_stage2:99.2 (mem_protect.c) Sbepe ║mmu->pgt = &host_kvm.pgt; ~ │ │ 0000afe8: f9403be8 ldr x8, [sp, #112] │ │ kvm_host_prepare_stage2:99.11 (mem_protect.c) sbepe mmu->pgt ║= &host_kvm.pgt; ~ │ │ 0000afec: f9000d09 str x9, [x8, #24] │ │ kvm_host_prepare_stage2:100.2 (mem_protect.c) Sbepe ║mmu->vmid.vmid_gen = 0; ~ │ │ 0000aff0: f9403be8 ldr x8, [sp, #112] ~ │ │ 0000aff4: aa1f03e9 mov x9, xzr │ │ kvm_host_prepare_stage2:100.21 (mem_protect.c) sbepe mmu->vmid.vmid_gen ║= 0; ~ │ │ 0000aff8: f9000109 str x9, [x8] │ │ kvm_host_prepare_stage2:101.2 (mem_protect.c) Sbepe ║mmu->vmid.vmid = 0; ~ │ │ 0000affc: f9403be8 ldr x8, [sp, #112] ~ │ │ 0000b000: 2a1f03ec mov w12, wzr │ │ kvm_host_prepare_stage2:101.17 (mem_protect.c) sbepe mmu->vmid.vmid ║= 0; ~ │ │ 0000b004: b900090c str w12, [x8, #8] │ │ kvm_host_prepare_stage2:103.9 (mem_protect.c) Sbepe for (i ║= 0; i < hyp_nr_cpus; i++) { ~ │ │ 0000b008: b90063ec str w12, [sp, #96] │ │ kvm_host_prepare_stage2:103.7 (mem_protect.c) sbepe for (║i = 0; i < hyp_nr_cpus; i++) { ~ │ │ ┌─0000b00c: 14000001 b b010 <kvm_host_prepare_stage2+0xf4> │ │ │ │ │ │ kvm_host_prepare_stage2:103.14 (mem_protect.c) sbepe for (i = 0; ║i < hyp_nr_cpus; i++) { ~ │ │╔═══>└>0000b010: b98063e8 ldrsw x8, [sp, #96] <- 0000b00c(b)<kvm_host_prepare_stage2+0xf4>,v0000b1c4(b)<kvm_host_prepare_stage2+0xf4> │ │║ kvm_host_prepare_stage2:103.18 (mem_protect.c) sbepe for (i = 0; i < ║hyp_nr_cpus; i++) { ~ │ │║ 0000b014: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ │ │║ 0000b018: f9459d29 ldr x9, [x9, #2872] │ │║ kvm_host_prepare_stage2:103.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_nr_cpus; i++) { ~ │ │║ 0000b01c: eb090108 subs x8, x8, x9 ~ │ │║┌─────0000b020: 54000d42 b.cs b1c8 <kvm_host_prepare_stage2+0x2ac> // b.hs, b.nlast │ │║│ ~ │ │║│ ┌─0000b024: 14000001 b b028 <kvm_host_prepare_stage2+0x10c> <- 0000b020(b.cc-succ)<fallthrough> │ │║│ │ │ │║│ │ kvm_host_prepare_stage2:104.12 (mem_protect.c) Sbepe params = ║per_cpu_ptr(&kvm_init_params, i); ~ │ │║│ ┌─└>0000b028: 14000001 b b02c <kvm_host_prepare_stage2+0x110> <- 0000b024(b)<kvm_host_prepare_stage2+0x10c> │ │║│ │ ~ │ │║│ └──>0000b02c: aa1f03e8 mov x8, xzr <- 0000b028(b)<kvm_host_prepare_stage2+0x110> │ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i); +__vpp_verify var pointer(const(no type)) 0xb030 0xb038 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 ~ │ │║│ 0000b030: f9002be8 str x8, [sp, #80] ~ │ │║│ ┌─0000b034: 14000001 b b038 <kvm_host_prepare_stage2+0x11c> -__vpp_verify var pointer(const(no type)) 0xb030 0xb038 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 │ │║│ │ │ │║│ │ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i); +__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb038 0xb064 (DW_OP_breg31 0x40) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 ~ │ │║│ └>0000b038: d0000068 adrp x8, 19000 <kvm_host_data> <- 0000b034(b)<kvm_host_prepare_stage2+0x11c> ~ │ │║│ 0000b03c: 91386108 add x8, x8, #0xe18 ~ │ │║│ 0000b040: f90023e8 str x8, [sp, #64] ~ │ │║│ 0000b044: f94023e8 ldr x8, [sp, #64] ~ │ │║│ 0000b048: b94063e0 ldr w0, [sp, #96] ~ │ │║│ 0000b04c: f90007e8 str x8, [sp, #8] ~ │ │║│ 0000b050: 97fff1ce bl 7788 <__hyp_per_cpu_offset> │ │║│ ~ │ │║│ 0000b054: f94007e8 ldr x8, [sp, #8] <- 0000b050(bl-succ)<return> ~ │ │║│ 0000b058: 8b000108 add x8, x8, x0 ~ │ │║│ 0000b05c: f9001fe8 str x8, [sp, #56] ~ │ │║│ 0000b060: f9401fe8 ldr x8, [sp, #56] -__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb038 0xb064 (DW_OP_breg31 0x40) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 │ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i); +__vpp_verify var pointer(const(no type)) 0xb064 0xb068 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 ~ │ │║│ 0000b064: f90027e8 str x8, [sp, #72] -__vpp_verify var pointer(const(no type)) 0xb064 0xb068 (DW_OP_breg31 0x50) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 │ │║│ kvm_host_prepare_stage2:104.12 (mem_protect.c) sbepe params = ║per_cpu_ptr(&kvm_init_params, i); ~ │ │║│ 0000b068: f94027e8 ldr x8, [sp, #72] │ │║│ kvm_host_prepare_stage2:104.10 (mem_protect.c) sbepe params ║= per_cpu_ptr(&kvm_init_params, i); ~ │ │║│ 0000b06c: f90037e8 str x8, [sp, #104] │ │║│ kvm_host_prepare_stage2:105.33 (mem_protect.c) Sbepe params->vttbr = kvm_get_vttbr(║mmu); ~ │ │║│ 0000b070: f9403be8 ldr x8, [sp, #112] ~ │ │║│ 0000b074: f9005be8 str x8, [sp, #176] z: 0xb078 0xb17c kvm_get_vttbr inlined from kvm_host_prepare_stage2:105 (mem_protect.c) <98706>: z │ │║│ kvm_get_vttbr:335.27 (kvm_mmu.h) Sbepe struct kvm_vmid *vmid = &║mmu->vmid; +mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb078 0xb17c (DW_OP_breg31 0xb0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb078 0xb17c (DW_OP_breg31 0xa8) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0xa0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x98) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x90) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~z │ │║│ 0000b078: f9405be8 ldr x8, [sp, #176] z │ │║│ kvm_get_vttbr:335.19 (kvm_mmu.h) sbepe struct kvm_vmid *║vmid = &mmu->vmid; ~z │ │║│ 0000b07c: f90057e8 str x8, [sp, #168] ~z │ │║│ 0000b080: 528001e9 mov w9, #0xf // #15 ~z │ │║│ 0000b084: b900bbe9 str w9, [sp, #184] a: 0xb088 0xb144 cpus_have_const_cap inlined from system_supports_cnp:694 (cpufeature.h) <9875c>:<98747>:<98706>: b: 0xb088 0xb144 system_supports_cnp inlined from kvm_get_vttbr:337 (kvm_mmu.h) <98747>:<98706>: zab │ │║│ cpus_have_const_cap:479.30 (cpufeature.h) Sbepe return cpus_have_final_cap(║num); +num param int (base type, DW_ATE_signed size:4) 0xb088 0xb144 (DW_OP_breg31 0xb8) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~zab │ │║│ 0000b088: b940bbe9 ldr w9, [sp, #184] ~zab │ │║│ 0000b08c: b81503a9 stur w9, [x29, #-176] c: 0xb090 0xb138 cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <9877a>:<9875c>:<98747>:<98706>: d: 0xb090 0xb0b8 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98798>:<9877a>:<9875c>:<98747>:<98706>: zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) Sbepe return ║static_branch_likely(&arm64_const_caps_ready); +num param int (base type, DW_ATE_signed size:4) 0xb090 0xb138 (DW_OP_fbreg -0xb0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb090 0xb0b8 (DW_OP_fbreg -0x9c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~zabcd │ │║│ 0000b090: 90000088 adrp x8, 1b000 <hyp_memory+0x460> ~zabcd │ │║│ 0000b094: b9479909 ldr w9, [x8, #1944] ~zabcd │ │║│ 0000b098: 71000129 subs w9, w9, #0x0 ~zabcd │ │║│ 0000b09c: 1a9f07ea cset w10, ne // ne = any ~zabcd │ │║│ 0000b0a0: 381643aa sturb w10, [x29, #-156] zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zabcd │ │║│ 0000b0a4: 385643aa ldurb w10, [x29, #-156] ~zabcd │ │║│ 0000b0a8: 2a0a03e8 mov w8, w10 ~zabcd │ │║│ 0000b0ac: 92400108 and x8, x8, #0x1 zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zabcd │ │║│ 0000b0b0: f81583a8 stur x8, [x29, #-168] zabcd │ │║│ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~zabcd │ │║│ 0000b0b4: f85583a8 ldur x8, [x29, #-168] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb090 0xb0b8 (DW_OP_fbreg -0x9c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c zabc │ │║│ cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~zabc │ │║│┌────0000b0b8: b4000388 cbz x8, b128 <kvm_host_prepare_stage2+0x20c> │ │║││ ~zabc │ │║││ ┌─0000b0bc: 14000001 b b0c0 <kvm_host_prepare_stage2+0x1a4> <- 0000b0b8(b.cc-succ)<fallthrough> │ │║││ │ zabc │ │║││ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~zabc │ │║││ └>0000b0c0: b85503a8 ldur w8, [x29, #-176] <- 0000b0bc(b)<kvm_host_prepare_stage2+0x1a4> ~zabc │ │║││ 0000b0c4: b81783a8 stur w8, [x29, #-136] e: 0xb0c8 0xb128 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <987c5>:<9877a>:<9875c>:<98747>:<98706>: zabce │ │║││ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0xb0c8 0xb128 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~zabce │ │║││ 0000b0c8: b85783a8 ldur w8, [x29, #-136] zabce │ │║││ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~zabce │ │║││ 0000b0cc: 7100f508 subs w8, w8, #0x3d ~zabce │ │║││ ┌──0000b0d0: 540000ab b.lt b0e4 <kvm_host_prepare_stage2+0x1c8> // b.tstop │ │║││ │ ~zabce │ │║││ │┌─0000b0d4: 14000001 b b0d8 <kvm_host_prepare_stage2+0x1bc> <- 0000b0d0(b.cc-succ)<fallthrough> │ │║││ ││ ~zabce │ │║││ │└>0000b0d8: 2a1f03e8 mov w8, wzr <- 0000b0d4(b)<kvm_host_prepare_stage2+0x1bc> zabce │ │║││ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~zabce │ │║││ │ 0000b0dc: 3817f3a8 sturb w8, [x29, #-129] ~zabce │ │║││┌┼──0000b0e0: 14000013 b b12c <kvm_host_prepare_stage2+0x210> │ │║││││ zabce │ │║││││ __cpus_have_const_cap:446.9 (cpufeature.h) Sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb0e4 0xb118 (DW_OP_fbreg -0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~zabce │ │║│││└─>0000b0e4: b89783a8 ldursw x8, [x29, #-136] <- 0000b0d0(b.cc)<kvm_host_prepare_stage2+0x1c8> ~zabce │ │║│││ 0000b0e8: d37ced08 lsl x8, x8, #4 ~zabce │ │║│││ 0000b0ec: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~zabce │ │║│││ 0000b0f0: 911e8129 add x9, x9, #0x7a0 ~zabce │ │║│││ 0000b0f4: b868692a ldr w10, [x9, x8] ~zabce │ │║│││ 0000b0f8: 7100014a subs w10, w10, #0x0 ~zabce │ │║│││ 0000b0fc: 1a9f07eb cset w11, ne // ne = any ~zabce │ │║│││ 0000b100: 381743ab sturb w11, [x29, #-140] zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zabce │ │║│││ 0000b104: 385743ab ldurb w11, [x29, #-140] ~zabce │ │║│││ 0000b108: 2a0b03e8 mov w8, w11 ~zabce │ │║│││ 0000b10c: 92400108 and x8, x8, #0x1 zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zabce │ │║│││ 0000b110: f81683a8 stur x8, [x29, #-152] zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zabce │ │║│││ 0000b114: f85683a8 ldur x8, [x29, #-152] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb0e4 0xb118 (DW_OP_fbreg -0x8c) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c zabce │ │║│││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~zabce │ │║│││ 0000b118: f1000108 subs x8, x8, #0x0 ~zabce │ │║│││ 0000b11c: 1a9f07eb cset w11, ne // ne = any zabce │ │║│││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~zabce │ │║│││ 0000b120: 3817f3ab sturb w11, [x29, #-129] ~zabce │ │║│││ ┌─0000b124: 14000002 b b12c <kvm_host_prepare_stage2+0x210> -num param int (base type, DW_ATE_signed size:4) 0xb0c8 0xb128 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c │ │║│││ │ zabc │ │║│││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~zabc │ │║│└┼─┼>0000b128: d4210000 brk #0x800 <- 0000b0b8(b.cc)<kvm_host_prepare_stage2+0x20c> │ │║│ │ │ f: 0xb12c 0xb130 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <987c5>:<9877a>:<9875c>:<98747>:<98706>: zabcf │ │║│ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0xb12c 0xb130 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~zabcf │ │║│ └>└>0000b12c: 3857f3a8 ldurb w8, [x29, #-129] <- 0000b0e0(b)<kvm_host_prepare_stage2+0x210>,0000b124(b)<kvm_host_prepare_stage2+0x210> -num param int (base type, DW_ATE_signed size:4) 0xb12c 0xb130 (DW_OP_fbreg -0x88) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c zabc │ │║│ cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~zabc │ │║│ 0000b130: 381573a8 sturb w8, [x29, #-169] zabc │ │║│ cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~zabc │ │║│ 0000b134: 385573a8 ldurb w8, [x29, #-169] -num param int (base type, DW_ATE_signed size:4) 0xb090 0xb138 (DW_OP_fbreg -0xb0) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c zab │ │║│ cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~zab │ │║│ 0000b138: 3814f3a8 sturb w8, [x29, #-177] zab │ │║│ cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~zab │ │║│ 0000b13c: 3854f3a8 ldurb w8, [x29, #-177] ~zab │ │║│ 0000b140: 2a0803e9 mov w9, w8 -num param int (base type, DW_ATE_signed size:4) 0xb088 0xb144 (DW_OP_breg31 0xb8) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c z │ │║│ kvm_get_vttbr:337.6 (kvm_mmu.h) Sbepe u64 ║cnp = system_supports_cnp() ? VTTBR_CNP_BIT : 0; ~z │ │║│ 0000b144: f9004be9 str x9, [sp, #144] z │ │║│ kvm_get_vttbr:339.10 (kvm_mmu.h) Sbepe baddr = ║mmu->pgd_phys; ~z │ │║│ 0000b148: f9405be9 ldr x9, [sp, #176] z │ │║│ kvm_get_vttbr:339.15 (kvm_mmu.h) sbepe baddr = mmu->║pgd_phys; ~z │ │║│ 0000b14c: f9400929 ldr x9, [x9, #16] z │ │║│ kvm_get_vttbr:339.8 (kvm_mmu.h) sbepe baddr ║= mmu->pgd_phys; ~z │ │║│ 0000b150: f9004fe9 str x9, [sp, #152] z │ │║│ kvm_get_vttbr:340.20 (kvm_mmu.h) Sbepe vmid_field = (u64)║vmid->vmid << VTTBR_VMID_SHIFT; ~z │ │║│ 0000b154: f94057e9 ldr x9, [sp, #168] z │ │║│ kvm_get_vttbr:340.15 (kvm_mmu.h) sbepe vmid_field = ║(u64)vmid->vmid << VTTBR_VMID_SHIFT; ~z │ │║│ 0000b158: b9400928 ldr w8, [x9, #8] ~z │ │║│ 0000b15c: 2a0803e9 mov w9, w8 z │ │║│ kvm_get_vttbr:340.31 (kvm_mmu.h) sbepe vmid_field = (u64)vmid->vmid ║<< VTTBR_VMID_SHIFT; ~z │ │║│ 0000b160: d3503d29 lsl x9, x9, #48 z │ │║│ kvm_get_vttbr:340.13 (kvm_mmu.h) sbepe vmid_field ║= (u64)vmid->vmid << VTTBR_VMID_SHIFT; ~z │ │║│ 0000b164: f90053e9 str x9, [sp, #160] z │ │║│ kvm_get_vttbr:341.9 (kvm_mmu.h) Sbepe return ║kvm_phys_to_vttbr(baddr) | vmid_field | cnp; ~z │ │║│ 0000b168: f9404fe9 ldr x9, [sp, #152] z │ │║│ kvm_get_vttbr:341.36 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | ║vmid_field | cnp; ~z │ │║│ 0000b16c: f94053ea ldr x10, [sp, #160] z │ │║│ kvm_get_vttbr:341.34 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) ║| vmid_field | cnp; ~z │ │║│ 0000b170: aa0a0129 orr x9, x9, x10 z │ │║│ kvm_get_vttbr:341.49 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field | ║cnp; ~z │ │║│ 0000b174: f9404bea ldr x10, [sp, #144] z │ │║│ kvm_get_vttbr:341.47 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field ║| cnp; ~z │ │║│ 0000b178: aa0a0129 orr x9, x9, x10 -mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb078 0xb17c (DW_OP_breg31 0xb0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb078 0xb17c (DW_OP_breg31 0xa8) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0xa0) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x98) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb078 0xb17c (DW_OP_breg31 0x90) kvm_get_vttbr(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c │ │║│ kvm_host_prepare_stage2:105.3 (mem_protect.c) Sbepe ║params->vttbr = kvm_get_vttbr(mmu); ~ │ │║│ 0000b17c: f94037ea ldr x10, [sp, #104] │ │║│ kvm_host_prepare_stage2:105.17 (mem_protect.c) sbepe params->vttbr ║= kvm_get_vttbr(mmu); ~ │ │║│ 0000b180: f9001949 str x9, [x10, #48] │ │║│ kvm_host_prepare_stage2:106.32 (mem_protect.c) Sbepe params->vtcr = host_kvm.arch.║vtcr; ~ │ │║│ 0000b184: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ │ │║│ 0000b188: f941f129 ldr x9, [x9, #992] │ │║│ kvm_host_prepare_stage2:106.3 (mem_protect.c) sbepe ║params->vtcr = host_kvm.arch.vtcr; ~ │ │║│ 0000b18c: f94037ea ldr x10, [sp, #104] │ │║│ kvm_host_prepare_stage2:106.16 (mem_protect.c) sbepe params->vtcr ║= host_kvm.arch.vtcr; ~ │ │║│ 0000b190: f9001d49 str x9, [x10, #56] │ │║│ kvm_host_prepare_stage2:107.3 (mem_protect.c) Sbepe ║params->hcr_el2 |= HCR_VM; ~ │ │║│ 0000b194: f94037e9 ldr x9, [sp, #104] │ │║│ kvm_host_prepare_stage2:107.19 (mem_protect.c) sbepe params->hcr_el2 ║|= HCR_VM; ~ │ │║│ 0000b198: f940152a ldr x10, [x9, #40] ~ │ │║│ 0000b19c: b240014a orr x10, x10, #0x1 ~ │ │║│ 0000b1a0: f900152a str x10, [x9, #40] │ │║│ kvm_host_prepare_stage2:108.23 (mem_protect.c) Sbepe __flush_dcache_area(║params, sizeof(*params)); ~ │ │║│ 0000b1a4: f94037e0 ldr x0, [sp, #104] ~ │ │║│ 0000b1a8: 52800808 mov w8, #0x40 // #64 ~ │ │║│ 0000b1ac: 2a0803e1 mov w1, w8 │ │║│ kvm_host_prepare_stage2:108.3 (mem_protect.c) sbepe ║__flush_dcache_area(params, sizeof(*params)); ~ │ │║│ 0000b1b0: 97fff9fe bl 99a8 <__flush_dcache_area> │ │║│ │ │║│ kvm_host_prepare_stage2:109.2 (mem_protect.c) Sbepe } ~ │ │║│ ┌─0000b1b4: 14000001 b b1b8 <kvm_host_prepare_stage2+0x29c> <- 0000b1b0(bl-succ)<return> │ │║│ │ │ │║│ │ kvm_host_prepare_stage2:103.32 (mem_protect.c) Sbepe for (i = 0; i < hyp_nr_cpus; i║++) { ~ │ │║│ └>0000b1b8: b94063e8 ldr w8, [sp, #96] <- 0000b1b4(b)<kvm_host_prepare_stage2+0x29c> ~ │ │║│ 0000b1bc: 11000508 add w8, w8, #0x1 ~ │ │║│ 0000b1c0: b90063e8 str w8, [sp, #96] │ │║│ kvm_host_prepare_stage2:103.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_nr_cpus; i++) { ~ │ │╚╪═════0000b1c4: 17ffff93 b b010 <kvm_host_prepare_stage2+0xf4> │ │ │ │ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) Sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); ~ │ │ └──>┌─0000b1c8: 14000001 b b1cc <kvm_host_prepare_stage2+0x2b0> <- 0000b020(b.cc)<kvm_host_prepare_stage2+0x2ac> │ │ │ │ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb1cc 0xb220 (DW_OP_breg31 0x30) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 ~ │ │ ┌─└>0000b1cc: 14000001 b b1d0 <kvm_host_prepare_stage2+0x2b4> <- 0000b1c8(b)<kvm_host_prepare_stage2+0x2b0> │ │ │ ~ │ │ └──>0000b1d0: aa1f03e8 mov x8, xzr <- 0000b1cc(b)<kvm_host_prepare_stage2+0x2b4> │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); +__vpp_verify var pointer(const(no type)) 0xb1d4 0xb1dc (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 ~ │ │ 0000b1d4: f90017e8 str x8, [sp, #40] ~ │ │ ┌─0000b1d8: 14000001 b b1dc <kvm_host_prepare_stage2+0x2c0> -__vpp_verify var pointer(const(no type)) 0xb1d4 0xb1dc (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 │ │ │ │ │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); +__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb1dc 0xb204 (DW_OP_breg31 0x18) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 ~ │ │ └>0000b1dc: d0000068 adrp x8, 19000 <kvm_host_data> <- 0000b1d8(b)<kvm_host_prepare_stage2+0x2c0> ~ │ │ 0000b1e0: 91386108 add x8, x8, #0xe18 ~ │ │ 0000b1e4: f9000fe8 str x8, [sp, #24] ~ │ │ 0000b1e8: f9400fe8 ldr x8, [sp, #24] ~ │ │ 0000b1ec: f90003e8 str x8, [sp] ~ │ │ 0000b1f0: 940000c5 bl b504 <__hyp_my_cpu_offset> │ │ ~ │ │ 0000b1f4: f94003e8 ldr x8, [sp] <- 0000b1f0(bl-succ)<return> ~ │ │ 0000b1f8: 8b000108 add x8, x8, x0 ~ │ │ 0000b1fc: f9000be8 str x8, [sp, #16] ~ │ │ 0000b200: f9400be8 ldr x8, [sp, #16] -__ptr var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb1dc 0xb204 (DW_OP_breg31 0x18) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); +__vpp_verify var pointer(const(no type)) 0xb204 0xb208 (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 ~ │ │ 0000b204: f90013e8 str x8, [sp, #32] -__vpp_verify var pointer(const(no type)) 0xb204 0xb208 (DW_OP_breg31 0x28) lexblock:lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); ~ │ │ 0000b208: f94013e8 ldr x8, [sp, #32] │ │ kvm_host_prepare_stage2:111.2 (mem_protect.c) sbepe ║write_sysreg(this_cpu_ptr(&kvm_init_params)->hcr_el2, hcr_el2); ~ │ │ 0000b20c: f9401508 ldr x8, [x8, #40] ~ │ │ 0000b210: f9001be8 str x8, [sp, #48] ~ │ │ 0000b214: f9401be8 ldr x8, [sp, #48] ~ │ │ 0000b218: d51c1108 msr hcr_el2, x8 ~ │ │ ┌─0000b21c: 14000001 b b220 <kvm_host_prepare_stage2+0x304> -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb1cc 0xb220 (DW_OP_breg31 0x30) lexblock:kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:111 │ │ │ │ │ │ kvm_host_prepare_stage2:112.50 (mem_protect.c) Sbepe __load_stage2(&host_kvm.arch.mmu, host_kvm.arch.║vtcr); ~ │ │ └>0000b220: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b21c(b)<kvm_host_prepare_stage2+0x304> ~ │ │ 0000b224: 910ec108 add x8, x8, #0x3b0 ~ │ │ 0000b228: f9401909 ldr x9, [x8, #48] ~ │ │ 0000b22c: f81983a8 stur x8, [x29, #-104] ~ │ │ 0000b230: f81903a9 stur x9, [x29, #-112] g: 0xb234 0xb364 __load_stage2 inlined from kvm_host_prepare_stage2:112 (mem_protect.c) <98843>: g │ │ __load_stage2:350.2 (kvm_mmu.h) Sbepe ║write_sysreg(vtcr, vtcr_el2); +mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb234 0xb364 (DW_OP_fbreg -0x68) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +vtcr param long unsigned int (base type, DW_ATE_unsigned size:8) 0xb234 0xb364 (DW_OP_fbreg -0x70) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb234 0xb244 (DW_OP_fbreg -0x78) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~g │ │ 0000b234: f85903a8 ldur x8, [x29, #-112] ~g │ │ 0000b238: f81883a8 stur x8, [x29, #-120] ~g │ │ 0000b23c: f85883a8 ldur x8, [x29, #-120] ~g │ │ 0000b240: d51c2148 msr vtcr_el2, x8 -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb234 0xb244 (DW_OP_fbreg -0x78) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c g │ │ __load_stage2:351.2 (kvm_mmu.h) Sbepe ║write_sysreg(kvm_get_vttbr(mmu), vttbr_el2); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb244 0xb35c (DW_OP_fbreg -0x80) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~g │ │ 0000b244: f85983a8 ldur x8, [x29, #-104] ~g │ │ 0000b248: f81c03a8 stur x8, [x29, #-64] h: 0xb24c 0xb350 kvm_get_vttbr inlined from __load_stage2:351 (kvm_mmu.h) <98896>:<lexical_block>:<98843>: gh │ │ kvm_get_vttbr:335.27 (kvm_mmu.h) Sbepe struct kvm_vmid *vmid = &║mmu->vmid; +mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb24c 0xb350 (DW_OP_fbreg -0x40) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb24c 0xb350 (DW_OP_fbreg -0x48) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x50) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x58) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x60) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~gh │ │ 0000b24c: f85c03a8 ldur x8, [x29, #-64] gh │ │ kvm_get_vttbr:335.19 (kvm_mmu.h) sbepe struct kvm_vmid *║vmid = &mmu->vmid; ~gh │ │ 0000b250: f81b83a8 stur x8, [x29, #-72] ~gh │ │ 0000b254: 528001ea mov w10, #0xf // #15 ~gh │ │ 0000b258: b81c83aa stur w10, [x29, #-56] i: 0xb25c 0xb318 cpus_have_const_cap inlined from system_supports_cnp:694 (cpufeature.h) <988ec>:<988d7>:<98896>:<lexical_block>:<98843>: j: 0xb25c 0xb318 system_supports_cnp inlined from kvm_get_vttbr:337 (kvm_mmu.h) <988d7>:<98896>:<lexical_block>:<98843>: ghij │ │ cpus_have_const_cap:479.30 (cpufeature.h) Sbepe return cpus_have_final_cap(║num); +num param int (base type, DW_ATE_signed size:4) 0xb25c 0xb318 (DW_OP_fbreg -0x38) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ghij │ │ 0000b25c: b85c83aa ldur w10, [x29, #-56] ~ghij │ │ 0000b260: b81d03aa stur w10, [x29, #-48] k: 0xb264 0xb30c cpus_have_final_cap inlined from cpus_have_const_cap:479 (cpufeature.h) <98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>: l: 0xb264 0xb28c system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98926>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>: ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) Sbepe return ║static_branch_likely(&arm64_const_caps_ready); +num param int (base type, DW_ATE_signed size:4) 0xb264 0xb30c (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb264 0xb28c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ghijkl │ │ 0000b264: 90000088 adrp x8, 1b000 <hyp_memory+0x460> ~ghijkl │ │ 0000b268: b947990a ldr w10, [x8, #1944] ~ghijkl │ │ 0000b26c: 7100014a subs w10, w10, #0x0 ~ghijkl │ │ 0000b270: 1a9f07eb cset w11, ne // ne = any ~ghijkl │ │ 0000b274: 381e43ab sturb w11, [x29, #-28] ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~ghijkl │ │ 0000b278: 385e43ab ldurb w11, [x29, #-28] ~ghijkl │ │ 0000b27c: 2a0b03e8 mov w8, w11 ~ghijkl │ │ 0000b280: 92400108 and x8, x8, #0x1 ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~ghijkl │ │ 0000b284: f81d83a8 stur x8, [x29, #-40] ghijkl │ │ system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~ghijkl │ │ 0000b288: f85d83a8 ldur x8, [x29, #-40] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb264 0xb28c (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ghijk │ │ cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~ghijk │ │ ┌────0000b28c: b4000388 cbz x8, b2fc <kvm_host_prepare_stage2+0x3e0> │ │ │ ~ghijk │ │ │ ┌─0000b290: 14000001 b b294 <kvm_host_prepare_stage2+0x378> <- 0000b28c(b.cc-succ)<fallthrough> │ │ │ │ ghijk │ │ │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~ghijk │ │ │ └>0000b294: b85d03a8 ldur w8, [x29, #-48] <- 0000b290(b)<kvm_host_prepare_stage2+0x378> ~ghijk │ │ │ 0000b298: b81f83a8 stur w8, [x29, #-8] m: 0xb29c 0xb2fc (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98952>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>: ghijkm │ │ │ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0xb29c 0xb2fc (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ghijkm │ │ │ 0000b29c: b85f83a8 ldur w8, [x29, #-8] ghijkm │ │ │ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~ghijkm │ │ │ 0000b2a0: 7100f508 subs w8, w8, #0x3d ~ghijkm │ │ │ ┌──0000b2a4: 540000ab b.lt b2b8 <kvm_host_prepare_stage2+0x39c> // b.tstop │ │ │ │ ~ghijkm │ │ │ │┌─0000b2a8: 14000001 b b2ac <kvm_host_prepare_stage2+0x390> <- 0000b2a4(b.cc-succ)<fallthrough> │ │ │ ││ ~ghijkm │ │ │ │└>0000b2ac: 2a1f03e8 mov w8, wzr <- 0000b2a8(b)<kvm_host_prepare_stage2+0x390> ghijkm │ │ │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~ghijkm │ │ │ │ 0000b2b0: 381ff3a8 sturb w8, [x29, #-1] ~ghijkm │ │ │┌┼──0000b2b4: 14000013 b b300 <kvm_host_prepare_stage2+0x3e4> │ │ │││ ghijkm │ │ │││ __cpus_have_const_cap:446.9 (cpufeature.h) Sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb2b8 0xb2ec (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ghijkm │ │ ││└─>0000b2b8: b89f83a8 ldursw x8, [x29, #-8] <- 0000b2a4(b.cc)<kvm_host_prepare_stage2+0x39c> ~ghijkm │ │ ││ 0000b2bc: d37ced08 lsl x8, x8, #4 ~ghijkm │ │ ││ 0000b2c0: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ghijkm │ │ ││ 0000b2c4: 911e8129 add x9, x9, #0x7a0 ~ghijkm │ │ ││ 0000b2c8: b868692a ldr w10, [x9, x8] ~ghijkm │ │ ││ 0000b2cc: 7100014a subs w10, w10, #0x0 ~ghijkm │ │ ││ 0000b2d0: 1a9f07eb cset w11, ne // ne = any ~ghijkm │ │ ││ 0000b2d4: 381f43ab sturb w11, [x29, #-12] ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~ghijkm │ │ ││ 0000b2d8: 385f43ab ldurb w11, [x29, #-12] ~ghijkm │ │ ││ 0000b2dc: 2a0b03e8 mov w8, w11 ~ghijkm │ │ ││ 0000b2e0: 92400108 and x8, x8, #0x1 ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~ghijkm │ │ ││ 0000b2e4: f81e83a8 stur x8, [x29, #-24] ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~ghijkm │ │ ││ 0000b2e8: f85e83a8 ldur x8, [x29, #-24] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb2b8 0xb2ec (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ghijkm │ │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~ghijkm │ │ ││ 0000b2ec: f1000108 subs x8, x8, #0x0 ~ghijkm │ │ ││ 0000b2f0: 1a9f07eb cset w11, ne // ne = any ghijkm │ │ ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~ghijkm │ │ ││ 0000b2f4: 381ff3ab sturb w11, [x29, #-1] ~ghijkm │ │ ││ ┌─0000b2f8: 14000002 b b300 <kvm_host_prepare_stage2+0x3e4> -num param int (base type, DW_ATE_signed size:4) 0xb29c 0xb2fc (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c │ │ ││ │ ghijk │ │ ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~ghijk │ │ └┼─┼>0000b2fc: d4210000 brk #0x800 <- 0000b28c(b.cc)<kvm_host_prepare_stage2+0x3e0> │ │ │ │ n: 0xb300 0xb304 (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98952>:<98909>:<988ec>:<988d7>:<98896>:<lexical_block>:<98843>: ghijkn │ │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0xb300 0xb304 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ghijkn │ │ └>└>0000b300: 385ff3a8 ldurb w8, [x29, #-1] <- 0000b2b4(b)<kvm_host_prepare_stage2+0x3e4>,0000b2f8(b)<kvm_host_prepare_stage2+0x3e4> -num param int (base type, DW_ATE_signed size:4) 0xb300 0xb304 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ghijk │ │ cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~ghijk │ │ 0000b304: 381d73a8 sturb w8, [x29, #-41] ghijk │ │ cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~ghijk │ │ 0000b308: 385d73a8 ldurb w8, [x29, #-41] -num param int (base type, DW_ATE_signed size:4) 0xb264 0xb30c (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c ghij │ │ cpus_have_const_cap:479.3 (cpufeature.h) Sbepe ║return cpus_have_final_cap(num); ~ghij │ │ 0000b30c: 381cf3a8 sturb w8, [x29, #-49] ghij │ │ cpus_have_const_cap:484.1 (cpufeature.h) Sbepe ║} ~ghij │ │ 0000b310: 385cf3a8 ldurb w8, [x29, #-49] ~ghij │ │ 0000b314: 2a0803e9 mov w9, w8 -num param int (base type, DW_ATE_signed size:4) 0xb25c 0xb318 (DW_OP_fbreg -0x38) cpus_have_const_cap(inlined):system_supports_cnp(inlined):kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c gh │ │ kvm_get_vttbr:337.6 (kvm_mmu.h) Sbepe u64 ║cnp = system_supports_cnp() ? VTTBR_CNP_BIT : 0; ~gh │ │ 0000b318: f81a03a9 stur x9, [x29, #-96] gh │ │ kvm_get_vttbr:339.10 (kvm_mmu.h) Sbepe baddr = ║mmu->pgd_phys; ~gh │ │ 0000b31c: f85c03a9 ldur x9, [x29, #-64] gh │ │ kvm_get_vttbr:339.15 (kvm_mmu.h) sbepe baddr = mmu->║pgd_phys; ~gh │ │ 0000b320: f9400929 ldr x9, [x9, #16] gh │ │ kvm_get_vttbr:339.8 (kvm_mmu.h) sbepe baddr ║= mmu->pgd_phys; ~gh │ │ 0000b324: f81a83a9 stur x9, [x29, #-88] gh │ │ kvm_get_vttbr:340.20 (kvm_mmu.h) Sbepe vmid_field = (u64)║vmid->vmid << VTTBR_VMID_SHIFT; ~gh │ │ 0000b328: f85b83a9 ldur x9, [x29, #-72] gh │ │ kvm_get_vttbr:340.15 (kvm_mmu.h) sbepe vmid_field = ║(u64)vmid->vmid << VTTBR_VMID_SHIFT; ~gh │ │ 0000b32c: b9400928 ldr w8, [x9, #8] ~gh │ │ 0000b330: 2a0803e9 mov w9, w8 gh │ │ kvm_get_vttbr:340.31 (kvm_mmu.h) sbepe vmid_field = (u64)vmid->vmid ║<< VTTBR_VMID_SHIFT; ~gh │ │ 0000b334: d3503d29 lsl x9, x9, #48 gh │ │ kvm_get_vttbr:340.13 (kvm_mmu.h) sbepe vmid_field ║= (u64)vmid->vmid << VTTBR_VMID_SHIFT; ~gh │ │ 0000b338: f81b03a9 stur x9, [x29, #-80] gh │ │ kvm_get_vttbr:341.9 (kvm_mmu.h) Sbepe return ║kvm_phys_to_vttbr(baddr) | vmid_field | cnp; ~gh │ │ 0000b33c: f85a83a9 ldur x9, [x29, #-88] gh │ │ kvm_get_vttbr:341.36 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | ║vmid_field | cnp; ~gh │ │ 0000b340: f85b03aa ldur x10, [x29, #-80] gh │ │ kvm_get_vttbr:341.34 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) ║| vmid_field | cnp; ~gh │ │ 0000b344: aa0a0129 orr x9, x9, x10 gh │ │ kvm_get_vttbr:341.49 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field | ║cnp; ~gh │ │ 0000b348: f85a03aa ldur x10, [x29, #-96] gh │ │ kvm_get_vttbr:341.47 (kvm_mmu.h) sbepe return kvm_phys_to_vttbr(baddr) | vmid_field ║| cnp; ~gh │ │ 0000b34c: aa0a0129 orr x9, x9, x10 -mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb24c 0xb350 (DW_OP_fbreg -0x40) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -vmid var pointer(struct kvm_vmid<89e06>/<89f4f>) 0xb24c 0xb350 (DW_OP_fbreg -0x48) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -vmid_field var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x50) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -baddr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x58) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -cnp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb24c 0xb350 (DW_OP_fbreg -0x60) kvm_get_vttbr(inlined):lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c g │ │ __load_stage2:351.2 (kvm_mmu.h) Sbepe ║write_sysreg(kvm_get_vttbr(mmu), vttbr_el2); ~g │ │ 0000b350: f81803a9 stur x9, [x29, #-128] ~g │ │ 0000b354: f85803a9 ldur x9, [x29, #-128] ~g │ │ 0000b358: d51c2109 msr vttbr_el2, x9 -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb244 0xb35c (DW_OP_fbreg -0x80) lexblock:__load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c g │ │ __load_stage2:358.2 (kvm_mmu.h) Sbepe ║asm(ALTERNATIVE("nop", "isb", ARM64_WORKAROUND_SPECULATIVE_AT)); ~g │ │ 0000b35c: d503201f nop ~g │ │ 0000b360: 2a1f03e8 mov w8, wzr -mmu param pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xb234 0xb364 (DW_OP_fbreg -0x68) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c -vtcr param long unsigned int (base type, DW_ATE_unsigned size:8) 0xb234 0xb364 (DW_OP_fbreg -0x70) __load_stage2(inlined):kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c │ │ kvm_host_prepare_stage2:114.2 (mem_protect.c) Sbepe ║return 0; ~ │ │ 0000b364: b9008fe8 str w8, [sp, #140] ~ │ │ ┌─0000b368: 14000001 b b36c <kvm_host_prepare_stage2+0x450> │ │ │ │ │ │ kvm_host_prepare_stage2:115.1 (mem_protect.c) Sbepe ║} ~ └>└────>└>0000b36c: b9408fe0 ldr w0, [sp, #140] <- 0000af84(b)<kvm_host_prepare_stage2+0x450>,0000afb8(b)<kvm_host_prepare_stage2+0x450>,0000b368(b)<kvm_host_prepare_stage2+0x450> ~ 0000b370: f940c3fc ldr x28, [sp, #384] ~ 0000b374: a9577bfd ldp x29, x30, [sp, #368] ~ 0000b378: 910643ff add sp, sp, #0x190 0000af2c CFA:r29+32 r28:c-16 r29:c-32 r30:c-24 ~ 0000b37c: d65f03c0 ret -mem_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x80) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79 -dev_pgt_pool param pointer(no type) 0xaf1c 0xb380 (DW_OP_breg31 0x78) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:79 -mmu var pointer(struct kvm_s2_mmu<89e06>/<89f0a>) 0xaf1c 0xb380 (DW_OP_breg31 0x70) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:81 -params var pointer(struct kvm_nvhe_init_params<89e06>/<98494>) 0xaf1c 0xb380 (DW_OP_breg31 0x68) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:82 -ret var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x64) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83 -i var int (base type, DW_ATE_signed size:4) 0xaf1c 0xb380 (DW_OP_breg31 0x60) kvm_host_prepare_stage2:arch/arm64/kvm/hyp/nvhe/mem_protect.c:83 **0000b380 <prepare_host_vtcr>: + prepare_host_vtcr params: none prepare_host_vtcr:65.0 (mem_protect.c) Sbepe ║{ +parange var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x4) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66 +phys_shift var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66 +mmfr0 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x10) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67 +mmfr1 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67 ~ 0000b380: d100c3ff sub sp, sp, #0x30 <- 0000af40(bl)<prepare_host_vtcr> ~ 0000b384: a9027bfd stp x29, x30, [sp, #32] 0000b380 CFA:r31 r29:u r30:u ~ 0000b388: 910083fd add x29, sp, #0x20 prepare_host_vtcr:69.41 (mem_protect.c) SbePe mmfr0 = arm64_ftr_reg_id_aa64mmfr0_el1.║sys_val; ~ 0000b38c: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000b390: f944ed08 ldr x8, [x8, #2520] prepare_host_vtcr:69.8 (mem_protect.c) sbepe mmfr0 ║= arm64_ftr_reg_id_aa64mmfr0_el1.sys_val; ~ 0000b394: f9000be8 str x8, [sp, #16] prepare_host_vtcr:70.41 (mem_protect.c) Sbepe mmfr1 = arm64_ftr_reg_id_aa64mmfr1_el1.║sys_val; ~ 0000b398: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000b39c: f9450508 ldr x8, [x8, #2568] prepare_host_vtcr:70.8 (mem_protect.c) sbepe mmfr1 ║= arm64_ftr_reg_id_aa64mmfr1_el1.sys_val; ~ 0000b3a0: f90007e8 str x8, [sp, #8] prepare_host_vtcr:73.28 (mem_protect.c) Sbepe parange = kvm_get_parange(║mmfr0); ~ 0000b3a4: f9400be0 ldr x0, [sp, #16] prepare_host_vtcr:73.12 (mem_protect.c) sbepe parange = ║kvm_get_parange(mmfr0); ~ 0000b3a8: 94000111 bl b7ec <kvm_get_parange> prepare_host_vtcr:73.10 (mem_protect.c) sbepe parange ║= kvm_get_parange(mmfr0); ~ 0000b3ac: b81fc3a0 stur w0, [x29, #-4] <- 0000b3a8(bl-succ)<return> prepare_host_vtcr:74.50 (mem_protect.c) Sbepe phys_shift = id_aa64mmfr0_parange_to_phys_shift(║parange); ~ 0000b3b0: b85fc3a0 ldur w0, [x29, #-4] prepare_host_vtcr:74.15 (mem_protect.c) sbepe phys_shift = ║id_aa64mmfr0_parange_to_phys_shift(parange); ~ 0000b3b4: 94000132 bl b87c <id_aa64mmfr0_parange_to_phys_shift> prepare_host_vtcr:74.13 (mem_protect.c) sbepe phys_shift ║= id_aa64mmfr0_parange_to_phys_shift(parange); ~ 0000b3b8: b81f83a0 stur w0, [x29, #-8] <- 0000b3b4(bl-succ)<return> prepare_host_vtcr:76.36 (mem_protect.c) Sbepe host_kvm.arch.vtcr = kvm_get_vtcr(║mmfr0, mmfr1, phys_shift); ~ 0000b3bc: f9400be0 ldr x0, [sp, #16] prepare_host_vtcr:76.43 (mem_protect.c) sbepe host_kvm.arch.vtcr = kvm_get_vtcr(mmfr0, ║mmfr1, phys_shift); ~ 0000b3c0: f94007e1 ldr x1, [sp, #8] prepare_host_vtcr:76.50 (mem_protect.c) sbepe host_kvm.arch.vtcr = kvm_get_vtcr(mmfr0, mmfr1, ║phys_shift); ~ 0000b3c4: b85f83a2 ldur w2, [x29, #-8] prepare_host_vtcr:76.23 (mem_protect.c) sbepe host_kvm.arch.vtcr = ║kvm_get_vtcr(mmfr0, mmfr1, phys_shift); ~ 0000b3c8: 94000156 bl b920 <kvm_get_vtcr> prepare_host_vtcr:76.21 (mem_protect.c) sbepe host_kvm.arch.vtcr ║= kvm_get_vtcr(mmfr0, mmfr1, phys_shift); ~ 0000b3cc: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b3c8(bl-succ)<return> ~ 0000b3d0: f901f100 str x0, [x8, #992] prepare_host_vtcr:77.1 (mem_protect.c) Sbepe ║} ~ 0000b3d4: a9427bfd ldp x29, x30, [sp, #32] ~ 0000b3d8: 9100c3ff add sp, sp, #0x30 0000b38c CFA:r29+16 r29:c-16 r30:c-8 ~ 0000b3dc: d65f03c0 ret -parange var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x4) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66 -phys_shift var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb380 0xb3e0 (DW_OP_fbreg -0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:66 -mmfr0 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x10) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67 -mmfr1 var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb380 0xb3e0 (DW_OP_breg31 0x8) prepare_host_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:67 **0000b3e0 <prepare_s2_pools>: + prepare_s2_pools params: +mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10) +dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18) prepare_s2_pools:39.0 (mem_protect.c) Sbepe ║{ +mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 +dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 +nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb3e0 0xb504 (DW_OP_breg31 0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:40 +ret var int (base type, DW_ATE_signed size:4) 0xb3e0 0xb504 (DW_OP_breg31 0xc) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:41 ~ 0000b3e0: d10103ff sub sp, sp, #0x40 <- 0000af68(bl)<prepare_s2_pools> ~ 0000b3e4: a9037bfd stp x29, x30, [sp, #48] 0000b3e0 CFA:r31 r29:u r30:u ~ 0000b3e8: 9100c3fd add x29, sp, #0x30 ~ 0000b3ec: f81f03a0 stur x0, [x29, #-16] ~ 0000b3f0: f9000fe1 str x1, [sp, #24] prepare_s2_pools:43.13 (mem_protect.c) SbePe nr_pages = ║host_s2_mem_pgtable_size() >> PAGE_SHIFT; ~ 0000b3f4: 940001ad bl baa8 <host_s2_mem_pgtable_size> prepare_s2_pools:43.40 (mem_protect.c) sbepe nr_pages = host_s2_mem_pgtable_size() ║>> PAGE_SHIFT; ~ 0000b3f8: d34cfc08 lsr x8, x0, #12 <- 0000b3f4(bl-succ)<return> prepare_s2_pools:43.11 (mem_protect.c) sbepe nr_pages ║= host_s2_mem_pgtable_size() >> PAGE_SHIFT; ~ 0000b3fc: f9000be8 str x8, [sp, #16] prepare_s2_pools:44.36 (mem_protect.c) Sbepe ret = hyp_pool_init(&host_s2_mem, ║__hyp_pa(mem_pgt_pool), nr_pages, 0); ~ 0000b400: f85f03a8 ldur x8, [x29, #-16] ~ 0000b404: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000b408: f9439d29 ldr x9, [x9, #1848] ~ 0000b40c: 8b090101 add x1, x8, x9 prepare_s2_pools:44.60 (mem_protect.c) sbepe ret = hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), ║nr_pages, 0); ~ 0000b410: b94013e2 ldr w2, [sp, #16] prepare_s2_pools:44.8 (mem_protect.c) sbepe ret = ║hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), nr_pages, 0); ~ 0000b414: 90000080 adrp x0, 1b000 <hyp_memory+0x460> ~ 0000b418: 91168000 add x0, x0, #0x5a0 ~ 0000b41c: 2a1f03e3 mov w3, wzr ~ 0000b420: 97fff7cf bl 935c <hyp_pool_init> prepare_s2_pools:44.6 (mem_protect.c) sbepe ret ║= hyp_pool_init(&host_s2_mem, __hyp_pa(mem_pgt_pool), nr_pages, 0); ~ 0000b424: b9000fe0 str w0, [sp, #12] <- 0000b420(bl-succ)<return> prepare_s2_pools:45.6 (mem_protect.c) Sbepe if (║ret) ~ 0000b428: b9400fea ldr w10, [sp, #12] prepare_s2_pools:45.6 (mem_protect.c) sbepe if (║ret) ~ ┌──0000b42c: 340000aa cbz w10, b440 <prepare_s2_pools+0x60> ~ │┌─0000b430: 14000001 b b434 <prepare_s2_pools+0x54> <- 0000b42c(b.cc-succ)<fallthrough> ││ ││ prepare_s2_pools:46.10 (mem_protect.c) Sbepe return ║ret; ~ │└>0000b434: b9400fe8 ldr w8, [sp, #12] <- 0000b430(b)<prepare_s2_pools+0x54> prepare_s2_pools:46.3 (mem_protect.c) sbepe ║return ret; ~ 0000b438: b81fc3a8 stur w8, [x29, #-4] ~ ┌──┼──0000b43c: 1400002e b b4f4 <prepare_s2_pools+0x114> │ │ │ │ prepare_s2_pools:48.13 (mem_protect.c) Sbepe nr_pages = ║host_s2_dev_pgtable_size() >> PAGE_SHIFT; ~ │ └─>0000b440: 940001b1 bl bb04 <host_s2_dev_pgtable_size> <- 0000b42c(b.cc)<prepare_s2_pools+0x60> prepare_s2_pools:48.40 (mem_protect.c) sbepe nr_pages = host_s2_dev_pgtable_size() ║>> PAGE_SHIFT; ~ 0000b444: d34cfc08 lsr x8, x0, #12 <- 0000b440(bl-succ)<return> prepare_s2_pools:48.11 (mem_protect.c) sbepe nr_pages ║= host_s2_dev_pgtable_size() >> PAGE_SHIFT; ~ 0000b448: f9000be8 str x8, [sp, #16] prepare_s2_pools:49.36 (mem_protect.c) Sbepe ret = hyp_pool_init(&host_s2_dev, ║__hyp_pa(dev_pgt_pool), nr_pages, 0); ~ 0000b44c: f9400fe8 ldr x8, [sp, #24] ~ 0000b450: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000b454: f9439d29 ldr x9, [x9, #1848] ~ 0000b458: 8b090101 add x1, x8, x9 prepare_s2_pools:49.60 (mem_protect.c) sbepe ret = hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), ║nr_pages, 0); ~ 0000b45c: b94013e2 ldr w2, [sp, #16] prepare_s2_pools:49.8 (mem_protect.c) sbepe ret = ║hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), nr_pages, 0); ~ 0000b460: 90000080 adrp x0, 1b000 <hyp_memory+0x460> ~ 0000b464: 9119e000 add x0, x0, #0x678 ~ 0000b468: 2a1f03e3 mov w3, wzr ~ 0000b46c: 97fff7bc bl 935c <hyp_pool_init> prepare_s2_pools:49.6 (mem_protect.c) sbepe ret ║= hyp_pool_init(&host_s2_dev, __hyp_pa(dev_pgt_pool), nr_pages, 0); ~ 0000b470: b9000fe0 str w0, [sp, #12] <- 0000b46c(bl-succ)<return> prepare_s2_pools:50.6 (mem_protect.c) Sbepe if (║ret) ~ 0000b474: b9400fea ldr w10, [sp, #12] prepare_s2_pools:50.6 (mem_protect.c) sbepe if (║ret) ~ │ ┌──0000b478: 340000aa cbz w10, b48c <prepare_s2_pools+0xac> │ │ ~ │ │┌─0000b47c: 14000001 b b480 <prepare_s2_pools+0xa0> <- 0000b478(b.cc-succ)<fallthrough> │ ││ │ ││ prepare_s2_pools:51.10 (mem_protect.c) Sbepe return ║ret; ~ │ │└>0000b480: b9400fe8 ldr w8, [sp, #12] <- 0000b47c(b)<prepare_s2_pools+0xa0> │ │ prepare_s2_pools:51.3 (mem_protect.c) sbepe ║return ret; ~ │ │ 0000b484: b81fc3a8 stur w8, [x29, #-4] ~ │ ┌┼──0000b488: 1400001b b b4f4 <prepare_s2_pools+0x114> │ ││ │ ││ prepare_s2_pools:53.37 (mem_protect.c) Sbepe host_kvm.mm_ops.zalloc_pages_exact ║= host_s2_zalloc_pages_exact; ~ │ │└─>0000b48c: 90000088 adrp x8, 1b000 <hyp_memory+0x460> <- 0000b478(b.cc)<prepare_s2_pools+0xac> ~ │ │ 0000b490: 91156108 add x8, x8, #0x558 ~ │ │ 0000b494: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4> ~ │ │ 0000b498: 912d6129 add x9, x9, #0xb58 ~ │ │ 0000b49c: f9000509 str x9, [x8, #8] │ │ prepare_s2_pools:54.30 (mem_protect.c) Sbepe host_kvm.mm_ops.zalloc_page ║= host_s2_zalloc_page; ~ │ │ 0000b4a0: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4> ~ │ │ 0000b4a4: 912ff129 add x9, x9, #0xbfc ~ │ │ 0000b4a8: f9000109 str x9, [x8] │ │ prepare_s2_pools:55.31 (mem_protect.c) Sbepe host_kvm.mm_ops.phys_to_virt ║= hyp_phys_to_virt; ~ │ │ 0000b4ac: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4> ~ │ │ 0000b4b0: 9130a129 add x9, x9, #0xc28 ~ │ │ 0000b4b4: f9001909 str x9, [x8, #48] │ │ prepare_s2_pools:56.31 (mem_protect.c) Sbepe host_kvm.mm_ops.virt_to_phys ║= hyp_virt_to_phys; ~ │ │ 0000b4b8: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4> ~ │ │ 0000b4bc: 91312129 add x9, x9, #0xc48 ~ │ │ 0000b4c0: f9001d09 str x9, [x8, #56] │ │ prepare_s2_pools:57.29 (mem_protect.c) Sbepe host_kvm.mm_ops.page_count ║= hyp_page_count; ~ │ │ 0000b4c4: 90000009 adrp x9, b000 <kvm_host_prepare_stage2+0xe4> ~ │ │ 0000b4c8: 9131a129 add x9, x9, #0xc68 ~ │ │ 0000b4cc: f9001509 str x9, [x8, #40] │ │ prepare_s2_pools:58.27 (mem_protect.c) Sbepe host_kvm.mm_ops.get_page ║= hyp_get_page; ~ │ │ 0000b4d0: d0ffffe9 adrp x9, 9000 <__hyp_attach_page+0x4> ~ │ │ 0000b4d4: 91052129 add x9, x9, #0x148 ~ │ │ 0000b4d8: f9000d09 str x9, [x8, #24] │ │ prepare_s2_pools:59.27 (mem_protect.c) Sbepe host_kvm.mm_ops.put_page ║= hyp_put_page; ~ │ │ 0000b4dc: b0ffffe9 adrp x9, 8000 <psci_1_0_handler+0x7c> ~ │ │ 0000b4e0: 913c2129 add x9, x9, #0xf08 ~ │ │ 0000b4e4: f9001109 str x9, [x8, #32] ~ │ │ 0000b4e8: 2a1f03ea mov w10, wzr │ │ prepare_s2_pools:61.2 (mem_protect.c) Sbepe ║return 0; ~ │ │ 0000b4ec: b81fc3aa stur w10, [x29, #-4] ~ │ │ ┌─0000b4f0: 14000001 b b4f4 <prepare_s2_pools+0x114> │ │ │ │ │ │ prepare_s2_pools:62.1 (mem_protect.c) Sbepe ║} ~ └>└>└>0000b4f4: b85fc3a0 ldur w0, [x29, #-4] <- 0000b43c(b)<prepare_s2_pools+0x114>,0000b488(b)<prepare_s2_pools+0x114>,0000b4f0(b)<prepare_s2_pools+0x114> ~ 0000b4f8: a9437bfd ldp x29, x30, [sp, #48] ~ 0000b4fc: 910103ff add sp, sp, #0x40 0000b3ec CFA:r29+16 r29:c-16 r30:c-8 ~ 0000b500: d65f03c0 ret -mem_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_fbreg -0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 -dev_pgt_pool param pointer(no type) 0xb3e0 0xb504 (DW_OP_breg31 0x18) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 -nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xb3e0 0xb504 (DW_OP_breg31 0x10) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:40 -ret var int (base type, DW_ATE_signed size:4) 0xb3e0 0xb504 (DW_OP_breg31 0xc) prepare_s2_pools:arch/arm64/kvm/hyp/nvhe/mem_protect.c:41 **0000b504 <__hyp_my_cpu_offset>: + __hyp_my_cpu_offset params: none __hyp_my_cpu_offset:23.0 (percpu.h) Sbepe ║{ 0000b504 CFA:r31 ~ 0000b504: d10043ff sub sp, sp, #0x10 <- 0000b1f0(bl)<__hyp_my_cpu_offset> __hyp_my_cpu_offset:28.9 (percpu.h) SbePe return ║read_sysreg(tpidr_el2); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb508 0xb51c (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28 ~ 0000b508: d53cd048 mrs x8, tpidr_el2 ~ 0000b50c: f90007e8 str x8, [sp, #8] ~ 0000b510: f94007e8 ldr x8, [sp, #8] ~ 0000b514: f90003e8 str x8, [sp] ~ 0000b518: f94003e0 ldr x0, [sp] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb508 0xb51c (DW_OP_fbreg 0x8) lexblock:__hyp_my_cpu_offset:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28 __hyp_my_cpu_offset:28.2 (percpu.h) sbepe ║return read_sysreg(tpidr_el2); ~ 0000b51c: 910043ff add sp, sp, #0x10 0000b508 CFA:r31+16 ~ 0000b520: d65f03c0 ret **0000b524 <handle_host_mem_abort>: + handle_host_mem_abort params: +host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8) handle_host_mem_abort:177.0 (mem_protect.c) Sbepe ║{ +host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:176 +prot var enum kvm_pgtable_prot<89e06>/<98455> 0xb524 0xb5b4 (DW_OP_fbreg -0xc) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:178 +far var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x18) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 +hpfar var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 +esr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x28) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 +ipa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 +ret var int (base type, DW_ATE_signed size:4) 0xb524 0xb5b4 (DW_OP_breg31 0x1c) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:180 ~ 0000b524: d10183ff sub sp, sp, #0x60 <- 00007084(bl)<handle_host_mem_abort> ~ 0000b528: a9057bfd stp x29, x30, [sp, #80] 0000b524 CFA:r31 r29:u r30:u ~ 0000b52c: 910143fd add x29, sp, #0x50 ~ 0000b530: f81f83a0 stur x0, [x29, #-8] +reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb534 0xb548 (DW_OP_breg31 0x10) lexblock:handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:182 ~ 0000b534: d53c5208 mrs x8, esr_el2 handle_host_mem_abort:182.8 (mem_protect.c) SbePe esr = ║read_sysreg_el2(SYS_ESR); ~ 0000b538: f9000be8 str x8, [sp, #16] ~ 0000b53c: f9400be8 ldr x8, [sp, #16] ~ 0000b540: f90007e8 str x8, [sp, #8] ~ 0000b544: f94007e8 ldr x8, [sp, #8] -reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb534 0xb548 (DW_OP_breg31 0x10) lexblock:handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:182 handle_host_mem_abort:182.6 (mem_protect.c) sbepe esr ║= read_sysreg_el2(SYS_ESR); ~ 0000b548: f90017e8 str x8, [sp, #40] handle_host_mem_abort:183.24 (mem_protect.c) Sbepe if (!__get_fault_info(║esr, &far, &hpfar)) ~ 0000b54c: f94017e0 ldr x0, [sp, #40] ~ 0000b550: d10063a1 sub x1, x29, #0x18 ~ 0000b554: d10083a2 sub x2, x29, #0x20 handle_host_mem_abort:183.7 (mem_protect.c) sbepe if (!║__get_fault_info(esr, &far, &hpfar)) ~ 0000b558: 94000017 bl b5b4 <__get_fault_info> handle_host_mem_abort:183.6 (mem_protect.c) sbepe if (║!__get_fault_info(esr, &far, &hpfar)) ~ ┌──0000b55c: 37000060 tbnz w0, #0, b568 <handle_host_mem_abort+0x44> <- 0000b558(bl-succ)<return> ~ │┌─0000b560: 14000001 b b564 <handle_host_mem_abort+0x40> <- 0000b55c(b.cc-succ)<fallthrough> ││ ││ handle_host_mem_abort:184.3 (mem_protect.c) Sbepe ║hyp_panic(); ~ │└>0000b564: 97ffe055 bl 36b8 <hyp_panic> <- 0000b560(b)<handle_host_mem_abort+0x40> ~ └─>0000b568: 528000e8 mov w8, #0x7 // #7 <- 0000b55c(b.cc)<handle_host_mem_abort+0x44>,0000b564(bl-succ)<return> handle_host_mem_abort:186.7 (mem_protect.c) Sbepe prot ║= KVM_PGTABLE_PROT_R | KVM_PGTABLE_PROT_W | KVM_PGTABLE_PROT_X; ~ 0000b56c: b81f43a8 stur w8, [x29, #-12] handle_host_mem_abort:187.9 (mem_protect.c) Sbepe ipa = (║hpfar & HPFAR_MASK) << 8; ~ 0000b570: f85e03a9 ldur x9, [x29, #-32] handle_host_mem_abort:187.15 (mem_protect.c) sbepe ipa = (hpfar ║& HPFAR_MASK) << 8; ~ 0000b574: 927ccd29 and x9, x9, #0xfffffffffffff0 handle_host_mem_abort:187.29 (mem_protect.c) sbepe ipa = (hpfar & HPFAR_MASK) ║<< 8; ~ 0000b578: d378dd29 lsl x9, x9, #8 handle_host_mem_abort:187.6 (mem_protect.c) sbepe ipa ║= (hpfar & HPFAR_MASK) << 8; ~ 0000b57c: f90013e9 str x9, [sp, #32] handle_host_mem_abort:188.24 (mem_protect.c) Sbepe ret = host_stage2_map(║ipa, PAGE_SIZE, prot); ~ 0000b580: f94013e0 ldr x0, [sp, #32] handle_host_mem_abort:188.40 (mem_protect.c) sbepe ret = host_stage2_map(ipa, PAGE_SIZE, ║prot); ~ 0000b584: b85f43a2 ldur w2, [x29, #-12] ~ 0000b588: 52820008 mov w8, #0x1000 // #4096 ~ 0000b58c: 2a0803e1 mov w1, w8 handle_host_mem_abort:188.8 (mem_protect.c) sbepe ret = ║host_stage2_map(ipa, PAGE_SIZE, prot); ~ 0000b590: 94000065 bl b724 <host_stage2_map> handle_host_mem_abort:188.6 (mem_protect.c) sbepe ret ║= host_stage2_map(ipa, PAGE_SIZE, prot); ~ 0000b594: b9001fe0 str w0, [sp, #28] <- 0000b590(bl-succ)<return> handle_host_mem_abort:189.6 (mem_protect.c) Sbepe if (║ret) ~ 0000b598: b9401fe8 ldr w8, [sp, #28] handle_host_mem_abort:189.6 (mem_protect.c) sbepe if (║ret) ~ ┌──0000b59c: 34000068 cbz w8, b5a8 <handle_host_mem_abort+0x84> ~ │┌─0000b5a0: 14000001 b b5a4 <handle_host_mem_abort+0x80> <- 0000b59c(b.cc-succ)<fallthrough> ││ ││ handle_host_mem_abort:190.3 (mem_protect.c) Sbepe ║hyp_panic(); ~ │└>0000b5a4: 97ffe045 bl 36b8 <hyp_panic> <- 0000b5a0(b)<handle_host_mem_abort+0x80> handle_host_mem_abort:191.1 (mem_protect.c) Sbepe ║} ~ └─>0000b5a8: a9457bfd ldp x29, x30, [sp, #80] <- 0000b59c(b.cc)<handle_host_mem_abort+0x84>,0000b5a4(bl-succ)<return> ~ 0000b5ac: 910183ff add sp, sp, #0x60 0000b530 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000b5b0: d65f03c0 ret -host_ctxt param pointer(struct kvm_cpu_context<89e06>/<9798a>) 0xb524 0xb5b4 (DW_OP_fbreg -0x8) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:176 -prot var enum kvm_pgtable_prot<89e06>/<98455> 0xb524 0xb5b4 (DW_OP_fbreg -0xc) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:178 -far var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x18) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 -hpfar var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_fbreg -0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 -esr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x28) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 -ipa var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb524 0xb5b4 (DW_OP_breg31 0x20) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:179 -ret var int (base type, DW_ATE_signed size:4) 0xb524 0xb5b4 (DW_OP_breg31 0x1c) handle_host_mem_abort:arch/arm64/kvm/hyp/nvhe/mem_protect.c:180 **0000b5b4 <__get_fault_info>: + __get_fault_info params: +esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30) +far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28) +hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20) __get_fault_info:161.0 (switch.h) Sbepe ║{ +esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 +far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 +hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 ~ 0000b5b4: d10203ff sub sp, sp, #0x80 <- 0000b558(bl)<__get_fault_info> ~ 0000b5b8: a9077bfd stp x29, x30, [sp, #112] 0000b5b4 CFA:r31 r29:u r30:u ~ 0000b5bc: 9101c3fd add x29, sp, #0x70 ~ 0000b5c0: f9001be0 str x0, [sp, #48] ~ 0000b5c4: f90017e1 str x1, [sp, #40] ~ 0000b5c8: f90013e2 str x2, [sp, #32] +reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5cc 0xb5e0 (DW_OP_breg31 0x18) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:162 ~ 0000b5cc: d53c6008 mrs x8, far_el2 __get_fault_info:162.9 (switch.h) SbePe *far = ║read_sysreg_el2(SYS_FAR); ~ 0000b5d0: f9000fe8 str x8, [sp, #24] ~ 0000b5d4: f9400fe8 ldr x8, [sp, #24] ~ 0000b5d8: f9000be8 str x8, [sp, #16] ~ 0000b5dc: f9400be8 ldr x8, [sp, #16] -reg var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5cc 0xb5e0 (DW_OP_breg31 0x18) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:162 __get_fault_info:162.3 (switch.h) sbepe *║far = read_sysreg_el2(SYS_FAR); ~ 0000b5e0: f94017e9 ldr x9, [sp, #40] __get_fault_info:162.7 (switch.h) sbepe *far ║= read_sysreg_el2(SYS_FAR); ~ 0000b5e4: f9000128 str x8, [x9] __get_fault_info:175.29 (switch.h) Sbepe if (!(esr & ESR_ELx_S1PTW) && ~ 0000b5e8: 3940c3ea ldrb w10, [sp, #48] ~ ┌───────0000b5ec: 373807ea tbnz w10, #7, b6e8 <__get_fault_info+0x134> ~ │ ┌─0000b5f0: 14000001 b b5f4 <__get_fault_info+0x40> <- 0000b5ec(b.cc-succ)<fallthrough> │ │ ~ │ └>0000b5f4: 528000e8 mov w8, #0x7 // #7 <- 0000b5f0(b)<__get_fault_info+0x40> ~ 0000b5f8: b81d03a8 stur w8, [x29, #-48] o: 0xb5fc 0xb6a4 cpus_have_final_cap inlined from __get_fault_info:176 (switch.h) <98b4e>: p: 0xb5fc 0xb624 system_capabilities_finalized inlined from cpus_have_final_cap:459 (cpufeature.h) <98b6a>:<98b4e>: op system_capabilities_finalized:419.9 (cpufeature.h) Sbepe return ║static_branch_likely(&arm64_const_caps_ready); +num param int (base type, DW_ATE_signed size:4) 0xb5fc 0xb6a4 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb5fc 0xb624 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~op 0000b5fc: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~op 0000b600: b9479928 ldr w8, [x9, #1944] ~op 0000b604: 71000108 subs w8, w8, #0x0 ~op 0000b608: 1a9f07ea cset w10, ne // ne = any ~op 0000b60c: 381e43aa sturb w10, [x29, #-28] op system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~op 0000b610: 385e43aa ldurb w10, [x29, #-28] ~op 0000b614: 2a0a03e9 mov w9, w10 ~op 0000b618: 92400129 and x9, x9, #0x1 op system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~op 0000b61c: f81d83a9 stur x9, [x29, #-40] op system_capabilities_finalized:419.9 (cpufeature.h) sbepe return ║static_branch_likely(&arm64_const_caps_ready); ~op 0000b620: f85d83a9 ldur x9, [x29, #-40] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb5fc 0xb624 (DW_OP_fbreg -0x1c) lexblock:system_capabilities_finalized(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c o cpus_have_final_cap:459.6 (cpufeature.h) Sbepe if (║system_capabilities_finalized()) ~o │ ┌────0000b624: b4000389 cbz x9, b694 <__get_fault_info+0xe0> │ │ ~o │ │ ┌─0000b628: 14000001 b b62c <__get_fault_info+0x78> <- 0000b624(b.cc-succ)<fallthrough> │ │ │ o │ │ │ cpus_have_final_cap:460.32 (cpufeature.h) Sbepe return __cpus_have_const_cap(║num); ~o │ │ └>0000b62c: b85d03a8 ldur w8, [x29, #-48] <- 0000b628(b)<__get_fault_info+0x78> ~o │ │ 0000b630: b81f83a8 stur w8, [x29, #-8] q: 0xb634 0xb694 (0 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98b96>:<98b4e>: oq │ │ __cpus_have_const_cap:444.6 (cpufeature.h) Sbepe if (║num >= ARM64_NCAPS) +num param int (base type, DW_ATE_signed size:4) 0xb634 0xb694 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~oq │ │ 0000b634: b85f83a8 ldur w8, [x29, #-8] oq │ │ __cpus_have_const_cap:444.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~oq │ │ 0000b638: 7100f508 subs w8, w8, #0x3d ~oq │ │ ┌──0000b63c: 540000ab b.lt b650 <__get_fault_info+0x9c> // b.tstop │ │ │ ~oq │ │ │┌─0000b640: 14000001 b b644 <__get_fault_info+0x90> <- 0000b63c(b.cc-succ)<fallthrough> │ │ ││ ~oq │ │ │└>0000b644: 2a1f03e8 mov w8, wzr <- 0000b640(b)<__get_fault_info+0x90> oq │ │ │ __cpus_have_const_cap:445.3 (cpufeature.h) Sbepe ║return false; ~oq │ │ │ 0000b648: 381ff3a8 sturb w8, [x29, #-1] ~oq │ │┌┼──0000b64c: 14000013 b b698 <__get_fault_info+0xe4> │ │││ oq │ │││ __cpus_have_const_cap:446.9 (cpufeature.h) Sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); +branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb650 0xb684 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~oq │ ││└─>0000b650: b89f83a8 ldursw x8, [x29, #-8] <- 0000b63c(b.cc)<__get_fault_info+0x9c> ~oq │ ││ 0000b654: d37ced08 lsl x8, x8, #4 ~oq │ ││ 0000b658: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~oq │ ││ 0000b65c: 911e8129 add x9, x9, #0x7a0 ~oq │ ││ 0000b660: b868692a ldr w10, [x9, x8] ~oq │ ││ 0000b664: 7100014a subs w10, w10, #0x0 ~oq │ ││ 0000b668: 1a9f07eb cset w11, ne // ne = any ~oq │ ││ 0000b66c: 381f43ab sturb w11, [x29, #-12] oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~oq │ ││ 0000b670: 385f43ab ldurb w11, [x29, #-12] ~oq │ ││ 0000b674: 2a0b03e8 mov w8, w11 ~oq │ ││ 0000b678: 92400108 and x8, x8, #0x1 oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~oq │ ││ 0000b67c: f81e83a8 stur x8, [x29, #-24] oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~oq │ ││ 0000b680: f85e83a8 ldur x8, [x29, #-24] -branch var typedef(bool=_Bool (base type, DW_ATE_boolean size:1)) 0xb650 0xb684 (DW_OP_fbreg -0xc) lexblock:__cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c oq │ ││ __cpus_have_const_cap:446.9 (cpufeature.h) sbepe return ║static_branch_unlikely(&cpu_hwcap_keys[num]); ~oq │ ││ 0000b684: f1000108 subs x8, x8, #0x0 ~oq │ ││ 0000b688: 1a9f07eb cset w11, ne // ne = any oq │ ││ __cpus_have_const_cap:446.2 (cpufeature.h) sbepe ║return static_branch_unlikely(&cpu_hwcap_keys[num]); ~oq │ ││ 0000b68c: 381ff3ab sturb w11, [x29, #-1] ~oq │ ││ ┌─0000b690: 14000002 b b698 <__get_fault_info+0xe4> -num param int (base type, DW_ATE_signed size:4) 0xb634 0xb694 (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c │ ││ │ o │ ││ │ cpus_have_final_cap:462.3 (cpufeature.h) Sbepe ║BUG(); ~o │ └┼─┼>0000b694: d4210000 brk #0x800 <- 0000b624(b.cc)<__get_fault_info+0xe0> │ │ │ r: 0xb698 0xb69c (1 of 2) __cpus_have_const_cap inlined from cpus_have_final_cap:460 (cpufeature.h) <98b96>:<98b4e>: or │ │ │ __cpus_have_const_cap:447.1 (cpufeature.h) Sbepe ║} +num param int (base type, DW_ATE_signed size:4) 0xb698 0xb69c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~or │ └>└>0000b698: 385ff3a8 ldurb w8, [x29, #-1] <- 0000b64c(b)<__get_fault_info+0xe4>,0000b690(b)<__get_fault_info+0xe4> -num param int (base type, DW_ATE_signed size:4) 0xb698 0xb69c (DW_OP_fbreg -0x8) __cpus_have_const_cap(inlined):cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c o cpus_have_final_cap:460.3 (cpufeature.h) Sbepe ║return __cpus_have_const_cap(num); ~o 0000b69c: 381d73a8 sturb w8, [x29, #-41] o cpus_have_final_cap:463.1 (cpufeature.h) Sbepe ║} ~o 0000b6a0: 385d73a8 ldurb w8, [x29, #-41] -num param int (base type, DW_ATE_signed size:4) 0xb5fc 0xb6a4 (DW_OP_fbreg -0x30) cpus_have_final_cap(inlined):__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c __get_fault_info:176.52 (switch.h) Sbepe (cpus_have_final_cap(ARM64_WORKAROUND_834220) || ~ │ ┌───0000b6a4: 370000e8 tbnz w8, #0, b6c0 <__get_fault_info+0x10c> │ │ ~ │ │ ┌─0000b6a8: 14000001 b b6ac <__get_fault_info+0xf8> <- 0000b6a4(b.cc-succ)<fallthrough> │ │ │ │ │ │ __get_fault_info:177.8 (switch.h) Sbepe (║esr & ESR_ELx_FSC_TYPE) == FSC_PERM)) { ~ │ │ └>0000b6ac: f9401be8 ldr x8, [sp, #48] <- 0000b6a8(b)<__get_fault_info+0xf8> │ │ __get_fault_info:177.12 (switch.h) sbepe (esr ║& ESR_ELx_FSC_TYPE) == FSC_PERM)) { ~ │ │ 0000b6b0: 927e0d08 and x8, x8, #0x3c │ │ __get_fault_info:175.6 (switch.h) Sbepe if (║!(esr & ESR_ELx_S1PTW) && ~ │ │ 0000b6b4: f1003108 subs x8, x8, #0xc ~ │ ┌─┼───0000b6b8: 54000181 b.ne b6e8 <__get_fault_info+0x134> // b.any │ │ │ ~ │ │ │ ┌─0000b6bc: 14000001 b b6c0 <__get_fault_info+0x10c> <- 0000b6b8(b.cc-succ)<fallthrough> │ │ │ │ │ │ │ │ __get_fault_info:178.34 (switch.h) Sbepe if (!__translate_far_to_hpfar(*║far, hpfar)) ~ │ │ └>└>0000b6c0: f94017e8 ldr x8, [sp, #40] <- 0000b6a4(b.cc)<__get_fault_info+0x10c>,0000b6bc(b)<__get_fault_info+0x10c> │ │ __get_fault_info:178.33 (switch.h) sbepe if (!__translate_far_to_hpfar(║*far, hpfar)) ~ │ │ 0000b6c4: f9400100 ldr x0, [x8] │ │ __get_fault_info:178.39 (switch.h) sbepe if (!__translate_far_to_hpfar(*far, ║hpfar)) ~ │ │ 0000b6c8: f94013e1 ldr x1, [sp, #32] │ │ __get_fault_info:178.8 (switch.h) sbepe if (!║__translate_far_to_hpfar(*far, hpfar)) ~ │ │ 0000b6cc: 940001f8 bl beac <__translate_far_to_hpfar> │ │ │ │ __get_fault_info:178.7 (switch.h) sbepe if (║!__translate_far_to_hpfar(*far, hpfar)) ~ │ │ ┌──0000b6d0: 370000a0 tbnz w0, #0, b6e4 <__get_fault_info+0x130> <- 0000b6cc(bl-succ)<return> │ │ │ ~ │ │ │┌─0000b6d4: 14000001 b b6d8 <__get_fault_info+0x124> <- 0000b6d0(b.cc-succ)<fallthrough> │ │ ││ ~ │ │ │└>0000b6d8: 2a1f03e8 mov w8, wzr <- 0000b6d4(b)<__get_fault_info+0x124> │ │ │ __get_fault_info:179.4 (switch.h) Sbepe ║return false; ~ │ │ │ 0000b6dc: 381cf3a8 sturb w8, [x29, #-49] ~ │ │ ┌┼──0000b6e0: 1400000d b b714 <__get_fault_info+0x160> │ │ ││ │ │ ││ __get_fault_info:180.2 (switch.h) Sbepe ║} else { ~ │ │┌┼└─>0000b6e4: 14000009 b b708 <__get_fault_info+0x154> <- 0000b6d0(b.cc)<__get_fault_info+0x130> │ │││ │ │││ __get_fault_info:181.12 (switch.h) Sbepe *hpfar = ║read_sysreg(hpfar_el2); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb6e8 0xb6fc (DW_OP_breg31 0x8) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:181 ~ └>└┼┼──>0000b6e8: d53c6088 mrs x8, hpfar_el2 <- 0000b5ec(b.cc)<__get_fault_info+0x134>,0000b6b8(b.cc)<__get_fault_info+0x134> ~ ││ 0000b6ec: f90007e8 str x8, [sp, #8] ~ ││ 0000b6f0: f94007e8 ldr x8, [sp, #8] ~ ││ 0000b6f4: f90003e8 str x8, [sp] ~ ││ 0000b6f8: f94003e8 ldr x8, [sp] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb6e8 0xb6fc (DW_OP_breg31 0x8) lexblock:__get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:181 ││ __get_fault_info:181.4 (switch.h) sbepe *║hpfar = read_sysreg(hpfar_el2); ~ ││ 0000b6fc: f94013e9 ldr x9, [sp, #32] ││ __get_fault_info:181.10 (switch.h) sbepe *hpfar ║= read_sysreg(hpfar_el2); ~ ││ 0000b700: f9000128 str x8, [x9] ~ ││ ┌─0000b704: 14000001 b b708 <__get_fault_info+0x154> ││ │ ~ └┼>└>0000b708: 52800028 mov w8, #0x1 // #1 <- 0000b6e4(b)<__get_fault_info+0x154>,0000b704(b)<__get_fault_info+0x154> __get_fault_info:184.2 (switch.h) Sbepe ║return true; ~ 0000b70c: 381cf3a8 sturb w8, [x29, #-49] ~ │ ┌─0000b710: 14000001 b b714 <__get_fault_info+0x160> │ │ │ │ __get_fault_info:185.1 (switch.h) Sbepe ║} ~ └>└>0000b714: 385cf3a0 ldurb w0, [x29, #-49] <- 0000b6e0(b)<__get_fault_info+0x160>,0000b710(b)<__get_fault_info+0x160> ~ 0000b718: a9477bfd ldp x29, x30, [sp, #112] ~ 0000b71c: 910203ff add sp, sp, #0x80 0000b5c0 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000b720: d65f03c0 ret -esr param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb5b4 0xb724 (DW_OP_breg31 0x30) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 -far param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x28) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 -hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xb5b4 0xb724 (DW_OP_breg31 0x20) __get_fault_info:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 **0000b724 <host_stage2_map>: + host_stage2_map params: +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10) +prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14) host_stage2_map:159.0 (mem_protect.c) Sbepe ║{ +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 +prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 +ret var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x18) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 +is_memory var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 +pool var pointer(struct hyp_pool<89e06>/<983fb>) 0xb724 0xb7ec (DW_OP_breg31 0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:161 ~ 0000b724: d10103ff sub sp, sp, #0x40 <- 0000b590(bl)<host_stage2_map> ~ 0000b728: a9037bfd stp x29, x30, [sp, #48] 0000b724 CFA:r31 r29:u r30:u ~ 0000b72c: 9100c3fd add x29, sp, #0x30 ~ 0000b730: f81f83a0 stur x0, [x29, #-8] ~ 0000b734: f81f03a1 stur x1, [x29, #-16] ~ 0000b738: b81ec3a2 stur w2, [x29, #-20] host_stage2_map:160.37 (mem_protect.c) SbePe int ret, is_memory = ipa_is_memory(║ipa); ~ 0000b73c: f85f83a0 ldur x0, [x29, #-8] host_stage2_map:160.23 (mem_protect.c) sbepe int ret, is_memory = ║ipa_is_memory(ipa); ~ 0000b740: 94000226 bl bfd8 <ipa_is_memory> ~ 0000b744: 12000008 and w8, w0, #0x1 <- 0000b740(bl-succ)<return> host_stage2_map:160.11 (mem_protect.c) sbepe int ret, ║is_memory = ipa_is_memory(ipa); ~ 0000b748: b90017e8 str w8, [sp, #20] host_stage2_map:163.9 (mem_protect.c) Sbepe pool = ║is_memory ? &host_s2_mem : &host_s2_dev; ~ 0000b74c: b94017e8 ldr w8, [sp, #20] ~ 0000b750: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000b754: 9119e129 add x9, x9, #0x678 ~ 0000b758: 9000008a adrp x10, 1b000 <hyp_memory+0x460> ~ 0000b75c: 9116814a add x10, x10, #0x5a0 ~ 0000b760: 71000108 subs w8, w8, #0x0 ~ 0000b764: 9a891149 csel x9, x10, x9, ne // ne = any host_stage2_map:163.7 (mem_protect.c) sbepe pool ║= is_memory ? &host_s2_mem : &host_s2_dev; ~ 0000b768: f90007e9 str x9, [sp, #8] host_stage2_map:165.2 (mem_protect.c) Sbepe ║hyp_spin_lock(&host_kvm.lock); ~ 0000b76c: 90000080 adrp x0, 1b000 <hyp_memory+0x460> ~ 0000b770: 91166000 add x0, x0, #0x598 ~ 0000b774: b90007e8 str w8, [sp, #4] ~ 0000b778: 9400024d bl c0ac <hyp_spin_lock> host_stage2_map:166.26 (mem_protect.c) Sbepe ret = __host_stage2_map(║ipa, size, prot, pool); ~ 0000b77c: f85f83a0 ldur x0, [x29, #-8] <- 0000b778(bl-succ)<return> host_stage2_map:166.31 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, ║size, prot, pool); ~ 0000b780: f85f03a1 ldur x1, [x29, #-16] host_stage2_map:166.37 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, ║prot, pool); ~ 0000b784: b85ec3a2 ldur w2, [x29, #-20] host_stage2_map:166.43 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, prot, ║pool); ~ 0000b788: f94007e3 ldr x3, [sp, #8] host_stage2_map:166.8 (mem_protect.c) sbepe ret = ║__host_stage2_map(ipa, size, prot, pool); ~ 0000b78c: 9400025c bl c0fc <__host_stage2_map> host_stage2_map:166.6 (mem_protect.c) sbepe ret ║= __host_stage2_map(ipa, size, prot, pool); ~ 0000b790: b9001be0 str w0, [sp, #24] <- 0000b78c(bl-succ)<return> host_stage2_map:167.6 (mem_protect.c) Sbepe if (║ret == -ENOMEM && !is_memory) { ~ 0000b794: b9401be8 ldr w8, [sp, #24] host_stage2_map:167.21 (mem_protect.c) sbepe if (ret == -ENOMEM ║&& !is_memory) { ~ 0000b798: 31003108 adds w8, w8, #0xc ~ ┌─────0000b79c: 540001a1 b.ne b7d0 <host_stage2_map+0xac> // b.any ~ │ ┌─0000b7a0: 14000001 b b7a4 <host_stage2_map+0x80> <- 0000b79c(b.cc-succ)<fallthrough> │ │ │ │ host_stage2_map:167.25 (mem_protect.c) sbepe if (ret == -ENOMEM && !║is_memory) { ~ │ └>0000b7a4: b94017e8 ldr w8, [sp, #20] <- 0000b7a0(b)<host_stage2_map+0x80> host_stage2_map:167.6 (mem_protect.c) sbepe if (║ret == -ENOMEM && !is_memory) { ~ │ ┌───0000b7a8: 35000148 cbnz w8, b7d0 <host_stage2_map+0xac> │ │ ~ │ │ ┌─0000b7ac: 14000001 b b7b0 <host_stage2_map+0x8c> <- 0000b7a8(b.cc-succ)<fallthrough> │ │ │ │ │ │ host_stage2_map:168.3 (mem_protect.c) Sbepe ║host_stage2_unmap_dev_all(); ~ │ │ └>0000b7b0: 94000266 bl c148 <host_stage2_unmap_dev_all> <- 0000b7ac(b)<host_stage2_map+0x8c> │ │ │ │ host_stage2_map:169.27 (mem_protect.c) Sbepe ret = __host_stage2_map(║ipa, size, prot, pool); ~ │ │ 0000b7b4: f85f83a0 ldur x0, [x29, #-8] <- 0000b7b0(bl-succ)<return> │ │ host_stage2_map:169.32 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, ║size, prot, pool); ~ │ │ 0000b7b8: f85f03a1 ldur x1, [x29, #-16] │ │ host_stage2_map:169.38 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, ║prot, pool); ~ │ │ 0000b7bc: b85ec3a2 ldur w2, [x29, #-20] │ │ host_stage2_map:169.44 (mem_protect.c) sbepe ret = __host_stage2_map(ipa, size, prot, ║pool); ~ │ │ 0000b7c0: f94007e3 ldr x3, [sp, #8] │ │ host_stage2_map:169.9 (mem_protect.c) sbepe ret = ║__host_stage2_map(ipa, size, prot, pool); ~ │ │ 0000b7c4: 9400024e bl c0fc <__host_stage2_map> │ │ │ │ host_stage2_map:169.7 (mem_protect.c) sbepe ret ║= __host_stage2_map(ipa, size, prot, pool); ~ │ │ 0000b7c8: b9001be0 str w0, [sp, #24] <- 0000b7c4(bl-succ)<return> │ │ host_stage2_map:170.2 (mem_protect.c) Sbepe } ~ │ │ ┌─0000b7cc: 14000001 b b7d0 <host_stage2_map+0xac> │ │ │ │ │ │ host_stage2_map:171.2 (mem_protect.c) Sbepe ║hyp_spin_unlock(&host_kvm.lock); ~ └>└>└>0000b7d0: 90000080 adrp x0, 1b000 <hyp_memory+0x460> <- 0000b79c(b.cc)<host_stage2_map+0xac>,0000b7a8(b.cc)<host_stage2_map+0xac>,0000b7cc(b)<host_stage2_map+0xac> ~ 0000b7d4: 91166000 add x0, x0, #0x598 ~ 0000b7d8: 94000288 bl c1f8 <hyp_spin_unlock> host_stage2_map:173.9 (mem_protect.c) Sbepe return ║ret; ~ 0000b7dc: b9401be0 ldr w0, [sp, #24] <- 0000b7d8(bl-succ)<return> host_stage2_map:173.2 (mem_protect.c) sbepe ║return ret; ~ 0000b7e0: a9437bfd ldp x29, x30, [sp, #48] ~ 0000b7e4: 910103ff add sp, sp, #0x40 0000b730 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000b7e8: d65f03c0 ret -ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb724 0xb7ec (DW_OP_fbreg -0x10) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 -prot param enum kvm_pgtable_prot<89e06>/<98455> 0xb724 0xb7ec (DW_OP_fbreg -0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:158 -ret var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x18) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 -is_memory var int (base type, DW_ATE_signed size:4) 0xb724 0xb7ec (DW_OP_breg31 0x14) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:160 -pool var pointer(struct hyp_pool<89e06>/<983fb>) 0xb724 0xb7ec (DW_OP_breg31 0x8) host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:161 **0000b7ec <kvm_get_parange>: + kvm_get_parange params: +mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8) kvm_get_parange:284.0 (kvm_mmu.h) Sbepe ║{ 0000b7ec CFA:r31 +mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:283 +parange var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x0) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:285 ~ 0000b7ec: d100c3ff sub sp, sp, #0x30 <- 0000b3a8(bl)<kvm_get_parange>,0000b94c(bl)<kvm_get_parange> ~ 0000b7f0: f90007e0 str x0, [sp, #8] kvm_get_parange:285.53 (kvm_mmu.h) SbePe u64 parange = cpuid_feature_extract_unsigned_field(║mmfr0, ~ 0000b7f4: f94007e8 ldr x8, [sp, #8] ~ 0000b7f8: f9000fe8 str x8, [sp, #24] s: 0xb7fc 0xb848 cpuid_feature_extract_unsigned_field inlined from kvm_get_parange:285 (kvm_mmu.h) <98cde>: t: 0xb7fc 0xb804 (0 of 2) cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98d03>:<98cde>: st cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) Sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width); +features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb848 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb848 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb804 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +width param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~st 0000b7fc: 2a1f03e9 mov w9, wzr ~st 0000b800: b90017e9 str w9, [sp, #20] -features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb804 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -width param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb804 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c s cpuid_feature_extract_unsigned_field:517.52 (cpufeature.h) Sbepe return cpuid_feature_extract_unsigned_field_width(║features, field, 4); ~s 0000b804: f9400fe8 ldr x8, [sp, #24] s cpuid_feature_extract_unsigned_field:517.62 (cpufeature.h) sbepe return cpuid_feature_extract_unsigned_field_width(features, ║field, 4); ~s 0000b808: b94017ea ldr w10, [sp, #20] ~s 0000b80c: f90017e8 str x8, [sp, #40] ~s 0000b810: b90027ea str w10, [sp, #36] ~s 0000b814: 5280008a mov w10, #0x4 // #4 ~s 0000b818: b90023ea str w10, [sp, #32] u: 0xb81c 0xb848 (1 of 2) cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98d03>:<98cde>: su cpuid_feature_extract_unsigned_field_width:511.15 (cpufeature.h) Sbepe return (u64)(║features << (64 - width - field)) >> (64 - width); +features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb81c 0xb848 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +field param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c +width param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~su 0000b81c: f94017e8 ldr x8, [sp, #40] su cpuid_feature_extract_unsigned_field_width:511.33 (cpufeature.h) sbepe return (u64)(features << (64 - ║width - field)) >> (64 - width); ~su 0000b820: b94023ea ldr w10, [sp, #32] ~su 0000b824: 5280080b mov w11, #0x40 // #64 su cpuid_feature_extract_unsigned_field_width:511.31 (cpufeature.h) sbepe return (u64)(features << (64 ║- width - field)) >> (64 - width); ~su 0000b828: 6b0a016b subs w11, w11, w10 su cpuid_feature_extract_unsigned_field_width:511.41 (cpufeature.h) sbepe return (u64)(features << (64 - width - ║field)) >> (64 - width); ~su 0000b82c: b94027ec ldr w12, [sp, #36] su cpuid_feature_extract_unsigned_field_width:511.39 (cpufeature.h) sbepe return (u64)(features << (64 - width ║- field)) >> (64 - width); ~su 0000b830: 6b0c016b subs w11, w11, w12 su cpuid_feature_extract_unsigned_field_width:511.24 (cpufeature.h) sbepe return (u64)(features ║<< (64 - width - field)) >> (64 - width); ~su 0000b834: 2a0b03ed mov w13, w11 ~su 0000b838: 9acd2108 lsl x8, x8, x13 su cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width); ~su 0000b83c: 4b0a0129 sub w9, w9, w10 ~su 0000b840: 2a0903ed mov w13, w9 ~su 0000b844: 9acd2508 lsr x8, x8, x13 -features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7fc 0xb848 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -field param int (base type, DW_ATE_signed size:4) 0xb7fc 0xb848 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb81c 0xb848 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -field param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c -width param int (base type, DW_ATE_signed size:4) 0xb81c 0xb848 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c kvm_get_parange:285.16 (kvm_mmu.h) Sbepe u64 parange = ║cpuid_feature_extract_unsigned_field(mmfr0, ~ 0000b848: 92407d08 and x8, x8, #0xffffffff kvm_get_parange:285.6 (kvm_mmu.h) sbepe u64 ║parange = cpuid_feature_extract_unsigned_field(mmfr0, ~ 0000b84c: f90003e8 str x8, [sp] kvm_get_parange:287.6 (kvm_mmu.h) Sbepe if (║parange > ID_AA64MMFR0_PARANGE_MAX) ~ 0000b850: f94003e8 ldr x8, [sp] kvm_get_parange:287.6 (kvm_mmu.h) sbepe if (║parange > ID_AA64MMFR0_PARANGE_MAX) ~ 0000b854: f1001908 subs x8, x8, #0x6 ~ ┌───0000b858: 540000c3 b.cc b870 <kvm_get_parange+0x84> // b.lo, b.ul, b.last ~ │ ┌─0000b85c: 14000001 b b860 <kvm_get_parange+0x74> <- 0000b858(b.cc-succ)<fallthrough> │ │ ~ │ └>0000b860: 528000a8 mov w8, #0x5 // #5 <- 0000b85c(b)<kvm_get_parange+0x74> ~ 0000b864: 2a0803e9 mov w9, w8 kvm_get_parange:288.11 (kvm_mmu.h) Sbepe parange ║= ID_AA64MMFR0_PARANGE_MAX; ~ 0000b868: f90003e9 str x9, [sp] kvm_get_parange:288.3 (kvm_mmu.h) sbepe ║parange = ID_AA64MMFR0_PARANGE_MAX; ~ │ ┌─0000b86c: 14000001 b b870 <kvm_get_parange+0x84> │ │ │ │ kvm_get_parange:290.9 (kvm_mmu.h) Sbepe return ║parange; ~ └>└>0000b870: f94003e0 ldr x0, [sp] <- 0000b858(b.cc)<kvm_get_parange+0x84>,0000b86c(b)<kvm_get_parange+0x84> kvm_get_parange:290.2 (kvm_mmu.h) sbepe ║return parange; ~ 0000b874: 9100c3ff add sp, sp, #0x30 0000b7f0 CFA:r31+48 ~ 0000b878: d65f03c0 ret -mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x8) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:283 -parange var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb7ec 0xb87c (DW_OP_fbreg 0x0) kvm_get_parange:arch/arm64/kvm/hyp/nvhe/mem_protect.c:285 **0000b87c <id_aa64mmfr0_parange_to_phys_shift>: + id_aa64mmfr0_parange_to_phys_shift params: +parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8) id_aa64mmfr0_parange_to_phys_shift:746.0 (cpufeature.h) Sbepe ║{ 0000b87c CFA:r31 +parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8) id_aa64mmfr0_parange_to_phys_shift:arch/arm64/kvm/hyp/nvhe/mem_protect.c:745 ~ 0000b87c: d10043ff sub sp, sp, #0x10 <- 0000b3b4(bl)<id_aa64mmfr0_parange_to_phys_shift> ~ 0000b880: b9000be0 str w0, [sp, #8] id_aa64mmfr0_parange_to_phys_shift:747.10 (cpufeature.h) SbePe switch (║parange) { ~ 0000b884: b9400be8 ldr w8, [sp, #8] ~ 0000b888: 2a0803e9 mov w9, w8 ~ 0000b88c: 2a0903e8 mov w8, w9 id_aa64mmfr0_parange_to_phys_shift:747.2 (cpufeature.h) sbepe ║switch (parange) { ~ 0000b890: 71001908 subs w8, w8, #0x6 ~ 0000b894: f90003e9 str x9, [sp] ~ ┌─0000b898: 54000388 b.hi b908 <id_aa64mmfr0_parange_to_phys_shift+0x8c> // b.pmore ~ 0000b89c: 90000068 adrp x8, 17000 <___kvm_hyp_init+0x3c> <- 0000b898(b.cc-succ)<fallthrough> ~ 0000b8a0: 913ac108 add x8, x8, #0xeb0 ~ 0000b8a4: f94003eb ldr x11, [sp] ~ 0000b8a8: b8ab790a ldrsw x10, [x8, x11, lsl #2] ~ 0000b8ac: 8b0a0109 add x9, x8, x10 ~ │X0000b8b0: d61f0120 br x9 -> 0000b8b0<indirect0> <- 0000b8b0(br)<indirect0> ~ 0000b8b4: 52800408 mov w8, #0x20 // #32 id_aa64mmfr0_parange_to_phys_shift:748.10 (cpufeature.h) Sbepe case 0: ║return 32; ~ 0000b8b8: b9000fe8 str w8, [sp, #12] ~ ┌─────────────┼─0000b8bc: 14000016 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ 0000b8c0: 52800488 mov w8, #0x24 // #36 │ │ id_aa64mmfr0_parange_to_phys_shift:749.10 (cpufeature.h) Sbepe case 1: ║return 36; ~ │ │ 0000b8c4: b9000fe8 str w8, [sp, #12] ~ │ ┌───────────┼─0000b8c8: 14000013 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ │ 0000b8cc: 52800508 mov w8, #0x28 // #40 │ │ │ id_aa64mmfr0_parange_to_phys_shift:750.10 (cpufeature.h) Sbepe case 2: ║return 40; ~ │ │ │ 0000b8d0: b9000fe8 str w8, [sp, #12] ~ │ │ ┌─────────┼─0000b8d4: 14000010 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ │ │ 0000b8d8: 52800548 mov w8, #0x2a // #42 │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:751.10 (cpufeature.h) Sbepe case 3: ║return 42; ~ │ │ │ │ 0000b8dc: b9000fe8 str w8, [sp, #12] ~ │ │ │ ┌───────┼─0000b8e0: 1400000d b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ │ │ │ 0000b8e4: 52800588 mov w8, #0x2c // #44 │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:752.10 (cpufeature.h) Sbepe case 4: ║return 44; ~ │ │ │ │ │ 0000b8e8: b9000fe8 str w8, [sp, #12] ~ │ │ │ │ ┌─────┼─0000b8ec: 1400000a b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ │ │ │ │ 0000b8f0: 52800608 mov w8, #0x30 // #48 │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:753.10 (cpufeature.h) Sbepe case 5: ║return 48; ~ │ │ │ │ │ │ 0000b8f4: b9000fe8 str w8, [sp, #12] ~ │ │ │ │ │ ┌───┼─0000b8f8: 14000007 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> ~ │ │ │ │ │ │ │ 0000b8fc: 52800688 mov w8, #0x34 // #52 │ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:754.10 (cpufeature.h) Sbepe case 6: ║return 52; ~ │ │ │ │ │ │ │ 0000b900: b9000fe8 str w8, [sp, #12] ~ │ │ │ │ │ │ ┌─┼─0000b904: 14000004 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> │ │ │ │ │ │ │ │ ~ │ │ │ │ │ │ │ └>0000b908: 52800608 mov w8, #0x30 // #48 <- 0000b898(b.cc)<id_aa64mmfr0_parange_to_phys_shift+0x8c> │ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:762.11 (cpufeature.h) Sbepe default: ║return CONFIG_ARM64_PA_BITS; ~ │ │ │ │ │ │ │ 0000b90c: b9000fe8 str w8, [sp, #12] ~ │ │ │ │ │ │ │ ┌─0000b910: 14000001 b b914 <id_aa64mmfr0_parange_to_phys_shift+0x98> │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ id_aa64mmfr0_parange_to_phys_shift:764.1 (cpufeature.h) Sbepe ║} ~ └>└>└>└>└>└>└>└>0000b914: b9400fe0 ldr w0, [sp, #12] <- 0000b8bc(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8c8(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8d4(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8e0(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8ec(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b8f8(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b904(b)<id_aa64mmfr0_parange_to_phys_shift+0x98>,0000b910(b)<id_aa64mmfr0_parange_to_phys_shift+0x98> ~ 0000b918: 910043ff add sp, sp, #0x10 0000b880 CFA:r31+16 ~ 0000b91c: d65f03c0 ret -parange param int (base type, DW_ATE_signed size:4) 0xb87c 0xb920 (DW_OP_fbreg 0x8) id_aa64mmfr0_parange_to_phys_shift:arch/arm64/kvm/hyp/nvhe/mem_protect.c:745 **0000b920 <kvm_get_vtcr>: + kvm_get_vtcr params: +mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8) +mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10) +phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14) kvm_get_vtcr:301.0 (kvm_mmu.h) Sbepe ║{ +mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 +mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 +phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 +vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_breg31 0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:302 +lvls var typedef(u8=typedef(__u8=unsigned char (base type, DW_ATE_unsigned_char size:1))) 0xb920 0xba14 (DW_OP_breg31 0xc) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:303 ~ 0000b920: d10103ff sub sp, sp, #0x40 <- 0000b3c8(bl)<kvm_get_vtcr> ~ 0000b924: a9037bfd stp x29, x30, [sp, #48] 0000b920 CFA:r31 r29:u r30:u ~ 0000b928: 9100c3fd add x29, sp, #0x30 ~ 0000b92c: f81f83a0 stur x0, [x29, #-8] ~ 0000b930: f81f03a1 stur x1, [x29, #-16] ~ 0000b934: b81ec3a2 stur w2, [x29, #-20] ~ 0000b938: 5286a008 mov w8, #0x3500 // #13568 ~ 0000b93c: 72b00008 movk w8, #0x8000, lsl #16 ~ 0000b940: 2a0803e9 mov w9, w8 kvm_get_vtcr:302.6 (kvm_mmu.h) SbePe u64 ║vtcr = VTCR_EL2_FLAGS; ~ 0000b944: f9000be9 str x9, [sp, #16] kvm_get_vtcr:305.26 (kvm_mmu.h) Sbepe vtcr |= kvm_get_parange(║mmfr0) << VTCR_EL2_PS_SHIFT; ~ 0000b948: f85f83a0 ldur x0, [x29, #-8] kvm_get_vtcr:305.10 (kvm_mmu.h) sbepe vtcr |= ║kvm_get_parange(mmfr0) << VTCR_EL2_PS_SHIFT; ~ 0000b94c: 97ffffa8 bl b7ec <kvm_get_parange> kvm_get_vtcr:305.7 (kvm_mmu.h) sbepe vtcr ║|= kvm_get_parange(mmfr0) << VTCR_EL2_PS_SHIFT; ~ 0000b950: f9400be9 ldr x9, [sp, #16] <- 0000b94c(bl-succ)<return> ~ 0000b954: aa004129 orr x9, x9, x0, lsl #16 ~ 0000b958: f9000be9 str x9, [sp, #16] kvm_get_vtcr:306.10 (kvm_mmu.h) Sbepe vtcr |= ║VTCR_EL2_T0SZ(phys_shift); ~ 0000b95c: b85ec3a8 ldur w8, [x29, #-20] ~ 0000b960: 2a0803e9 mov w9, w8 ~ 0000b964: 52800808 mov w8, #0x40 // #64 ~ 0000b968: 2a0803ea mov w10, w8 ~ 0000b96c: eb090149 subs x9, x10, x9 kvm_get_vtcr:306.7 (kvm_mmu.h) sbepe vtcr ║|= VTCR_EL2_T0SZ(phys_shift); ~ 0000b970: f9400bea ldr x10, [sp, #16] ~ 0000b974: aa090149 orr x9, x10, x9 ~ 0000b978: f9000be9 str x9, [sp, #16] kvm_get_vtcr:311.9 (kvm_mmu.h) Sbepe lvls = ║stage2_pgtable_levels(phys_shift); ~ 0000b97c: b85ec3a8 ldur w8, [x29, #-20] ~ 0000b980: 71002108 subs w8, w8, #0x8 ~ 0000b984: 5291c72b mov w11, #0x8e39 // #36409 ~ 0000b988: 72a71c6b movk w11, #0x38e3, lsl #16 ~ 0000b98c: 9bab7d09 umull x9, w8, w11 ~ 0000b990: d361fd29 lsr x9, x9, #33 kvm_get_vtcr:311.7 (kvm_mmu.h) sbepe lvls ║= stage2_pgtable_levels(phys_shift); ~ 0000b994: 390033e9 strb w9, [sp, #12] kvm_get_vtcr:312.6 (kvm_mmu.h) Sbepe if (║lvls < 2) ~ 0000b998: 394033e8 ldrb w8, [sp, #12] kvm_get_vtcr:312.6 (kvm_mmu.h) sbepe if (║lvls < 2) ~ 0000b99c: 71000508 subs w8, w8, #0x1 ~ ┌───0000b9a0: 540000ac b.gt b9b4 <kvm_get_vtcr+0x94> ~ │ ┌─0000b9a4: 14000001 b b9a8 <kvm_get_vtcr+0x88> <- 0000b9a0(b.cc-succ)<fallthrough> │ │ ~ │ └>0000b9a8: 52800048 mov w8, #0x2 // #2 <- 0000b9a4(b)<kvm_get_vtcr+0x88> kvm_get_vtcr:313.8 (kvm_mmu.h) Sbepe lvls ║= 2; ~ 0000b9ac: 390033e8 strb w8, [sp, #12] kvm_get_vtcr:313.3 (kvm_mmu.h) sbepe ║lvls = 2; ~ │ ┌─0000b9b0: 14000001 b b9b4 <kvm_get_vtcr+0x94> │ │ │ │ kvm_get_vtcr:314.10 (kvm_mmu.h) Sbepe vtcr |= ║VTCR_EL2_LVLS_TO_SL0(lvls); ~ └>└>0000b9b4: 394033e8 ldrb w8, [sp, #12] <- 0000b9a0(b.cc)<kvm_get_vtcr+0x94>,0000b9b0(b)<kvm_get_vtcr+0x94> ~ 0000b9b8: 52800089 mov w9, #0x4 // #4 ~ 0000b9bc: 6b080128 subs w8, w9, w8 ~ 0000b9c0: 52800049 mov w9, #0x2 // #2 ~ 0000b9c4: 2a0903ea mov w10, w9 ~ 0000b9c8: eb28c14a subs x10, x10, w8, sxtw kvm_get_vtcr:314.7 (kvm_mmu.h) sbepe vtcr ║|= VTCR_EL2_LVLS_TO_SL0(lvls); ~ 0000b9cc: f9400beb ldr x11, [sp, #16] ~ 0000b9d0: aa0a196a orr x10, x11, x10, lsl #6 ~ 0000b9d4: f9000bea str x10, [sp, #16] kvm_get_vtcr:321.7 (kvm_mmu.h) Sbepe vtcr ║|= VTCR_EL2_HA; ~ 0000b9d8: f9400bea ldr x10, [sp, #16] ~ 0000b9dc: b26b014a orr x10, x10, #0x200000 ~ 0000b9e0: f9000bea str x10, [sp, #16] kvm_get_vtcr:324.25 (kvm_mmu.h) Sbepe vtcr |= (get_vmid_bits(║mmfr1) == 16) ? ~ 0000b9e4: f85f03a0 ldur x0, [x29, #-16] kvm_get_vtcr:324.11 (kvm_mmu.h) sbepe vtcr |= (║get_vmid_bits(mmfr1) == 16) ? ~ 0000b9e8: 9400000b bl ba14 <get_vmid_bits> ~ 0000b9ec: 71004008 subs w8, w0, #0x10 <- 0000b9e8(bl-succ)<return> ~ 0000b9f0: 1a9f17e9 cset w9, eq // eq = none kvm_get_vtcr:324.10 (kvm_mmu.h) sbepe vtcr |= ║(get_vmid_bits(mmfr1) == 16) ? ~ 0000b9f4: 2a0903ea mov w10, w9 kvm_get_vtcr:324.7 (kvm_mmu.h) sbepe vtcr ║|= (get_vmid_bits(mmfr1) == 16) ? ~ 0000b9f8: f9400beb ldr x11, [sp, #16] ~ 0000b9fc: aa0a4d6a orr x10, x11, x10, lsl #19 ~ 0000ba00: f9000bea str x10, [sp, #16] kvm_get_vtcr:328.9 (kvm_mmu.h) Sbepe return ║vtcr; ~ 0000ba04: f9400be0 ldr x0, [sp, #16] kvm_get_vtcr:328.2 (kvm_mmu.h) sbepe ║return vtcr; ~ 0000ba08: a9437bfd ldp x29, x30, [sp, #48] ~ 0000ba0c: 910103ff add sp, sp, #0x40 0000b92c CFA:r29+16 r29:c-16 r30:c-8 ~ 0000ba10: d65f03c0 ret -mmfr0 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x8) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 -mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_fbreg -0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 -phys_shift param typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xb920 0xba14 (DW_OP_fbreg -0x14) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:300 -vtcr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xb920 0xba14 (DW_OP_breg31 0x10) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:302 -lvls var typedef(u8=typedef(__u8=unsigned char (base type, DW_ATE_unsigned_char size:1))) 0xb920 0xba14 (DW_OP_breg31 0xc) kvm_get_vtcr:arch/arm64/kvm/hyp/nvhe/mem_protect.c:303 **0000ba14 <get_vmid_bits>: + get_vmid_bits params: +mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8) get_vmid_bits:800.0 (cpufeature.h) Sbepe ║{ 0000ba14 CFA:r31 +mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:799 +vmid_bits var int (base type, DW_ATE_signed size:4) 0xba14 0xbaa8 (DW_OP_fbreg 0x4) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:801 ~ 0000ba14: d100c3ff sub sp, sp, #0x30 <- 0000b9e8(bl)<get_vmid_bits> ~ 0000ba18: f90007e0 str x0, [sp, #8] get_vmid_bits:803.51 (cpufeature.h) SbePe vmid_bits = cpuid_feature_extract_unsigned_field(║mmfr1, ~ 0000ba1c: f94007e8 ldr x8, [sp, #8] ~ 0000ba20: f9000fe8 str x8, [sp, #24] ~ 0000ba24: 52800089 mov w9, #0x4 // #4 ~ 0000ba28: b90017e9 str w9, [sp, #20] v: 0xba2c 0xba70 cpuid_feature_extract_unsigned_field inlined from get_vmid_bits:803 (cpufeature.h) <98df3>: v cpuid_feature_extract_unsigned_field:517.52 (cpufeature.h) Sbepe return cpuid_feature_extract_unsigned_field_width(║features, field, 4); +features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba2c 0xba70 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c +field param int (base type, DW_ATE_signed size:4) 0xba2c 0xba70 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~v 0000ba2c: f9400fe8 ldr x8, [sp, #24] v cpuid_feature_extract_unsigned_field:517.62 (cpufeature.h) sbepe return cpuid_feature_extract_unsigned_field_width(features, ║field, 4); ~v 0000ba30: b94017ea ldr w10, [sp, #20] ~v 0000ba34: f90017e8 str x8, [sp, #40] ~v 0000ba38: b90027ea str w10, [sp, #36] ~v 0000ba3c: b90023e9 str w9, [sp, #32] w: 0xba40 0xba70 cpuid_feature_extract_unsigned_field_width inlined from cpuid_feature_extract_unsigned_field:517 (cpufeature.h) <98e18>:<98df3>: vw cpuid_feature_extract_unsigned_field_width:511.15 (cpufeature.h) Sbepe return (u64)(║features << (64 - width - field)) >> (64 - width); +features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba40 0xba70 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c +field param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c +width param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~vw 0000ba40: f94017e8 ldr x8, [sp, #40] vw cpuid_feature_extract_unsigned_field_width:511.33 (cpufeature.h) sbepe return (u64)(features << (64 - ║width - field)) >> (64 - width); ~vw 0000ba44: b94023e9 ldr w9, [sp, #32] ~vw 0000ba48: 5280080a mov w10, #0x40 // #64 vw cpuid_feature_extract_unsigned_field_width:511.31 (cpufeature.h) sbepe return (u64)(features << (64 ║- width - field)) >> (64 - width); ~vw 0000ba4c: 6b09014a subs w10, w10, w9 vw cpuid_feature_extract_unsigned_field_width:511.41 (cpufeature.h) sbepe return (u64)(features << (64 - width - ║field)) >> (64 - width); ~vw 0000ba50: b94027eb ldr w11, [sp, #36] vw cpuid_feature_extract_unsigned_field_width:511.39 (cpufeature.h) sbepe return (u64)(features << (64 - width ║- field)) >> (64 - width); ~vw 0000ba54: 6b0b014a subs w10, w10, w11 vw cpuid_feature_extract_unsigned_field_width:511.24 (cpufeature.h) sbepe return (u64)(features ║<< (64 - width - field)) >> (64 - width); ~vw 0000ba58: 2a0a03ec mov w12, w10 ~vw 0000ba5c: 9acc2108 lsl x8, x8, x12 vw cpuid_feature_extract_unsigned_field_width:511.49 (cpufeature.h) sbepe return (u64)(features << (64 - width - field)) ║>> (64 - width); ~vw 0000ba60: 2a1f03ea mov w10, wzr ~vw 0000ba64: 4b090149 sub w9, w10, w9 ~vw 0000ba68: 2a0903ec mov w12, w9 ~vw 0000ba6c: 9acc2508 lsr x8, x8, x12 -features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba2c 0xba70 (DW_OP_fbreg 0x18) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c -field param int (base type, DW_ATE_signed size:4) 0xba2c 0xba70 (DW_OP_fbreg 0x14) cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c -features param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba40 0xba70 (DW_OP_fbreg 0x28) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c -field param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x24) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c -width param int (base type, DW_ATE_signed size:4) 0xba40 0xba70 (DW_OP_fbreg 0x20) cpuid_feature_extract_unsigned_field_width(inlined):cpuid_feature_extract_unsigned_field(inlined):get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c get_vmid_bits:803.12 (cpufeature.h) Sbepe vmid_bits ║= cpuid_feature_extract_unsigned_field(mmfr1, ~ 0000ba70: b90007e8 str w8, [sp, #4] get_vmid_bits:805.6 (cpufeature.h) Sbepe if (║vmid_bits == ID_AA64MMFR1_VMIDBITS_16) ~ 0000ba74: b94007e8 ldr w8, [sp, #4] get_vmid_bits:805.6 (cpufeature.h) sbepe if (║vmid_bits == ID_AA64MMFR1_VMIDBITS_16) ~ 0000ba78: 71000908 subs w8, w8, #0x2 ~ ┌──0000ba7c: 540000a1 b.ne ba90 <get_vmid_bits+0x7c> // b.any ~ │┌─0000ba80: 14000001 b ba84 <get_vmid_bits+0x70> <- 0000ba7c(b.cc-succ)<fallthrough> ││ ~ │└>0000ba84: 52800208 mov w8, #0x10 // #16 <- 0000ba80(b)<get_vmid_bits+0x70> get_vmid_bits:806.3 (cpufeature.h) Sbepe ║return 16; ~ 0000ba88: b90013e8 str w8, [sp, #16] ~ ┌┼──0000ba8c: 14000004 b ba9c <get_vmid_bits+0x88> ││ ~ │└─>0000ba90: 52800108 mov w8, #0x8 // #8 <- 0000ba7c(b.cc)<get_vmid_bits+0x7c> get_vmid_bits:812.2 (cpufeature.h) Sbepe ║return 8; ~ 0000ba94: b90013e8 str w8, [sp, #16] ~ │ ┌─0000ba98: 14000001 b ba9c <get_vmid_bits+0x88> │ │ │ │ get_vmid_bits:813.1 (cpufeature.h) Sbepe ║} ~ └>└>0000ba9c: b94013e0 ldr w0, [sp, #16] <- 0000ba8c(b)<get_vmid_bits+0x88>,0000ba98(b)<get_vmid_bits+0x88> ~ 0000baa0: 9100c3ff add sp, sp, #0x30 0000ba18 CFA:r31+48 ~ 0000baa4: d65f03c0 ret -mmfr1 param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xba14 0xbaa8 (DW_OP_fbreg 0x8) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:799 -vmid_bits var int (base type, DW_ATE_signed size:4) 0xba14 0xbaa8 (DW_OP_fbreg 0x4) get_vmid_bits:arch/arm64/kvm/hyp/nvhe/mem_protect.c:801 **0000baa8 <host_s2_mem_pgtable_size>: + host_s2_mem_pgtable_size params: none host_s2_mem_pgtable_size:89.0 (mm.h) Sbepe ║{ +max_pgd_sz var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbaa8 0xbb04 (DW_OP_breg31 0x0) host_s2_mem_pgtable_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:90 ~ 0000baa8: d10083ff sub sp, sp, #0x20 <- 0000b3f4(bl)<host_s2_mem_pgtable_size> ~ 0000baac: a9017bfd stp x29, x30, [sp, #16] 0000baa8 CFA:r31 r29:u r30:u ~ 0000bab0: 910043fd add x29, sp, #0x10 ~ 0000bab4: 52a00028 mov w8, #0x10000 // #65536 ~ 0000bab8: 2a0803e9 mov w9, w8 host_s2_mem_pgtable_size:90.16 (mm.h) SbePe unsigned long ║max_pgd_sz = 16 << PAGE_SHIFT; ~ 0000babc: f90003e9 str x9, [sp] host_s2_mem_pgtable_size:92.6 (mm.h) Sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0) ~ 0000bac0: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000bac4: b943a128 ldr w8, [x9, #928] host_s2_mem_pgtable_size:92.6 (mm.h) sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0) ~ 0000bac8: 71000108 subs w8, w8, #0x0 ~ ┌──0000bacc: 540000ac b.gt bae0 <host_s2_mem_pgtable_size+0x38> ~ │┌─0000bad0: 14000001 b bad4 <host_s2_mem_pgtable_size+0x2c> <- 0000bacc(b.cc-succ)<fallthrough> ││ ~ │└>0000bad4: aa1f03e8 mov x8, xzr <- 0000bad0(b)<host_s2_mem_pgtable_size+0x2c> host_s2_mem_pgtable_size:93.3 (mm.h) Sbepe ║return 0; ~ 0000bad8: f90007e8 str x8, [sp, #8] ~ ┌┼──0000badc: 14000006 b baf4 <host_s2_mem_pgtable_size+0x4c> ││ ││ host_s2_mem_pgtable_size:95.9 (mm.h) Sbepe return ║__hyp_pgtable_total_size() + max_pgd_sz; ~ │└─>0000bae0: 94000072 bl bca8 <__hyp_pgtable_total_size> <- 0000bacc(b.cc)<host_s2_mem_pgtable_size+0x38> host_s2_mem_pgtable_size:95.38 (mm.h) sbepe return __hyp_pgtable_total_size() + ║max_pgd_sz; ~ 0000bae4: f94003e8 ldr x8, [sp] <- 0000bae0(bl-succ)<return> host_s2_mem_pgtable_size:95.36 (mm.h) sbepe return __hyp_pgtable_total_size() ║+ max_pgd_sz; ~ 0000bae8: 8b080008 add x8, x0, x8 host_s2_mem_pgtable_size:95.2 (mm.h) sbepe ║return __hyp_pgtable_total_size() + max_pgd_sz; ~ 0000baec: f90007e8 str x8, [sp, #8] ~ │ ┌─0000baf0: 14000001 b baf4 <host_s2_mem_pgtable_size+0x4c> │ │ │ │ host_s2_mem_pgtable_size:96.1 (mm.h) Sbepe ║} ~ └>└>0000baf4: f94007e0 ldr x0, [sp, #8] <- 0000badc(b)<host_s2_mem_pgtable_size+0x4c>,0000baf0(b)<host_s2_mem_pgtable_size+0x4c> ~ 0000baf8: a9417bfd ldp x29, x30, [sp, #16] ~ 0000bafc: 910083ff add sp, sp, #0x20 0000bab4 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000bb00: d65f03c0 ret -max_pgd_sz var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbaa8 0xbb04 (DW_OP_breg31 0x0) host_s2_mem_pgtable_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:90 **0000bb04 <host_s2_dev_pgtable_size>: + host_s2_dev_pgtable_size params: none host_s2_dev_pgtable_size:99.0 (mm.h) Sbepe ║{ ~ 0000bb04: d10083ff sub sp, sp, #0x20 <- 0000b440(bl)<host_s2_dev_pgtable_size> ~ 0000bb08: a9017bfd stp x29, x30, [sp, #16] 0000bb04 CFA:r31 r29:u r30:u ~ 0000bb0c: 910043fd add x29, sp, #0x10 host_s2_dev_pgtable_size:100.6 (mm.h) SbePe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0) ~ 0000bb10: 90000088 adrp x8, 1b000 <hyp_memory+0x460> ~ 0000bb14: b943a109 ldr w9, [x8, #928] host_s2_dev_pgtable_size:100.6 (mm.h) sbepe if (║kvm_nvhe_sym(hyp_memblock_nr) <= 0) ~ 0000bb18: 71000129 subs w9, w9, #0x0 ~ ┌──0000bb1c: 540000ac b.gt bb30 <host_s2_dev_pgtable_size+0x2c> ~ │┌─0000bb20: 14000001 b bb24 <host_s2_dev_pgtable_size+0x20> <- 0000bb1c(b.cc-succ)<fallthrough> ││ ~ │└>0000bb24: aa1f03e8 mov x8, xzr <- 0000bb20(b)<host_s2_dev_pgtable_size+0x20> host_s2_dev_pgtable_size:101.3 (mm.h) Sbepe ║return 0; ~ 0000bb28: f90007e8 str x8, [sp, #8] ~ ┌┼──0000bb2c: 14000007 b bb48 <host_s2_dev_pgtable_size+0x44> ││ ~ │└─>0000bb30: 52a00088 mov w8, #0x40000 // #262144 <- 0000bb1c(b.cc)<host_s2_dev_pgtable_size+0x2c> ~ 0000bb34: 2a0803e0 mov w0, w8 host_s2_dev_pgtable_size:104.9 (mm.h) Sbepe return ║__hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) << PAGE_SHIFT; ~ 0000bb38: 94000085 bl bd4c <__hyp_pgtable_max_pages> host_s2_dev_pgtable_size:104.58 (mm.h) sbepe return __hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) ║<< PAGE_SHIFT; ~ 0000bb3c: d374cc09 lsl x9, x0, #12 <- 0000bb38(bl-succ)<return> host_s2_dev_pgtable_size:104.2 (mm.h) sbepe ║return __hyp_pgtable_max_pages((1 << 30) >> PAGE_SHIFT) << PAGE_SHIFT; ~ 0000bb40: f90007e9 str x9, [sp, #8] ~ │ ┌─0000bb44: 14000001 b bb48 <host_s2_dev_pgtable_size+0x44> │ │ │ │ host_s2_dev_pgtable_size:105.1 (mm.h) Sbepe ║} ~ └>└>0000bb48: f94007e0 ldr x0, [sp, #8] <- 0000bb2c(b)<host_s2_dev_pgtable_size+0x44>,0000bb44(b)<host_s2_dev_pgtable_size+0x44> ~ 0000bb4c: a9417bfd ldp x29, x30, [sp, #16] ~ 0000bb50: 910083ff add sp, sp, #0x20 0000bb10 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000bb54: d65f03c0 ret **0000bb58 <host_s2_zalloc_pages_exact>: + host_s2_zalloc_pages_exact params: +size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0) host_s2_zalloc_pages_exact:29.0 (mem_protect.c) Sbepe ║{ +size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0) host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28 ~ 0000bb58: d10103ff sub sp, sp, #0x40 ~ 0000bb5c: a9037bfd stp x29, x30, [sp, #48] 0000bb58 CFA:r31 r29:u r30:u ~ 0000bb60: 9100c3fd add x29, sp, #0x30 ~ 0000bb64: f90003e0 str x0, [sp] host_s2_zalloc_pages_exact:30.63 (mem_protect.c) SbePe return hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(║size)); ~ 0000bb68: f94003e8 ldr x8, [sp] ~ 0000bb6c: f90007e8 str x8, [sp, #8] ~ ┌─0000bb70: 14000001 b bb74 <host_s2_zalloc_pages_exact+0x1c> x: 0xbb74 0xbbe0 get_order inlined from host_s2_zalloc_pages_exact:30 (mem_protect.c) <98ef8>: x get_order:41.6 (getorder.h) Sbepe size║--; +size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbb74 0xbbe0 (DW_OP_breg31 0x8) get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~x └>0000bb74: f94007e8 ldr x8, [sp, #8] <- 0000bb70(b)<host_s2_zalloc_pages_exact+0x1c> ~x 0000bb78: f1000508 subs x8, x8, #0x1 ~x 0000bb7c: f90007e8 str x8, [sp, #8] x get_order:42.7 (getorder.h) Sbepe size ║>>= PAGE_SHIFT; ~x 0000bb80: f94007e8 ldr x8, [sp, #8] ~x 0000bb84: d34cfd08 lsr x8, x8, #12 ~x 0000bb88: f90007e8 str x8, [sp, #8] x get_order:46.15 (getorder.h) Sbepe return fls64(║size); ~x 0000bb8c: f94007e8 ldr x8, [sp, #8] ~x 0000bb90: f9000fe8 str x8, [sp, #24] y: 0xbb94 0xbbd4 fls64 inlined from get_order:46 (getorder.h) <98f14>:<98ef8>: xy fls64:29.6 (fls64.h) Sbepe if (║x == 0) +x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbb94 0xbbd4 (DW_OP_breg31 0x18) fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~xy 0000bb94: f9400fe8 ldr x8, [sp, #24] xy fls64:29.6 (fls64.h) sbepe if (║x == 0) ~xy ┌──0000bb98: b50000a8 cbnz x8, bbac <host_s2_zalloc_pages_exact+0x54> ~xy │┌─0000bb9c: 14000001 b bba0 <host_s2_zalloc_pages_exact+0x48> <- 0000bb98(b.cc-succ)<fallthrough> ││ ~xy │└>0000bba0: 2a1f03e8 mov w8, wzr <- 0000bb9c(b)<host_s2_zalloc_pages_exact+0x48> xy fls64:30.3 (fls64.h) Sbepe ║return 0; ~xy 0000bba4: b81f43a8 stur w8, [x29, #-12] ~xy ┌┼──0000bba8: 1400000a b bbd0 <host_s2_zalloc_pages_exact+0x78> ││ xy ││ fls64:31.15 (fls64.h) Sbepe return __fls(║x) + 1; ~xy │└─>0000bbac: f9400fe8 ldr x8, [sp, #24] <- 0000bb98(b.cc)<host_s2_zalloc_pages_exact+0x54> ~xy 0000bbb0: f81f83a8 stur x8, [x29, #-8] z: 0xbbb4 0xbbc0 __fls inlined from fls64:31 (fls64.h) <98f30>:<98f14>:<98ef8>: xyz __fls:13.49 (builtin-__fls.h) Sbepe return (sizeof(word) * 8) - 1 - __builtin_clzl(║word); +word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbbb4 0xbbc0 (DW_OP_fbreg -0x8) __fls(inlined):fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~xyz 0000bbb4: f85f83a8 ldur x8, [x29, #-8] xyz __fls:13.34 (builtin-__fls.h) sbepe return (sizeof(word) * 8) - 1 - ║__builtin_clzl(word); ~xyz 0000bbb8: dac01108 clz x8, x8 ~xyz 0000bbbc: 52800809 mov w9, #0x40 // #64 -word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbbb4 0xbbc0 (DW_OP_fbreg -0x8) __fls(inlined):fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c xy fls64:31.18 (fls64.h) Sbepe return __fls(x) ║+ 1; ~xy 0000bbc0: 6b080128 subs w8, w9, w8 ~xy 0000bbc4: 2a0803e0 mov w0, w8 xy fls64:31.2 (fls64.h) sbepe ║return __fls(x) + 1; ~xy 0000bbc8: b81f43a0 stur w0, [x29, #-12] ~xy │ ┌─0000bbcc: 14000001 b bbd0 <host_s2_zalloc_pages_exact+0x78> │ │ xy │ │ fls64:32.1 (fls64.h) Sbepe ║} ~xy └>└>0000bbd0: b85f43a8 ldur w8, [x29, #-12] <- 0000bba8(b)<host_s2_zalloc_pages_exact+0x78>,0000bbcc(b)<host_s2_zalloc_pages_exact+0x78> -x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbb94 0xbbd4 (DW_OP_breg31 0x18) fls64(inlined):get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c x get_order:46.2 (getorder.h) Sbepe ║return fls64(size); ~x 0000bbd4: b90017e8 str w8, [sp, #20] ~x ┌─0000bbd8: 14000001 b bbdc <host_s2_zalloc_pages_exact+0x84> x get_order:48.1 (getorder.h) Sbepe ║} ~x └>0000bbdc: b94017e2 ldr w2, [sp, #20] <- 0000bbd8(b)<host_s2_zalloc_pages_exact+0x84> -size param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbb74 0xbbe0 (DW_OP_breg31 0x8) get_order(inlined):host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c host_s2_zalloc_pages_exact:30.9 (mem_protect.c) Sbepe return ║hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(size)); ~ 0000bbe0: 90000080 adrp x0, 1b000 <hyp_memory+0x460> ~ 0000bbe4: 91168000 add x0, x0, #0x5a0 ~ 0000bbe8: 52800021 mov w1, #0x1 // #1 ~ 0000bbec: 97fff573 bl 91b8 <hyp_alloc_pages> host_s2_zalloc_pages_exact:30.2 (mem_protect.c) sbepe ║return hyp_alloc_pages(&host_s2_mem, HYP_GFP_ZERO, get_order(size)); ~ 0000bbf0: a9437bfd ldp x29, x30, [sp, #48] <- 0000bbec(bl-succ)<return> ~ 0000bbf4: 910103ff add sp, sp, #0x40 0000bb64 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000bbf8: d65f03c0 ret -size param typedef(size_t=typedef(__kernel_size_t=typedef(__kernel_ulong_t=long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbb58 0xbbfc (DW_OP_breg31 0x0) host_s2_zalloc_pages_exact:arch/arm64/kvm/hyp/nvhe/mem_protect.c:28 **0000bbfc <host_s2_zalloc_page>: + host_s2_zalloc_page params: +pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8) host_s2_zalloc_page:34.0 (mem_protect.c) Sbepe ║{ +pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8) host_s2_zalloc_page:arch/arm64/kvm/hyp/nvhe/mem_protect.c:33 ~ 0000bbfc: d10083ff sub sp, sp, #0x20 ~ 0000bc00: a9017bfd stp x29, x30, [sp, #16] 0000bbfc CFA:r31 r29:u r30:u ~ 0000bc04: 910043fd add x29, sp, #0x10 ~ 0000bc08: f90007e0 str x0, [sp, #8] host_s2_zalloc_page:35.25 (mem_protect.c) SbePe return hyp_alloc_pages(║pool, HYP_GFP_ZERO, 0); ~ 0000bc0c: f94007e0 ldr x0, [sp, #8] ~ 0000bc10: 52800021 mov w1, #0x1 // #1 ~ 0000bc14: 2a1f03e2 mov w2, wzr host_s2_zalloc_page:35.9 (mem_protect.c) sbepe return ║hyp_alloc_pages(pool, HYP_GFP_ZERO, 0); ~ 0000bc18: 97fff568 bl 91b8 <hyp_alloc_pages> host_s2_zalloc_page:35.2 (mem_protect.c) sbepe ║return hyp_alloc_pages(pool, HYP_GFP_ZERO, 0); ~ 0000bc1c: a9417bfd ldp x29, x30, [sp, #16] <- 0000bc18(bl-succ)<return> ~ 0000bc20: 910083ff add sp, sp, #0x20 0000bc08 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000bc24: d65f03c0 ret -pool param pointer(no type) 0xbbfc 0xbc28 (DW_OP_breg31 0x8) host_s2_zalloc_page:arch/arm64/kvm/hyp/nvhe/mem_protect.c:33 **0000bc28 <hyp_phys_to_virt>: + hyp_phys_to_virt params: +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8) hyp_phys_to_virt:31.0 (memory.h) Sbepe ║{ 0000bc28 CFA:r31 +phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8) hyp_phys_to_virt:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30 ~ 0000bc28: d10043ff sub sp, sp, #0x10 ~ 0000bc2c: f90007e0 str x0, [sp, #8] hyp_phys_to_virt:32.9 (memory.h) SbePe return ║__hyp_va(phys); ~ 0000bc30: f94007e8 ldr x8, [sp, #8] ~ 0000bc34: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000bc38: f9439d29 ldr x9, [x9, #1848] ~ 0000bc3c: eb090100 subs x0, x8, x9 hyp_phys_to_virt:32.2 (memory.h) sbepe ║return __hyp_va(phys); ~ 0000bc40: 910043ff add sp, sp, #0x10 0000bc2c CFA:r31+16 ~ 0000bc44: d65f03c0 ret -phys param typedef(phys_addr_t=typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbc28 0xbc48 (DW_OP_fbreg 0x8) hyp_phys_to_virt:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30 **0000bc48 <hyp_virt_to_phys>: + hyp_virt_to_phys params: +addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8) hyp_virt_to_phys:36.0 (memory.h) Sbepe ║{ 0000bc48 CFA:r31 +addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35 ~ 0000bc48: d10043ff sub sp, sp, #0x10 ~ 0000bc4c: f90007e0 str x0, [sp, #8] hyp_virt_to_phys:37.9 (memory.h) SbePe return ║__hyp_pa(addr); ~ 0000bc50: f94007e8 ldr x8, [sp, #8] ~ 0000bc54: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000bc58: f9439d29 ldr x9, [x9, #1848] ~ 0000bc5c: 8b090100 add x0, x8, x9 hyp_virt_to_phys:37.2 (memory.h) sbepe ║return __hyp_pa(addr); ~ 0000bc60: 910043ff add sp, sp, #0x10 0000bc4c CFA:r31+16 ~ 0000bc64: d65f03c0 ret -addr param pointer(no type) 0xbc48 0xbc68 (DW_OP_fbreg 0x8) hyp_virt_to_phys:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35 **0000bc68 <hyp_page_count>: + hyp_page_count params: +addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8) hyp_page_count:49.0 (memory.h) Sbepe ║{ 0000bc68 CFA:r31 +addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:48 +p var pointer(struct hyp_page<89e06>/<98502>) 0xbc68 0xbca8 (DW_OP_fbreg 0x0) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:50 ~ 0000bc68: d10043ff sub sp, sp, #0x10 ~ 0000bc6c: f90007e0 str x0, [sp, #8] hyp_page_count:50.23 (memory.h) SbePe struct hyp_page *p = ║hyp_virt_to_page(addr); ~ 0000bc70: f0000068 adrp x8, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000bc74: f944c508 ldr x8, [x8, #2440] ~ 0000bc78: f94007e9 ldr x9, [sp, #8] ~ 0000bc7c: f000006a adrp x10, 1a000 <hyp_cpu_logical_map+0xe0> ~ 0000bc80: f9439d4a ldr x10, [x10, #1848] ~ 0000bc84: 8b0a0129 add x9, x9, x10 ~ 0000bc88: d347fd29 lsr x9, x9, #7 ~ 0000bc8c: 927bcd29 and x9, x9, #0x1ffffffffffffe0 ~ 0000bc90: 8b090108 add x8, x8, x9 hyp_page_count:50.19 (memory.h) sbepe struct hyp_page *║p = hyp_virt_to_page(addr); ~ 0000bc94: f90003e8 str x8, [sp] hyp_page_count:52.9 (memory.h) Sbepe return ║p->refcount; ~ 0000bc98: f94003e8 ldr x8, [sp] hyp_page_count:52.12 (memory.h) sbepe return p->║refcount; ~ 0000bc9c: b9400100 ldr w0, [x8] hyp_page_count:52.2 (memory.h) sbepe ║return p->refcount; ~ 0000bca0: 910043ff add sp, sp, #0x10 0000bc6c CFA:r31+16 ~ 0000bca4: d65f03c0 ret -addr param pointer(no type) 0xbc68 0xbca8 (DW_OP_fbreg 0x8) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:48 -p var pointer(struct hyp_page<89e06>/<98502>) 0xbc68 0xbca8 (DW_OP_fbreg 0x0) hyp_page_count:arch/arm64/kvm/hyp/nvhe/mem_protect.c:50 **0000bca8 <__hyp_pgtable_total_size>: + __hyp_pgtable_total_size params: none __hyp_pgtable_total_size:56.0 (mm.h) Sbepe ║{ +reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbca8 0xbd4c (DW_OP_fbreg -0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:57 +nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x10) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58 +res var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58 +i var int (base type, DW_ATE_signed size:4) 0xbca8 0xbd4c (DW_OP_breg31 0x4) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:59 ~ 0000bca8: d100c3ff sub sp, sp, #0x30 <- 0000bae0(bl)<__hyp_pgtable_total_size> ~ 0000bcac: a9027bfd stp x29, x30, [sp, #32] 0000bca8 CFA:r31 r29:u r30:u ~ 0000bcb0: 910083fd add x29, sp, #0x20 ~ 0000bcb4: aa1f03e8 mov x8, xzr __hyp_pgtable_total_size:58.26 (mm.h) SbePe unsigned long nr_pages, ║res = 0; ~ 0000bcb8: f90007e8 str x8, [sp, #8] ~ 0000bcbc: 2a1f03e9 mov w9, wzr __hyp_pgtable_total_size:61.9 (mm.h) Sbepe for (i ║= 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ 0000bcc0: b90007e9 str w9, [sp, #4] __hyp_pgtable_total_size:61.7 (mm.h) sbepe for (║i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ ┌─0000bcc4: 14000001 b bcc8 <__hyp_pgtable_total_size+0x20> __hyp_pgtable_total_size:61.14 (mm.h) sbepe for (i = 0; ║i < kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ ╔>└>0000bcc8: b94007e8 ldr w8, [sp, #4] <- 0000bcc4(b)<__hyp_pgtable_total_size+0x20>,v0000bd38(b)<__hyp_pgtable_total_size+0x20> __hyp_pgtable_total_size:61.18 (mm.h) sbepe for (i = 0; i < ║kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ 0000bccc: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000bcd0: b943a12a ldr w10, [x9, #928] __hyp_pgtable_total_size:61.2 (mm.h) sbepe ║for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ 0000bcd4: 6b0a0108 subs w8, w8, w10 ~ ║┌──0000bcd8: 5400032a b.ge bd3c <__hyp_pgtable_total_size+0x94> // b.tcont ║│ ~ ║│┌─0000bcdc: 14000001 b bce0 <__hyp_pgtable_total_size+0x38> <- 0000bcd8(b.cc-succ)<fallthrough> ║││ ║││ __hyp_pgtable_total_size:62.35 (mm.h) Sbepe reg = &kvm_nvhe_sym(hyp_memory)[║i]; ~ ║│└>0000bce0: b98007e8 ldrsw x8, [sp, #4] <- 0000bcdc(b)<__hyp_pgtable_total_size+0x38> ║│ __hyp_pgtable_total_size:62.10 (mm.h) sbepe reg = &║kvm_nvhe_sym(hyp_memory)[i]; ~ ║│ 0000bce4: f0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ ║│ 0000bce8: 912e8129 add x9, x9, #0xba0 ~ ║│ 0000bcec: 8b081128 add x8, x9, x8, lsl #4 ║│ __hyp_pgtable_total_size:62.7 (mm.h) sbepe reg ║= &kvm_nvhe_sym(hyp_memory)[i]; ~ ║│ 0000bcf0: f81f83a8 stur x8, [x29, #-8] ║│ __hyp_pgtable_total_size:63.15 (mm.h) Sbepe nr_pages = (║reg->end - reg->start) >> PAGE_SHIFT; ~ ║│ 0000bcf4: f85f83a8 ldur x8, [x29, #-8] ║│ __hyp_pgtable_total_size:63.20 (mm.h) sbepe nr_pages = (reg->║end - reg->start) >> PAGE_SHIFT; ~ ║│ 0000bcf8: f9400509 ldr x9, [x8, #8] ║│ __hyp_pgtable_total_size:63.31 (mm.h) sbepe nr_pages = (reg->end - reg->║start) >> PAGE_SHIFT; ~ ║│ 0000bcfc: f9400108 ldr x8, [x8] ║│ __hyp_pgtable_total_size:63.24 (mm.h) sbepe nr_pages = (reg->end ║- reg->start) >> PAGE_SHIFT; ~ ║│ 0000bd00: eb080128 subs x8, x9, x8 ║│ __hyp_pgtable_total_size:63.38 (mm.h) sbepe nr_pages = (reg->end - reg->start) ║>> PAGE_SHIFT; ~ ║│ 0000bd04: d34cfd08 lsr x8, x8, #12 ║│ __hyp_pgtable_total_size:63.12 (mm.h) sbepe nr_pages ║= (reg->end - reg->start) >> PAGE_SHIFT; ~ ║│ 0000bd08: f9000be8 str x8, [sp, #16] ║│ __hyp_pgtable_total_size:64.38 (mm.h) Sbepe nr_pages = __hyp_pgtable_max_pages(║nr_pages); ~ ║│ 0000bd0c: f9400be0 ldr x0, [sp, #16] ║│ __hyp_pgtable_total_size:64.14 (mm.h) sbepe nr_pages = ║__hyp_pgtable_max_pages(nr_pages); ~ ║│ 0000bd10: 9400000f bl bd4c <__hyp_pgtable_max_pages> ║│ ║│ __hyp_pgtable_total_size:64.12 (mm.h) sbepe nr_pages ║= __hyp_pgtable_max_pages(nr_pages); ~ ║│ 0000bd14: f9000be0 str x0, [sp, #16] <- 0000bd10(bl-succ)<return> ║│ __hyp_pgtable_total_size:65.10 (mm.h) Sbepe res += ║nr_pages << PAGE_SHIFT; ~ ║│ 0000bd18: f9400be8 ldr x8, [sp, #16] ║│ __hyp_pgtable_total_size:65.7 (mm.h) sbepe res ║+= nr_pages << PAGE_SHIFT; ~ ║│ 0000bd1c: f94007e9 ldr x9, [sp, #8] ~ ║│ 0000bd20: 8b083128 add x8, x9, x8, lsl #12 ~ ║│ 0000bd24: f90007e8 str x8, [sp, #8] ║│ __hyp_pgtable_total_size:66.2 (mm.h) Sbepe } ~ ║│┌─0000bd28: 14000001 b bd2c <__hyp_pgtable_total_size+0x84> ║││ ║││ __hyp_pgtable_total_size:61.50 (mm.h) Sbepe for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i║++) { ~ ║│└>0000bd2c: b94007e8 ldr w8, [sp, #4] <- 0000bd28(b)<__hyp_pgtable_total_size+0x84> ~ ║│ 0000bd30: 11000508 add w8, w8, #0x1 ~ ║│ 0000bd34: b90007e8 str w8, [sp, #4] ║│ __hyp_pgtable_total_size:61.2 (mm.h) sbepe ║for (i = 0; i < kvm_nvhe_sym(hyp_memblock_nr); i++) { ~ ╚╪══0000bd38: 17ffffe4 b bcc8 <__hyp_pgtable_total_size+0x20> __hyp_pgtable_total_size:68.9 (mm.h) Sbepe return ║res; ~ └─>0000bd3c: f94007e0 ldr x0, [sp, #8] <- 0000bcd8(b.cc)<__hyp_pgtable_total_size+0x94> __hyp_pgtable_total_size:68.2 (mm.h) sbepe ║return res; ~ 0000bd40: a9427bfd ldp x29, x30, [sp, #32] ~ 0000bd44: 9100c3ff add sp, sp, #0x30 0000bcb4 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000bd48: d65f03c0 ret -reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbca8 0xbd4c (DW_OP_fbreg -0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:57 -nr_pages var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x10) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58 -res var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbca8 0xbd4c (DW_OP_breg31 0x8) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:58 -i var int (base type, DW_ATE_signed size:4) 0xbca8 0xbd4c (DW_OP_breg31 0x4) __hyp_pgtable_total_size:arch/arm64/kvm/hyp/nvhe/mem_protect.c:59 **0000bd4c <__hyp_pgtable_max_pages>: + __hyp_pgtable_max_pages params: +nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18) __hyp_pgtable_max_pages:43.0 (mm.h) Sbepe ║{ 0000bd4c CFA:r31 +nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:42 +total var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x10) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44 +i var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x8) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44 ~ 0000bd4c: d10083ff sub sp, sp, #0x20 <- 0000bb38(bl)<__hyp_pgtable_max_pages>,0000bd10(bl)<__hyp_pgtable_max_pages> ~ 0000bd50: f9000fe0 str x0, [sp, #24] ~ 0000bd54: aa1f03e8 mov x8, xzr __hyp_pgtable_max_pages:44.16 (mm.h) SbePe unsigned long ║total = 0, i; ~ 0000bd58: f9000be8 str x8, [sp, #16] __hyp_pgtable_max_pages:47.9 (mm.h) Sbepe for (i ║= 0; i < 4; i++) { ~ 0000bd5c: f90007e8 str x8, [sp, #8] __hyp_pgtable_max_pages:47.7 (mm.h) sbepe for (║i = 0; i < 4; i++) { ~ ┌─0000bd60: 14000001 b bd64 <__hyp_pgtable_max_pages+0x18> __hyp_pgtable_max_pages:47.14 (mm.h) sbepe for (i = 0; ║i < 4; i++) { ~ ╔>└>0000bd64: f94007e8 ldr x8, [sp, #8] <- 0000bd60(b)<__hyp_pgtable_max_pages+0x18>,v0000bda4(b)<__hyp_pgtable_max_pages+0x18> __hyp_pgtable_max_pages:47.2 (mm.h) sbepe ║for (i = 0; i < 4; i++) { ~ 0000bd68: f1000d08 subs x8, x8, #0x3 ~ ║┌──0000bd6c: 540001e8 b.hi bda8 <__hyp_pgtable_max_pages+0x5c> // b.pmore ║│ ~ ║│┌─0000bd70: 14000001 b bd74 <__hyp_pgtable_max_pages+0x28> <- 0000bd6c(b.cc-succ)<fallthrough> ║││ ║││ __hyp_pgtable_max_pages:48.14 (mm.h) Sbepe nr_pages = ║DIV_ROUND_UP(nr_pages, PTRS_PER_PTE); ~ ║│└>0000bd74: f9400fe8 ldr x8, [sp, #24] <- 0000bd70(b)<__hyp_pgtable_max_pages+0x28> ~ ║│ 0000bd78: 9107fd08 add x8, x8, #0x1ff ~ ║│ 0000bd7c: d349fd08 lsr x8, x8, #9 ║│ __hyp_pgtable_max_pages:48.12 (mm.h) sbepe nr_pages ║= DIV_ROUND_UP(nr_pages, PTRS_PER_PTE); ~ ║│ 0000bd80: f9000fe8 str x8, [sp, #24] ║│ __hyp_pgtable_max_pages:49.12 (mm.h) Sbepe total += ║nr_pages; ~ ║│ 0000bd84: f9400fe8 ldr x8, [sp, #24] ║│ __hyp_pgtable_max_pages:49.9 (mm.h) sbepe total ║+= nr_pages; ~ ║│ 0000bd88: f9400be9 ldr x9, [sp, #16] ~ ║│ 0000bd8c: 8b080128 add x8, x9, x8 ~ ║│ 0000bd90: f9000be8 str x8, [sp, #16] ║│ __hyp_pgtable_max_pages:50.2 (mm.h) Sbepe } ~ ║│┌─0000bd94: 14000001 b bd98 <__hyp_pgtable_max_pages+0x4c> ║││ ║││ __hyp_pgtable_max_pages:47.22 (mm.h) Sbepe for (i = 0; i < 4; i║++) { ~ ║│└>0000bd98: f94007e8 ldr x8, [sp, #8] <- 0000bd94(b)<__hyp_pgtable_max_pages+0x4c> ~ ║│ 0000bd9c: 91000508 add x8, x8, #0x1 ~ ║│ 0000bda0: f90007e8 str x8, [sp, #8] ║│ __hyp_pgtable_max_pages:47.2 (mm.h) sbepe ║for (i = 0; i < 4; i++) { ~ ╚╪══0000bda4: 17fffff0 b bd64 <__hyp_pgtable_max_pages+0x18> __hyp_pgtable_max_pages:52.9 (mm.h) Sbepe return ║total; ~ └─>0000bda8: f9400be0 ldr x0, [sp, #16] <- 0000bd6c(b.cc)<__hyp_pgtable_max_pages+0x5c> __hyp_pgtable_max_pages:52.2 (mm.h) sbepe ║return total; ~ 0000bdac: 910083ff add sp, sp, #0x20 0000bd50 CFA:r31+32 ~ 0000bdb0: d65f03c0 ret -nr_pages param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x18) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:42 -total var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x10) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44 -i var long unsigned int (base type, DW_ATE_unsigned size:8) 0xbd4c 0xbdb4 (DW_OP_fbreg 0x8) __hyp_pgtable_max_pages:arch/arm64/kvm/hyp/nvhe/mem_protect.c:44 **0000bdb4 <__ilog2_u64>: + __ilog2_u64 params: +n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0) __ilog2_u64:31.0 (log2.h) Sbepe ║{ 0000bdb4 CFA:r31 +n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0) __ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30 ~ 0000bdb4: d10083ff sub sp, sp, #0x20 ~ 0000bdb8: f90003e0 str x0, [sp] __ilog2_u64:32.15 (log2.h) SbePe return fls64(║n) - 1; ~ 0000bdbc: f94003e8 ldr x8, [sp] ~ 0000bdc0: f90007e8 str x8, [sp, #8] a: 0xbdc4 0xbe04 fls64 inlined from __ilog2_u64:32 (log2.h) <990bb>: a fls64:29.6 (fls64.h) Sbepe if (║x == 0) +x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbdc4 0xbe04 (DW_OP_fbreg 0x8) fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~a 0000bdc4: f94007e8 ldr x8, [sp, #8] a fls64:29.6 (fls64.h) sbepe if (║x == 0) ~a ┌──0000bdc8: b50000a8 cbnz x8, bddc <__ilog2_u64+0x28> ~a │┌─0000bdcc: 14000001 b bdd0 <__ilog2_u64+0x1c> <- 0000bdc8(b.cc-succ)<fallthrough> ││ ~a │└>0000bdd0: 2a1f03e8 mov w8, wzr <- 0000bdcc(b)<__ilog2_u64+0x1c> a fls64:30.3 (fls64.h) Sbepe ║return 0; ~a 0000bdd4: b90017e8 str w8, [sp, #20] ~a ┌┼──0000bdd8: 1400000a b be00 <__ilog2_u64+0x4c> ││ a ││ fls64:31.15 (fls64.h) Sbepe return __fls(║x) + 1; ~a │└─>0000bddc: f94007e8 ldr x8, [sp, #8] <- 0000bdc8(b.cc)<__ilog2_u64+0x28> ~a 0000bde0: f9000fe8 str x8, [sp, #24] b: 0xbde4 0xbdf0 __fls inlined from fls64:31 (fls64.h) <990d7>:<990bb>: ab __fls:13.49 (builtin-__fls.h) Sbepe return (sizeof(word) * 8) - 1 - __builtin_clzl(║word); +word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbde4 0xbdf0 (DW_OP_fbreg 0x18) __fls(inlined):fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c ~ab 0000bde4: f9400fe8 ldr x8, [sp, #24] ab __fls:13.34 (builtin-__fls.h) sbepe return (sizeof(word) * 8) - 1 - ║__builtin_clzl(word); ~ab 0000bde8: dac01108 clz x8, x8 ~ab 0000bdec: 52800809 mov w9, #0x40 // #64 -word param long unsigned int (base type, DW_ATE_unsigned size:8) 0xbde4 0xbdf0 (DW_OP_fbreg 0x18) __fls(inlined):fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c a fls64:31.18 (fls64.h) Sbepe return __fls(x) ║+ 1; ~a 0000bdf0: 6b080128 subs w8, w9, w8 ~a 0000bdf4: 2a0803e0 mov w0, w8 a fls64:31.2 (fls64.h) sbepe ║return __fls(x) + 1; ~a 0000bdf8: b90017e0 str w0, [sp, #20] ~a │ ┌─0000bdfc: 14000001 b be00 <__ilog2_u64+0x4c> │ │ a │ │ fls64:32.1 (fls64.h) Sbepe ║} ~a └>└>0000be00: b94017e8 ldr w8, [sp, #20] <- 0000bdd8(b)<__ilog2_u64+0x4c>,0000bdfc(b)<__ilog2_u64+0x4c> -x param typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)) 0xbdc4 0xbe04 (DW_OP_fbreg 0x8) fls64(inlined):__ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c __ilog2_u64:32.18 (log2.h) sbepe return fls64(n) ║- 1; ~ 0000be04: 71000500 subs w0, w8, #0x1 __ilog2_u64:32.2 (log2.h) sbepe ║return fls64(n) - 1; ~ 0000be08: 910083ff add sp, sp, #0x20 0000bdb8 CFA:r31+32 ~ 0000be0c: d65f03c0 ret -n param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbdb4 0xbe10 (DW_OP_fbreg 0x0) __ilog2_u64:arch/arm64/kvm/hyp/nvhe/mem_protect.c:30 **0000be10 <cpus_have_cap>: + cpus_have_cap params: +num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8) cpus_have_cap:428.0 (cpufeature.h) Sbepe ║{ +num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mem_protect.c:427 ~ 0000be10: d10083ff sub sp, sp, #0x20 ~ 0000be14: a9017bfd stp x29, x30, [sp, #16] 0000be10 CFA:r31 r29:u r30:u ~ 0000be18: 910043fd add x29, sp, #0x10 ~ 0000be1c: b9000be0 str w0, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) SbePe if (║num >= ARM64_NCAPS) ~ 0000be20: b9400be8 ldr w8, [sp, #8] cpus_have_cap:429.6 (cpufeature.h) sbepe if (║num >= ARM64_NCAPS) ~ 0000be24: 7100f508 subs w8, w8, #0x3d ~ ┌──0000be28: 540000a3 b.cc be3c <cpus_have_cap+0x2c> // b.lo, b.ul, b.last ~ │┌─0000be2c: 14000001 b be30 <cpus_have_cap+0x20> <- 0000be28(b.cc-succ)<fallthrough> ││ ~ │└>0000be30: 2a1f03e8 mov w8, wzr <- 0000be2c(b)<cpus_have_cap+0x20> cpus_have_cap:430.3 (cpufeature.h) Sbepe ║return false; ~ 0000be34: 381ff3a8 sturb w8, [x29, #-1] ~ ┌┼──0000be38: 14000009 b be5c <cpus_have_cap+0x4c> ││ ││ cpus_have_cap:431.18 (cpufeature.h) Sbepe return test_bit(║num, cpu_hwcaps); ~ │└─>0000be3c: b9400be0 ldr w0, [sp, #8] <- 0000be28(b.cc)<cpus_have_cap+0x2c> cpus_have_cap:431.9 (cpufeature.h) sbepe return ║test_bit(num, cpu_hwcaps); ~ 0000be40: 90000081 adrp x1, 1b000 <hyp_memory+0x460> ~ 0000be44: 91218021 add x1, x1, #0x860 ~ 0000be48: 94000009 bl be6c <test_bit> ~ 0000be4c: 71000008 subs w8, w0, #0x0 <- 0000be48(bl-succ)<return> ~ 0000be50: 1a9f07e9 cset w9, ne // ne = any cpus_have_cap:431.2 (cpufeature.h) sbepe ║return test_bit(num, cpu_hwcaps); ~ 0000be54: 381ff3a9 sturb w9, [x29, #-1] ~ │ ┌─0000be58: 14000001 b be5c <cpus_have_cap+0x4c> │ │ │ │ cpus_have_cap:432.1 (cpufeature.h) Sbepe ║} ~ └>└>0000be5c: 385ff3a0 ldurb w0, [x29, #-1] <- 0000be38(b)<cpus_have_cap+0x4c>,0000be58(b)<cpus_have_cap+0x4c> ~ 0000be60: a9417bfd ldp x29, x30, [sp, #16] ~ 0000be64: 910083ff add sp, sp, #0x20 0000be1c CFA:r29+16 r29:c-16 r30:c-8 ~ 0000be68: d65f03c0 ret -num param unsigned int (base type, DW_ATE_unsigned size:4) 0xbe10 0xbe6c (DW_OP_breg31 0x8) cpus_have_cap:arch/arm64/kvm/hyp/nvhe/mem_protect.c:427 **0000be6c <test_bit>: + test_bit params: +nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc) +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0) test_bit:105.0 (non-atomic.h) Sbepe ║{ 0000be6c CFA:r31 +nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 +addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 ~ 0000be6c: d10043ff sub sp, sp, #0x10 <- 0000be48(bl)<test_bit> ~ 0000be70: b9000fe0 str w0, [sp, #12] ~ 0000be74: f90003e1 str x1, [sp] test_bit:106.16 (non-atomic.h) SbePe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000be78: f94003e8 ldr x8, [sp] test_bit:106.21 (non-atomic.h) sbepe return 1UL & (addr[║BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000be7c: b9400fe9 ldr w9, [sp, #12] ~ 0000be80: 1100fd2a add w10, w9, #0x3f ~ 0000be84: 7100012b subs w11, w9, #0x0 ~ 0000be88: 1a89b149 csel w9, w10, w9, lt // lt = tstop ~ 0000be8c: 13067d29 asr w9, w9, #6 test_bit:106.16 (non-atomic.h) sbepe return 1UL & (║addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000be90: f869d908 ldr x8, [x8, w9, sxtw #3] test_bit:106.39 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] >> (║nr & (BITS_PER_LONG-1))); ~ 0000be94: b9400fe9 ldr w9, [sp, #12] ~ 0000be98: 2a0903ec mov w12, w9 test_bit:106.35 (non-atomic.h) sbepe return 1UL & (addr[BIT_WORD(nr)] ║>> (nr & (BITS_PER_LONG-1))); ~ 0000be9c: 9acc2508 lsr x8, x8, x12 test_bit:106.13 (non-atomic.h) sbepe return 1UL ║& (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000bea0: 12000100 and w0, w8, #0x1 test_bit:106.2 (non-atomic.h) sbepe ║return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1))); ~ 0000bea4: 910043ff add sp, sp, #0x10 0000be70 CFA:r31+16 ~ 0000bea8: d65f03c0 ret -nr param int (base type, DW_ATE_signed size:4) 0xbe6c 0xbeac (DW_OP_fbreg 0xc) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 -addr param pointer(const(volatile(long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbe6c 0xbeac (DW_OP_fbreg 0x0) test_bit:arch/arm64/kvm/hyp/nvhe/mem_protect.c:104 **0000beac <__translate_far_to_hpfar>: + __translate_far_to_hpfar params: +far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80) +hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78) __translate_far_to_hpfar:132.0 (switch.h) Sbepe ║{ 0000beac CFA:r31 +far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131 +hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131 +par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x70) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133 +tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x68) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133 ~ 0000beac: d10243ff sub sp, sp, #0x90 <- 0000b6cc(bl)<__translate_far_to_hpfar> ~ 0000beb0: f90043e0 str x0, [sp, #128] ~ 0000beb4: f9003fe1 str x1, [sp, #120] __translate_far_to_hpfar:145.8 (switch.h) SbePe par = ║read_sysreg_par(); +par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeb8 0xbee4 (DW_OP_fbreg 0x60) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145 ~ 0000beb8: d503201f nop __translate_far_to_hpfar:145.8 (switch.h) sbepe par = ║read_sysreg_par(); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbebc 0xbed0 (DW_OP_fbreg 0x58) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145 ~ 0000bebc: d5387408 mrs x8, par_el1 ~ 0000bec0: f9002fe8 str x8, [sp, #88] ~ 0000bec4: f9402fe8 ldr x8, [sp, #88] ~ 0000bec8: f9002be8 str x8, [sp, #80] ~ 0000becc: f9402be8 ldr x8, [sp, #80] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbebc 0xbed0 (DW_OP_fbreg 0x58) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145 __translate_far_to_hpfar:145.8 (switch.h) sbepe par = ║read_sysreg_par(); ~ 0000bed0: f90033e8 str x8, [sp, #96] ~ 0000bed4: d503201f nop ~ 0000bed8: f94033e8 ldr x8, [sp, #96] ~ 0000bedc: f90027e8 str x8, [sp, #72] ~ 0000bee0: f94027e8 ldr x8, [sp, #72] -par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeb8 0xbee4 (DW_OP_fbreg 0x60) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:145 __translate_far_to_hpfar:145.6 (switch.h) sbepe par ║= read_sysreg_par(); ~ 0000bee4: f9003be8 str x8, [sp, #112] ~ 0000bee8: 2a1f03e9 mov w9, wzr __translate_far_to_hpfar:146.7 (switch.h) Sbepe if (!║__kvm_at("s1e1r", far)) +__kvm_at_err var int (base type, DW_ATE_signed size:4) 0xbeec 0xbf30 (DW_OP_fbreg 0x44) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 +spsr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x38) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 +elr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x30) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 ~ 0000beec: b90047e9 str w9, [sp, #68] ~ 0000bef0: b94047e9 ldr w9, [sp, #68] ~ 0000bef4: f94043e8 ldr x8, [sp, #128] ~ 0000bef8: d53c400a mrs x10, spsr_el2 ~ 0000befc: d53c402b mrs x11, elr_el2 ~ 0000bf00: d5087808 at s1e1r, x8 ~ 0000bf04: d5033fdf isb ~ ┌─0000bf08: 14000004 b bf18 <__translate_far_to_hpfar+0x6c> ~ 0000bf0c: d51c400a msr spsr_el2, x10 ~ 0000bf10: d51c402b msr elr_el2, x11 ~ 0000bf14: 128001a9 mov w9, #0xfffffff2 // #-14 ~ └>0000bf18: b90047e9 str w9, [sp, #68] <- 0000bf08(b)<__translate_far_to_hpfar+0x6c> ~ 0000bf1c: f9001fea str x10, [sp, #56] ~ 0000bf20: f9001beb str x11, [sp, #48] ~ 0000bf24: b94047e9 ldr w9, [sp, #68] ~ 0000bf28: b9002fe9 str w9, [sp, #44] ~ 0000bf2c: b9402fe9 ldr w9, [sp, #44] -__kvm_at_err var int (base type, DW_ATE_signed size:4) 0xbeec 0xbf30 (DW_OP_fbreg 0x44) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 -spsr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x38) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 -elr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeec 0xbf30 (DW_OP_fbreg 0x30) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:146 __translate_far_to_hpfar:146.6 (switch.h) sbepe if (║!__kvm_at("s1e1r", far)) ~ ┌──0000bf30: 350001e9 cbnz w9, bf6c <__translate_far_to_hpfar+0xc0> ~ │┌─0000bf34: 14000001 b bf38 <__translate_far_to_hpfar+0x8c> <- 0000bf30(b.cc-succ)<fallthrough> ││ ││ __translate_far_to_hpfar:147.9 (switch.h) Sbepe tmp = ║read_sysreg_par(); +par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf38 0xbf64 (DW_OP_fbreg 0x20) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147 ~ │└>0000bf38: d503201f nop <- 0000bf34(b)<__translate_far_to_hpfar+0x8c> __translate_far_to_hpfar:147.9 (switch.h) sbepe tmp = ║read_sysreg_par(); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf3c 0xbf50 (DW_OP_fbreg 0x18) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147 ~ 0000bf3c: d5387408 mrs x8, par_el1 ~ 0000bf40: f9000fe8 str x8, [sp, #24] ~ 0000bf44: f9400fe8 ldr x8, [sp, #24] ~ 0000bf48: f9000be8 str x8, [sp, #16] ~ 0000bf4c: f9400be8 ldr x8, [sp, #16] -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf3c 0xbf50 (DW_OP_fbreg 0x18) lexblock:lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147 __translate_far_to_hpfar:147.9 (switch.h) sbepe tmp = ║read_sysreg_par(); ~ 0000bf50: f90013e8 str x8, [sp, #32] ~ 0000bf54: d503201f nop ~ 0000bf58: f94013e8 ldr x8, [sp, #32] ~ 0000bf5c: f90007e8 str x8, [sp, #8] ~ 0000bf60: f94007e8 ldr x8, [sp, #8] -par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf38 0xbf64 (DW_OP_fbreg 0x20) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:147 __translate_far_to_hpfar:147.7 (switch.h) sbepe tmp ║= read_sysreg_par(); ~ 0000bf64: f90037e8 str x8, [sp, #104] __translate_far_to_hpfar:147.3 (switch.h) sbepe ║tmp = read_sysreg_par(); ~ ┌──┼──0000bf68: 14000005 b bf7c <__translate_far_to_hpfar+0xd0> │ │ ~ │ └─>0000bf6c: 52800028 mov w8, #0x1 // #1 <- 0000bf30(b.cc)<__translate_far_to_hpfar+0xc0> ~ 0000bf70: 2a0803e9 mov w9, w8 __translate_far_to_hpfar:149.7 (switch.h) Sbepe tmp ║= SYS_PAR_EL1_F; /* back to the guest */ ~ 0000bf74: f90037e9 str x9, [sp, #104] ~ │ ┌─0000bf78: 14000001 b bf7c <__translate_far_to_hpfar+0xd0> │ │ │ │ __translate_far_to_hpfar:150.2 (switch.h) Sbepe ║write_sysreg(par, par_el1); ~ └>┌─└>0000bf7c: 14000001 b bf80 <__translate_far_to_hpfar+0xd4> <- 0000bf68(b)<__translate_far_to_hpfar+0xd0>,0000bf78(b)<__translate_far_to_hpfar+0xd0> __translate_far_to_hpfar:150.2 (switch.h) sbepe ║write_sysreg(par, par_el1); +__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf80 0xbf94 (DW_OP_fbreg 0x0) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:150 ~ └──>0000bf80: f9403be8 ldr x8, [sp, #112] <- 0000bf7c(b)<__translate_far_to_hpfar+0xd4> ~ 0000bf84: f90003e8 str x8, [sp] ~ 0000bf88: f94003e8 ldr x8, [sp] ~ 0000bf8c: d5187408 msr par_el1, x8 ~ ┌─0000bf90: 14000001 b bf94 <__translate_far_to_hpfar+0xe8> -__val var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbf80 0xbf94 (DW_OP_fbreg 0x0) lexblock:__translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:150 __translate_far_to_hpfar:152.6 (switch.h) Sbepe if (║unlikely(tmp & SYS_PAR_EL1_F)) ~ └>0000bf94: 3941a3e8 ldrb w8, [sp, #104] <- 0000bf90(b)<__translate_far_to_hpfar+0xe8> __translate_far_to_hpfar:152.6 (switch.h) sbepe if (║unlikely(tmp & SYS_PAR_EL1_F)) ~ ┌──0000bf98: 360000a8 tbz w8, #0, bfac <__translate_far_to_hpfar+0x100> ~ │┌─0000bf9c: 14000001 b bfa0 <__translate_far_to_hpfar+0xf4> <- 0000bf98(b.cc-succ)<fallthrough> ││ ~ │└>0000bfa0: 2a1f03e8 mov w8, wzr <- 0000bf9c(b)<__translate_far_to_hpfar+0xf4> __translate_far_to_hpfar:153.3 (switch.h) Sbepe ║return false; /* Translation failed, back to guest */ ~ 0000bfa4: 39023fe8 strb w8, [sp, #143] ~ ┌┼──0000bfa8: 14000009 b bfcc <__translate_far_to_hpfar+0x120> ││ ││ __translate_far_to_hpfar:156.11 (switch.h) Sbepe *hpfar = ║PAR_TO_HPFAR(tmp); ~ │└─>0000bfac: f94037e8 ldr x8, [sp, #104] <- 0000bf98(b.cc)<__translate_far_to_hpfar+0x100> ~ 0000bfb0: 92748d08 and x8, x8, #0xfffffffff000 ~ 0000bfb4: d348fd08 lsr x8, x8, #8 __translate_far_to_hpfar:156.3 (switch.h) sbepe *║hpfar = PAR_TO_HPFAR(tmp); ~ 0000bfb8: f9403fe9 ldr x9, [sp, #120] __translate_far_to_hpfar:156.9 (switch.h) sbepe *hpfar ║= PAR_TO_HPFAR(tmp); ~ 0000bfbc: f9000128 str x8, [x9] ~ 0000bfc0: 5280002a mov w10, #0x1 // #1 __translate_far_to_hpfar:157.2 (switch.h) Sbepe ║return true; ~ 0000bfc4: 39023fea strb w10, [sp, #143] ~ │ ┌─0000bfc8: 14000001 b bfcc <__translate_far_to_hpfar+0x120> │ │ │ │ __translate_far_to_hpfar:158.1 (switch.h) Sbepe ║} ~ └>└>0000bfcc: 39423fe0 ldrb w0, [sp, #143] <- 0000bfa8(b)<__translate_far_to_hpfar+0x120>,0000bfc8(b)<__translate_far_to_hpfar+0x120> ~ 0000bfd0: 910243ff add sp, sp, #0x90 0000beb0 CFA:r31+144 ~ 0000bfd4: d65f03c0 ret -far param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x80) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131 -hpfar param pointer(typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8)))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x78) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:131 -par var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x70) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133 -tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbeac 0xbfd8 (DW_OP_fbreg 0x68) __translate_far_to_hpfar:arch/arm64/kvm/hyp/nvhe/mem_protect.c:133 **0000bfd8 <ipa_is_memory>: + ipa_is_memory params: +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20) ipa_is_memory:133.0 (mem_protect.c) Sbepe ║{ 0000bfd8 CFA:r31 +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:132 +cur var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x1c) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 +left var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x18) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 +right var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x14) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 +reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbfd8 0xc0ac (DW_OP_fbreg 0x8) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:135 ~ 0000bfd8: d100c3ff sub sp, sp, #0x30 <- 0000b740(bl)<ipa_is_memory> ~ 0000bfdc: f90013e0 str x0, [sp, #32] ~ 0000bfe0: 2a1f03e8 mov w8, wzr ipa_is_memory:134.11 (mem_protect.c) SbePe int cur, ║left = 0, right = hyp_memblock_nr; ~ 0000bfe4: b9001be8 str w8, [sp, #24] ipa_is_memory:134.29 (mem_protect.c) sbepe int cur, left = 0, right = ║hyp_memblock_nr; ~ 0000bfe8: 90000089 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000bfec: b943a128 ldr w8, [x9, #928] ipa_is_memory:134.21 (mem_protect.c) sbepe int cur, left = 0, ║right = hyp_memblock_nr; ~ 0000bff0: b90017e8 str w8, [sp, #20] ipa_is_memory:138.2 (mem_protect.c) Sbepe ║while (left < right) { ~ ┌─0000bff4: 14000001 b bff8 <ipa_is_memory+0x20> ipa_is_memory:138.9 (mem_protect.c) sbepe while (║left < right) { ~ ╔════>└>0000bff8: b9401be8 ldr w8, [sp, #24] <- 0000bff4(b)<ipa_is_memory+0x20>,v0000c090(b)<ipa_is_memory+0x20> ipa_is_memory:138.16 (mem_protect.c) sbepe while (left < ║right) { ~ 0000bffc: b94017e9 ldr w9, [sp, #20] ipa_is_memory:138.2 (mem_protect.c) sbepe ║while (left < right) { ~ 0000c000: 6b090108 subs w8, w8, w9 ~ ║┌──────0000c004: 5400048a b.ge c094 <ipa_is_memory+0xbc> // b.tcont ║│ ~ ║│ ┌─0000c008: 14000001 b c00c <ipa_is_memory+0x34> <- 0000c004(b.cc-succ)<fallthrough> ║│ │ ║│ │ ipa_is_memory:139.10 (mem_protect.c) Sbepe cur = (║left + right) >> 1; ~ ║│ └>0000c00c: b9401be8 ldr w8, [sp, #24] <- 0000c008(b)<ipa_is_memory+0x34> ║│ ipa_is_memory:139.17 (mem_protect.c) sbepe cur = (left + ║right) >> 1; ~ ║│ 0000c010: b94017e9 ldr w9, [sp, #20] ║│ ipa_is_memory:139.15 (mem_protect.c) sbepe cur = (left ║+ right) >> 1; ~ ║│ 0000c014: 0b090108 add w8, w8, w9 ║│ ipa_is_memory:139.24 (mem_protect.c) sbepe cur = (left + right) ║>> 1; ~ ║│ 0000c018: 13017d08 asr w8, w8, #1 ║│ ipa_is_memory:139.7 (mem_protect.c) sbepe cur ║= (left + right) >> 1; ~ ║│ 0000c01c: b9001fe8 str w8, [sp, #28] ║│ ipa_is_memory:140.21 (mem_protect.c) Sbepe reg = &hyp_memory[║cur]; ~ ║│ 0000c020: b9801fea ldrsw x10, [sp, #28] ║│ ipa_is_memory:140.10 (mem_protect.c) sbepe reg = &║hyp_memory[cur]; ~ ║│ 0000c024: d000006b adrp x11, 1a000 <hyp_cpu_logical_map+0xe0> ~ ║│ 0000c028: 912e816b add x11, x11, #0xba0 ~ ║│ 0000c02c: 8b0a116a add x10, x11, x10, lsl #4 ║│ ipa_is_memory:140.7 (mem_protect.c) sbepe reg ║= &hyp_memory[cur]; ~ ║│ 0000c030: f90007ea str x10, [sp, #8] ║│ ipa_is_memory:141.7 (mem_protect.c) Sbepe if (║ipa < reg->start) ~ ║│ 0000c034: f94013ea ldr x10, [sp, #32] ║│ ipa_is_memory:141.13 (mem_protect.c) sbepe if (ipa < ║reg->start) ~ ║│ 0000c038: f94007eb ldr x11, [sp, #8] ║│ ipa_is_memory:141.18 (mem_protect.c) sbepe if (ipa < reg->║start) ~ ║│ 0000c03c: f940016b ldr x11, [x11] ║│ ipa_is_memory:141.7 (mem_protect.c) sbepe if (║ipa < reg->start) ~ ║│ 0000c040: eb0b014a subs x10, x10, x11 ~ ║│ ┌──0000c044: 540000a2 b.cs c058 <ipa_is_memory+0x80> // b.hs, b.nlast ║│ │ ~ ║│ │┌─0000c048: 14000001 b c04c <ipa_is_memory+0x74> <- 0000c044(b.cc-succ)<fallthrough> ║│ ││ ║│ ││ ipa_is_memory:142.12 (mem_protect.c) Sbepe right = ║cur; ~ ║│ │└>0000c04c: b9401fe8 ldr w8, [sp, #28] <- 0000c048(b)<ipa_is_memory+0x74> ║│ │ ipa_is_memory:142.10 (mem_protect.c) sbepe right ║= cur; ~ ║│ │ 0000c050: b90017e8 str w8, [sp, #20] ║│ │ ipa_is_memory:142.4 (mem_protect.c) sbepe ║right = cur; ~ ║│┌──┼──0000c054: 1400000f b c090 <ipa_is_memory+0xb8> ║││ │ ║││ │ ipa_is_memory:143.12 (mem_protect.c) Sbepe else if (║ipa >= reg->end) ~ ║││ └─>0000c058: f94013e8 ldr x8, [sp, #32] <- 0000c044(b.cc)<ipa_is_memory+0x80> ║││ ipa_is_memory:143.19 (mem_protect.c) sbepe else if (ipa >= ║reg->end) ~ ║││ 0000c05c: f94007e9 ldr x9, [sp, #8] ║││ ipa_is_memory:143.24 (mem_protect.c) sbepe else if (ipa >= reg->║end) ~ ║││ 0000c060: f9400529 ldr x9, [x9, #8] ║││ ipa_is_memory:143.12 (mem_protect.c) sbepe else if (║ipa >= reg->end) ~ ║││ 0000c064: eb090108 subs x8, x8, x9 ~ ║││ ┌──0000c068: 540000c3 b.cc c080 <ipa_is_memory+0xa8> // b.lo, b.ul, b.last ║││ │ ~ ║││ │┌─0000c06c: 14000001 b c070 <ipa_is_memory+0x98> <- 0000c068(b.cc-succ)<fallthrough> ║││ ││ ║││ ││ ipa_is_memory:144.11 (mem_protect.c) Sbepe left = ║cur + 1; ~ ║││ │└>0000c070: b9401fe8 ldr w8, [sp, #28] <- 0000c06c(b)<ipa_is_memory+0x98> ║││ │ ipa_is_memory:144.15 (mem_protect.c) sbepe left = cur ║+ 1; ~ ║││ │ 0000c074: 11000508 add w8, w8, #0x1 ║││ │ ipa_is_memory:144.9 (mem_protect.c) sbepe left ║= cur + 1; ~ ║││ │ 0000c078: b9001be8 str w8, [sp, #24] ║││ │ ipa_is_memory:144.4 (mem_protect.c) sbepe ║left = cur + 1; ~ ║││ ┌┼──0000c07c: 14000004 b c08c <ipa_is_memory+0xb4> ║││ ││ ~ ║││ │└─>0000c080: 52800028 mov w8, #0x1 // #1 <- 0000c068(b.cc)<ipa_is_memory+0xa8> ║││ │ ipa_is_memory:146.4 (mem_protect.c) Sbepe ║return true; ~ ║││ │ 0000c084: 3900bfe8 strb w8, [sp, #47] ~ ║││┌┼───0000c088: 14000006 b c0a0 <ipa_is_memory+0xc8> ║││││ ~ ║│││└>┌─0000c08c: 14000001 b c090 <ipa_is_memory+0xb8> <- 0000c07c(b)<ipa_is_memory+0xb4> ║│││ │ ║│││ │ ipa_is_memory:138.2 (mem_protect.c) Sbepe ║while (left < right) { ~ ╚╪└┼─>└>0000c090: 17ffffda b bff8 <ipa_is_memory+0x20> <- 0000c054(b)<ipa_is_memory+0xb8>,0000c08c(b)<ipa_is_memory+0xb8> │ │ ~ └─┼───>0000c094: 2a1f03e8 mov w8, wzr <- 0000c004(b.cc)<ipa_is_memory+0xbc> ipa_is_memory:149.2 (mem_protect.c) Sbepe ║return false; ~ 0000c098: 3900bfe8 strb w8, [sp, #47] ~ │ ┌─0000c09c: 14000001 b c0a0 <ipa_is_memory+0xc8> │ │ │ │ ipa_is_memory:150.1 (mem_protect.c) Sbepe ║} ~ └─>└>0000c0a0: 3940bfe0 ldrb w0, [sp, #47] <- 0000c088(b)<ipa_is_memory+0xc8>,0000c09c(b)<ipa_is_memory+0xc8> ~ 0000c0a4: 9100c3ff add sp, sp, #0x30 0000bfdc CFA:r31+48 ~ 0000c0a8: d65f03c0 ret -ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xbfd8 0xc0ac (DW_OP_fbreg 0x20) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:132 -cur var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x1c) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 -left var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x18) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 -right var int (base type, DW_ATE_signed size:4) 0xbfd8 0xc0ac (DW_OP_fbreg 0x14) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:134 -reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xbfd8 0xc0ac (DW_OP_fbreg 0x8) ipa_is_memory:arch/arm64/kvm/hyp/nvhe/mem_protect.c:135 **0000c0ac <hyp_spin_lock>: + hyp_spin_lock params: +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18) hyp_spin_lock:36.0 (spinlock.h) Sbepe ║{ 0000c0ac CFA:r31 +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35 +tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xc0ac 0xc0fc (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:37 +lockval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 +newval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 ~ 0000c0ac: d10083ff sub sp, sp, #0x20 <- 0000b778(bl)<hyp_spin_lock> ~ 0000c0b0: f9000fe0 str x0, [sp, #24] hyp_spin_lock:68.57 (spinlock.h) SbePe : "=&r" (lockval), "=&r" (newval), "=&r" (tmp), "+Q" (*║lock) ~ 0000c0b4: f9400fe8 ldr x8, [sp, #24] hyp_spin_lock:40.2 (spinlock.h) Sbepe ║asm volatile( ~ 0000c0b8: f9800111 prfm pstl1strm, [x8] ~ ╔>0000c0bc: 885ffd09 ldaxr w9, [x8] <- v0000c0c8(b.cc)<hyp_spin_lock+0x10> ~ 0000c0c0: 1140412a add w10, w9, #0x10, lsl #12 ~ 0000c0c4: 880b7d0a stxr w11, w10, [x8] ~ ╚═0000c0c8: 35ffffab cbnz w11, c0bc <hyp_spin_lock+0x10> ~ 0000c0cc: 4ac9412a eor w10, w9, w9, ror #16 <- 0000c0c8(b.cc-succ)<fallthrough> ~ ┌──0000c0d0: 340000ca cbz w10, c0e8 <hyp_spin_lock+0x3c> ~ 0000c0d4: d50320bf sevl <- 0000c0d0(b.cc-succ)<fallthrough> ~ │╔>0000c0d8: d503205f wfe <- v0000c0e4(b.cc)<hyp_spin_lock+0x2c> ~ │║ 0000c0dc: 485ffd0b ldaxrh w11, [x8] ~ │║ 0000c0e0: 4a49416a eor w10, w11, w9, lsr #16 ~ │╚═0000c0e4: 35ffffaa cbnz w10, c0d8 <hyp_spin_lock+0x2c> ~ └─>0000c0e8: b90013e9 str w9, [sp, #16] <- 0000c0d0(b.cc)<hyp_spin_lock+0x3c>,0000c0e4(b.cc-succ)<fallthrough> ~ 0000c0ec: b9000bea str w10, [sp, #8] ~ 0000c0f0: b90017eb str w11, [sp, #20] hyp_spin_lock:71.1 (spinlock.h) Sbepe ║} ~ 0000c0f4: 910083ff add sp, sp, #0x20 0000c0b0 CFA:r31+32 ~ 0000c0f8: d65f03c0 ret -lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc0ac 0xc0fc (DW_OP_fbreg 0x18) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:35 -tmp var typedef(u32=typedef(__u32=unsigned int (base type, DW_ATE_unsigned size:4))) 0xc0ac 0xc0fc (DW_OP_fbreg 0x14) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:37 -lockval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x10) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 -newval var typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>) 0xc0ac 0xc0fc (DW_OP_fbreg 0x8) hyp_spin_lock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:38 **0000c0fc <__host_stage2_map>: + __host_stage2_map params: +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8) +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10) +prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc) +p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0) __host_stage2_map:154.0 (mem_protect.c) Sbepe ║{ +ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 +size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 +prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 +p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:153 ~ 0000c0fc: d100c3ff sub sp, sp, #0x30 <- 0000b78c(bl)<__host_stage2_map>,0000b7c4(bl)<__host_stage2_map> ~ 0000c100: a9027bfd stp x29, x30, [sp, #32] 0000c0fc CFA:r31 r29:u r30:u ~ 0000c104: 910083fd add x29, sp, #0x20 ~ 0000c108: f81f83a0 stur x0, [x29, #-8] ~ 0000c10c: f9000be1 str x1, [sp, #16] ~ 0000c110: b9000fe2 str w2, [sp, #12] ~ 0000c114: f90003e3 str x3, [sp] __host_stage2_map:155.47 (mem_protect.c) SbePe return kvm_pgtable_stage2_map(&host_kvm.pgt, ║ipa, size, ipa, prot, p); ~ 0000c118: f85f83a8 ldur x8, [x29, #-8] __host_stage2_map:155.52 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, ║size, ipa, prot, p); ~ 0000c11c: f9400be2 ldr x2, [sp, #16] __host_stage2_map:155.63 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, ║prot, p); ~ 0000c120: b9400fe4 ldr w4, [sp, #12] __host_stage2_map:155.69 (mem_protect.c) sbepe return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, ║p); ~ 0000c124: f94003e5 ldr x5, [sp] __host_stage2_map:155.9 (mem_protect.c) sbepe return ║kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, p); ~ 0000c128: f0000060 adrp x0, 1b000 <hyp_memory+0x460> ~ 0000c12c: 9114e000 add x0, x0, #0x538 ~ 0000c130: aa0803e1 mov x1, x8 ~ 0000c134: aa0803e3 mov x3, x8 ~ 0000c138: 94001f51 bl 13e7c <kvm_pgtable_stage2_map> __host_stage2_map:155.2 (mem_protect.c) sbepe ║return kvm_pgtable_stage2_map(&host_kvm.pgt, ipa, size, ipa, prot, p); ~ 0000c13c: a9427bfd ldp x29, x30, [sp, #32] <- 0000c138(bl-succ)<return> ~ 0000c140: 9100c3ff add sp, sp, #0x30 0000c108 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000c144: d65f03c0 ret -ipa param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_fbreg -0x8) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 -size param typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc0fc 0xc148 (DW_OP_breg31 0x10) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 -prot param enum kvm_pgtable_prot<89e06>/<98455> 0xc0fc 0xc148 (DW_OP_breg31 0xc) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:152 -p param pointer(struct hyp_pool<89e06>/<983fb>) 0xc0fc 0xc148 (DW_OP_breg31 0x0) __host_stage2_map:arch/arm64/kvm/hyp/nvhe/mem_protect.c:153 **0000c148 <host_stage2_unmap_dev_all>: + host_stage2_unmap_dev_all params: none host_stage2_unmap_dev_all:118.0 (mem_protect.c) Sbepe ║{ +pgt var pointer(struct kvm_pgtable<89e06>/<89fba>) 0xc148 0xc1f8 (DW_OP_fbreg -0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:119 +reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xc148 0xc1f8 (DW_OP_breg31 0x10) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:120 +addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc148 0xc1f8 (DW_OP_breg31 0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:121 +i var int (base type, DW_ATE_signed size:4) 0xc148 0xc1f8 (DW_OP_breg31 0x4) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:122 ~ 0000c148: d100c3ff sub sp, sp, #0x30 <- 0000b7b0(bl)<host_stage2_unmap_dev_all> ~ 0000c14c: a9027bfd stp x29, x30, [sp, #32] 0000c148 CFA:r31 r29:u r30:u ~ 0000c150: 910083fd add x29, sp, #0x20 host_stage2_unmap_dev_all:119.22 (mem_protect.c) SbePe struct kvm_pgtable *║pgt = &host_kvm.pgt; ~ 0000c154: f0000068 adrp x8, 1b000 <hyp_memory+0x460> ~ 0000c158: 9114e108 add x8, x8, #0x538 ~ 0000c15c: f81f83a8 stur x8, [x29, #-8] ~ 0000c160: aa1f03e8 mov x8, xzr host_stage2_unmap_dev_all:121.6 (mem_protect.c) Sbepe u64 ║addr = 0; ~ 0000c164: f90007e8 str x8, [sp, #8] ~ 0000c168: 2a1f03e9 mov w9, wzr host_stage2_unmap_dev_all:125.9 (mem_protect.c) Sbepe for (i ║= 0; i < hyp_memblock_nr; i++, addr = reg->end) { ~ 0000c16c: b90007e9 str w9, [sp, #4] host_stage2_unmap_dev_all:125.7 (mem_protect.c) sbepe for (║i = 0; i < hyp_memblock_nr; i++, addr = reg->end) { ~ ┌─0000c170: 14000001 b c174 <host_stage2_unmap_dev_all+0x2c> host_stage2_unmap_dev_all:125.14 (mem_protect.c) sbepe for (i = 0; ║i < hyp_memblock_nr; i++, addr = reg->end) { ~ ╔>└>0000c174: b94007e8 ldr w8, [sp, #4] <- 0000c170(b)<host_stage2_unmap_dev_all+0x2c>,v0000c1d8(b)<host_stage2_unmap_dev_all+0x2c> host_stage2_unmap_dev_all:125.18 (mem_protect.c) sbepe for (i = 0; i < ║hyp_memblock_nr; i++, addr = reg->end) { ~ 0000c178: f0000069 adrp x9, 1b000 <hyp_memory+0x460> ~ 0000c17c: b943a12a ldr w10, [x9, #928] host_stage2_unmap_dev_all:125.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_memblock_nr; i++, addr = reg->end) { ~ 0000c180: 6b0a0108 subs w8, w8, w10 ~ ║┌──0000c184: 540002ca b.ge c1dc <host_stage2_unmap_dev_all+0x94> // b.tcont ║│ ~ ║│┌─0000c188: 14000001 b c18c <host_stage2_unmap_dev_all+0x44> <- 0000c184(b.cc-succ)<fallthrough> ║││ ║││ host_stage2_unmap_dev_all:126.21 (mem_protect.c) Sbepe reg = &hyp_memory[║i]; ~ ║│└>0000c18c: b98007e8 ldrsw x8, [sp, #4] <- 0000c188(b)<host_stage2_unmap_dev_all+0x44> ║│ host_stage2_unmap_dev_all:126.10 (mem_protect.c) sbepe reg = &║hyp_memory[i]; ~ ║│ 0000c190: d0000069 adrp x9, 1a000 <hyp_cpu_logical_map+0xe0> ~ ║│ 0000c194: 912e8129 add x9, x9, #0xba0 ~ ║│ 0000c198: 8b081128 add x8, x9, x8, lsl #4 ║│ host_stage2_unmap_dev_all:126.7 (mem_protect.c) sbepe reg ║= &hyp_memory[i]; ~ ║│ 0000c19c: f9000be8 str x8, [sp, #16] ║│ host_stage2_unmap_dev_all:127.28 (mem_protect.c) Sbepe kvm_pgtable_stage2_unmap(║pgt, addr, reg->start - addr); ~ ║│ 0000c1a0: f85f83a0 ldur x0, [x29, #-8] ║│ host_stage2_unmap_dev_all:127.33 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, ║addr, reg->start - addr); ~ ║│ 0000c1a4: f94007e8 ldr x8, [sp, #8] ║│ host_stage2_unmap_dev_all:127.39 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, ║reg->start - addr); ~ ║│ 0000c1a8: f9400be9 ldr x9, [sp, #16] ║│ host_stage2_unmap_dev_all:127.44 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, reg->║start - addr); ~ ║│ 0000c1ac: f9400129 ldr x9, [x9] ║│ host_stage2_unmap_dev_all:127.50 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, addr, reg->start ║- addr); ~ ║│ 0000c1b0: eb080122 subs x2, x9, x8 ║│ host_stage2_unmap_dev_all:127.3 (mem_protect.c) sbepe ║kvm_pgtable_stage2_unmap(pgt, addr, reg->start - addr); ~ ║│ 0000c1b4: aa0803e1 mov x1, x8 ~ ║│ 0000c1b8: 94002067 bl 14354 <kvm_pgtable_stage2_unmap> ║│ ║│ host_stage2_unmap_dev_all:128.2 (mem_protect.c) Sbepe } ~ ║│┌─0000c1bc: 14000001 b c1c0 <host_stage2_unmap_dev_all+0x78> <- 0000c1b8(bl-succ)<return> ║││ ║││ host_stage2_unmap_dev_all:125.36 (mem_protect.c) Sbepe for (i = 0; i < hyp_memblock_nr; i║++, addr = reg->end) { ~ ║│└>0000c1c0: b94007e8 ldr w8, [sp, #4] <- 0000c1bc(b)<host_stage2_unmap_dev_all+0x78> ~ ║│ 0000c1c4: 11000508 add w8, w8, #0x1 ~ ║│ 0000c1c8: b90007e8 str w8, [sp, #4] ║│ host_stage2_unmap_dev_all:125.47 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr = ║reg->end) { ~ ║│ 0000c1cc: f9400be9 ldr x9, [sp, #16] ║│ host_stage2_unmap_dev_all:125.52 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr = reg->║end) { ~ ║│ 0000c1d0: f9400529 ldr x9, [x9, #8] ║│ host_stage2_unmap_dev_all:125.45 (mem_protect.c) sbepe for (i = 0; i < hyp_memblock_nr; i++, addr ║= reg->end) { ~ ║│ 0000c1d4: f90007e9 str x9, [sp, #8] ║│ host_stage2_unmap_dev_all:125.2 (mem_protect.c) sbepe ║for (i = 0; i < hyp_memblock_nr; i++, addr = reg->end) { ~ ╚╪══0000c1d8: 17ffffe7 b c174 <host_stage2_unmap_dev_all+0x2c> host_stage2_unmap_dev_all:129.27 (mem_protect.c) Sbepe kvm_pgtable_stage2_unmap(║pgt, addr, ULONG_MAX); ~ └─>0000c1dc: f85f83a0 ldur x0, [x29, #-8] <- 0000c184(b.cc)<host_stage2_unmap_dev_all+0x94> host_stage2_unmap_dev_all:129.32 (mem_protect.c) sbepe kvm_pgtable_stage2_unmap(pgt, ║addr, ULONG_MAX); ~ 0000c1e0: f94007e1 ldr x1, [sp, #8] ~ 0000c1e4: 92800002 mov x2, #0xffffffffffffffff // #-1 host_stage2_unmap_dev_all:129.2 (mem_protect.c) sbepe ║kvm_pgtable_stage2_unmap(pgt, addr, ULONG_MAX); ~ 0000c1e8: 9400205b bl 14354 <kvm_pgtable_stage2_unmap> host_stage2_unmap_dev_all:130.1 (mem_protect.c) Sbepe ║} ~ 0000c1ec: a9427bfd ldp x29, x30, [sp, #32] <- 0000c1e8(bl-succ)<return> ~ 0000c1f0: 9100c3ff add sp, sp, #0x30 0000c154 CFA:r29+16 r29:c-16 r30:c-8 ~ 0000c1f4: d65f03c0 ret -pgt var pointer(struct kvm_pgtable<89e06>/<89fba>) 0xc148 0xc1f8 (DW_OP_fbreg -0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:119 -reg var pointer(struct hyp_memblock_region<89e06>/<993fd>) 0xc148 0xc1f8 (DW_OP_breg31 0x10) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:120 -addr var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc148 0xc1f8 (DW_OP_breg31 0x8) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:121 -i var int (base type, DW_ATE_signed size:4) 0xc148 0xc1f8 (DW_OP_breg31 0x4) host_stage2_unmap_dev_all:arch/arm64/kvm/hyp/nvhe/mem_protect.c:122 **0000c1f8 <hyp_spin_unlock>: + hyp_spin_unlock params: +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8) hyp_spin_unlock:74.0 (spinlock.h) Sbepe ║{ 0000c1f8 CFA:r31 +lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:73 +tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc1f8 0xc21c (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:75 ~ 0000c1f8: d10043ff sub sp, sp, #0x10 <- 0000b7d8(bl)<hyp_spin_unlock> ~ 0000c1fc: f90007e0 str x0, [sp, #8] hyp_spin_unlock:87.10 (spinlock.h) SbePe : "=Q" (║lock->owner), "=&r" (tmp) ~ 0000c200: f94007e8 ldr x8, [sp, #8] hyp_spin_unlock:77.2 (spinlock.h) Sbepe ║asm volatile( ~ 0000c204: 79400109 ldrh w9, [x8] ~ 0000c208: 11000529 add w9, w9, #0x1 ~ 0000c20c: 489ffd09 stlrh w9, [x8] ~ 0000c210: f90003e9 str x9, [sp] hyp_spin_unlock:90.1 (spinlock.h) Sbepe ║} ~ 0000c214: 910043ff add sp, sp, #0x10 ~ 0000c218: d65f03c0 ret -lock param pointer(typedef(hyp_spinlock_t=union hyp_spinlock<89e06>/<983ac>)) 0xc1f8 0xc21c (DW_OP_fbreg 0x8) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:73 -tmp var typedef(u64=typedef(__u64=long long unsigned int (base type, DW_ATE_unsigned size:8))) 0xc1f8 0xc21c (DW_OP_fbreg 0x0) hyp_spin_unlock:arch/arm64/kvm/hyp/nvhe/mem_protect.c:75 ~ 0000c21c: d5033fdf isb ~ 0000c220: d5385208 mrs x8, esr_el1 ~ 0000c224: d5386008 mrs x8, far_el1 ~ 0000c228: d5033fbf dmb sy ~ 0000c22c: d5033fbf dmb sy ~ 0000c230: d5033fbf dmb sy ~ 0000c234: d5033fbf dmb sy ~ 0000c238: 52a0002b mov w11, #0x10000 // #65536 ~ 0000c23c: b8ab0109 ldadda w11, w9, [x8] ~ 0000c240: d503201f nop ~ 0000c244: d503201f nop ~ 0000c248: d503201f nop ~ 0000c24c: 52800029 mov w9, #0x1 // #1 ~ 0000c250: 7869011f staddlh w9, [x8] 0000c1fc CFA:r31+16 ~ 0000c254: d503201f nop