1 /* 2 * QEMU System Emulator 3 * 4 * Copyright (c) 2003-2008 Fabrice Bellard 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a copy 7 * of this software and associated documentation files (the "Software"), to deal 8 * in the Software without restriction, including without limitation the rights 9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 * copies of the Software, and to permit persons to whom the Software is 11 * furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included in 14 * all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 * THE SOFTWARE. 23 */ 24 #include "qemu-common.h" 25 #include "qemu/iov.h" 26 #include "qemu/sockets.h" 27 #include "block/coroutine.h" 28 #include "migration/migration.h" 29 #include "migration/qemu-file.h" 30 #include "migration/qemu-file-internal.h" 31 #include "trace.h" 32 33 /* 34 * Stop a file from being read/written - not all backing files can do this 35 * typically only sockets can. 36 */ 37 int qemu_file_shutdown(QEMUFile *f) 38 { 39 if (!f->ops->shut_down) { 40 return -ENOSYS; 41 } 42 return f->ops->shut_down(f->opaque, true, true); 43 } 44 45 bool qemu_file_mode_is_not_valid(const char *mode) 46 { 47 if (mode == NULL || 48 (mode[0] != 'r' && mode[0] != 'w') || 49 mode[1] != 'b' || mode[2] != 0) { 50 fprintf(stderr, "qemu_fopen: Argument validity check failed\n"); 51 return true; 52 } 53 54 return false; 55 } 56 57 QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops) 58 { 59 QEMUFile *f; 60 61 f = g_malloc0(sizeof(QEMUFile)); 62 63 f->opaque = opaque; 64 f->ops = ops; 65 return f; 66 } 67 68 /* 69 * Get last error for stream f 70 * 71 * Return negative error value if there has been an error on previous 72 * operations, return 0 if no error happened. 73 * 74 */ 75 int qemu_file_get_error(QEMUFile *f) 76 { 77 return f->last_error; 78 } 79 80 void qemu_file_set_error(QEMUFile *f, int ret) 81 { 82 if (f->last_error == 0) { 83 f->last_error = ret; 84 } 85 } 86 87 bool qemu_file_is_writable(QEMUFile *f) 88 { 89 return f->ops->writev_buffer || f->ops->put_buffer; 90 } 91 92 /** 93 * Flushes QEMUFile buffer 94 * 95 * If there is writev_buffer QEMUFileOps it uses it otherwise uses 96 * put_buffer ops. 97 */ 98 void qemu_fflush(QEMUFile *f) 99 { 100 ssize_t ret = 0; 101 102 if (!qemu_file_is_writable(f)) { 103 return; 104 } 105 106 if (f->ops->writev_buffer) { 107 if (f->iovcnt > 0) { 108 ret = f->ops->writev_buffer(f->opaque, f->iov, f->iovcnt, f->pos); 109 } 110 } else { 111 if (f->buf_index > 0) { 112 ret = f->ops->put_buffer(f->opaque, f->buf, f->pos, f->buf_index); 113 } 114 } 115 if (ret >= 0) { 116 f->pos += ret; 117 } 118 f->buf_index = 0; 119 f->iovcnt = 0; 120 if (ret < 0) { 121 qemu_file_set_error(f, ret); 122 } 123 } 124 125 void ram_control_before_iterate(QEMUFile *f, uint64_t flags) 126 { 127 int ret = 0; 128 129 if (f->ops->before_ram_iterate) { 130 ret = f->ops->before_ram_iterate(f, f->opaque, flags); 131 if (ret < 0) { 132 qemu_file_set_error(f, ret); 133 } 134 } 135 } 136 137 void ram_control_after_iterate(QEMUFile *f, uint64_t flags) 138 { 139 int ret = 0; 140 141 if (f->ops->after_ram_iterate) { 142 ret = f->ops->after_ram_iterate(f, f->opaque, flags); 143 if (ret < 0) { 144 qemu_file_set_error(f, ret); 145 } 146 } 147 } 148 149 void ram_control_load_hook(QEMUFile *f, uint64_t flags) 150 { 151 int ret = -EINVAL; 152 153 if (f->ops->hook_ram_load) { 154 ret = f->ops->hook_ram_load(f, f->opaque, flags); 155 if (ret < 0) { 156 qemu_file_set_error(f, ret); 157 } 158 } else { 159 qemu_file_set_error(f, ret); 160 } 161 } 162 163 size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, 164 ram_addr_t offset, size_t size, 165 uint64_t *bytes_sent) 166 { 167 if (f->ops->save_page) { 168 int ret = f->ops->save_page(f, f->opaque, block_offset, 169 offset, size, bytes_sent); 170 171 if (ret != RAM_SAVE_CONTROL_DELAYED) { 172 if (bytes_sent && *bytes_sent > 0) { 173 qemu_update_position(f, *bytes_sent); 174 } else if (ret < 0) { 175 qemu_file_set_error(f, ret); 176 } 177 } 178 179 return ret; 180 } 181 182 return RAM_SAVE_CONTROL_NOT_SUPP; 183 } 184 185 /* 186 * Attempt to fill the buffer from the underlying file 187 * Returns the number of bytes read, or negative value for an error. 188 * 189 * Note that it can return a partially full buffer even in a not error/not EOF 190 * case if the underlying file descriptor gives a short read, and that can 191 * happen even on a blocking fd. 192 */ 193 static ssize_t qemu_fill_buffer(QEMUFile *f) 194 { 195 int len; 196 int pending; 197 198 assert(!qemu_file_is_writable(f)); 199 200 pending = f->buf_size - f->buf_index; 201 if (pending > 0) { 202 memmove(f->buf, f->buf + f->buf_index, pending); 203 } 204 f->buf_index = 0; 205 f->buf_size = pending; 206 207 len = f->ops->get_buffer(f->opaque, f->buf + pending, f->pos, 208 IO_BUF_SIZE - pending); 209 if (len > 0) { 210 f->buf_size += len; 211 f->pos += len; 212 } else if (len == 0) { 213 qemu_file_set_error(f, -EIO); 214 } else if (len != -EAGAIN) { 215 qemu_file_set_error(f, len); 216 } 217 218 return len; 219 } 220 221 int qemu_get_fd(QEMUFile *f) 222 { 223 if (f->ops->get_fd) { 224 return f->ops->get_fd(f->opaque); 225 } 226 return -1; 227 } 228 229 void qemu_update_position(QEMUFile *f, size_t size) 230 { 231 f->pos += size; 232 } 233 234 /** Closes the file 235 * 236 * Returns negative error value if any error happened on previous operations or 237 * while closing the file. Returns 0 or positive number on success. 238 * 239 * The meaning of return value on success depends on the specific backend 240 * being used. 241 */ 242 int qemu_fclose(QEMUFile *f) 243 { 244 int ret; 245 qemu_fflush(f); 246 ret = qemu_file_get_error(f); 247 248 if (f->ops->close) { 249 int ret2 = f->ops->close(f->opaque); 250 if (ret >= 0) { 251 ret = ret2; 252 } 253 } 254 /* If any error was spotted before closing, we should report it 255 * instead of the close() return value. 256 */ 257 if (f->last_error) { 258 ret = f->last_error; 259 } 260 g_free(f); 261 trace_qemu_file_fclose(); 262 return ret; 263 } 264 265 static void add_to_iovec(QEMUFile *f, const uint8_t *buf, int size) 266 { 267 /* check for adjacent buffer and coalesce them */ 268 if (f->iovcnt > 0 && buf == f->iov[f->iovcnt - 1].iov_base + 269 f->iov[f->iovcnt - 1].iov_len) { 270 f->iov[f->iovcnt - 1].iov_len += size; 271 } else { 272 f->iov[f->iovcnt].iov_base = (uint8_t *)buf; 273 f->iov[f->iovcnt++].iov_len = size; 274 } 275 276 if (f->iovcnt >= MAX_IOV_SIZE) { 277 qemu_fflush(f); 278 } 279 } 280 281 void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, int size) 282 { 283 if (!f->ops->writev_buffer) { 284 qemu_put_buffer(f, buf, size); 285 return; 286 } 287 288 if (f->last_error) { 289 return; 290 } 291 292 f->bytes_xfer += size; 293 add_to_iovec(f, buf, size); 294 } 295 296 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size) 297 { 298 int l; 299 300 if (f->last_error) { 301 return; 302 } 303 304 while (size > 0) { 305 l = IO_BUF_SIZE - f->buf_index; 306 if (l > size) { 307 l = size; 308 } 309 memcpy(f->buf + f->buf_index, buf, l); 310 f->bytes_xfer += l; 311 if (f->ops->writev_buffer) { 312 add_to_iovec(f, f->buf + f->buf_index, l); 313 } 314 f->buf_index += l; 315 if (f->buf_index == IO_BUF_SIZE) { 316 qemu_fflush(f); 317 } 318 if (qemu_file_get_error(f)) { 319 break; 320 } 321 buf += l; 322 size -= l; 323 } 324 } 325 326 void qemu_put_byte(QEMUFile *f, int v) 327 { 328 if (f->last_error) { 329 return; 330 } 331 332 f->buf[f->buf_index] = v; 333 f->bytes_xfer++; 334 if (f->ops->writev_buffer) { 335 add_to_iovec(f, f->buf + f->buf_index, 1); 336 } 337 f->buf_index++; 338 if (f->buf_index == IO_BUF_SIZE) { 339 qemu_fflush(f); 340 } 341 } 342 343 void qemu_file_skip(QEMUFile *f, int size) 344 { 345 if (f->buf_index + size <= f->buf_size) { 346 f->buf_index += size; 347 } 348 } 349 350 /* 351 * Read 'size' bytes from file (at 'offset') into buf without moving the 352 * pointer. 353 * 354 * It will return size bytes unless there was an error, in which case it will 355 * return as many as it managed to read (assuming blocking fd's which 356 * all current QEMUFile are) 357 */ 358 int qemu_peek_buffer(QEMUFile *f, uint8_t *buf, int size, size_t offset) 359 { 360 int pending; 361 int index; 362 363 assert(!qemu_file_is_writable(f)); 364 assert(offset < IO_BUF_SIZE); 365 assert(size <= IO_BUF_SIZE - offset); 366 367 /* The 1st byte to read from */ 368 index = f->buf_index + offset; 369 /* The number of available bytes starting at index */ 370 pending = f->buf_size - index; 371 372 /* 373 * qemu_fill_buffer might return just a few bytes, even when there isn't 374 * an error, so loop collecting them until we get enough. 375 */ 376 while (pending < size) { 377 int received = qemu_fill_buffer(f); 378 379 if (received <= 0) { 380 break; 381 } 382 383 index = f->buf_index + offset; 384 pending = f->buf_size - index; 385 } 386 387 if (pending <= 0) { 388 return 0; 389 } 390 if (size > pending) { 391 size = pending; 392 } 393 394 memcpy(buf, f->buf + index, size); 395 return size; 396 } 397 398 /* 399 * Read 'size' bytes of data from the file into buf. 400 * 'size' can be larger than the internal buffer. 401 * 402 * It will return size bytes unless there was an error, in which case it will 403 * return as many as it managed to read (assuming blocking fd's which 404 * all current QEMUFile are) 405 */ 406 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size) 407 { 408 int pending = size; 409 int done = 0; 410 411 while (pending > 0) { 412 int res; 413 414 res = qemu_peek_buffer(f, buf, MIN(pending, IO_BUF_SIZE), 0); 415 if (res == 0) { 416 return done; 417 } 418 qemu_file_skip(f, res); 419 buf += res; 420 pending -= res; 421 done += res; 422 } 423 return done; 424 } 425 426 /* 427 * Peeks a single byte from the buffer; this isn't guaranteed to work if 428 * offset leaves a gap after the previous read/peeked data. 429 */ 430 int qemu_peek_byte(QEMUFile *f, int offset) 431 { 432 int index = f->buf_index + offset; 433 434 assert(!qemu_file_is_writable(f)); 435 assert(offset < IO_BUF_SIZE); 436 437 if (index >= f->buf_size) { 438 qemu_fill_buffer(f); 439 index = f->buf_index + offset; 440 if (index >= f->buf_size) { 441 return 0; 442 } 443 } 444 return f->buf[index]; 445 } 446 447 int qemu_get_byte(QEMUFile *f) 448 { 449 int result; 450 451 result = qemu_peek_byte(f, 0); 452 qemu_file_skip(f, 1); 453 return result; 454 } 455 456 int64_t qemu_ftell_fast(QEMUFile *f) 457 { 458 int64_t ret = f->pos; 459 int i; 460 461 if (f->ops->writev_buffer) { 462 for (i = 0; i < f->iovcnt; i++) { 463 ret += f->iov[i].iov_len; 464 } 465 } else { 466 ret += f->buf_index; 467 } 468 469 return ret; 470 } 471 472 int64_t qemu_ftell(QEMUFile *f) 473 { 474 qemu_fflush(f); 475 return f->pos; 476 } 477 478 int qemu_file_rate_limit(QEMUFile *f) 479 { 480 if (qemu_file_get_error(f)) { 481 return 1; 482 } 483 if (f->xfer_limit > 0 && f->bytes_xfer > f->xfer_limit) { 484 return 1; 485 } 486 return 0; 487 } 488 489 int64_t qemu_file_get_rate_limit(QEMUFile *f) 490 { 491 return f->xfer_limit; 492 } 493 494 void qemu_file_set_rate_limit(QEMUFile *f, int64_t limit) 495 { 496 f->xfer_limit = limit; 497 } 498 499 void qemu_file_reset_rate_limit(QEMUFile *f) 500 { 501 f->bytes_xfer = 0; 502 } 503 504 void qemu_put_be16(QEMUFile *f, unsigned int v) 505 { 506 qemu_put_byte(f, v >> 8); 507 qemu_put_byte(f, v); 508 } 509 510 void qemu_put_be32(QEMUFile *f, unsigned int v) 511 { 512 qemu_put_byte(f, v >> 24); 513 qemu_put_byte(f, v >> 16); 514 qemu_put_byte(f, v >> 8); 515 qemu_put_byte(f, v); 516 } 517 518 void qemu_put_be64(QEMUFile *f, uint64_t v) 519 { 520 qemu_put_be32(f, v >> 32); 521 qemu_put_be32(f, v); 522 } 523 524 unsigned int qemu_get_be16(QEMUFile *f) 525 { 526 unsigned int v; 527 v = qemu_get_byte(f) << 8; 528 v |= qemu_get_byte(f); 529 return v; 530 } 531 532 unsigned int qemu_get_be32(QEMUFile *f) 533 { 534 unsigned int v; 535 v = (unsigned int)qemu_get_byte(f) << 24; 536 v |= qemu_get_byte(f) << 16; 537 v |= qemu_get_byte(f) << 8; 538 v |= qemu_get_byte(f); 539 return v; 540 } 541 542 uint64_t qemu_get_be64(QEMUFile *f) 543 { 544 uint64_t v; 545 v = (uint64_t)qemu_get_be32(f) << 32; 546 v |= qemu_get_be32(f); 547 return v; 548 } 549