@@ -1005,34 +1005,33 @@ int __kvm_set_memory_region(struct kvm *kvm,
1005
1005
1006
1006
r = check_memory_region_flags (mem );
1007
1007
if (r )
1008
- goto out ;
1008
+ return r ;
1009
1009
1010
- r = - EINVAL ;
1011
1010
as_id = mem -> slot >> 16 ;
1012
1011
id = (u16 )mem -> slot ;
1013
1012
1014
1013
/* General sanity checks */
1015
1014
if (mem -> memory_size & (PAGE_SIZE - 1 ))
1016
- goto out ;
1015
+ return - EINVAL ;
1017
1016
if (mem -> guest_phys_addr & (PAGE_SIZE - 1 ))
1018
- goto out ;
1017
+ return - EINVAL ;
1019
1018
/* We can read the guest memory with __xxx_user() later on. */
1020
1019
if ((id < KVM_USER_MEM_SLOTS ) &&
1021
1020
((mem -> userspace_addr & (PAGE_SIZE - 1 )) ||
1022
1021
!access_ok ((void __user * )(unsigned long )mem -> userspace_addr ,
1023
1022
mem -> memory_size )))
1024
- goto out ;
1023
+ return - EINVAL ;
1025
1024
if (as_id >= KVM_ADDRESS_SPACE_NUM || id >= KVM_MEM_SLOTS_NUM )
1026
- goto out ;
1025
+ return - EINVAL ;
1027
1026
if (mem -> guest_phys_addr + mem -> memory_size < mem -> guest_phys_addr )
1028
- goto out ;
1027
+ return - EINVAL ;
1029
1028
1030
1029
slot = id_to_memslot (__kvm_memslots (kvm , as_id ), id );
1031
1030
base_gfn = mem -> guest_phys_addr >> PAGE_SHIFT ;
1032
1031
npages = mem -> memory_size >> PAGE_SHIFT ;
1033
1032
1034
1033
if (npages > KVM_MEM_MAX_NR_PAGES )
1035
- goto out ;
1034
+ return - EINVAL ;
1036
1035
1037
1036
new = old = * slot ;
1038
1037
@@ -1049,20 +1048,18 @@ int __kvm_set_memory_region(struct kvm *kvm,
1049
1048
if ((new .userspace_addr != old .userspace_addr ) ||
1050
1049
(npages != old .npages ) ||
1051
1050
((new .flags ^ old .flags ) & KVM_MEM_READONLY ))
1052
- goto out ;
1051
+ return - EINVAL ;
1053
1052
1054
1053
if (base_gfn != old .base_gfn )
1055
1054
change = KVM_MR_MOVE ;
1056
1055
else if (new .flags != old .flags )
1057
1056
change = KVM_MR_FLAGS_ONLY ;
1058
- else { /* Nothing to change. */
1059
- r = 0 ;
1060
- goto out ;
1061
- }
1057
+ else /* Nothing to change. */
1058
+ return 0 ;
1062
1059
}
1063
1060
} else {
1064
1061
if (!old .npages )
1065
- goto out ;
1062
+ return - EINVAL ;
1066
1063
1067
1064
change = KVM_MR_DELETE ;
1068
1065
new .base_gfn = 0 ;
@@ -1071,29 +1068,29 @@ int __kvm_set_memory_region(struct kvm *kvm,
1071
1068
1072
1069
if ((change == KVM_MR_CREATE ) || (change == KVM_MR_MOVE )) {
1073
1070
/* Check for overlaps */
1074
- r = - EEXIST ;
1075
1071
kvm_for_each_memslot (slot , __kvm_memslots (kvm , as_id )) {
1076
1072
if (slot -> id == id )
1077
1073
continue ;
1078
1074
if (!((base_gfn + npages <= slot -> base_gfn ) ||
1079
1075
(base_gfn >= slot -> base_gfn + slot -> npages )))
1080
- goto out ;
1076
+ return - EEXIST ;
1081
1077
}
1082
1078
}
1083
1079
1084
- r = - ENOMEM ;
1085
-
1086
1080
/* Allocate/free page dirty bitmap as needed */
1087
1081
if (!(new .flags & KVM_MEM_LOG_DIRTY_PAGES ))
1088
1082
new .dirty_bitmap = NULL ;
1089
1083
else if (!new .dirty_bitmap ) {
1090
- if (kvm_create_dirty_bitmap (& new ) < 0 )
1091
- goto out ;
1084
+ r = kvm_create_dirty_bitmap (& new );
1085
+ if (r )
1086
+ return r ;
1092
1087
}
1093
1088
1094
1089
slots = kvzalloc (sizeof (struct kvm_memslots ), GFP_KERNEL_ACCOUNT );
1095
- if (!slots )
1090
+ if (!slots ) {
1091
+ r = - ENOMEM ;
1096
1092
goto out_bitmap ;
1093
+ }
1097
1094
memcpy (slots , __kvm_memslots (kvm , as_id ), sizeof (struct kvm_memslots ));
1098
1095
1099
1096
if ((change == KVM_MR_DELETE ) || (change == KVM_MR_MOVE )) {
@@ -1144,7 +1141,6 @@ int __kvm_set_memory_region(struct kvm *kvm,
1144
1141
out_bitmap :
1145
1142
if (new .dirty_bitmap && !old .dirty_bitmap )
1146
1143
kvm_destroy_dirty_bitmap (& new );
1147
- out :
1148
1144
return r ;
1149
1145
}
1150
1146
EXPORT_SYMBOL_GPL (__kvm_set_memory_region );
0 commit comments