@@ -912,6 +912,7 @@ static struct kvm_memory_slot *gfn_to_memslot_dirty_bitmap(struct kvm_vcpu *vcpu
912
912
* in this rmap chain. Otherwise, (rmap_head->val & ~1) points to a struct
913
913
* pte_list_desc containing more mappings.
914
914
*/
915
+ #define KVM_RMAP_MANY BIT(0)
915
916
916
917
/*
917
918
* Returns the number of pointers in the rmap chain, not counting the new one.
@@ -924,16 +925,16 @@ static int pte_list_add(struct kvm_mmu_memory_cache *cache, u64 *spte,
924
925
925
926
if (!rmap_head -> val ) {
926
927
rmap_head -> val = (unsigned long )spte ;
927
- } else if (!(rmap_head -> val & 1 )) {
928
+ } else if (!(rmap_head -> val & KVM_RMAP_MANY )) {
928
929
desc = kvm_mmu_memory_cache_alloc (cache );
929
930
desc -> sptes [0 ] = (u64 * )rmap_head -> val ;
930
931
desc -> sptes [1 ] = spte ;
931
932
desc -> spte_count = 2 ;
932
933
desc -> tail_count = 0 ;
933
- rmap_head -> val = (unsigned long )desc | 1 ;
934
+ rmap_head -> val = (unsigned long )desc | KVM_RMAP_MANY ;
934
935
++ count ;
935
936
} else {
936
- desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
937
+ desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
937
938
count = desc -> tail_count + desc -> spte_count ;
938
939
939
940
/*
@@ -942,10 +943,10 @@ static int pte_list_add(struct kvm_mmu_memory_cache *cache, u64 *spte,
942
943
*/
943
944
if (desc -> spte_count == PTE_LIST_EXT ) {
944
945
desc = kvm_mmu_memory_cache_alloc (cache );
945
- desc -> more = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
946
+ desc -> more = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
946
947
desc -> spte_count = 0 ;
947
948
desc -> tail_count = count ;
948
- rmap_head -> val = (unsigned long )desc | 1 ;
949
+ rmap_head -> val = (unsigned long )desc | KVM_RMAP_MANY ;
949
950
}
950
951
desc -> sptes [desc -> spte_count ++ ] = spte ;
951
952
}
@@ -956,7 +957,7 @@ static void pte_list_desc_remove_entry(struct kvm *kvm,
956
957
struct kvm_rmap_head * rmap_head ,
957
958
struct pte_list_desc * desc , int i )
958
959
{
959
- struct pte_list_desc * head_desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
960
+ struct pte_list_desc * head_desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
960
961
int j = head_desc -> spte_count - 1 ;
961
962
962
963
/*
@@ -985,7 +986,7 @@ static void pte_list_desc_remove_entry(struct kvm *kvm,
985
986
if (!head_desc -> more )
986
987
rmap_head -> val = 0 ;
987
988
else
988
- rmap_head -> val = (unsigned long )head_desc -> more | 1 ;
989
+ rmap_head -> val = (unsigned long )head_desc -> more | KVM_RMAP_MANY ;
989
990
mmu_free_pte_list_desc (head_desc );
990
991
}
991
992
@@ -998,13 +999,13 @@ static void pte_list_remove(struct kvm *kvm, u64 *spte,
998
999
if (KVM_BUG_ON_DATA_CORRUPTION (!rmap_head -> val , kvm ))
999
1000
return ;
1000
1001
1001
- if (!(rmap_head -> val & 1 )) {
1002
+ if (!(rmap_head -> val & KVM_RMAP_MANY )) {
1002
1003
if (KVM_BUG_ON_DATA_CORRUPTION ((u64 * )rmap_head -> val != spte , kvm ))
1003
1004
return ;
1004
1005
1005
1006
rmap_head -> val = 0 ;
1006
1007
} else {
1007
- desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
1008
+ desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
1008
1009
while (desc ) {
1009
1010
for (i = 0 ; i < desc -> spte_count ; ++ i ) {
1010
1011
if (desc -> sptes [i ] == spte ) {
@@ -1037,12 +1038,12 @@ static bool kvm_zap_all_rmap_sptes(struct kvm *kvm,
1037
1038
if (!rmap_head -> val )
1038
1039
return false;
1039
1040
1040
- if (!(rmap_head -> val & 1 )) {
1041
+ if (!(rmap_head -> val & KVM_RMAP_MANY )) {
1041
1042
mmu_spte_clear_track_bits (kvm , (u64 * )rmap_head -> val );
1042
1043
goto out ;
1043
1044
}
1044
1045
1045
- desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
1046
+ desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
1046
1047
1047
1048
for (; desc ; desc = next ) {
1048
1049
for (i = 0 ; i < desc -> spte_count ; i ++ )
@@ -1062,10 +1063,10 @@ unsigned int pte_list_count(struct kvm_rmap_head *rmap_head)
1062
1063
1063
1064
if (!rmap_head -> val )
1064
1065
return 0 ;
1065
- else if (!(rmap_head -> val & 1 ))
1066
+ else if (!(rmap_head -> val & KVM_RMAP_MANY ))
1066
1067
return 1 ;
1067
1068
1068
- desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
1069
+ desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
1069
1070
return desc -> tail_count + desc -> spte_count ;
1070
1071
}
1071
1072
@@ -1127,13 +1128,13 @@ static u64 *rmap_get_first(struct kvm_rmap_head *rmap_head,
1127
1128
if (!rmap_head -> val )
1128
1129
return NULL ;
1129
1130
1130
- if (!(rmap_head -> val & 1 )) {
1131
+ if (!(rmap_head -> val & KVM_RMAP_MANY )) {
1131
1132
iter -> desc = NULL ;
1132
1133
sptep = (u64 * )rmap_head -> val ;
1133
1134
goto out ;
1134
1135
}
1135
1136
1136
- iter -> desc = (struct pte_list_desc * )(rmap_head -> val & ~1ul );
1137
+ iter -> desc = (struct pte_list_desc * )(rmap_head -> val & ~KVM_RMAP_MANY );
1137
1138
iter -> pos = 0 ;
1138
1139
sptep = iter -> desc -> sptes [iter -> pos ];
1139
1140
out :
0 commit comments