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/osdep.h" 25 #include <zlib.h> 26 #include "qemu-common.h" 27 #include "qemu/error-report.h" 28 #include "qemu/iov.h" 29 #include "qemu/sockets.h" 30 #include "qemu/coroutine.h" 31 #include "migration.h" 32 #include "qemu-file.h" 33 #include "trace.h" 34 35 #define IO_BUF_SIZE 32768 36 #define MAX_IOV_SIZE MIN(IOV_MAX, 64) 37 38 struct QEMUFile { 39 const QEMUFileOps *ops; 40 const QEMUFileHooks *hooks; 41 void *opaque; 42 43 int64_t bytes_xfer; 44 int64_t xfer_limit; 45 46 int64_t pos; /* start of buffer when writing, end of buffer 47 when reading */ 48 int buf_index; 49 int buf_size; /* 0 when writing */ 50 uint8_t buf[IO_BUF_SIZE]; 51 52 DECLARE_BITMAP(may_free, MAX_IOV_SIZE); 53 struct iovec iov[MAX_IOV_SIZE]; 54 unsigned int iovcnt; 55 56 int last_error; 57 }; 58 59 /* 60 * Stop a file from being read/written - not all backing files can do this 61 * typically only sockets can. 62 */ 63 int qemu_file_shutdown(QEMUFile *f) 64 { 65 if (!f->ops->shut_down) { 66 return -ENOSYS; 67 } 68 return f->ops->shut_down(f->opaque, true, true); 69 } 70 71 /* 72 * Result: QEMUFile* for a 'return path' for comms in the opposite direction 73 * NULL if not available 74 */ 75 QEMUFile *qemu_file_get_return_path(QEMUFile *f) 76 { 77 if (!f->ops->get_return_path) { 78 return NULL; 79 } 80 return f->ops->get_return_path(f->opaque); 81 } 82 83 bool qemu_file_mode_is_not_valid(const char *mode) 84 { 85 if (mode == NULL || 86 (mode[0] != 'r' && mode[0] != 'w') || 87 mode[1] != 'b' || mode[2] != 0) { 88 fprintf(stderr, "qemu_fopen: Argument validity check failed\n"); 89 return true; 90 } 91 92 return false; 93 } 94 95 QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops) 96 { 97 QEMUFile *f; 98 99 f = g_new0(QEMUFile, 1); 100 101 f->opaque = opaque; 102 f->ops = ops; 103 return f; 104 } 105 106 107 void qemu_file_set_hooks(QEMUFile *f, const QEMUFileHooks *hooks) 108 { 109 f->hooks = hooks; 110 } 111 112 /* 113 * Get last error for stream f 114 * 115 * Return negative error value if there has been an error on previous 116 * operations, return 0 if no error happened. 117 * 118 */ 119 int qemu_file_get_error(QEMUFile *f) 120 { 121 return f->last_error; 122 } 123 124 void qemu_file_set_error(QEMUFile *f, int ret) 125 { 126 if (f->last_error == 0) { 127 f->last_error = ret; 128 } 129 } 130 131 bool qemu_file_is_writable(QEMUFile *f) 132 { 133 return f->ops->writev_buffer; 134 } 135 136 static void qemu_iovec_release_ram(QEMUFile *f) 137 { 138 struct iovec iov; 139 unsigned long idx; 140 141 /* Find and release all the contiguous memory ranges marked as may_free. */ 142 idx = find_next_bit(f->may_free, f->iovcnt, 0); 143 if (idx >= f->iovcnt) { 144 return; 145 } 146 iov = f->iov[idx]; 147 148 /* The madvise() in the loop is called for iov within a continuous range and 149 * then reinitialize the iov. And in the end, madvise() is called for the 150 * last iov. 151 */ 152 while ((idx = find_next_bit(f->may_free, f->iovcnt, idx + 1)) < f->iovcnt) { 153 /* check for adjacent buffer and coalesce them */ 154 if (iov.iov_base + iov.iov_len == f->iov[idx].iov_base) { 155 iov.iov_len += f->iov[idx].iov_len; 156 continue; 157 } 158 if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < 0) { 159 error_report("migrate: madvise DONTNEED failed %p %zd: %s", 160 iov.iov_base, iov.iov_len, strerror(errno)); 161 } 162 iov = f->iov[idx]; 163 } 164 if (qemu_madvise(iov.iov_base, iov.iov_len, QEMU_MADV_DONTNEED) < 0) { 165 error_report("migrate: madvise DONTNEED failed %p %zd: %s", 166 iov.iov_base, iov.iov_len, strerror(errno)); 167 } 168 memset(f->may_free, 0, sizeof(f->may_free)); 169 } 170 171 /** 172 * Flushes QEMUFile buffer 173 * 174 * If there is writev_buffer QEMUFileOps it uses it otherwise uses 175 * put_buffer ops. This will flush all pending data. If data was 176 * only partially flushed, it will set an error state. 177 */ 178 void qemu_fflush(QEMUFile *f) 179 { 180 ssize_t ret = 0; 181 ssize_t expect = 0; 182 183 if (!qemu_file_is_writable(f)) { 184 return; 185 } 186 187 if (f->iovcnt > 0) { 188 expect = iov_size(f->iov, f->iovcnt); 189 ret = f->ops->writev_buffer(f->opaque, f->iov, f->iovcnt, f->pos); 190 191 qemu_iovec_release_ram(f); 192 } 193 194 if (ret >= 0) { 195 f->pos += ret; 196 } 197 /* We expect the QEMUFile write impl to send the full 198 * data set we requested, so sanity check that. 199 */ 200 if (ret != expect) { 201 qemu_file_set_error(f, ret < 0 ? ret : -EIO); 202 } 203 f->buf_index = 0; 204 f->iovcnt = 0; 205 } 206 207 void ram_control_before_iterate(QEMUFile *f, uint64_t flags) 208 { 209 int ret = 0; 210 211 if (f->hooks && f->hooks->before_ram_iterate) { 212 ret = f->hooks->before_ram_iterate(f, f->opaque, flags, NULL); 213 if (ret < 0) { 214 qemu_file_set_error(f, ret); 215 } 216 } 217 } 218 219 void ram_control_after_iterate(QEMUFile *f, uint64_t flags) 220 { 221 int ret = 0; 222 223 if (f->hooks && f->hooks->after_ram_iterate) { 224 ret = f->hooks->after_ram_iterate(f, f->opaque, flags, NULL); 225 if (ret < 0) { 226 qemu_file_set_error(f, ret); 227 } 228 } 229 } 230 231 void ram_control_load_hook(QEMUFile *f, uint64_t flags, void *data) 232 { 233 int ret = -EINVAL; 234 235 if (f->hooks && f->hooks->hook_ram_load) { 236 ret = f->hooks->hook_ram_load(f, f->opaque, flags, data); 237 if (ret < 0) { 238 qemu_file_set_error(f, ret); 239 } 240 } else { 241 /* 242 * Hook is a hook specifically requested by the source sending a flag 243 * that expects there to be a hook on the destination. 244 */ 245 if (flags == RAM_CONTROL_HOOK) { 246 qemu_file_set_error(f, ret); 247 } 248 } 249 } 250 251 size_t ram_control_save_page(QEMUFile *f, ram_addr_t block_offset, 252 ram_addr_t offset, size_t size, 253 uint64_t *bytes_sent) 254 { 255 if (f->hooks && f->hooks->save_page) { 256 int ret = f->hooks->save_page(f, f->opaque, block_offset, 257 offset, size, bytes_sent); 258 259 if (ret != RAM_SAVE_CONTROL_DELAYED) { 260 if (bytes_sent && *bytes_sent > 0) { 261 qemu_update_position(f, *bytes_sent); 262 } else if (ret < 0) { 263 qemu_file_set_error(f, ret); 264 } 265 } 266 267 return ret; 268 } 269 270 return RAM_SAVE_CONTROL_NOT_SUPP; 271 } 272 273 /* 274 * Attempt to fill the buffer from the underlying file 275 * Returns the number of bytes read, or negative value for an error. 276 * 277 * Note that it can return a partially full buffer even in a not error/not EOF 278 * case if the underlying file descriptor gives a short read, and that can 279 * happen even on a blocking fd. 280 */ 281 static ssize_t qemu_fill_buffer(QEMUFile *f) 282 { 283 int len; 284 int pending; 285 286 assert(!qemu_file_is_writable(f)); 287 288 pending = f->buf_size - f->buf_index; 289 if (pending > 0) { 290 memmove(f->buf, f->buf + f->buf_index, pending); 291 } 292 f->buf_index = 0; 293 f->buf_size = pending; 294 295 len = f->ops->get_buffer(f->opaque, f->buf + pending, f->pos, 296 IO_BUF_SIZE - pending); 297 if (len > 0) { 298 f->buf_size += len; 299 f->pos += len; 300 } else if (len == 0) { 301 qemu_file_set_error(f, -EIO); 302 } else if (len != -EAGAIN) { 303 qemu_file_set_error(f, len); 304 } 305 306 return len; 307 } 308 309 void qemu_update_position(QEMUFile *f, size_t size) 310 { 311 f->pos += size; 312 } 313 314 /** Closes the file 315 * 316 * Returns negative error value if any error happened on previous operations or 317 * while closing the file. Returns 0 or positive number on success. 318 * 319 * The meaning of return value on success depends on the specific backend 320 * being used. 321 */ 322 int qemu_fclose(QEMUFile *f) 323 { 324 int ret; 325 qemu_fflush(f); 326 ret = qemu_file_get_error(f); 327 328 if (f->ops->close) { 329 int ret2 = f->ops->close(f->opaque); 330 if (ret >= 0) { 331 ret = ret2; 332 } 333 } 334 /* If any error was spotted before closing, we should report it 335 * instead of the close() return value. 336 */ 337 if (f->last_error) { 338 ret = f->last_error; 339 } 340 g_free(f); 341 trace_qemu_file_fclose(); 342 return ret; 343 } 344 345 static void add_to_iovec(QEMUFile *f, const uint8_t *buf, size_t size, 346 bool may_free) 347 { 348 /* check for adjacent buffer and coalesce them */ 349 if (f->iovcnt > 0 && buf == f->iov[f->iovcnt - 1].iov_base + 350 f->iov[f->iovcnt - 1].iov_len && 351 may_free == test_bit(f->iovcnt - 1, f->may_free)) 352 { 353 f->iov[f->iovcnt - 1].iov_len += size; 354 } else { 355 if (may_free) { 356 set_bit(f->iovcnt, f->may_free); 357 } 358 f->iov[f->iovcnt].iov_base = (uint8_t *)buf; 359 f->iov[f->iovcnt++].iov_len = size; 360 } 361 362 if (f->iovcnt >= MAX_IOV_SIZE) { 363 qemu_fflush(f); 364 } 365 } 366 367 void qemu_put_buffer_async(QEMUFile *f, const uint8_t *buf, size_t size, 368 bool may_free) 369 { 370 if (f->last_error) { 371 return; 372 } 373 374 f->bytes_xfer += size; 375 add_to_iovec(f, buf, size, may_free); 376 } 377 378 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, size_t size) 379 { 380 size_t l; 381 382 if (f->last_error) { 383 return; 384 } 385 386 while (size > 0) { 387 l = IO_BUF_SIZE - f->buf_index; 388 if (l > size) { 389 l = size; 390 } 391 memcpy(f->buf + f->buf_index, buf, l); 392 f->bytes_xfer += l; 393 add_to_iovec(f, f->buf + f->buf_index, l, false); 394 f->buf_index += l; 395 if (f->buf_index == IO_BUF_SIZE) { 396 qemu_fflush(f); 397 } 398 if (qemu_file_get_error(f)) { 399 break; 400 } 401 buf += l; 402 size -= l; 403 } 404 } 405 406 void qemu_put_byte(QEMUFile *f, int v) 407 { 408 if (f->last_error) { 409 return; 410 } 411 412 f->buf[f->buf_index] = v; 413 f->bytes_xfer++; 414 add_to_iovec(f, f->buf + f->buf_index, 1, false); 415 f->buf_index++; 416 if (f->buf_index == IO_BUF_SIZE) { 417 qemu_fflush(f); 418 } 419 } 420 421 void qemu_file_skip(QEMUFile *f, int size) 422 { 423 if (f->buf_index + size <= f->buf_size) { 424 f->buf_index += size; 425 } 426 } 427 428 /* 429 * Read 'size' bytes from file (at 'offset') without moving the 430 * pointer and set 'buf' to point to that data. 431 * 432 * It will return size bytes unless there was an error, in which case it will 433 * return as many as it managed to read (assuming blocking fd's which 434 * all current QEMUFile are) 435 */ 436 size_t qemu_peek_buffer(QEMUFile *f, uint8_t **buf, size_t size, size_t offset) 437 { 438 ssize_t pending; 439 size_t index; 440 441 assert(!qemu_file_is_writable(f)); 442 assert(offset < IO_BUF_SIZE); 443 assert(size <= IO_BUF_SIZE - offset); 444 445 /* The 1st byte to read from */ 446 index = f->buf_index + offset; 447 /* The number of available bytes starting at index */ 448 pending = f->buf_size - index; 449 450 /* 451 * qemu_fill_buffer might return just a few bytes, even when there isn't 452 * an error, so loop collecting them until we get enough. 453 */ 454 while (pending < size) { 455 int received = qemu_fill_buffer(f); 456 457 if (received <= 0) { 458 break; 459 } 460 461 index = f->buf_index + offset; 462 pending = f->buf_size - index; 463 } 464 465 if (pending <= 0) { 466 return 0; 467 } 468 if (size > pending) { 469 size = pending; 470 } 471 472 *buf = f->buf + index; 473 return size; 474 } 475 476 /* 477 * Read 'size' bytes of data from the file into buf. 478 * 'size' can be larger than the internal buffer. 479 * 480 * It will return size bytes unless there was an error, in which case it will 481 * return as many as it managed to read (assuming blocking fd's which 482 * all current QEMUFile are) 483 */ 484 size_t qemu_get_buffer(QEMUFile *f, uint8_t *buf, size_t size) 485 { 486 size_t pending = size; 487 size_t done = 0; 488 489 while (pending > 0) { 490 size_t res; 491 uint8_t *src; 492 493 res = qemu_peek_buffer(f, &src, MIN(pending, IO_BUF_SIZE), 0); 494 if (res == 0) { 495 return done; 496 } 497 memcpy(buf, src, res); 498 qemu_file_skip(f, res); 499 buf += res; 500 pending -= res; 501 done += res; 502 } 503 return done; 504 } 505 506 /* 507 * Read 'size' bytes of data from the file. 508 * 'size' can be larger than the internal buffer. 509 * 510 * The data: 511 * may be held on an internal buffer (in which case *buf is updated 512 * to point to it) that is valid until the next qemu_file operation. 513 * OR 514 * will be copied to the *buf that was passed in. 515 * 516 * The code tries to avoid the copy if possible. 517 * 518 * It will return size bytes unless there was an error, in which case it will 519 * return as many as it managed to read (assuming blocking fd's which 520 * all current QEMUFile are) 521 * 522 * Note: Since **buf may get changed, the caller should take care to 523 * keep a pointer to the original buffer if it needs to deallocate it. 524 */ 525 size_t qemu_get_buffer_in_place(QEMUFile *f, uint8_t **buf, size_t size) 526 { 527 if (size < IO_BUF_SIZE) { 528 size_t res; 529 uint8_t *src; 530 531 res = qemu_peek_buffer(f, &src, size, 0); 532 533 if (res == size) { 534 qemu_file_skip(f, res); 535 *buf = src; 536 return res; 537 } 538 } 539 540 return qemu_get_buffer(f, *buf, size); 541 } 542 543 /* 544 * Peeks a single byte from the buffer; this isn't guaranteed to work if 545 * offset leaves a gap after the previous read/peeked data. 546 */ 547 int qemu_peek_byte(QEMUFile *f, int offset) 548 { 549 int index = f->buf_index + offset; 550 551 assert(!qemu_file_is_writable(f)); 552 assert(offset < IO_BUF_SIZE); 553 554 if (index >= f->buf_size) { 555 qemu_fill_buffer(f); 556 index = f->buf_index + offset; 557 if (index >= f->buf_size) { 558 return 0; 559 } 560 } 561 return f->buf[index]; 562 } 563 564 int qemu_get_byte(QEMUFile *f) 565 { 566 int result; 567 568 result = qemu_peek_byte(f, 0); 569 qemu_file_skip(f, 1); 570 return result; 571 } 572 573 int64_t qemu_ftell_fast(QEMUFile *f) 574 { 575 int64_t ret = f->pos; 576 int i; 577 578 for (i = 0; i < f->iovcnt; i++) { 579 ret += f->iov[i].iov_len; 580 } 581 582 return ret; 583 } 584 585 int64_t qemu_ftell(QEMUFile *f) 586 { 587 qemu_fflush(f); 588 return f->pos; 589 } 590 591 int qemu_file_rate_limit(QEMUFile *f) 592 { 593 if (qemu_file_get_error(f)) { 594 return 1; 595 } 596 if (f->xfer_limit > 0 && f->bytes_xfer > f->xfer_limit) { 597 return 1; 598 } 599 return 0; 600 } 601 602 int64_t qemu_file_get_rate_limit(QEMUFile *f) 603 { 604 return f->xfer_limit; 605 } 606 607 void qemu_file_set_rate_limit(QEMUFile *f, int64_t limit) 608 { 609 f->xfer_limit = limit; 610 } 611 612 void qemu_file_reset_rate_limit(QEMUFile *f) 613 { 614 f->bytes_xfer = 0; 615 } 616 617 void qemu_put_be16(QEMUFile *f, unsigned int v) 618 { 619 qemu_put_byte(f, v >> 8); 620 qemu_put_byte(f, v); 621 } 622 623 void qemu_put_be32(QEMUFile *f, unsigned int v) 624 { 625 qemu_put_byte(f, v >> 24); 626 qemu_put_byte(f, v >> 16); 627 qemu_put_byte(f, v >> 8); 628 qemu_put_byte(f, v); 629 } 630 631 void qemu_put_be64(QEMUFile *f, uint64_t v) 632 { 633 qemu_put_be32(f, v >> 32); 634 qemu_put_be32(f, v); 635 } 636 637 unsigned int qemu_get_be16(QEMUFile *f) 638 { 639 unsigned int v; 640 v = qemu_get_byte(f) << 8; 641 v |= qemu_get_byte(f); 642 return v; 643 } 644 645 unsigned int qemu_get_be32(QEMUFile *f) 646 { 647 unsigned int v; 648 v = (unsigned int)qemu_get_byte(f) << 24; 649 v |= qemu_get_byte(f) << 16; 650 v |= qemu_get_byte(f) << 8; 651 v |= qemu_get_byte(f); 652 return v; 653 } 654 655 uint64_t qemu_get_be64(QEMUFile *f) 656 { 657 uint64_t v; 658 v = (uint64_t)qemu_get_be32(f) << 32; 659 v |= qemu_get_be32(f); 660 return v; 661 } 662 663 /* Compress size bytes of data start at p with specific compression 664 * level and store the compressed data to the buffer of f. 665 * 666 * When f is not writable, return -1 if f has no space to save the 667 * compressed data. 668 * When f is wirtable and it has no space to save the compressed data, 669 * do fflush first, if f still has no space to save the compressed 670 * data, return -1. 671 */ 672 673 ssize_t qemu_put_compression_data(QEMUFile *f, const uint8_t *p, size_t size, 674 int level) 675 { 676 ssize_t blen = IO_BUF_SIZE - f->buf_index - sizeof(int32_t); 677 678 if (blen < compressBound(size)) { 679 if (!qemu_file_is_writable(f)) { 680 return -1; 681 } 682 qemu_fflush(f); 683 blen = IO_BUF_SIZE - sizeof(int32_t); 684 if (blen < compressBound(size)) { 685 return -1; 686 } 687 } 688 if (compress2(f->buf + f->buf_index + sizeof(int32_t), (uLongf *)&blen, 689 (Bytef *)p, size, level) != Z_OK) { 690 error_report("Compress Failed!"); 691 return 0; 692 } 693 qemu_put_be32(f, blen); 694 if (f->ops->writev_buffer) { 695 add_to_iovec(f, f->buf + f->buf_index, blen, false); 696 } 697 f->buf_index += blen; 698 if (f->buf_index == IO_BUF_SIZE) { 699 qemu_fflush(f); 700 } 701 return blen + sizeof(int32_t); 702 } 703 704 /* Put the data in the buffer of f_src to the buffer of f_des, and 705 * then reset the buf_index of f_src to 0. 706 */ 707 708 int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_src) 709 { 710 int len = 0; 711 712 if (f_src->buf_index > 0) { 713 len = f_src->buf_index; 714 qemu_put_buffer(f_des, f_src->buf, f_src->buf_index); 715 f_src->buf_index = 0; 716 f_src->iovcnt = 0; 717 } 718 return len; 719 } 720 721 /* 722 * Get a string whose length is determined by a single preceding byte 723 * A preallocated 256 byte buffer must be passed in. 724 * Returns: len on success and a 0 terminated string in the buffer 725 * else 0 726 * (Note a 0 length string will return 0 either way) 727 */ 728 size_t qemu_get_counted_string(QEMUFile *f, char buf[256]) 729 { 730 size_t len = qemu_get_byte(f); 731 size_t res = qemu_get_buffer(f, (uint8_t *)buf, len); 732 733 buf[res] = 0; 734 735 return res == len ? res : 0; 736 } 737 738 /* 739 * Set the blocking state of the QEMUFile. 740 * Note: On some transports the OS only keeps a single blocking state for 741 * both directions, and thus changing the blocking on the main 742 * QEMUFile can also affect the return path. 743 */ 744 void qemu_file_set_blocking(QEMUFile *f, bool block) 745 { 746 if (f->ops->set_blocking) { 747 f->ops->set_blocking(f->opaque, block); 748 } 749 } 750