]> git.proxmox.com Git - qemu.git/blob - savevm.c
Store the data to send also in iovec
[qemu.git] / savevm.c
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
25 #include "config-host.h"
26 #include "qemu-common.h"
27 #include "hw/hw.h"
28 #include "hw/qdev.h"
29 #include "net/net.h"
30 #include "monitor/monitor.h"
31 #include "sysemu/sysemu.h"
32 #include "qemu/timer.h"
33 #include "audio/audio.h"
34 #include "migration/migration.h"
35 #include "qemu/sockets.h"
36 #include "qemu/queue.h"
37 #include "sysemu/cpus.h"
38 #include "exec/memory.h"
39 #include "qmp-commands.h"
40 #include "trace.h"
41 #include "qemu/bitops.h"
42 #include "qemu/iov.h"
43
44 #define SELF_ANNOUNCE_ROUNDS 5
45
46 #ifndef ETH_P_RARP
47 #define ETH_P_RARP 0x8035
48 #endif
49 #define ARP_HTYPE_ETH 0x0001
50 #define ARP_PTYPE_IP 0x0800
51 #define ARP_OP_REQUEST_REV 0x3
52
53 static int announce_self_create(uint8_t *buf,
54 uint8_t *mac_addr)
55 {
56 /* Ethernet header. */
57 memset(buf, 0xff, 6); /* destination MAC addr */
58 memcpy(buf + 6, mac_addr, 6); /* source MAC addr */
59 *(uint16_t *)(buf + 12) = htons(ETH_P_RARP); /* ethertype */
60
61 /* RARP header. */
62 *(uint16_t *)(buf + 14) = htons(ARP_HTYPE_ETH); /* hardware addr space */
63 *(uint16_t *)(buf + 16) = htons(ARP_PTYPE_IP); /* protocol addr space */
64 *(buf + 18) = 6; /* hardware addr length (ethernet) */
65 *(buf + 19) = 4; /* protocol addr length (IPv4) */
66 *(uint16_t *)(buf + 20) = htons(ARP_OP_REQUEST_REV); /* opcode */
67 memcpy(buf + 22, mac_addr, 6); /* source hw addr */
68 memset(buf + 28, 0x00, 4); /* source protocol addr */
69 memcpy(buf + 32, mac_addr, 6); /* target hw addr */
70 memset(buf + 38, 0x00, 4); /* target protocol addr */
71
72 /* Padding to get up to 60 bytes (ethernet min packet size, minus FCS). */
73 memset(buf + 42, 0x00, 18);
74
75 return 60; /* len (FCS will be added by hardware) */
76 }
77
78 static void qemu_announce_self_iter(NICState *nic, void *opaque)
79 {
80 uint8_t buf[60];
81 int len;
82
83 len = announce_self_create(buf, nic->conf->macaddr.a);
84
85 qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
86 }
87
88
89 static void qemu_announce_self_once(void *opaque)
90 {
91 static int count = SELF_ANNOUNCE_ROUNDS;
92 QEMUTimer *timer = *(QEMUTimer **)opaque;
93
94 qemu_foreach_nic(qemu_announce_self_iter, NULL);
95
96 if (--count) {
97 /* delay 50ms, 150ms, 250ms, ... */
98 qemu_mod_timer(timer, qemu_get_clock_ms(rt_clock) +
99 50 + (SELF_ANNOUNCE_ROUNDS - count - 1) * 100);
100 } else {
101 qemu_del_timer(timer);
102 qemu_free_timer(timer);
103 }
104 }
105
106 void qemu_announce_self(void)
107 {
108 static QEMUTimer *timer;
109 timer = qemu_new_timer_ms(rt_clock, qemu_announce_self_once, &timer);
110 qemu_announce_self_once(&timer);
111 }
112
113 /***********************************************************/
114 /* savevm/loadvm support */
115
116 #define IO_BUF_SIZE 32768
117 #define MAX_IOV_SIZE MIN(IOV_MAX, 64)
118
119 struct QEMUFile {
120 const QEMUFileOps *ops;
121 void *opaque;
122 int is_write;
123
124 int64_t bytes_xfer;
125 int64_t xfer_limit;
126
127 int64_t pos; /* start of buffer when writing, end of buffer
128 when reading */
129 int buf_index;
130 int buf_size; /* 0 when writing */
131 uint8_t buf[IO_BUF_SIZE];
132
133 struct iovec iov[MAX_IOV_SIZE];
134 unsigned int iovcnt;
135
136 int last_error;
137 };
138
139 typedef struct QEMUFileStdio
140 {
141 FILE *stdio_file;
142 QEMUFile *file;
143 } QEMUFileStdio;
144
145 typedef struct QEMUFileSocket
146 {
147 int fd;
148 QEMUFile *file;
149 } QEMUFileSocket;
150
151 typedef struct {
152 Coroutine *co;
153 int fd;
154 } FDYieldUntilData;
155
156 static void fd_coroutine_enter(void *opaque)
157 {
158 FDYieldUntilData *data = opaque;
159 qemu_set_fd_handler(data->fd, NULL, NULL, NULL);
160 qemu_coroutine_enter(data->co, NULL);
161 }
162
163 /**
164 * Yield until a file descriptor becomes readable
165 *
166 * Note that this function clobbers the handlers for the file descriptor.
167 */
168 static void coroutine_fn yield_until_fd_readable(int fd)
169 {
170 FDYieldUntilData data;
171
172 assert(qemu_in_coroutine());
173 data.co = qemu_coroutine_self();
174 data.fd = fd;
175 qemu_set_fd_handler(fd, fd_coroutine_enter, NULL, &data);
176 qemu_coroutine_yield();
177 }
178
179 static ssize_t socket_writev_buffer(void *opaque, struct iovec *iov, int iovcnt)
180 {
181 QEMUFileSocket *s = opaque;
182 ssize_t len;
183 ssize_t size = iov_size(iov, iovcnt);
184
185 len = iov_send(s->fd, iov, iovcnt, 0, size);
186 if (len < size) {
187 len = -socket_error();
188 }
189 return len;
190 }
191
192 static int socket_get_fd(void *opaque)
193 {
194 QEMUFileSocket *s = opaque;
195
196 return s->fd;
197 }
198
199 static int socket_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
200 {
201 QEMUFileSocket *s = opaque;
202 ssize_t len;
203
204 for (;;) {
205 len = qemu_recv(s->fd, buf, size, 0);
206 if (len != -1) {
207 break;
208 }
209 if (socket_error() == EAGAIN) {
210 yield_until_fd_readable(s->fd);
211 } else if (socket_error() != EINTR) {
212 break;
213 }
214 }
215
216 if (len == -1) {
217 len = -socket_error();
218 }
219 return len;
220 }
221
222 static int socket_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
223 {
224 QEMUFileSocket *s = opaque;
225 ssize_t len;
226
227 len = qemu_send_full(s->fd, buf, size, 0);
228 if (len < size) {
229 len = -socket_error();
230 }
231 return len;
232 }
233
234 static int socket_close(void *opaque)
235 {
236 QEMUFileSocket *s = opaque;
237 closesocket(s->fd);
238 g_free(s);
239 return 0;
240 }
241
242 static int stdio_get_fd(void *opaque)
243 {
244 QEMUFileStdio *s = opaque;
245
246 return fileno(s->stdio_file);
247 }
248
249 static int stdio_put_buffer(void *opaque, const uint8_t *buf, int64_t pos, int size)
250 {
251 QEMUFileStdio *s = opaque;
252 return fwrite(buf, 1, size, s->stdio_file);
253 }
254
255 static int stdio_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
256 {
257 QEMUFileStdio *s = opaque;
258 FILE *fp = s->stdio_file;
259 int bytes;
260
261 for (;;) {
262 clearerr(fp);
263 bytes = fread(buf, 1, size, fp);
264 if (bytes != 0 || !ferror(fp)) {
265 break;
266 }
267 if (errno == EAGAIN) {
268 yield_until_fd_readable(fileno(fp));
269 } else if (errno != EINTR) {
270 break;
271 }
272 }
273 return bytes;
274 }
275
276 static int stdio_pclose(void *opaque)
277 {
278 QEMUFileStdio *s = opaque;
279 int ret;
280 ret = pclose(s->stdio_file);
281 if (ret == -1) {
282 ret = -errno;
283 } else if (!WIFEXITED(ret) || WEXITSTATUS(ret) != 0) {
284 /* close succeeded, but non-zero exit code: */
285 ret = -EIO; /* fake errno value */
286 }
287 g_free(s);
288 return ret;
289 }
290
291 static int stdio_fclose(void *opaque)
292 {
293 QEMUFileStdio *s = opaque;
294 int ret = 0;
295
296 if (s->file->ops->put_buffer) {
297 int fd = fileno(s->stdio_file);
298 struct stat st;
299
300 ret = fstat(fd, &st);
301 if (ret == 0 && S_ISREG(st.st_mode)) {
302 /*
303 * If the file handle is a regular file make sure the
304 * data is flushed to disk before signaling success.
305 */
306 ret = fsync(fd);
307 if (ret != 0) {
308 ret = -errno;
309 return ret;
310 }
311 }
312 }
313 if (fclose(s->stdio_file) == EOF) {
314 ret = -errno;
315 }
316 g_free(s);
317 return ret;
318 }
319
320 static const QEMUFileOps stdio_pipe_read_ops = {
321 .get_fd = stdio_get_fd,
322 .get_buffer = stdio_get_buffer,
323 .close = stdio_pclose
324 };
325
326 static const QEMUFileOps stdio_pipe_write_ops = {
327 .get_fd = stdio_get_fd,
328 .put_buffer = stdio_put_buffer,
329 .close = stdio_pclose
330 };
331
332 QEMUFile *qemu_popen_cmd(const char *command, const char *mode)
333 {
334 FILE *stdio_file;
335 QEMUFileStdio *s;
336
337 stdio_file = popen(command, mode);
338 if (stdio_file == NULL) {
339 return NULL;
340 }
341
342 if (mode == NULL || (mode[0] != 'r' && mode[0] != 'w') || mode[1] != 0) {
343 fprintf(stderr, "qemu_popen: Argument validity check failed\n");
344 return NULL;
345 }
346
347 s = g_malloc0(sizeof(QEMUFileStdio));
348
349 s->stdio_file = stdio_file;
350
351 if(mode[0] == 'r') {
352 s->file = qemu_fopen_ops(s, &stdio_pipe_read_ops);
353 } else {
354 s->file = qemu_fopen_ops(s, &stdio_pipe_write_ops);
355 }
356 return s->file;
357 }
358
359 static const QEMUFileOps stdio_file_read_ops = {
360 .get_fd = stdio_get_fd,
361 .get_buffer = stdio_get_buffer,
362 .close = stdio_fclose
363 };
364
365 static const QEMUFileOps stdio_file_write_ops = {
366 .get_fd = stdio_get_fd,
367 .put_buffer = stdio_put_buffer,
368 .close = stdio_fclose
369 };
370
371 QEMUFile *qemu_fdopen(int fd, const char *mode)
372 {
373 QEMUFileStdio *s;
374
375 if (mode == NULL ||
376 (mode[0] != 'r' && mode[0] != 'w') ||
377 mode[1] != 'b' || mode[2] != 0) {
378 fprintf(stderr, "qemu_fdopen: Argument validity check failed\n");
379 return NULL;
380 }
381
382 s = g_malloc0(sizeof(QEMUFileStdio));
383 s->stdio_file = fdopen(fd, mode);
384 if (!s->stdio_file)
385 goto fail;
386
387 if(mode[0] == 'r') {
388 s->file = qemu_fopen_ops(s, &stdio_file_read_ops);
389 } else {
390 s->file = qemu_fopen_ops(s, &stdio_file_write_ops);
391 }
392 return s->file;
393
394 fail:
395 g_free(s);
396 return NULL;
397 }
398
399 static const QEMUFileOps socket_read_ops = {
400 .get_fd = socket_get_fd,
401 .get_buffer = socket_get_buffer,
402 .close = socket_close
403 };
404
405 static const QEMUFileOps socket_write_ops = {
406 .get_fd = socket_get_fd,
407 .put_buffer = socket_put_buffer,
408 .writev_buffer = socket_writev_buffer,
409 .close = socket_close
410 };
411
412 QEMUFile *qemu_fopen_socket(int fd, const char *mode)
413 {
414 QEMUFileSocket *s = g_malloc0(sizeof(QEMUFileSocket));
415
416 if (mode == NULL ||
417 (mode[0] != 'r' && mode[0] != 'w') ||
418 mode[1] != 'b' || mode[2] != 0) {
419 fprintf(stderr, "qemu_fopen: Argument validity check failed\n");
420 return NULL;
421 }
422
423 s->fd = fd;
424 if (mode[0] == 'w') {
425 socket_set_block(s->fd);
426 s->file = qemu_fopen_ops(s, &socket_write_ops);
427 } else {
428 s->file = qemu_fopen_ops(s, &socket_read_ops);
429 }
430 return s->file;
431 }
432
433 QEMUFile *qemu_fopen(const char *filename, const char *mode)
434 {
435 QEMUFileStdio *s;
436
437 if (mode == NULL ||
438 (mode[0] != 'r' && mode[0] != 'w') ||
439 mode[1] != 'b' || mode[2] != 0) {
440 fprintf(stderr, "qemu_fopen: Argument validity check failed\n");
441 return NULL;
442 }
443
444 s = g_malloc0(sizeof(QEMUFileStdio));
445
446 s->stdio_file = fopen(filename, mode);
447 if (!s->stdio_file)
448 goto fail;
449
450 if(mode[0] == 'w') {
451 s->file = qemu_fopen_ops(s, &stdio_file_write_ops);
452 } else {
453 s->file = qemu_fopen_ops(s, &stdio_file_read_ops);
454 }
455 return s->file;
456 fail:
457 g_free(s);
458 return NULL;
459 }
460
461 static int block_put_buffer(void *opaque, const uint8_t *buf,
462 int64_t pos, int size)
463 {
464 bdrv_save_vmstate(opaque, buf, pos, size);
465 return size;
466 }
467
468 static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
469 {
470 return bdrv_load_vmstate(opaque, buf, pos, size);
471 }
472
473 static int bdrv_fclose(void *opaque)
474 {
475 return bdrv_flush(opaque);
476 }
477
478 static const QEMUFileOps bdrv_read_ops = {
479 .get_buffer = block_get_buffer,
480 .close = bdrv_fclose
481 };
482
483 static const QEMUFileOps bdrv_write_ops = {
484 .put_buffer = block_put_buffer,
485 .close = bdrv_fclose
486 };
487
488 static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
489 {
490 if (is_writable)
491 return qemu_fopen_ops(bs, &bdrv_write_ops);
492 return qemu_fopen_ops(bs, &bdrv_read_ops);
493 }
494
495 QEMUFile *qemu_fopen_ops(void *opaque, const QEMUFileOps *ops)
496 {
497 QEMUFile *f;
498
499 f = g_malloc0(sizeof(QEMUFile));
500
501 f->opaque = opaque;
502 f->ops = ops;
503 f->is_write = 0;
504 return f;
505 }
506
507 int qemu_file_get_error(QEMUFile *f)
508 {
509 return f->last_error;
510 }
511
512 static void qemu_file_set_error(QEMUFile *f, int ret)
513 {
514 if (f->last_error == 0) {
515 f->last_error = ret;
516 }
517 }
518
519 /** Flushes QEMUFile buffer
520 *
521 */
522 static void qemu_fflush(QEMUFile *f)
523 {
524 int ret = 0;
525
526 if (!f->ops->put_buffer) {
527 return;
528 }
529 if (f->is_write && f->buf_index > 0) {
530 ret = f->ops->put_buffer(f->opaque, f->buf, f->pos, f->buf_index);
531 if (ret >= 0) {
532 f->pos += f->buf_index;
533 }
534 f->buf_index = 0;
535 f->iovcnt = 0;
536 }
537 if (ret < 0) {
538 qemu_file_set_error(f, ret);
539 }
540 }
541
542 static void qemu_fill_buffer(QEMUFile *f)
543 {
544 int len;
545 int pending;
546
547 if (!f->ops->get_buffer)
548 return;
549
550 if (f->is_write)
551 abort();
552
553 pending = f->buf_size - f->buf_index;
554 if (pending > 0) {
555 memmove(f->buf, f->buf + f->buf_index, pending);
556 }
557 f->buf_index = 0;
558 f->buf_size = pending;
559
560 len = f->ops->get_buffer(f->opaque, f->buf + pending, f->pos,
561 IO_BUF_SIZE - pending);
562 if (len > 0) {
563 f->buf_size += len;
564 f->pos += len;
565 } else if (len == 0) {
566 qemu_file_set_error(f, -EIO);
567 } else if (len != -EAGAIN)
568 qemu_file_set_error(f, len);
569 }
570
571 int qemu_get_fd(QEMUFile *f)
572 {
573 if (f->ops->get_fd) {
574 return f->ops->get_fd(f->opaque);
575 }
576 return -1;
577 }
578
579 /** Closes the file
580 *
581 * Returns negative error value if any error happened on previous operations or
582 * while closing the file. Returns 0 or positive number on success.
583 *
584 * The meaning of return value on success depends on the specific backend
585 * being used.
586 */
587 int qemu_fclose(QEMUFile *f)
588 {
589 int ret;
590 qemu_fflush(f);
591 ret = qemu_file_get_error(f);
592
593 if (f->ops->close) {
594 int ret2 = f->ops->close(f->opaque);
595 if (ret >= 0) {
596 ret = ret2;
597 }
598 }
599 /* If any error was spotted before closing, we should report it
600 * instead of the close() return value.
601 */
602 if (f->last_error) {
603 ret = f->last_error;
604 }
605 g_free(f);
606 return ret;
607 }
608
609 static void add_to_iovec(QEMUFile *f, const uint8_t *buf, int size)
610 {
611 /* check for adjacent buffer and coalesce them */
612 if (f->iovcnt > 0 && buf == f->iov[f->iovcnt - 1].iov_base +
613 f->iov[f->iovcnt - 1].iov_len) {
614 f->iov[f->iovcnt - 1].iov_len += size;
615 } else {
616 f->iov[f->iovcnt].iov_base = (uint8_t *)buf;
617 f->iov[f->iovcnt++].iov_len = size;
618 }
619 }
620
621 void qemu_put_buffer(QEMUFile *f, const uint8_t *buf, int size)
622 {
623 int l;
624
625 if (f->last_error) {
626 return;
627 }
628
629 if (f->is_write == 0 && f->buf_index > 0) {
630 fprintf(stderr,
631 "Attempted to write to buffer while read buffer is not empty\n");
632 abort();
633 }
634
635 while (size > 0) {
636 l = IO_BUF_SIZE - f->buf_index;
637 if (l > size)
638 l = size;
639 memcpy(f->buf + f->buf_index, buf, l);
640 add_to_iovec(f, f->buf + f->buf_index, l);
641 f->is_write = 1;
642 f->buf_index += l;
643 f->bytes_xfer += l;
644 buf += l;
645 size -= l;
646 if (f->buf_index >= IO_BUF_SIZE || f->iovcnt >= MAX_IOV_SIZE) {
647 qemu_fflush(f);
648 if (qemu_file_get_error(f)) {
649 break;
650 }
651 }
652 }
653 }
654
655 void qemu_put_byte(QEMUFile *f, int v)
656 {
657 if (f->last_error) {
658 return;
659 }
660
661 if (f->is_write == 0 && f->buf_index > 0) {
662 fprintf(stderr,
663 "Attempted to write to buffer while read buffer is not empty\n");
664 abort();
665 }
666
667 f->buf[f->buf_index++] = v;
668 f->is_write = 1;
669 f->bytes_xfer++;
670
671 add_to_iovec(f, f->buf + (f->buf_index - 1), 1);
672
673 if (f->buf_index >= IO_BUF_SIZE || f->iovcnt >= MAX_IOV_SIZE) {
674 qemu_fflush(f);
675 }
676 }
677
678 static void qemu_file_skip(QEMUFile *f, int size)
679 {
680 if (f->buf_index + size <= f->buf_size) {
681 f->buf_index += size;
682 }
683 }
684
685 static int qemu_peek_buffer(QEMUFile *f, uint8_t *buf, int size, size_t offset)
686 {
687 int pending;
688 int index;
689
690 if (f->is_write) {
691 abort();
692 }
693
694 index = f->buf_index + offset;
695 pending = f->buf_size - index;
696 if (pending < size) {
697 qemu_fill_buffer(f);
698 index = f->buf_index + offset;
699 pending = f->buf_size - index;
700 }
701
702 if (pending <= 0) {
703 return 0;
704 }
705 if (size > pending) {
706 size = pending;
707 }
708
709 memcpy(buf, f->buf + index, size);
710 return size;
711 }
712
713 int qemu_get_buffer(QEMUFile *f, uint8_t *buf, int size)
714 {
715 int pending = size;
716 int done = 0;
717
718 while (pending > 0) {
719 int res;
720
721 res = qemu_peek_buffer(f, buf, pending, 0);
722 if (res == 0) {
723 return done;
724 }
725 qemu_file_skip(f, res);
726 buf += res;
727 pending -= res;
728 done += res;
729 }
730 return done;
731 }
732
733 static int qemu_peek_byte(QEMUFile *f, int offset)
734 {
735 int index = f->buf_index + offset;
736
737 if (f->is_write) {
738 abort();
739 }
740
741 if (index >= f->buf_size) {
742 qemu_fill_buffer(f);
743 index = f->buf_index + offset;
744 if (index >= f->buf_size) {
745 return 0;
746 }
747 }
748 return f->buf[index];
749 }
750
751 int qemu_get_byte(QEMUFile *f)
752 {
753 int result;
754
755 result = qemu_peek_byte(f, 0);
756 qemu_file_skip(f, 1);
757 return result;
758 }
759
760 int64_t qemu_ftell(QEMUFile *f)
761 {
762 qemu_fflush(f);
763 return f->pos;
764 }
765
766 int qemu_file_rate_limit(QEMUFile *f)
767 {
768 if (qemu_file_get_error(f)) {
769 return 1;
770 }
771 if (f->xfer_limit > 0 && f->bytes_xfer > f->xfer_limit) {
772 return 1;
773 }
774 return 0;
775 }
776
777 int64_t qemu_file_get_rate_limit(QEMUFile *f)
778 {
779 return f->xfer_limit;
780 }
781
782 void qemu_file_set_rate_limit(QEMUFile *f, int64_t limit)
783 {
784 f->xfer_limit = limit;
785 }
786
787 void qemu_file_reset_rate_limit(QEMUFile *f)
788 {
789 f->bytes_xfer = 0;
790 }
791
792 void qemu_put_be16(QEMUFile *f, unsigned int v)
793 {
794 qemu_put_byte(f, v >> 8);
795 qemu_put_byte(f, v);
796 }
797
798 void qemu_put_be32(QEMUFile *f, unsigned int v)
799 {
800 qemu_put_byte(f, v >> 24);
801 qemu_put_byte(f, v >> 16);
802 qemu_put_byte(f, v >> 8);
803 qemu_put_byte(f, v);
804 }
805
806 void qemu_put_be64(QEMUFile *f, uint64_t v)
807 {
808 qemu_put_be32(f, v >> 32);
809 qemu_put_be32(f, v);
810 }
811
812 unsigned int qemu_get_be16(QEMUFile *f)
813 {
814 unsigned int v;
815 v = qemu_get_byte(f) << 8;
816 v |= qemu_get_byte(f);
817 return v;
818 }
819
820 unsigned int qemu_get_be32(QEMUFile *f)
821 {
822 unsigned int v;
823 v = qemu_get_byte(f) << 24;
824 v |= qemu_get_byte(f) << 16;
825 v |= qemu_get_byte(f) << 8;
826 v |= qemu_get_byte(f);
827 return v;
828 }
829
830 uint64_t qemu_get_be64(QEMUFile *f)
831 {
832 uint64_t v;
833 v = (uint64_t)qemu_get_be32(f) << 32;
834 v |= qemu_get_be32(f);
835 return v;
836 }
837
838
839 /* timer */
840
841 void qemu_put_timer(QEMUFile *f, QEMUTimer *ts)
842 {
843 uint64_t expire_time;
844
845 expire_time = qemu_timer_expire_time_ns(ts);
846 qemu_put_be64(f, expire_time);
847 }
848
849 void qemu_get_timer(QEMUFile *f, QEMUTimer *ts)
850 {
851 uint64_t expire_time;
852
853 expire_time = qemu_get_be64(f);
854 if (expire_time != -1) {
855 qemu_mod_timer_ns(ts, expire_time);
856 } else {
857 qemu_del_timer(ts);
858 }
859 }
860
861
862 /* bool */
863
864 static int get_bool(QEMUFile *f, void *pv, size_t size)
865 {
866 bool *v = pv;
867 *v = qemu_get_byte(f);
868 return 0;
869 }
870
871 static void put_bool(QEMUFile *f, void *pv, size_t size)
872 {
873 bool *v = pv;
874 qemu_put_byte(f, *v);
875 }
876
877 const VMStateInfo vmstate_info_bool = {
878 .name = "bool",
879 .get = get_bool,
880 .put = put_bool,
881 };
882
883 /* 8 bit int */
884
885 static int get_int8(QEMUFile *f, void *pv, size_t size)
886 {
887 int8_t *v = pv;
888 qemu_get_s8s(f, v);
889 return 0;
890 }
891
892 static void put_int8(QEMUFile *f, void *pv, size_t size)
893 {
894 int8_t *v = pv;
895 qemu_put_s8s(f, v);
896 }
897
898 const VMStateInfo vmstate_info_int8 = {
899 .name = "int8",
900 .get = get_int8,
901 .put = put_int8,
902 };
903
904 /* 16 bit int */
905
906 static int get_int16(QEMUFile *f, void *pv, size_t size)
907 {
908 int16_t *v = pv;
909 qemu_get_sbe16s(f, v);
910 return 0;
911 }
912
913 static void put_int16(QEMUFile *f, void *pv, size_t size)
914 {
915 int16_t *v = pv;
916 qemu_put_sbe16s(f, v);
917 }
918
919 const VMStateInfo vmstate_info_int16 = {
920 .name = "int16",
921 .get = get_int16,
922 .put = put_int16,
923 };
924
925 /* 32 bit int */
926
927 static int get_int32(QEMUFile *f, void *pv, size_t size)
928 {
929 int32_t *v = pv;
930 qemu_get_sbe32s(f, v);
931 return 0;
932 }
933
934 static void put_int32(QEMUFile *f, void *pv, size_t size)
935 {
936 int32_t *v = pv;
937 qemu_put_sbe32s(f, v);
938 }
939
940 const VMStateInfo vmstate_info_int32 = {
941 .name = "int32",
942 .get = get_int32,
943 .put = put_int32,
944 };
945
946 /* 32 bit int. See that the received value is the same than the one
947 in the field */
948
949 static int get_int32_equal(QEMUFile *f, void *pv, size_t size)
950 {
951 int32_t *v = pv;
952 int32_t v2;
953 qemu_get_sbe32s(f, &v2);
954
955 if (*v == v2)
956 return 0;
957 return -EINVAL;
958 }
959
960 const VMStateInfo vmstate_info_int32_equal = {
961 .name = "int32 equal",
962 .get = get_int32_equal,
963 .put = put_int32,
964 };
965
966 /* 32 bit int. See that the received value is the less or the same
967 than the one in the field */
968
969 static int get_int32_le(QEMUFile *f, void *pv, size_t size)
970 {
971 int32_t *old = pv;
972 int32_t new;
973 qemu_get_sbe32s(f, &new);
974
975 if (*old <= new)
976 return 0;
977 return -EINVAL;
978 }
979
980 const VMStateInfo vmstate_info_int32_le = {
981 .name = "int32 equal",
982 .get = get_int32_le,
983 .put = put_int32,
984 };
985
986 /* 64 bit int */
987
988 static int get_int64(QEMUFile *f, void *pv, size_t size)
989 {
990 int64_t *v = pv;
991 qemu_get_sbe64s(f, v);
992 return 0;
993 }
994
995 static void put_int64(QEMUFile *f, void *pv, size_t size)
996 {
997 int64_t *v = pv;
998 qemu_put_sbe64s(f, v);
999 }
1000
1001 const VMStateInfo vmstate_info_int64 = {
1002 .name = "int64",
1003 .get = get_int64,
1004 .put = put_int64,
1005 };
1006
1007 /* 8 bit unsigned int */
1008
1009 static int get_uint8(QEMUFile *f, void *pv, size_t size)
1010 {
1011 uint8_t *v = pv;
1012 qemu_get_8s(f, v);
1013 return 0;
1014 }
1015
1016 static void put_uint8(QEMUFile *f, void *pv, size_t size)
1017 {
1018 uint8_t *v = pv;
1019 qemu_put_8s(f, v);
1020 }
1021
1022 const VMStateInfo vmstate_info_uint8 = {
1023 .name = "uint8",
1024 .get = get_uint8,
1025 .put = put_uint8,
1026 };
1027
1028 /* 16 bit unsigned int */
1029
1030 static int get_uint16(QEMUFile *f, void *pv, size_t size)
1031 {
1032 uint16_t *v = pv;
1033 qemu_get_be16s(f, v);
1034 return 0;
1035 }
1036
1037 static void put_uint16(QEMUFile *f, void *pv, size_t size)
1038 {
1039 uint16_t *v = pv;
1040 qemu_put_be16s(f, v);
1041 }
1042
1043 const VMStateInfo vmstate_info_uint16 = {
1044 .name = "uint16",
1045 .get = get_uint16,
1046 .put = put_uint16,
1047 };
1048
1049 /* 32 bit unsigned int */
1050
1051 static int get_uint32(QEMUFile *f, void *pv, size_t size)
1052 {
1053 uint32_t *v = pv;
1054 qemu_get_be32s(f, v);
1055 return 0;
1056 }
1057
1058 static void put_uint32(QEMUFile *f, void *pv, size_t size)
1059 {
1060 uint32_t *v = pv;
1061 qemu_put_be32s(f, v);
1062 }
1063
1064 const VMStateInfo vmstate_info_uint32 = {
1065 .name = "uint32",
1066 .get = get_uint32,
1067 .put = put_uint32,
1068 };
1069
1070 /* 32 bit uint. See that the received value is the same than the one
1071 in the field */
1072
1073 static int get_uint32_equal(QEMUFile *f, void *pv, size_t size)
1074 {
1075 uint32_t *v = pv;
1076 uint32_t v2;
1077 qemu_get_be32s(f, &v2);
1078
1079 if (*v == v2) {
1080 return 0;
1081 }
1082 return -EINVAL;
1083 }
1084
1085 const VMStateInfo vmstate_info_uint32_equal = {
1086 .name = "uint32 equal",
1087 .get = get_uint32_equal,
1088 .put = put_uint32,
1089 };
1090
1091 /* 64 bit unsigned int */
1092
1093 static int get_uint64(QEMUFile *f, void *pv, size_t size)
1094 {
1095 uint64_t *v = pv;
1096 qemu_get_be64s(f, v);
1097 return 0;
1098 }
1099
1100 static void put_uint64(QEMUFile *f, void *pv, size_t size)
1101 {
1102 uint64_t *v = pv;
1103 qemu_put_be64s(f, v);
1104 }
1105
1106 const VMStateInfo vmstate_info_uint64 = {
1107 .name = "uint64",
1108 .get = get_uint64,
1109 .put = put_uint64,
1110 };
1111
1112 /* 64 bit unsigned int. See that the received value is the same than the one
1113 in the field */
1114
1115 static int get_uint64_equal(QEMUFile *f, void *pv, size_t size)
1116 {
1117 uint64_t *v = pv;
1118 uint64_t v2;
1119 qemu_get_be64s(f, &v2);
1120
1121 if (*v == v2) {
1122 return 0;
1123 }
1124 return -EINVAL;
1125 }
1126
1127 const VMStateInfo vmstate_info_uint64_equal = {
1128 .name = "int64 equal",
1129 .get = get_uint64_equal,
1130 .put = put_uint64,
1131 };
1132
1133 /* 8 bit int. See that the received value is the same than the one
1134 in the field */
1135
1136 static int get_uint8_equal(QEMUFile *f, void *pv, size_t size)
1137 {
1138 uint8_t *v = pv;
1139 uint8_t v2;
1140 qemu_get_8s(f, &v2);
1141
1142 if (*v == v2)
1143 return 0;
1144 return -EINVAL;
1145 }
1146
1147 const VMStateInfo vmstate_info_uint8_equal = {
1148 .name = "uint8 equal",
1149 .get = get_uint8_equal,
1150 .put = put_uint8,
1151 };
1152
1153 /* 16 bit unsigned int int. See that the received value is the same than the one
1154 in the field */
1155
1156 static int get_uint16_equal(QEMUFile *f, void *pv, size_t size)
1157 {
1158 uint16_t *v = pv;
1159 uint16_t v2;
1160 qemu_get_be16s(f, &v2);
1161
1162 if (*v == v2)
1163 return 0;
1164 return -EINVAL;
1165 }
1166
1167 const VMStateInfo vmstate_info_uint16_equal = {
1168 .name = "uint16 equal",
1169 .get = get_uint16_equal,
1170 .put = put_uint16,
1171 };
1172
1173 /* floating point */
1174
1175 static int get_float64(QEMUFile *f, void *pv, size_t size)
1176 {
1177 float64 *v = pv;
1178
1179 *v = make_float64(qemu_get_be64(f));
1180 return 0;
1181 }
1182
1183 static void put_float64(QEMUFile *f, void *pv, size_t size)
1184 {
1185 uint64_t *v = pv;
1186
1187 qemu_put_be64(f, float64_val(*v));
1188 }
1189
1190 const VMStateInfo vmstate_info_float64 = {
1191 .name = "float64",
1192 .get = get_float64,
1193 .put = put_float64,
1194 };
1195
1196 /* timers */
1197
1198 static int get_timer(QEMUFile *f, void *pv, size_t size)
1199 {
1200 QEMUTimer *v = pv;
1201 qemu_get_timer(f, v);
1202 return 0;
1203 }
1204
1205 static void put_timer(QEMUFile *f, void *pv, size_t size)
1206 {
1207 QEMUTimer *v = pv;
1208 qemu_put_timer(f, v);
1209 }
1210
1211 const VMStateInfo vmstate_info_timer = {
1212 .name = "timer",
1213 .get = get_timer,
1214 .put = put_timer,
1215 };
1216
1217 /* uint8_t buffers */
1218
1219 static int get_buffer(QEMUFile *f, void *pv, size_t size)
1220 {
1221 uint8_t *v = pv;
1222 qemu_get_buffer(f, v, size);
1223 return 0;
1224 }
1225
1226 static void put_buffer(QEMUFile *f, void *pv, size_t size)
1227 {
1228 uint8_t *v = pv;
1229 qemu_put_buffer(f, v, size);
1230 }
1231
1232 const VMStateInfo vmstate_info_buffer = {
1233 .name = "buffer",
1234 .get = get_buffer,
1235 .put = put_buffer,
1236 };
1237
1238 /* unused buffers: space that was used for some fields that are
1239 not useful anymore */
1240
1241 static int get_unused_buffer(QEMUFile *f, void *pv, size_t size)
1242 {
1243 uint8_t buf[1024];
1244 int block_len;
1245
1246 while (size > 0) {
1247 block_len = MIN(sizeof(buf), size);
1248 size -= block_len;
1249 qemu_get_buffer(f, buf, block_len);
1250 }
1251 return 0;
1252 }
1253
1254 static void put_unused_buffer(QEMUFile *f, void *pv, size_t size)
1255 {
1256 static const uint8_t buf[1024];
1257 int block_len;
1258
1259 while (size > 0) {
1260 block_len = MIN(sizeof(buf), size);
1261 size -= block_len;
1262 qemu_put_buffer(f, buf, block_len);
1263 }
1264 }
1265
1266 const VMStateInfo vmstate_info_unused_buffer = {
1267 .name = "unused_buffer",
1268 .get = get_unused_buffer,
1269 .put = put_unused_buffer,
1270 };
1271
1272 /* bitmaps (as defined by bitmap.h). Note that size here is the size
1273 * of the bitmap in bits. The on-the-wire format of a bitmap is 64
1274 * bit words with the bits in big endian order. The in-memory format
1275 * is an array of 'unsigned long', which may be either 32 or 64 bits.
1276 */
1277 /* This is the number of 64 bit words sent over the wire */
1278 #define BITS_TO_U64S(nr) DIV_ROUND_UP(nr, 64)
1279 static int get_bitmap(QEMUFile *f, void *pv, size_t size)
1280 {
1281 unsigned long *bmp = pv;
1282 int i, idx = 0;
1283 for (i = 0; i < BITS_TO_U64S(size); i++) {
1284 uint64_t w = qemu_get_be64(f);
1285 bmp[idx++] = w;
1286 if (sizeof(unsigned long) == 4 && idx < BITS_TO_LONGS(size)) {
1287 bmp[idx++] = w >> 32;
1288 }
1289 }
1290 return 0;
1291 }
1292
1293 static void put_bitmap(QEMUFile *f, void *pv, size_t size)
1294 {
1295 unsigned long *bmp = pv;
1296 int i, idx = 0;
1297 for (i = 0; i < BITS_TO_U64S(size); i++) {
1298 uint64_t w = bmp[idx++];
1299 if (sizeof(unsigned long) == 4 && idx < BITS_TO_LONGS(size)) {
1300 w |= ((uint64_t)bmp[idx++]) << 32;
1301 }
1302 qemu_put_be64(f, w);
1303 }
1304 }
1305
1306 const VMStateInfo vmstate_info_bitmap = {
1307 .name = "bitmap",
1308 .get = get_bitmap,
1309 .put = put_bitmap,
1310 };
1311
1312 typedef struct CompatEntry {
1313 char idstr[256];
1314 int instance_id;
1315 } CompatEntry;
1316
1317 typedef struct SaveStateEntry {
1318 QTAILQ_ENTRY(SaveStateEntry) entry;
1319 char idstr[256];
1320 int instance_id;
1321 int alias_id;
1322 int version_id;
1323 int section_id;
1324 SaveVMHandlers *ops;
1325 const VMStateDescription *vmsd;
1326 void *opaque;
1327 CompatEntry *compat;
1328 int no_migrate;
1329 int is_ram;
1330 } SaveStateEntry;
1331
1332
1333 static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
1334 QTAILQ_HEAD_INITIALIZER(savevm_handlers);
1335 static int global_section_id;
1336
1337 static int calculate_new_instance_id(const char *idstr)
1338 {
1339 SaveStateEntry *se;
1340 int instance_id = 0;
1341
1342 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1343 if (strcmp(idstr, se->idstr) == 0
1344 && instance_id <= se->instance_id) {
1345 instance_id = se->instance_id + 1;
1346 }
1347 }
1348 return instance_id;
1349 }
1350
1351 static int calculate_compat_instance_id(const char *idstr)
1352 {
1353 SaveStateEntry *se;
1354 int instance_id = 0;
1355
1356 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1357 if (!se->compat)
1358 continue;
1359
1360 if (strcmp(idstr, se->compat->idstr) == 0
1361 && instance_id <= se->compat->instance_id) {
1362 instance_id = se->compat->instance_id + 1;
1363 }
1364 }
1365 return instance_id;
1366 }
1367
1368 /* TODO: Individual devices generally have very little idea about the rest
1369 of the system, so instance_id should be removed/replaced.
1370 Meanwhile pass -1 as instance_id if you do not already have a clearly
1371 distinguishing id for all instances of your device class. */
1372 int register_savevm_live(DeviceState *dev,
1373 const char *idstr,
1374 int instance_id,
1375 int version_id,
1376 SaveVMHandlers *ops,
1377 void *opaque)
1378 {
1379 SaveStateEntry *se;
1380
1381 se = g_malloc0(sizeof(SaveStateEntry));
1382 se->version_id = version_id;
1383 se->section_id = global_section_id++;
1384 se->ops = ops;
1385 se->opaque = opaque;
1386 se->vmsd = NULL;
1387 se->no_migrate = 0;
1388 /* if this is a live_savem then set is_ram */
1389 if (ops->save_live_setup != NULL) {
1390 se->is_ram = 1;
1391 }
1392
1393 if (dev) {
1394 char *id = qdev_get_dev_path(dev);
1395 if (id) {
1396 pstrcpy(se->idstr, sizeof(se->idstr), id);
1397 pstrcat(se->idstr, sizeof(se->idstr), "/");
1398 g_free(id);
1399
1400 se->compat = g_malloc0(sizeof(CompatEntry));
1401 pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), idstr);
1402 se->compat->instance_id = instance_id == -1 ?
1403 calculate_compat_instance_id(idstr) : instance_id;
1404 instance_id = -1;
1405 }
1406 }
1407 pstrcat(se->idstr, sizeof(se->idstr), idstr);
1408
1409 if (instance_id == -1) {
1410 se->instance_id = calculate_new_instance_id(se->idstr);
1411 } else {
1412 se->instance_id = instance_id;
1413 }
1414 assert(!se->compat || se->instance_id == 0);
1415 /* add at the end of list */
1416 QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1417 return 0;
1418 }
1419
1420 int register_savevm(DeviceState *dev,
1421 const char *idstr,
1422 int instance_id,
1423 int version_id,
1424 SaveStateHandler *save_state,
1425 LoadStateHandler *load_state,
1426 void *opaque)
1427 {
1428 SaveVMHandlers *ops = g_malloc0(sizeof(SaveVMHandlers));
1429 ops->save_state = save_state;
1430 ops->load_state = load_state;
1431 return register_savevm_live(dev, idstr, instance_id, version_id,
1432 ops, opaque);
1433 }
1434
1435 void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
1436 {
1437 SaveStateEntry *se, *new_se;
1438 char id[256] = "";
1439
1440 if (dev) {
1441 char *path = qdev_get_dev_path(dev);
1442 if (path) {
1443 pstrcpy(id, sizeof(id), path);
1444 pstrcat(id, sizeof(id), "/");
1445 g_free(path);
1446 }
1447 }
1448 pstrcat(id, sizeof(id), idstr);
1449
1450 QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1451 if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
1452 QTAILQ_REMOVE(&savevm_handlers, se, entry);
1453 if (se->compat) {
1454 g_free(se->compat);
1455 }
1456 g_free(se->ops);
1457 g_free(se);
1458 }
1459 }
1460 }
1461
1462 int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
1463 const VMStateDescription *vmsd,
1464 void *opaque, int alias_id,
1465 int required_for_version)
1466 {
1467 SaveStateEntry *se;
1468
1469 /* If this triggers, alias support can be dropped for the vmsd. */
1470 assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
1471
1472 se = g_malloc0(sizeof(SaveStateEntry));
1473 se->version_id = vmsd->version_id;
1474 se->section_id = global_section_id++;
1475 se->opaque = opaque;
1476 se->vmsd = vmsd;
1477 se->alias_id = alias_id;
1478 se->no_migrate = vmsd->unmigratable;
1479
1480 if (dev) {
1481 char *id = qdev_get_dev_path(dev);
1482 if (id) {
1483 pstrcpy(se->idstr, sizeof(se->idstr), id);
1484 pstrcat(se->idstr, sizeof(se->idstr), "/");
1485 g_free(id);
1486
1487 se->compat = g_malloc0(sizeof(CompatEntry));
1488 pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), vmsd->name);
1489 se->compat->instance_id = instance_id == -1 ?
1490 calculate_compat_instance_id(vmsd->name) : instance_id;
1491 instance_id = -1;
1492 }
1493 }
1494 pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
1495
1496 if (instance_id == -1) {
1497 se->instance_id = calculate_new_instance_id(se->idstr);
1498 } else {
1499 se->instance_id = instance_id;
1500 }
1501 assert(!se->compat || se->instance_id == 0);
1502 /* add at the end of list */
1503 QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
1504 return 0;
1505 }
1506
1507 void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
1508 void *opaque)
1509 {
1510 SaveStateEntry *se, *new_se;
1511
1512 QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
1513 if (se->vmsd == vmsd && se->opaque == opaque) {
1514 QTAILQ_REMOVE(&savevm_handlers, se, entry);
1515 if (se->compat) {
1516 g_free(se->compat);
1517 }
1518 g_free(se);
1519 }
1520 }
1521 }
1522
1523 static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
1524 void *opaque);
1525 static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1526 void *opaque);
1527
1528 int vmstate_load_state(QEMUFile *f, const VMStateDescription *vmsd,
1529 void *opaque, int version_id)
1530 {
1531 VMStateField *field = vmsd->fields;
1532 int ret;
1533
1534 if (version_id > vmsd->version_id) {
1535 return -EINVAL;
1536 }
1537 if (version_id < vmsd->minimum_version_id_old) {
1538 return -EINVAL;
1539 }
1540 if (version_id < vmsd->minimum_version_id) {
1541 return vmsd->load_state_old(f, opaque, version_id);
1542 }
1543 if (vmsd->pre_load) {
1544 int ret = vmsd->pre_load(opaque);
1545 if (ret)
1546 return ret;
1547 }
1548 while(field->name) {
1549 if ((field->field_exists &&
1550 field->field_exists(opaque, version_id)) ||
1551 (!field->field_exists &&
1552 field->version_id <= version_id)) {
1553 void *base_addr = opaque + field->offset;
1554 int i, n_elems = 1;
1555 int size = field->size;
1556
1557 if (field->flags & VMS_VBUFFER) {
1558 size = *(int32_t *)(opaque+field->size_offset);
1559 if (field->flags & VMS_MULTIPLY) {
1560 size *= field->size;
1561 }
1562 }
1563 if (field->flags & VMS_ARRAY) {
1564 n_elems = field->num;
1565 } else if (field->flags & VMS_VARRAY_INT32) {
1566 n_elems = *(int32_t *)(opaque+field->num_offset);
1567 } else if (field->flags & VMS_VARRAY_UINT32) {
1568 n_elems = *(uint32_t *)(opaque+field->num_offset);
1569 } else if (field->flags & VMS_VARRAY_UINT16) {
1570 n_elems = *(uint16_t *)(opaque+field->num_offset);
1571 } else if (field->flags & VMS_VARRAY_UINT8) {
1572 n_elems = *(uint8_t *)(opaque+field->num_offset);
1573 }
1574 if (field->flags & VMS_POINTER) {
1575 base_addr = *(void **)base_addr + field->start;
1576 }
1577 for (i = 0; i < n_elems; i++) {
1578 void *addr = base_addr + size * i;
1579
1580 if (field->flags & VMS_ARRAY_OF_POINTER) {
1581 addr = *(void **)addr;
1582 }
1583 if (field->flags & VMS_STRUCT) {
1584 ret = vmstate_load_state(f, field->vmsd, addr, field->vmsd->version_id);
1585 } else {
1586 ret = field->info->get(f, addr, size);
1587
1588 }
1589 if (ret < 0) {
1590 return ret;
1591 }
1592 }
1593 }
1594 field++;
1595 }
1596 ret = vmstate_subsection_load(f, vmsd, opaque);
1597 if (ret != 0) {
1598 return ret;
1599 }
1600 if (vmsd->post_load) {
1601 return vmsd->post_load(opaque, version_id);
1602 }
1603 return 0;
1604 }
1605
1606 void vmstate_save_state(QEMUFile *f, const VMStateDescription *vmsd,
1607 void *opaque)
1608 {
1609 VMStateField *field = vmsd->fields;
1610
1611 if (vmsd->pre_save) {
1612 vmsd->pre_save(opaque);
1613 }
1614 while(field->name) {
1615 if (!field->field_exists ||
1616 field->field_exists(opaque, vmsd->version_id)) {
1617 void *base_addr = opaque + field->offset;
1618 int i, n_elems = 1;
1619 int size = field->size;
1620
1621 if (field->flags & VMS_VBUFFER) {
1622 size = *(int32_t *)(opaque+field->size_offset);
1623 if (field->flags & VMS_MULTIPLY) {
1624 size *= field->size;
1625 }
1626 }
1627 if (field->flags & VMS_ARRAY) {
1628 n_elems = field->num;
1629 } else if (field->flags & VMS_VARRAY_INT32) {
1630 n_elems = *(int32_t *)(opaque+field->num_offset);
1631 } else if (field->flags & VMS_VARRAY_UINT32) {
1632 n_elems = *(uint32_t *)(opaque+field->num_offset);
1633 } else if (field->flags & VMS_VARRAY_UINT16) {
1634 n_elems = *(uint16_t *)(opaque+field->num_offset);
1635 } else if (field->flags & VMS_VARRAY_UINT8) {
1636 n_elems = *(uint8_t *)(opaque+field->num_offset);
1637 }
1638 if (field->flags & VMS_POINTER) {
1639 base_addr = *(void **)base_addr + field->start;
1640 }
1641 for (i = 0; i < n_elems; i++) {
1642 void *addr = base_addr + size * i;
1643
1644 if (field->flags & VMS_ARRAY_OF_POINTER) {
1645 addr = *(void **)addr;
1646 }
1647 if (field->flags & VMS_STRUCT) {
1648 vmstate_save_state(f, field->vmsd, addr);
1649 } else {
1650 field->info->put(f, addr, size);
1651 }
1652 }
1653 }
1654 field++;
1655 }
1656 vmstate_subsection_save(f, vmsd, opaque);
1657 }
1658
1659 static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
1660 {
1661 if (!se->vmsd) { /* Old style */
1662 return se->ops->load_state(f, se->opaque, version_id);
1663 }
1664 return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
1665 }
1666
1667 static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
1668 {
1669 if (!se->vmsd) { /* Old style */
1670 se->ops->save_state(f, se->opaque);
1671 return;
1672 }
1673 vmstate_save_state(f,se->vmsd, se->opaque);
1674 }
1675
1676 #define QEMU_VM_FILE_MAGIC 0x5145564d
1677 #define QEMU_VM_FILE_VERSION_COMPAT 0x00000002
1678 #define QEMU_VM_FILE_VERSION 0x00000003
1679
1680 #define QEMU_VM_EOF 0x00
1681 #define QEMU_VM_SECTION_START 0x01
1682 #define QEMU_VM_SECTION_PART 0x02
1683 #define QEMU_VM_SECTION_END 0x03
1684 #define QEMU_VM_SECTION_FULL 0x04
1685 #define QEMU_VM_SUBSECTION 0x05
1686
1687 bool qemu_savevm_state_blocked(Error **errp)
1688 {
1689 SaveStateEntry *se;
1690
1691 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1692 if (se->no_migrate) {
1693 error_set(errp, QERR_MIGRATION_NOT_SUPPORTED, se->idstr);
1694 return true;
1695 }
1696 }
1697 return false;
1698 }
1699
1700 void qemu_savevm_state_begin(QEMUFile *f,
1701 const MigrationParams *params)
1702 {
1703 SaveStateEntry *se;
1704 int ret;
1705
1706 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1707 if (!se->ops || !se->ops->set_params) {
1708 continue;
1709 }
1710 se->ops->set_params(params, se->opaque);
1711 }
1712
1713 qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
1714 qemu_put_be32(f, QEMU_VM_FILE_VERSION);
1715
1716 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1717 int len;
1718
1719 if (!se->ops || !se->ops->save_live_setup) {
1720 continue;
1721 }
1722 if (se->ops && se->ops->is_active) {
1723 if (!se->ops->is_active(se->opaque)) {
1724 continue;
1725 }
1726 }
1727 /* Section type */
1728 qemu_put_byte(f, QEMU_VM_SECTION_START);
1729 qemu_put_be32(f, se->section_id);
1730
1731 /* ID string */
1732 len = strlen(se->idstr);
1733 qemu_put_byte(f, len);
1734 qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1735
1736 qemu_put_be32(f, se->instance_id);
1737 qemu_put_be32(f, se->version_id);
1738
1739 ret = se->ops->save_live_setup(f, se->opaque);
1740 if (ret < 0) {
1741 qemu_file_set_error(f, ret);
1742 break;
1743 }
1744 }
1745 }
1746
1747 /*
1748 * this function has three return values:
1749 * negative: there was one error, and we have -errno.
1750 * 0 : We haven't finished, caller have to go again
1751 * 1 : We have finished, we can go to complete phase
1752 */
1753 int qemu_savevm_state_iterate(QEMUFile *f)
1754 {
1755 SaveStateEntry *se;
1756 int ret = 1;
1757
1758 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1759 if (!se->ops || !se->ops->save_live_iterate) {
1760 continue;
1761 }
1762 if (se->ops && se->ops->is_active) {
1763 if (!se->ops->is_active(se->opaque)) {
1764 continue;
1765 }
1766 }
1767 if (qemu_file_rate_limit(f)) {
1768 return 0;
1769 }
1770 trace_savevm_section_start();
1771 /* Section type */
1772 qemu_put_byte(f, QEMU_VM_SECTION_PART);
1773 qemu_put_be32(f, se->section_id);
1774
1775 ret = se->ops->save_live_iterate(f, se->opaque);
1776 trace_savevm_section_end(se->section_id);
1777
1778 if (ret < 0) {
1779 qemu_file_set_error(f, ret);
1780 }
1781 if (ret <= 0) {
1782 /* Do not proceed to the next vmstate before this one reported
1783 completion of the current stage. This serializes the migration
1784 and reduces the probability that a faster changing state is
1785 synchronized over and over again. */
1786 break;
1787 }
1788 }
1789 return ret;
1790 }
1791
1792 void qemu_savevm_state_complete(QEMUFile *f)
1793 {
1794 SaveStateEntry *se;
1795 int ret;
1796
1797 cpu_synchronize_all_states();
1798
1799 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1800 if (!se->ops || !se->ops->save_live_complete) {
1801 continue;
1802 }
1803 if (se->ops && se->ops->is_active) {
1804 if (!se->ops->is_active(se->opaque)) {
1805 continue;
1806 }
1807 }
1808 trace_savevm_section_start();
1809 /* Section type */
1810 qemu_put_byte(f, QEMU_VM_SECTION_END);
1811 qemu_put_be32(f, se->section_id);
1812
1813 ret = se->ops->save_live_complete(f, se->opaque);
1814 trace_savevm_section_end(se->section_id);
1815 if (ret < 0) {
1816 qemu_file_set_error(f, ret);
1817 return;
1818 }
1819 }
1820
1821 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1822 int len;
1823
1824 if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
1825 continue;
1826 }
1827 trace_savevm_section_start();
1828 /* Section type */
1829 qemu_put_byte(f, QEMU_VM_SECTION_FULL);
1830 qemu_put_be32(f, se->section_id);
1831
1832 /* ID string */
1833 len = strlen(se->idstr);
1834 qemu_put_byte(f, len);
1835 qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1836
1837 qemu_put_be32(f, se->instance_id);
1838 qemu_put_be32(f, se->version_id);
1839
1840 vmstate_save(f, se);
1841 trace_savevm_section_end(se->section_id);
1842 }
1843
1844 qemu_put_byte(f, QEMU_VM_EOF);
1845 qemu_fflush(f);
1846 }
1847
1848 uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size)
1849 {
1850 SaveStateEntry *se;
1851 uint64_t ret = 0;
1852
1853 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1854 if (!se->ops || !se->ops->save_live_pending) {
1855 continue;
1856 }
1857 if (se->ops && se->ops->is_active) {
1858 if (!se->ops->is_active(se->opaque)) {
1859 continue;
1860 }
1861 }
1862 ret += se->ops->save_live_pending(f, se->opaque, max_size);
1863 }
1864 return ret;
1865 }
1866
1867 void qemu_savevm_state_cancel(void)
1868 {
1869 SaveStateEntry *se;
1870
1871 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1872 if (se->ops && se->ops->cancel) {
1873 se->ops->cancel(se->opaque);
1874 }
1875 }
1876 }
1877
1878 static int qemu_savevm_state(QEMUFile *f)
1879 {
1880 int ret;
1881 MigrationParams params = {
1882 .blk = 0,
1883 .shared = 0
1884 };
1885
1886 if (qemu_savevm_state_blocked(NULL)) {
1887 return -EINVAL;
1888 }
1889
1890 qemu_mutex_unlock_iothread();
1891 qemu_savevm_state_begin(f, &params);
1892 qemu_mutex_lock_iothread();
1893
1894 while (qemu_file_get_error(f) == 0) {
1895 if (qemu_savevm_state_iterate(f) > 0) {
1896 break;
1897 }
1898 }
1899
1900 ret = qemu_file_get_error(f);
1901 if (ret == 0) {
1902 qemu_savevm_state_complete(f);
1903 ret = qemu_file_get_error(f);
1904 }
1905 if (ret != 0) {
1906 qemu_savevm_state_cancel();
1907 }
1908 return ret;
1909 }
1910
1911 static int qemu_save_device_state(QEMUFile *f)
1912 {
1913 SaveStateEntry *se;
1914
1915 qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
1916 qemu_put_be32(f, QEMU_VM_FILE_VERSION);
1917
1918 cpu_synchronize_all_states();
1919
1920 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1921 int len;
1922
1923 if (se->is_ram) {
1924 continue;
1925 }
1926 if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
1927 continue;
1928 }
1929
1930 /* Section type */
1931 qemu_put_byte(f, QEMU_VM_SECTION_FULL);
1932 qemu_put_be32(f, se->section_id);
1933
1934 /* ID string */
1935 len = strlen(se->idstr);
1936 qemu_put_byte(f, len);
1937 qemu_put_buffer(f, (uint8_t *)se->idstr, len);
1938
1939 qemu_put_be32(f, se->instance_id);
1940 qemu_put_be32(f, se->version_id);
1941
1942 vmstate_save(f, se);
1943 }
1944
1945 qemu_put_byte(f, QEMU_VM_EOF);
1946
1947 return qemu_file_get_error(f);
1948 }
1949
1950 static SaveStateEntry *find_se(const char *idstr, int instance_id)
1951 {
1952 SaveStateEntry *se;
1953
1954 QTAILQ_FOREACH(se, &savevm_handlers, entry) {
1955 if (!strcmp(se->idstr, idstr) &&
1956 (instance_id == se->instance_id ||
1957 instance_id == se->alias_id))
1958 return se;
1959 /* Migrating from an older version? */
1960 if (strstr(se->idstr, idstr) && se->compat) {
1961 if (!strcmp(se->compat->idstr, idstr) &&
1962 (instance_id == se->compat->instance_id ||
1963 instance_id == se->alias_id))
1964 return se;
1965 }
1966 }
1967 return NULL;
1968 }
1969
1970 static const VMStateDescription *vmstate_get_subsection(const VMStateSubsection *sub, char *idstr)
1971 {
1972 while(sub && sub->needed) {
1973 if (strcmp(idstr, sub->vmsd->name) == 0) {
1974 return sub->vmsd;
1975 }
1976 sub++;
1977 }
1978 return NULL;
1979 }
1980
1981 static int vmstate_subsection_load(QEMUFile *f, const VMStateDescription *vmsd,
1982 void *opaque)
1983 {
1984 while (qemu_peek_byte(f, 0) == QEMU_VM_SUBSECTION) {
1985 char idstr[256];
1986 int ret;
1987 uint8_t version_id, len, size;
1988 const VMStateDescription *sub_vmsd;
1989
1990 len = qemu_peek_byte(f, 1);
1991 if (len < strlen(vmsd->name) + 1) {
1992 /* subsection name has be be "section_name/a" */
1993 return 0;
1994 }
1995 size = qemu_peek_buffer(f, (uint8_t *)idstr, len, 2);
1996 if (size != len) {
1997 return 0;
1998 }
1999 idstr[size] = 0;
2000
2001 if (strncmp(vmsd->name, idstr, strlen(vmsd->name)) != 0) {
2002 /* it don't have a valid subsection name */
2003 return 0;
2004 }
2005 sub_vmsd = vmstate_get_subsection(vmsd->subsections, idstr);
2006 if (sub_vmsd == NULL) {
2007 return -ENOENT;
2008 }
2009 qemu_file_skip(f, 1); /* subsection */
2010 qemu_file_skip(f, 1); /* len */
2011 qemu_file_skip(f, len); /* idstr */
2012 version_id = qemu_get_be32(f);
2013
2014 ret = vmstate_load_state(f, sub_vmsd, opaque, version_id);
2015 if (ret) {
2016 return ret;
2017 }
2018 }
2019 return 0;
2020 }
2021
2022 static void vmstate_subsection_save(QEMUFile *f, const VMStateDescription *vmsd,
2023 void *opaque)
2024 {
2025 const VMStateSubsection *sub = vmsd->subsections;
2026
2027 while (sub && sub->needed) {
2028 if (sub->needed(opaque)) {
2029 const VMStateDescription *vmsd = sub->vmsd;
2030 uint8_t len;
2031
2032 qemu_put_byte(f, QEMU_VM_SUBSECTION);
2033 len = strlen(vmsd->name);
2034 qemu_put_byte(f, len);
2035 qemu_put_buffer(f, (uint8_t *)vmsd->name, len);
2036 qemu_put_be32(f, vmsd->version_id);
2037 vmstate_save_state(f, vmsd, opaque);
2038 }
2039 sub++;
2040 }
2041 }
2042
2043 typedef struct LoadStateEntry {
2044 QLIST_ENTRY(LoadStateEntry) entry;
2045 SaveStateEntry *se;
2046 int section_id;
2047 int version_id;
2048 } LoadStateEntry;
2049
2050 int qemu_loadvm_state(QEMUFile *f)
2051 {
2052 QLIST_HEAD(, LoadStateEntry) loadvm_handlers =
2053 QLIST_HEAD_INITIALIZER(loadvm_handlers);
2054 LoadStateEntry *le, *new_le;
2055 uint8_t section_type;
2056 unsigned int v;
2057 int ret;
2058
2059 if (qemu_savevm_state_blocked(NULL)) {
2060 return -EINVAL;
2061 }
2062
2063 v = qemu_get_be32(f);
2064 if (v != QEMU_VM_FILE_MAGIC)
2065 return -EINVAL;
2066
2067 v = qemu_get_be32(f);
2068 if (v == QEMU_VM_FILE_VERSION_COMPAT) {
2069 fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n");
2070 return -ENOTSUP;
2071 }
2072 if (v != QEMU_VM_FILE_VERSION)
2073 return -ENOTSUP;
2074
2075 while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
2076 uint32_t instance_id, version_id, section_id;
2077 SaveStateEntry *se;
2078 char idstr[257];
2079 int len;
2080
2081 switch (section_type) {
2082 case QEMU_VM_SECTION_START:
2083 case QEMU_VM_SECTION_FULL:
2084 /* Read section start */
2085 section_id = qemu_get_be32(f);
2086 len = qemu_get_byte(f);
2087 qemu_get_buffer(f, (uint8_t *)idstr, len);
2088 idstr[len] = 0;
2089 instance_id = qemu_get_be32(f);
2090 version_id = qemu_get_be32(f);
2091
2092 /* Find savevm section */
2093 se = find_se(idstr, instance_id);
2094 if (se == NULL) {
2095 fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
2096 ret = -EINVAL;
2097 goto out;
2098 }
2099
2100 /* Validate version */
2101 if (version_id > se->version_id) {
2102 fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
2103 version_id, idstr, se->version_id);
2104 ret = -EINVAL;
2105 goto out;
2106 }
2107
2108 /* Add entry */
2109 le = g_malloc0(sizeof(*le));
2110
2111 le->se = se;
2112 le->section_id = section_id;
2113 le->version_id = version_id;
2114 QLIST_INSERT_HEAD(&loadvm_handlers, le, entry);
2115
2116 ret = vmstate_load(f, le->se, le->version_id);
2117 if (ret < 0) {
2118 fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
2119 instance_id, idstr);
2120 goto out;
2121 }
2122 break;
2123 case QEMU_VM_SECTION_PART:
2124 case QEMU_VM_SECTION_END:
2125 section_id = qemu_get_be32(f);
2126
2127 QLIST_FOREACH(le, &loadvm_handlers, entry) {
2128 if (le->section_id == section_id) {
2129 break;
2130 }
2131 }
2132 if (le == NULL) {
2133 fprintf(stderr, "Unknown savevm section %d\n", section_id);
2134 ret = -EINVAL;
2135 goto out;
2136 }
2137
2138 ret = vmstate_load(f, le->se, le->version_id);
2139 if (ret < 0) {
2140 fprintf(stderr, "qemu: warning: error while loading state section id %d\n",
2141 section_id);
2142 goto out;
2143 }
2144 break;
2145 default:
2146 fprintf(stderr, "Unknown savevm section type %d\n", section_type);
2147 ret = -EINVAL;
2148 goto out;
2149 }
2150 }
2151
2152 cpu_synchronize_all_post_init();
2153
2154 ret = 0;
2155
2156 out:
2157 QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) {
2158 QLIST_REMOVE(le, entry);
2159 g_free(le);
2160 }
2161
2162 if (ret == 0) {
2163 ret = qemu_file_get_error(f);
2164 }
2165
2166 return ret;
2167 }
2168
2169 static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
2170 const char *name)
2171 {
2172 QEMUSnapshotInfo *sn_tab, *sn;
2173 int nb_sns, i, ret;
2174
2175 ret = -ENOENT;
2176 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2177 if (nb_sns < 0)
2178 return ret;
2179 for(i = 0; i < nb_sns; i++) {
2180 sn = &sn_tab[i];
2181 if (!strcmp(sn->id_str, name) || !strcmp(sn->name, name)) {
2182 *sn_info = *sn;
2183 ret = 0;
2184 break;
2185 }
2186 }
2187 g_free(sn_tab);
2188 return ret;
2189 }
2190
2191 /*
2192 * Deletes snapshots of a given name in all opened images.
2193 */
2194 static int del_existing_snapshots(Monitor *mon, const char *name)
2195 {
2196 BlockDriverState *bs;
2197 QEMUSnapshotInfo sn1, *snapshot = &sn1;
2198 int ret;
2199
2200 bs = NULL;
2201 while ((bs = bdrv_next(bs))) {
2202 if (bdrv_can_snapshot(bs) &&
2203 bdrv_snapshot_find(bs, snapshot, name) >= 0)
2204 {
2205 ret = bdrv_snapshot_delete(bs, name);
2206 if (ret < 0) {
2207 monitor_printf(mon,
2208 "Error while deleting snapshot on '%s'\n",
2209 bdrv_get_device_name(bs));
2210 return -1;
2211 }
2212 }
2213 }
2214
2215 return 0;
2216 }
2217
2218 void do_savevm(Monitor *mon, const QDict *qdict)
2219 {
2220 BlockDriverState *bs, *bs1;
2221 QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
2222 int ret;
2223 QEMUFile *f;
2224 int saved_vm_running;
2225 uint64_t vm_state_size;
2226 qemu_timeval tv;
2227 struct tm tm;
2228 const char *name = qdict_get_try_str(qdict, "name");
2229
2230 /* Verify if there is a device that doesn't support snapshots and is writable */
2231 bs = NULL;
2232 while ((bs = bdrv_next(bs))) {
2233
2234 if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
2235 continue;
2236 }
2237
2238 if (!bdrv_can_snapshot(bs)) {
2239 monitor_printf(mon, "Device '%s' is writable but does not support snapshots.\n",
2240 bdrv_get_device_name(bs));
2241 return;
2242 }
2243 }
2244
2245 bs = bdrv_snapshots();
2246 if (!bs) {
2247 monitor_printf(mon, "No block device can accept snapshots\n");
2248 return;
2249 }
2250
2251 saved_vm_running = runstate_is_running();
2252 vm_stop(RUN_STATE_SAVE_VM);
2253
2254 memset(sn, 0, sizeof(*sn));
2255
2256 /* fill auxiliary fields */
2257 qemu_gettimeofday(&tv);
2258 sn->date_sec = tv.tv_sec;
2259 sn->date_nsec = tv.tv_usec * 1000;
2260 sn->vm_clock_nsec = qemu_get_clock_ns(vm_clock);
2261
2262 if (name) {
2263 ret = bdrv_snapshot_find(bs, old_sn, name);
2264 if (ret >= 0) {
2265 pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
2266 pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
2267 } else {
2268 pstrcpy(sn->name, sizeof(sn->name), name);
2269 }
2270 } else {
2271 /* cast below needed for OpenBSD where tv_sec is still 'long' */
2272 localtime_r((const time_t *)&tv.tv_sec, &tm);
2273 strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
2274 }
2275
2276 /* Delete old snapshots of the same name */
2277 if (name && del_existing_snapshots(mon, name) < 0) {
2278 goto the_end;
2279 }
2280
2281 /* save the VM state */
2282 f = qemu_fopen_bdrv(bs, 1);
2283 if (!f) {
2284 monitor_printf(mon, "Could not open VM state file\n");
2285 goto the_end;
2286 }
2287 ret = qemu_savevm_state(f);
2288 vm_state_size = qemu_ftell(f);
2289 qemu_fclose(f);
2290 if (ret < 0) {
2291 monitor_printf(mon, "Error %d while writing VM\n", ret);
2292 goto the_end;
2293 }
2294
2295 /* create the snapshots */
2296
2297 bs1 = NULL;
2298 while ((bs1 = bdrv_next(bs1))) {
2299 if (bdrv_can_snapshot(bs1)) {
2300 /* Write VM state size only to the image that contains the state */
2301 sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
2302 ret = bdrv_snapshot_create(bs1, sn);
2303 if (ret < 0) {
2304 monitor_printf(mon, "Error while creating snapshot on '%s'\n",
2305 bdrv_get_device_name(bs1));
2306 }
2307 }
2308 }
2309
2310 the_end:
2311 if (saved_vm_running)
2312 vm_start();
2313 }
2314
2315 void qmp_xen_save_devices_state(const char *filename, Error **errp)
2316 {
2317 QEMUFile *f;
2318 int saved_vm_running;
2319 int ret;
2320
2321 saved_vm_running = runstate_is_running();
2322 vm_stop(RUN_STATE_SAVE_VM);
2323
2324 f = qemu_fopen(filename, "wb");
2325 if (!f) {
2326 error_set(errp, QERR_OPEN_FILE_FAILED, filename);
2327 goto the_end;
2328 }
2329 ret = qemu_save_device_state(f);
2330 qemu_fclose(f);
2331 if (ret < 0) {
2332 error_set(errp, QERR_IO_ERROR);
2333 }
2334
2335 the_end:
2336 if (saved_vm_running)
2337 vm_start();
2338 }
2339
2340 int load_vmstate(const char *name)
2341 {
2342 BlockDriverState *bs, *bs_vm_state;
2343 QEMUSnapshotInfo sn;
2344 QEMUFile *f;
2345 int ret;
2346
2347 bs_vm_state = bdrv_snapshots();
2348 if (!bs_vm_state) {
2349 error_report("No block device supports snapshots");
2350 return -ENOTSUP;
2351 }
2352
2353 /* Don't even try to load empty VM states */
2354 ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
2355 if (ret < 0) {
2356 return ret;
2357 } else if (sn.vm_state_size == 0) {
2358 error_report("This is a disk-only snapshot. Revert to it offline "
2359 "using qemu-img.");
2360 return -EINVAL;
2361 }
2362
2363 /* Verify if there is any device that doesn't support snapshots and is
2364 writable and check if the requested snapshot is available too. */
2365 bs = NULL;
2366 while ((bs = bdrv_next(bs))) {
2367
2368 if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
2369 continue;
2370 }
2371
2372 if (!bdrv_can_snapshot(bs)) {
2373 error_report("Device '%s' is writable but does not support snapshots.",
2374 bdrv_get_device_name(bs));
2375 return -ENOTSUP;
2376 }
2377
2378 ret = bdrv_snapshot_find(bs, &sn, name);
2379 if (ret < 0) {
2380 error_report("Device '%s' does not have the requested snapshot '%s'",
2381 bdrv_get_device_name(bs), name);
2382 return ret;
2383 }
2384 }
2385
2386 /* Flush all IO requests so they don't interfere with the new state. */
2387 bdrv_drain_all();
2388
2389 bs = NULL;
2390 while ((bs = bdrv_next(bs))) {
2391 if (bdrv_can_snapshot(bs)) {
2392 ret = bdrv_snapshot_goto(bs, name);
2393 if (ret < 0) {
2394 error_report("Error %d while activating snapshot '%s' on '%s'",
2395 ret, name, bdrv_get_device_name(bs));
2396 return ret;
2397 }
2398 }
2399 }
2400
2401 /* restore the VM state */
2402 f = qemu_fopen_bdrv(bs_vm_state, 0);
2403 if (!f) {
2404 error_report("Could not open VM state file");
2405 return -EINVAL;
2406 }
2407
2408 qemu_system_reset(VMRESET_SILENT);
2409 ret = qemu_loadvm_state(f);
2410
2411 qemu_fclose(f);
2412 if (ret < 0) {
2413 error_report("Error %d while loading VM state", ret);
2414 return ret;
2415 }
2416
2417 return 0;
2418 }
2419
2420 void do_delvm(Monitor *mon, const QDict *qdict)
2421 {
2422 BlockDriverState *bs, *bs1;
2423 int ret;
2424 const char *name = qdict_get_str(qdict, "name");
2425
2426 bs = bdrv_snapshots();
2427 if (!bs) {
2428 monitor_printf(mon, "No block device supports snapshots\n");
2429 return;
2430 }
2431
2432 bs1 = NULL;
2433 while ((bs1 = bdrv_next(bs1))) {
2434 if (bdrv_can_snapshot(bs1)) {
2435 ret = bdrv_snapshot_delete(bs1, name);
2436 if (ret < 0) {
2437 if (ret == -ENOTSUP)
2438 monitor_printf(mon,
2439 "Snapshots not supported on device '%s'\n",
2440 bdrv_get_device_name(bs1));
2441 else
2442 monitor_printf(mon, "Error %d while deleting snapshot on "
2443 "'%s'\n", ret, bdrv_get_device_name(bs1));
2444 }
2445 }
2446 }
2447 }
2448
2449 void do_info_snapshots(Monitor *mon, const QDict *qdict)
2450 {
2451 BlockDriverState *bs, *bs1;
2452 QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
2453 int nb_sns, i, ret, available;
2454 int total;
2455 int *available_snapshots;
2456 char buf[256];
2457
2458 bs = bdrv_snapshots();
2459 if (!bs) {
2460 monitor_printf(mon, "No available block device supports snapshots\n");
2461 return;
2462 }
2463
2464 nb_sns = bdrv_snapshot_list(bs, &sn_tab);
2465 if (nb_sns < 0) {
2466 monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
2467 return;
2468 }
2469
2470 if (nb_sns == 0) {
2471 monitor_printf(mon, "There is no snapshot available.\n");
2472 return;
2473 }
2474
2475 available_snapshots = g_malloc0(sizeof(int) * nb_sns);
2476 total = 0;
2477 for (i = 0; i < nb_sns; i++) {
2478 sn = &sn_tab[i];
2479 available = 1;
2480 bs1 = NULL;
2481
2482 while ((bs1 = bdrv_next(bs1))) {
2483 if (bdrv_can_snapshot(bs1) && bs1 != bs) {
2484 ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
2485 if (ret < 0) {
2486 available = 0;
2487 break;
2488 }
2489 }
2490 }
2491
2492 if (available) {
2493 available_snapshots[total] = i;
2494 total++;
2495 }
2496 }
2497
2498 if (total > 0) {
2499 monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), NULL));
2500 for (i = 0; i < total; i++) {
2501 sn = &sn_tab[available_snapshots[i]];
2502 monitor_printf(mon, "%s\n", bdrv_snapshot_dump(buf, sizeof(buf), sn));
2503 }
2504 } else {
2505 monitor_printf(mon, "There is no suitable snapshot available\n");
2506 }
2507
2508 g_free(sn_tab);
2509 g_free(available_snapshots);
2510
2511 }
2512
2513 void vmstate_register_ram(MemoryRegion *mr, DeviceState *dev)
2514 {
2515 qemu_ram_set_idstr(memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK,
2516 memory_region_name(mr), dev);
2517 }
2518
2519 void vmstate_unregister_ram(MemoryRegion *mr, DeviceState *dev)
2520 {
2521 /* Nothing do to while the implementation is in RAMBlock */
2522 }
2523
2524 void vmstate_register_ram_global(MemoryRegion *mr)
2525 {
2526 vmstate_register_ram(mr, NULL);
2527 }