@@ -1040,17 +1040,15 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
1040
1040
{
1041
1041
ram_addr_t addr ;
1042
1042
int flags , ret = 0 ;
1043
- int error ;
1044
1043
static uint64_t seq_iter ;
1045
1044
1046
1045
seq_iter ++ ;
1047
1046
1048
1047
if (version_id != 4 ) {
1049
1048
ret = - EINVAL ;
1050
- goto done ;
1051
1049
}
1052
1050
1053
- do {
1051
+ while (! ret ) {
1054
1052
addr = qemu_get_be64 (f );
1055
1053
1056
1054
flags = addr & ~TARGET_PAGE_MASK ;
@@ -1078,7 +1076,6 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
1078
1076
" in != " RAM_ADDR_FMT , id , length ,
1079
1077
block -> length );
1080
1078
ret = - EINVAL ;
1081
- goto done ;
1082
1079
}
1083
1080
break ;
1084
1081
}
@@ -1088,21 +1085,22 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
1088
1085
error_report ("Unknown ramblock \"%s\", cannot "
1089
1086
"accept migration" , id );
1090
1087
ret = - EINVAL ;
1091
- goto done ;
1088
+ }
1089
+ if (ret ) {
1090
+ break ;
1092
1091
}
1093
1092
1094
1093
total_ram_bytes -= length ;
1095
1094
}
1096
- }
1097
-
1098
- if (flags & RAM_SAVE_FLAG_COMPRESS ) {
1095
+ } else if (flags & RAM_SAVE_FLAG_COMPRESS ) {
1099
1096
void * host ;
1100
1097
uint8_t ch ;
1101
1098
1102
1099
host = host_from_stream_offset (f , addr , flags );
1103
1100
if (!host ) {
1101
+ error_report ("Illegal RAM offset " RAM_ADDR_FMT , addr );
1104
1102
ret = - EINVAL ;
1105
- goto done ;
1103
+ break ;
1106
1104
}
1107
1105
1108
1106
ch = qemu_get_byte (f );
@@ -1112,33 +1110,39 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
1112
1110
1113
1111
host = host_from_stream_offset (f , addr , flags );
1114
1112
if (!host ) {
1113
+ error_report ("Illegal RAM offset " RAM_ADDR_FMT , addr );
1115
1114
ret = - EINVAL ;
1116
- goto done ;
1115
+ break ;
1117
1116
}
1118
1117
1119
1118
qemu_get_buffer (f , host , TARGET_PAGE_SIZE );
1120
1119
} else if (flags & RAM_SAVE_FLAG_XBZRLE ) {
1121
1120
void * host = host_from_stream_offset (f , addr , flags );
1122
1121
if (!host ) {
1122
+ error_report ("Illegal RAM offset " RAM_ADDR_FMT , addr );
1123
1123
ret = - EINVAL ;
1124
- goto done ;
1124
+ break ;
1125
1125
}
1126
1126
1127
1127
if (load_xbzrle (f , addr , host ) < 0 ) {
1128
+ error_report ("Failed to decompress XBZRLE page at "
1129
+ RAM_ADDR_FMT , addr );
1128
1130
ret = - EINVAL ;
1129
- goto done ;
1131
+ break ;
1130
1132
}
1131
1133
} else if (flags & RAM_SAVE_FLAG_HOOK ) {
1132
1134
ram_control_load_hook (f , flags );
1135
+ } else if (flags & RAM_SAVE_FLAG_EOS ) {
1136
+ /* normal exit */
1137
+ break ;
1138
+ } else {
1139
+ error_report ("Unknown migration flags: %#x" , flags );
1140
+ ret = - EINVAL ;
1141
+ break ;
1133
1142
}
1134
- error = qemu_file_get_error (f );
1135
- if (error ) {
1136
- ret = error ;
1137
- goto done ;
1138
- }
1139
- } while (!(flags & RAM_SAVE_FLAG_EOS ));
1143
+ ret = qemu_file_get_error (f );
1144
+ }
1140
1145
1141
- done :
1142
1146
DPRINTF ("Completed load of VM with exit code %d seq iteration "
1143
1147
"%" PRIu64 "\n" , ret , seq_iter );
1144
1148
return ret ;
0 commit comments