|
@@ -72,8 +72,13 @@
|
|
|
/*
|
|
|
* The number of PTRS across all concatenated stage2 tables given by the
|
|
|
* number of bits resolved at the initial level.
|
|
|
+ * If we force more levels than necessary, we may have (stage2_pgdir_shift > IPA),
|
|
|
+ * in which case, stage2_pgd_ptrs will have one entry.
|
|
|
*/
|
|
|
-#define __s2_pgd_ptrs(ipa, lvls) (1 << ((ipa) - pt_levels_pgdir_shift((lvls))))
|
|
|
+#define pgd_ptrs_shift(ipa, pgdir_shift) \
|
|
|
+ ((ipa) > (pgdir_shift) ? ((ipa) - (pgdir_shift)) : 0)
|
|
|
+#define __s2_pgd_ptrs(ipa, lvls) \
|
|
|
+ (1 << (pgd_ptrs_shift((ipa), pt_levels_pgdir_shift(lvls))))
|
|
|
#define __s2_pgd_size(ipa, lvls) (__s2_pgd_ptrs((ipa), (lvls)) * sizeof(pgd_t))
|
|
|
|
|
|
#define stage2_pgd_ptrs(kvm) __s2_pgd_ptrs(kvm_phys_shift(kvm), kvm_stage2_levels(kvm))
|