@@ -59,6 +59,48 @@ typedef u64 kvm_pte_t;
59
59
60
60
#define KVM_PHYS_INVALID (-1ULL)
61
61
62
+ #define KVM_PTE_LEAF_ATTR_LO GENMASK(11, 2)
63
+
64
+ #define KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX GENMASK(4, 2)
65
+ #define KVM_PTE_LEAF_ATTR_LO_S1_AP GENMASK(7, 6)
66
+ #define KVM_PTE_LEAF_ATTR_LO_S1_AP_RO \
67
+ ({ cpus_have_final_cap(ARM64_KVM_HVHE) ? 2 : 3; })
68
+ #define KVM_PTE_LEAF_ATTR_LO_S1_AP_RW \
69
+ ({ cpus_have_final_cap(ARM64_KVM_HVHE) ? 0 : 1; })
70
+ #define KVM_PTE_LEAF_ATTR_LO_S1_SH GENMASK(9, 8)
71
+ #define KVM_PTE_LEAF_ATTR_LO_S1_SH_IS 3
72
+ #define KVM_PTE_LEAF_ATTR_LO_S1_AF BIT(10)
73
+
74
+ #define KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR GENMASK(5, 2)
75
+ #define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R BIT(6)
76
+ #define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W BIT(7)
77
+ #define KVM_PTE_LEAF_ATTR_LO_S2_SH GENMASK(9, 8)
78
+ #define KVM_PTE_LEAF_ATTR_LO_S2_SH_IS 3
79
+ #define KVM_PTE_LEAF_ATTR_LO_S2_AF BIT(10)
80
+
81
+ #define KVM_PTE_LEAF_ATTR_HI GENMASK(63, 50)
82
+
83
+ #define KVM_PTE_LEAF_ATTR_HI_SW GENMASK(58, 55)
84
+
85
+ #define KVM_PTE_LEAF_ATTR_HI_S1_XN BIT(54)
86
+
87
+ #define KVM_PTE_LEAF_ATTR_HI_S2_XN BIT(54)
88
+
89
+ #define KVM_PTE_LEAF_ATTR_HI_S1_GP BIT(50)
90
+
91
+ #define KVM_PTE_LEAF_ATTR_S2_PERMS (KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R | \
92
+ KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W | \
93
+ KVM_PTE_LEAF_ATTR_HI_S2_XN)
94
+
95
+ #define KVM_INVALID_PTE_OWNER_MASK GENMASK(9, 2)
96
+ #define KVM_MAX_OWNER_ID 1
97
+
98
+ /*
99
+ * Used to indicate a pte for which a 'break-before-make' sequence is in
100
+ * progress.
101
+ */
102
+ #define KVM_INVALID_PTE_LOCKED BIT(10)
103
+
62
104
static inline bool kvm_pte_valid (kvm_pte_t pte )
63
105
{
64
106
return pte & KVM_PTE_VALID ;
0 commit comments