KVM: x86/mmu: Use separate namespaces for guest PTEs and shadow PTEs
[linux-block.git] / arch / x86 / kvm / mmu / paging.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Shadow paging constants/helpers that don't need to be #undef'd. */
3 #ifndef __KVM_X86_PAGING_H
4 #define __KVM_X86_PAGING_H
5
6 #define GUEST_PT64_BASE_ADDR_MASK (((1ULL << 52) - 1) & ~(u64)(PAGE_SIZE-1))
7
8 #define PT64_LEVEL_BITS 9
9
10 #define PT64_INDEX(address, level) __PT_INDEX(address, level, PT64_LEVEL_BITS)
11
12 #define PT64_LVL_ADDR_MASK(level) \
13         __PT_LVL_ADDR_MASK(GUEST_PT64_BASE_ADDR_MASK, level, PT64_LEVEL_BITS)
14
15 #define PT64_LVL_OFFSET_MASK(level) \
16         __PT_LVL_OFFSET_MASK(GUEST_PT64_BASE_ADDR_MASK, level, PT64_LEVEL_BITS)
17
18
19 #define PT32_LEVEL_SHIFT(level) __PT_LEVEL_SHIFT(level, PT32_LEVEL_BITS)
20
21 #define PT32_LVL_OFFSET_MASK(level) \
22         __PT_LVL_OFFSET_MASK(PT32_BASE_ADDR_MASK, level, PT32_LEVEL_BITS)
23
24 #define PT32_INDEX(address, level) __PT_INDEX(address, level, PT32_LEVEL_BITS)
25
26 #define PT32_BASE_ADDR_MASK PAGE_MASK
27
28 #define PT32_LVL_ADDR_MASK(level) \
29         __PT_LVL_ADDR_MASK(PT32_BASE_ADDR_MASK, level, PT32_LEVEL_BITS)
30
31 #endif /* __KVM_X86_PAGING_H */
32