Statistics
| Branch: | Revision:

root / savevm.c @ feature-archipelago

History | View | Annotate | Download (32.5 kB)

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/iov.h"
42
#include "block/snapshot.h"
43
#include "block/qapi.h"
44

    
45
#define SELF_ANNOUNCE_ROUNDS 5
46

    
47
#ifndef ETH_P_RARP
48
#define ETH_P_RARP 0x8035
49
#endif
50
#define ARP_HTYPE_ETH 0x0001
51
#define ARP_PTYPE_IP 0x0800
52
#define ARP_OP_REQUEST_REV 0x3
53

    
54
static int announce_self_create(uint8_t *buf,
55
                                uint8_t *mac_addr)
56
{
57
    /* Ethernet header. */
58
    memset(buf, 0xff, 6);         /* destination MAC addr */
59
    memcpy(buf + 6, mac_addr, 6); /* source MAC addr */
60
    *(uint16_t *)(buf + 12) = htons(ETH_P_RARP); /* ethertype */
61

    
62
    /* RARP header. */
63
    *(uint16_t *)(buf + 14) = htons(ARP_HTYPE_ETH); /* hardware addr space */
64
    *(uint16_t *)(buf + 16) = htons(ARP_PTYPE_IP); /* protocol addr space */
65
    *(buf + 18) = 6; /* hardware addr length (ethernet) */
66
    *(buf + 19) = 4; /* protocol addr length (IPv4) */
67
    *(uint16_t *)(buf + 20) = htons(ARP_OP_REQUEST_REV); /* opcode */
68
    memcpy(buf + 22, mac_addr, 6); /* source hw addr */
69
    memset(buf + 28, 0x00, 4);     /* source protocol addr */
70
    memcpy(buf + 32, mac_addr, 6); /* target hw addr */
71
    memset(buf + 38, 0x00, 4);     /* target protocol addr */
72

    
73
    /* Padding to get up to 60 bytes (ethernet min packet size, minus FCS). */
74
    memset(buf + 42, 0x00, 18);
75

    
76
    return 60; /* len (FCS will be added by hardware) */
77
}
78

    
79
static void qemu_announce_self_iter(NICState *nic, void *opaque)
80
{
81
    uint8_t buf[60];
82
    int len;
83

    
84
    len = announce_self_create(buf, nic->conf->macaddr.a);
85

    
86
    qemu_send_packet_raw(qemu_get_queue(nic), buf, len);
87
}
88

    
89

    
90
static void qemu_announce_self_once(void *opaque)
91
{
92
    static int count = SELF_ANNOUNCE_ROUNDS;
93
    QEMUTimer *timer = *(QEMUTimer **)opaque;
94

    
95
    qemu_foreach_nic(qemu_announce_self_iter, NULL);
96

    
97
    if (--count) {
98
        /* delay 50ms, 150ms, 250ms, ... */
99
        timer_mod(timer, qemu_clock_get_ms(QEMU_CLOCK_REALTIME) +
100
                       50 + (SELF_ANNOUNCE_ROUNDS - count - 1) * 100);
101
    } else {
102
            timer_del(timer);
103
            timer_free(timer);
104
    }
105
}
106

    
107
void qemu_announce_self(void)
108
{
109
    static QEMUTimer *timer;
110
    timer = timer_new_ms(QEMU_CLOCK_REALTIME, qemu_announce_self_once, &timer);
111
    qemu_announce_self_once(&timer);
112
}
113

    
114
/***********************************************************/
115
/* savevm/loadvm support */
116

    
117
static ssize_t block_writev_buffer(void *opaque, struct iovec *iov, int iovcnt,
118
                                   int64_t pos)
119
{
120
    int ret;
121
    QEMUIOVector qiov;
122

    
123
    qemu_iovec_init_external(&qiov, iov, iovcnt);
124
    ret = bdrv_writev_vmstate(opaque, &qiov, pos);
125
    if (ret < 0) {
126
        return ret;
127
    }
128

    
129
    return qiov.size;
130
}
131

    
132
static int block_put_buffer(void *opaque, const uint8_t *buf,
133
                           int64_t pos, int size)
134
{
135
    bdrv_save_vmstate(opaque, buf, pos, size);
136
    return size;
137
}
138

    
139
static int block_get_buffer(void *opaque, uint8_t *buf, int64_t pos, int size)
140
{
141
    return bdrv_load_vmstate(opaque, buf, pos, size);
142
}
143

    
144
static int bdrv_fclose(void *opaque)
145
{
146
    return bdrv_flush(opaque);
147
}
148

    
149
static const QEMUFileOps bdrv_read_ops = {
150
    .get_buffer = block_get_buffer,
151
    .close =      bdrv_fclose
152
};
153

    
154
static const QEMUFileOps bdrv_write_ops = {
155
    .put_buffer     = block_put_buffer,
156
    .writev_buffer  = block_writev_buffer,
157
    .close          = bdrv_fclose
158
};
159

    
160
static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int is_writable)
161
{
162
    if (is_writable) {
163
        return qemu_fopen_ops(bs, &bdrv_write_ops);
164
    }
165
    return qemu_fopen_ops(bs, &bdrv_read_ops);
166
}
167

    
168

    
169
/* QEMUFile timer support.
170
 * Not in qemu-file.c to not add qemu-timer.c as dependency to qemu-file.c
171
 */
172

    
173
void timer_put(QEMUFile *f, QEMUTimer *ts)
174
{
175
    uint64_t expire_time;
176

    
177
    expire_time = timer_expire_time_ns(ts);
178
    qemu_put_be64(f, expire_time);
179
}
180

    
181
void timer_get(QEMUFile *f, QEMUTimer *ts)
182
{
183
    uint64_t expire_time;
184

    
185
    expire_time = qemu_get_be64(f);
186
    if (expire_time != -1) {
187
        timer_mod_ns(ts, expire_time);
188
    } else {
189
        timer_del(ts);
190
    }
191
}
192

    
193

    
194
/* VMState timer support.
195
 * Not in vmstate.c to not add qemu-timer.c as dependency to vmstate.c
196
 */
197

    
198
static int get_timer(QEMUFile *f, void *pv, size_t size)
199
{
200
    QEMUTimer *v = pv;
201
    timer_get(f, v);
202
    return 0;
203
}
204

    
205
static void put_timer(QEMUFile *f, void *pv, size_t size)
206
{
207
    QEMUTimer *v = pv;
208
    timer_put(f, v);
209
}
210

    
211
const VMStateInfo vmstate_info_timer = {
212
    .name = "timer",
213
    .get  = get_timer,
214
    .put  = put_timer,
215
};
216

    
217

    
218
typedef struct CompatEntry {
219
    char idstr[256];
220
    int instance_id;
221
} CompatEntry;
222

    
223
typedef struct SaveStateEntry {
224
    QTAILQ_ENTRY(SaveStateEntry) entry;
225
    char idstr[256];
226
    int instance_id;
227
    int alias_id;
228
    int version_id;
229
    int section_id;
230
    SaveVMHandlers *ops;
231
    const VMStateDescription *vmsd;
232
    void *opaque;
233
    CompatEntry *compat;
234
    int no_migrate;
235
    int is_ram;
236
} SaveStateEntry;
237

    
238

    
239
static QTAILQ_HEAD(savevm_handlers, SaveStateEntry) savevm_handlers =
240
    QTAILQ_HEAD_INITIALIZER(savevm_handlers);
241
static int global_section_id;
242

    
243
static int calculate_new_instance_id(const char *idstr)
244
{
245
    SaveStateEntry *se;
246
    int instance_id = 0;
247

    
248
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
249
        if (strcmp(idstr, se->idstr) == 0
250
            && instance_id <= se->instance_id) {
251
            instance_id = se->instance_id + 1;
252
        }
253
    }
254
    return instance_id;
255
}
256

    
257
static int calculate_compat_instance_id(const char *idstr)
258
{
259
    SaveStateEntry *se;
260
    int instance_id = 0;
261

    
262
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
263
        if (!se->compat) {
264
            continue;
265
        }
266

    
267
        if (strcmp(idstr, se->compat->idstr) == 0
268
            && instance_id <= se->compat->instance_id) {
269
            instance_id = se->compat->instance_id + 1;
270
        }
271
    }
272
    return instance_id;
273
}
274

    
275
/* TODO: Individual devices generally have very little idea about the rest
276
   of the system, so instance_id should be removed/replaced.
277
   Meanwhile pass -1 as instance_id if you do not already have a clearly
278
   distinguishing id for all instances of your device class. */
279
int register_savevm_live(DeviceState *dev,
280
                         const char *idstr,
281
                         int instance_id,
282
                         int version_id,
283
                         SaveVMHandlers *ops,
284
                         void *opaque)
285
{
286
    SaveStateEntry *se;
287

    
288
    se = g_malloc0(sizeof(SaveStateEntry));
289
    se->version_id = version_id;
290
    se->section_id = global_section_id++;
291
    se->ops = ops;
292
    se->opaque = opaque;
293
    se->vmsd = NULL;
294
    se->no_migrate = 0;
295
    /* if this is a live_savem then set is_ram */
296
    if (ops->save_live_setup != NULL) {
297
        se->is_ram = 1;
298
    }
299

    
300
    if (dev) {
301
        char *id = qdev_get_dev_path(dev);
302
        if (id) {
303
            pstrcpy(se->idstr, sizeof(se->idstr), id);
304
            pstrcat(se->idstr, sizeof(se->idstr), "/");
305
            g_free(id);
306

    
307
            se->compat = g_malloc0(sizeof(CompatEntry));
308
            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), idstr);
309
            se->compat->instance_id = instance_id == -1 ?
310
                         calculate_compat_instance_id(idstr) : instance_id;
311
            instance_id = -1;
312
        }
313
    }
314
    pstrcat(se->idstr, sizeof(se->idstr), idstr);
315

    
316
    if (instance_id == -1) {
317
        se->instance_id = calculate_new_instance_id(se->idstr);
318
    } else {
319
        se->instance_id = instance_id;
320
    }
321
    assert(!se->compat || se->instance_id == 0);
322
    /* add at the end of list */
323
    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
324
    return 0;
325
}
326

    
327
int register_savevm(DeviceState *dev,
328
                    const char *idstr,
329
                    int instance_id,
330
                    int version_id,
331
                    SaveStateHandler *save_state,
332
                    LoadStateHandler *load_state,
333
                    void *opaque)
334
{
335
    SaveVMHandlers *ops = g_malloc0(sizeof(SaveVMHandlers));
336
    ops->save_state = save_state;
337
    ops->load_state = load_state;
338
    return register_savevm_live(dev, idstr, instance_id, version_id,
339
                                ops, opaque);
340
}
341

    
342
void unregister_savevm(DeviceState *dev, const char *idstr, void *opaque)
343
{
344
    SaveStateEntry *se, *new_se;
345
    char id[256] = "";
346

    
347
    if (dev) {
348
        char *path = qdev_get_dev_path(dev);
349
        if (path) {
350
            pstrcpy(id, sizeof(id), path);
351
            pstrcat(id, sizeof(id), "/");
352
            g_free(path);
353
        }
354
    }
355
    pstrcat(id, sizeof(id), idstr);
356

    
357
    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
358
        if (strcmp(se->idstr, id) == 0 && se->opaque == opaque) {
359
            QTAILQ_REMOVE(&savevm_handlers, se, entry);
360
            if (se->compat) {
361
                g_free(se->compat);
362
            }
363
            g_free(se->ops);
364
            g_free(se);
365
        }
366
    }
367
}
368

    
369
int vmstate_register_with_alias_id(DeviceState *dev, int instance_id,
370
                                   const VMStateDescription *vmsd,
371
                                   void *opaque, int alias_id,
372
                                   int required_for_version)
373
{
374
    SaveStateEntry *se;
375

    
376
    /* If this triggers, alias support can be dropped for the vmsd. */
377
    assert(alias_id == -1 || required_for_version >= vmsd->minimum_version_id);
378

    
379
    se = g_malloc0(sizeof(SaveStateEntry));
380
    se->version_id = vmsd->version_id;
381
    se->section_id = global_section_id++;
382
    se->opaque = opaque;
383
    se->vmsd = vmsd;
384
    se->alias_id = alias_id;
385
    se->no_migrate = vmsd->unmigratable;
386

    
387
    if (dev) {
388
        char *id = qdev_get_dev_path(dev);
389
        if (id) {
390
            pstrcpy(se->idstr, sizeof(se->idstr), id);
391
            pstrcat(se->idstr, sizeof(se->idstr), "/");
392
            g_free(id);
393

    
394
            se->compat = g_malloc0(sizeof(CompatEntry));
395
            pstrcpy(se->compat->idstr, sizeof(se->compat->idstr), vmsd->name);
396
            se->compat->instance_id = instance_id == -1 ?
397
                         calculate_compat_instance_id(vmsd->name) : instance_id;
398
            instance_id = -1;
399
        }
400
    }
401
    pstrcat(se->idstr, sizeof(se->idstr), vmsd->name);
402

    
403
    if (instance_id == -1) {
404
        se->instance_id = calculate_new_instance_id(se->idstr);
405
    } else {
406
        se->instance_id = instance_id;
407
    }
408
    assert(!se->compat || se->instance_id == 0);
409
    /* add at the end of list */
410
    QTAILQ_INSERT_TAIL(&savevm_handlers, se, entry);
411
    return 0;
412
}
413

    
414
void vmstate_unregister(DeviceState *dev, const VMStateDescription *vmsd,
415
                        void *opaque)
416
{
417
    SaveStateEntry *se, *new_se;
418

    
419
    QTAILQ_FOREACH_SAFE(se, &savevm_handlers, entry, new_se) {
420
        if (se->vmsd == vmsd && se->opaque == opaque) {
421
            QTAILQ_REMOVE(&savevm_handlers, se, entry);
422
            if (se->compat) {
423
                g_free(se->compat);
424
            }
425
            g_free(se);
426
        }
427
    }
428
}
429

    
430
static int vmstate_load(QEMUFile *f, SaveStateEntry *se, int version_id)
431
{
432
    if (!se->vmsd) {         /* Old style */
433
        return se->ops->load_state(f, se->opaque, version_id);
434
    }
435
    return vmstate_load_state(f, se->vmsd, se->opaque, version_id);
436
}
437

    
438
static void vmstate_save(QEMUFile *f, SaveStateEntry *se)
439
{
440
    if (!se->vmsd) {         /* Old style */
441
        se->ops->save_state(f, se->opaque);
442
        return;
443
    }
444
    vmstate_save_state(f, se->vmsd, se->opaque);
445
}
446

    
447
bool qemu_savevm_state_blocked(Error **errp)
448
{
449
    SaveStateEntry *se;
450

    
451
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
452
        if (se->no_migrate) {
453
            error_set(errp, QERR_MIGRATION_NOT_SUPPORTED, se->idstr);
454
            return true;
455
        }
456
    }
457
    return false;
458
}
459

    
460
void qemu_savevm_state_begin(QEMUFile *f,
461
                             const MigrationParams *params)
462
{
463
    SaveStateEntry *se;
464
    int ret;
465

    
466
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
467
        if (!se->ops || !se->ops->set_params) {
468
            continue;
469
        }
470
        se->ops->set_params(params, se->opaque);
471
    }
472

    
473
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
474
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
475

    
476
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
477
        int len;
478

    
479
        if (!se->ops || !se->ops->save_live_setup) {
480
            continue;
481
        }
482
        if (se->ops && se->ops->is_active) {
483
            if (!se->ops->is_active(se->opaque)) {
484
                continue;
485
            }
486
        }
487
        /* Section type */
488
        qemu_put_byte(f, QEMU_VM_SECTION_START);
489
        qemu_put_be32(f, se->section_id);
490

    
491
        /* ID string */
492
        len = strlen(se->idstr);
493
        qemu_put_byte(f, len);
494
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
495

    
496
        qemu_put_be32(f, se->instance_id);
497
        qemu_put_be32(f, se->version_id);
498

    
499
        ret = se->ops->save_live_setup(f, se->opaque);
500
        if (ret < 0) {
501
            qemu_file_set_error(f, ret);
502
            break;
503
        }
504
    }
505
}
506

    
507
/*
508
 * this function has three return values:
509
 *   negative: there was one error, and we have -errno.
510
 *   0 : We haven't finished, caller have to go again
511
 *   1 : We have finished, we can go to complete phase
512
 */
513
int qemu_savevm_state_iterate(QEMUFile *f)
514
{
515
    SaveStateEntry *se;
516
    int ret = 1;
517

    
518
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
519
        if (!se->ops || !se->ops->save_live_iterate) {
520
            continue;
521
        }
522
        if (se->ops && se->ops->is_active) {
523
            if (!se->ops->is_active(se->opaque)) {
524
                continue;
525
            }
526
        }
527
        if (qemu_file_rate_limit(f)) {
528
            return 0;
529
        }
530
        trace_savevm_section_start();
531
        /* Section type */
532
        qemu_put_byte(f, QEMU_VM_SECTION_PART);
533
        qemu_put_be32(f, se->section_id);
534

    
535
        ret = se->ops->save_live_iterate(f, se->opaque);
536
        trace_savevm_section_end(se->section_id);
537

    
538
        if (ret < 0) {
539
            qemu_file_set_error(f, ret);
540
        }
541
        if (ret <= 0) {
542
            /* Do not proceed to the next vmstate before this one reported
543
               completion of the current stage. This serializes the migration
544
               and reduces the probability that a faster changing state is
545
               synchronized over and over again. */
546
            break;
547
        }
548
    }
549
    return ret;
550
}
551

    
552
void qemu_savevm_state_complete(QEMUFile *f)
553
{
554
    SaveStateEntry *se;
555
    int ret;
556

    
557
    cpu_synchronize_all_states();
558

    
559
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
560
        if (!se->ops || !se->ops->save_live_complete) {
561
            continue;
562
        }
563
        if (se->ops && se->ops->is_active) {
564
            if (!se->ops->is_active(se->opaque)) {
565
                continue;
566
            }
567
        }
568
        trace_savevm_section_start();
569
        /* Section type */
570
        qemu_put_byte(f, QEMU_VM_SECTION_END);
571
        qemu_put_be32(f, se->section_id);
572

    
573
        ret = se->ops->save_live_complete(f, se->opaque);
574
        trace_savevm_section_end(se->section_id);
575
        if (ret < 0) {
576
            qemu_file_set_error(f, ret);
577
            return;
578
        }
579
    }
580

    
581
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
582
        int len;
583

    
584
        if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
585
            continue;
586
        }
587
        trace_savevm_section_start();
588
        /* Section type */
589
        qemu_put_byte(f, QEMU_VM_SECTION_FULL);
590
        qemu_put_be32(f, se->section_id);
591

    
592
        /* ID string */
593
        len = strlen(se->idstr);
594
        qemu_put_byte(f, len);
595
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
596

    
597
        qemu_put_be32(f, se->instance_id);
598
        qemu_put_be32(f, se->version_id);
599

    
600
        vmstate_save(f, se);
601
        trace_savevm_section_end(se->section_id);
602
    }
603

    
604
    qemu_put_byte(f, QEMU_VM_EOF);
605
    qemu_fflush(f);
606
}
607

    
608
uint64_t qemu_savevm_state_pending(QEMUFile *f, uint64_t max_size)
609
{
610
    SaveStateEntry *se;
611
    uint64_t ret = 0;
612

    
613
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
614
        if (!se->ops || !se->ops->save_live_pending) {
615
            continue;
616
        }
617
        if (se->ops && se->ops->is_active) {
618
            if (!se->ops->is_active(se->opaque)) {
619
                continue;
620
            }
621
        }
622
        ret += se->ops->save_live_pending(f, se->opaque, max_size);
623
    }
624
    return ret;
625
}
626

    
627
void qemu_savevm_state_cancel(void)
628
{
629
    SaveStateEntry *se;
630

    
631
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
632
        if (se->ops && se->ops->cancel) {
633
            se->ops->cancel(se->opaque);
634
        }
635
    }
636
}
637

    
638
static int qemu_savevm_state(QEMUFile *f)
639
{
640
    int ret;
641
    MigrationParams params = {
642
        .blk = 0,
643
        .shared = 0
644
    };
645

    
646
    if (qemu_savevm_state_blocked(NULL)) {
647
        return -EINVAL;
648
    }
649

    
650
    qemu_mutex_unlock_iothread();
651
    qemu_savevm_state_begin(f, &params);
652
    qemu_mutex_lock_iothread();
653

    
654
    while (qemu_file_get_error(f) == 0) {
655
        if (qemu_savevm_state_iterate(f) > 0) {
656
            break;
657
        }
658
    }
659

    
660
    ret = qemu_file_get_error(f);
661
    if (ret == 0) {
662
        qemu_savevm_state_complete(f);
663
        ret = qemu_file_get_error(f);
664
    }
665
    if (ret != 0) {
666
        qemu_savevm_state_cancel();
667
    }
668
    return ret;
669
}
670

    
671
static int qemu_save_device_state(QEMUFile *f)
672
{
673
    SaveStateEntry *se;
674

    
675
    qemu_put_be32(f, QEMU_VM_FILE_MAGIC);
676
    qemu_put_be32(f, QEMU_VM_FILE_VERSION);
677

    
678
    cpu_synchronize_all_states();
679

    
680
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
681
        int len;
682

    
683
        if (se->is_ram) {
684
            continue;
685
        }
686
        if ((!se->ops || !se->ops->save_state) && !se->vmsd) {
687
            continue;
688
        }
689

    
690
        /* Section type */
691
        qemu_put_byte(f, QEMU_VM_SECTION_FULL);
692
        qemu_put_be32(f, se->section_id);
693

    
694
        /* ID string */
695
        len = strlen(se->idstr);
696
        qemu_put_byte(f, len);
697
        qemu_put_buffer(f, (uint8_t *)se->idstr, len);
698

    
699
        qemu_put_be32(f, se->instance_id);
700
        qemu_put_be32(f, se->version_id);
701

    
702
        vmstate_save(f, se);
703
    }
704

    
705
    qemu_put_byte(f, QEMU_VM_EOF);
706

    
707
    return qemu_file_get_error(f);
708
}
709

    
710
static SaveStateEntry *find_se(const char *idstr, int instance_id)
711
{
712
    SaveStateEntry *se;
713

    
714
    QTAILQ_FOREACH(se, &savevm_handlers, entry) {
715
        if (!strcmp(se->idstr, idstr) &&
716
            (instance_id == se->instance_id ||
717
             instance_id == se->alias_id))
718
            return se;
719
        /* Migrating from an older version? */
720
        if (strstr(se->idstr, idstr) && se->compat) {
721
            if (!strcmp(se->compat->idstr, idstr) &&
722
                (instance_id == se->compat->instance_id ||
723
                 instance_id == se->alias_id))
724
                return se;
725
        }
726
    }
727
    return NULL;
728
}
729

    
730
typedef struct LoadStateEntry {
731
    QLIST_ENTRY(LoadStateEntry) entry;
732
    SaveStateEntry *se;
733
    int section_id;
734
    int version_id;
735
} LoadStateEntry;
736

    
737
int qemu_loadvm_state(QEMUFile *f)
738
{
739
    QLIST_HEAD(, LoadStateEntry) loadvm_handlers =
740
        QLIST_HEAD_INITIALIZER(loadvm_handlers);
741
    LoadStateEntry *le, *new_le;
742
    uint8_t section_type;
743
    unsigned int v;
744
    int ret;
745

    
746
    if (qemu_savevm_state_blocked(NULL)) {
747
        return -EINVAL;
748
    }
749

    
750
    v = qemu_get_be32(f);
751
    if (v != QEMU_VM_FILE_MAGIC) {
752
        return -EINVAL;
753
    }
754

    
755
    v = qemu_get_be32(f);
756
    if (v == QEMU_VM_FILE_VERSION_COMPAT) {
757
        fprintf(stderr, "SaveVM v2 format is obsolete and don't work anymore\n");
758
        return -ENOTSUP;
759
    }
760
    if (v != QEMU_VM_FILE_VERSION) {
761
        return -ENOTSUP;
762
    }
763

    
764
    while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
765
        uint32_t instance_id, version_id, section_id;
766
        SaveStateEntry *se;
767
        char idstr[257];
768
        int len;
769

    
770
        switch (section_type) {
771
        case QEMU_VM_SECTION_START:
772
        case QEMU_VM_SECTION_FULL:
773
            /* Read section start */
774
            section_id = qemu_get_be32(f);
775
            len = qemu_get_byte(f);
776
            qemu_get_buffer(f, (uint8_t *)idstr, len);
777
            idstr[len] = 0;
778
            instance_id = qemu_get_be32(f);
779
            version_id = qemu_get_be32(f);
780

    
781
            /* Find savevm section */
782
            se = find_se(idstr, instance_id);
783
            if (se == NULL) {
784
                fprintf(stderr, "Unknown savevm section or instance '%s' %d\n", idstr, instance_id);
785
                ret = -EINVAL;
786
                goto out;
787
            }
788

    
789
            /* Validate version */
790
            if (version_id > se->version_id) {
791
                fprintf(stderr, "savevm: unsupported version %d for '%s' v%d\n",
792
                        version_id, idstr, se->version_id);
793
                ret = -EINVAL;
794
                goto out;
795
            }
796

    
797
            /* Add entry */
798
            le = g_malloc0(sizeof(*le));
799

    
800
            le->se = se;
801
            le->section_id = section_id;
802
            le->version_id = version_id;
803
            QLIST_INSERT_HEAD(&loadvm_handlers, le, entry);
804

    
805
            ret = vmstate_load(f, le->se, le->version_id);
806
            if (ret < 0) {
807
                fprintf(stderr, "qemu: warning: error while loading state for instance 0x%x of device '%s'\n",
808
                        instance_id, idstr);
809
                goto out;
810
            }
811
            break;
812
        case QEMU_VM_SECTION_PART:
813
        case QEMU_VM_SECTION_END:
814
            section_id = qemu_get_be32(f);
815

    
816
            QLIST_FOREACH(le, &loadvm_handlers, entry) {
817
                if (le->section_id == section_id) {
818
                    break;
819
                }
820
            }
821
            if (le == NULL) {
822
                fprintf(stderr, "Unknown savevm section %d\n", section_id);
823
                ret = -EINVAL;
824
                goto out;
825
            }
826

    
827
            ret = vmstate_load(f, le->se, le->version_id);
828
            if (ret < 0) {
829
                fprintf(stderr, "qemu: warning: error while loading state section id %d\n",
830
                        section_id);
831
                goto out;
832
            }
833
            break;
834
        default:
835
            fprintf(stderr, "Unknown savevm section type %d\n", section_type);
836
            ret = -EINVAL;
837
            goto out;
838
        }
839
    }
840

    
841
    cpu_synchronize_all_post_init();
842

    
843
    ret = 0;
844

    
845
out:
846
    QLIST_FOREACH_SAFE(le, &loadvm_handlers, entry, new_le) {
847
        QLIST_REMOVE(le, entry);
848
        g_free(le);
849
    }
850

    
851
    if (ret == 0) {
852
        ret = qemu_file_get_error(f);
853
    }
854

    
855
    return ret;
856
}
857

    
858
static BlockDriverState *find_vmstate_bs(void)
859
{
860
    BlockDriverState *bs = NULL;
861
    while ((bs = bdrv_next(bs))) {
862
        if (bdrv_can_snapshot(bs)) {
863
            return bs;
864
        }
865
    }
866
    return NULL;
867
}
868

    
869
/*
870
 * Deletes snapshots of a given name in all opened images.
871
 */
872
static int del_existing_snapshots(Monitor *mon, const char *name)
873
{
874
    BlockDriverState *bs;
875
    QEMUSnapshotInfo sn1, *snapshot = &sn1;
876
    Error *err = NULL;
877

    
878
    bs = NULL;
879
    while ((bs = bdrv_next(bs))) {
880
        if (bdrv_can_snapshot(bs) &&
881
            bdrv_snapshot_find(bs, snapshot, name) >= 0) {
882
            bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
883
            if (err) {
884
                monitor_printf(mon,
885
                               "Error while deleting snapshot on device '%s':"
886
                               " %s\n",
887
                               bdrv_get_device_name(bs),
888
                               error_get_pretty(err));
889
                error_free(err);
890
                return -1;
891
            }
892
        }
893
    }
894

    
895
    return 0;
896
}
897

    
898
void do_savevm(Monitor *mon, const QDict *qdict)
899
{
900
    BlockDriverState *bs, *bs1;
901
    QEMUSnapshotInfo sn1, *sn = &sn1, old_sn1, *old_sn = &old_sn1;
902
    int ret;
903
    QEMUFile *f;
904
    int saved_vm_running;
905
    uint64_t vm_state_size;
906
    qemu_timeval tv;
907
    struct tm tm;
908
    const char *name = qdict_get_try_str(qdict, "name");
909

    
910
    /* Verify if there is a device that doesn't support snapshots and is writable */
911
    bs = NULL;
912
    while ((bs = bdrv_next(bs))) {
913

    
914
        if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
915
            continue;
916
        }
917

    
918
        if (!bdrv_can_snapshot(bs)) {
919
            monitor_printf(mon, "Device '%s' is writable but does not support snapshots.\n",
920
                               bdrv_get_device_name(bs));
921
            return;
922
        }
923
    }
924

    
925
    bs = find_vmstate_bs();
926
    if (!bs) {
927
        monitor_printf(mon, "No block device can accept snapshots\n");
928
        return;
929
    }
930

    
931
    saved_vm_running = runstate_is_running();
932
    vm_stop(RUN_STATE_SAVE_VM);
933

    
934
    memset(sn, 0, sizeof(*sn));
935

    
936
    /* fill auxiliary fields */
937
    qemu_gettimeofday(&tv);
938
    sn->date_sec = tv.tv_sec;
939
    sn->date_nsec = tv.tv_usec * 1000;
940
    sn->vm_clock_nsec = qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL);
941

    
942
    if (name) {
943
        ret = bdrv_snapshot_find(bs, old_sn, name);
944
        if (ret >= 0) {
945
            pstrcpy(sn->name, sizeof(sn->name), old_sn->name);
946
            pstrcpy(sn->id_str, sizeof(sn->id_str), old_sn->id_str);
947
        } else {
948
            pstrcpy(sn->name, sizeof(sn->name), name);
949
        }
950
    } else {
951
        /* cast below needed for OpenBSD where tv_sec is still 'long' */
952
        localtime_r((const time_t *)&tv.tv_sec, &tm);
953
        strftime(sn->name, sizeof(sn->name), "vm-%Y%m%d%H%M%S", &tm);
954
    }
955

    
956
    /* Delete old snapshots of the same name */
957
    if (name && del_existing_snapshots(mon, name) < 0) {
958
        goto the_end;
959
    }
960

    
961
    /* save the VM state */
962
    f = qemu_fopen_bdrv(bs, 1);
963
    if (!f) {
964
        monitor_printf(mon, "Could not open VM state file\n");
965
        goto the_end;
966
    }
967
    ret = qemu_savevm_state(f);
968
    vm_state_size = qemu_ftell(f);
969
    qemu_fclose(f);
970
    if (ret < 0) {
971
        monitor_printf(mon, "Error %d while writing VM\n", ret);
972
        goto the_end;
973
    }
974

    
975
    /* create the snapshots */
976

    
977
    bs1 = NULL;
978
    while ((bs1 = bdrv_next(bs1))) {
979
        if (bdrv_can_snapshot(bs1)) {
980
            /* Write VM state size only to the image that contains the state */
981
            sn->vm_state_size = (bs == bs1 ? vm_state_size : 0);
982
            ret = bdrv_snapshot_create(bs1, sn);
983
            if (ret < 0) {
984
                monitor_printf(mon, "Error while creating snapshot on '%s'\n",
985
                               bdrv_get_device_name(bs1));
986
            }
987
        }
988
    }
989

    
990
 the_end:
991
    if (saved_vm_running) {
992
        vm_start();
993
    }
994
}
995

    
996
void qmp_xen_save_devices_state(const char *filename, Error **errp)
997
{
998
    QEMUFile *f;
999
    int saved_vm_running;
1000
    int ret;
1001

    
1002
    saved_vm_running = runstate_is_running();
1003
    vm_stop(RUN_STATE_SAVE_VM);
1004

    
1005
    f = qemu_fopen(filename, "wb");
1006
    if (!f) {
1007
        error_setg_file_open(errp, errno, filename);
1008
        goto the_end;
1009
    }
1010
    ret = qemu_save_device_state(f);
1011
    qemu_fclose(f);
1012
    if (ret < 0) {
1013
        error_set(errp, QERR_IO_ERROR);
1014
    }
1015

    
1016
 the_end:
1017
    if (saved_vm_running) {
1018
        vm_start();
1019
    }
1020
}
1021

    
1022
int load_vmstate(const char *name)
1023
{
1024
    BlockDriverState *bs, *bs_vm_state;
1025
    QEMUSnapshotInfo sn;
1026
    QEMUFile *f;
1027
    int ret;
1028

    
1029
    bs_vm_state = find_vmstate_bs();
1030
    if (!bs_vm_state) {
1031
        error_report("No block device supports snapshots");
1032
        return -ENOTSUP;
1033
    }
1034

    
1035
    /* Don't even try to load empty VM states */
1036
    ret = bdrv_snapshot_find(bs_vm_state, &sn, name);
1037
    if (ret < 0) {
1038
        return ret;
1039
    } else if (sn.vm_state_size == 0) {
1040
        error_report("This is a disk-only snapshot. Revert to it offline "
1041
            "using qemu-img.");
1042
        return -EINVAL;
1043
    }
1044

    
1045
    /* Verify if there is any device that doesn't support snapshots and is
1046
    writable and check if the requested snapshot is available too. */
1047
    bs = NULL;
1048
    while ((bs = bdrv_next(bs))) {
1049

    
1050
        if (!bdrv_is_inserted(bs) || bdrv_is_read_only(bs)) {
1051
            continue;
1052
        }
1053

    
1054
        if (!bdrv_can_snapshot(bs)) {
1055
            error_report("Device '%s' is writable but does not support snapshots.",
1056
                               bdrv_get_device_name(bs));
1057
            return -ENOTSUP;
1058
        }
1059

    
1060
        ret = bdrv_snapshot_find(bs, &sn, name);
1061
        if (ret < 0) {
1062
            error_report("Device '%s' does not have the requested snapshot '%s'",
1063
                           bdrv_get_device_name(bs), name);
1064
            return ret;
1065
        }
1066
    }
1067

    
1068
    /* Flush all IO requests so they don't interfere with the new state.  */
1069
    bdrv_drain_all();
1070

    
1071
    bs = NULL;
1072
    while ((bs = bdrv_next(bs))) {
1073
        if (bdrv_can_snapshot(bs)) {
1074
            ret = bdrv_snapshot_goto(bs, name);
1075
            if (ret < 0) {
1076
                error_report("Error %d while activating snapshot '%s' on '%s'",
1077
                             ret, name, bdrv_get_device_name(bs));
1078
                return ret;
1079
            }
1080
        }
1081
    }
1082

    
1083
    /* restore the VM state */
1084
    f = qemu_fopen_bdrv(bs_vm_state, 0);
1085
    if (!f) {
1086
        error_report("Could not open VM state file");
1087
        return -EINVAL;
1088
    }
1089

    
1090
    qemu_system_reset(VMRESET_SILENT);
1091
    ret = qemu_loadvm_state(f);
1092

    
1093
    qemu_fclose(f);
1094
    if (ret < 0) {
1095
        error_report("Error %d while loading VM state", ret);
1096
        return ret;
1097
    }
1098

    
1099
    return 0;
1100
}
1101

    
1102
void do_delvm(Monitor *mon, const QDict *qdict)
1103
{
1104
    BlockDriverState *bs, *bs1;
1105
    Error *err = NULL;
1106
    const char *name = qdict_get_str(qdict, "name");
1107

    
1108
    bs = find_vmstate_bs();
1109
    if (!bs) {
1110
        monitor_printf(mon, "No block device supports snapshots\n");
1111
        return;
1112
    }
1113

    
1114
    bs1 = NULL;
1115
    while ((bs1 = bdrv_next(bs1))) {
1116
        if (bdrv_can_snapshot(bs1)) {
1117
            bdrv_snapshot_delete_by_id_or_name(bs, name, &err);
1118
            if (err) {
1119
                monitor_printf(mon,
1120
                               "Error while deleting snapshot on device '%s':"
1121
                               " %s\n",
1122
                               bdrv_get_device_name(bs),
1123
                               error_get_pretty(err));
1124
                error_free(err);
1125
            }
1126
        }
1127
    }
1128
}
1129

    
1130
void do_info_snapshots(Monitor *mon, const QDict *qdict)
1131
{
1132
    BlockDriverState *bs, *bs1;
1133
    QEMUSnapshotInfo *sn_tab, *sn, s, *sn_info = &s;
1134
    int nb_sns, i, ret, available;
1135
    int total;
1136
    int *available_snapshots;
1137

    
1138
    bs = find_vmstate_bs();
1139
    if (!bs) {
1140
        monitor_printf(mon, "No available block device supports snapshots\n");
1141
        return;
1142
    }
1143

    
1144
    nb_sns = bdrv_snapshot_list(bs, &sn_tab);
1145
    if (nb_sns < 0) {
1146
        monitor_printf(mon, "bdrv_snapshot_list: error %d\n", nb_sns);
1147
        return;
1148
    }
1149

    
1150
    if (nb_sns == 0) {
1151
        monitor_printf(mon, "There is no snapshot available.\n");
1152
        return;
1153
    }
1154

    
1155
    available_snapshots = g_malloc0(sizeof(int) * nb_sns);
1156
    total = 0;
1157
    for (i = 0; i < nb_sns; i++) {
1158
        sn = &sn_tab[i];
1159
        available = 1;
1160
        bs1 = NULL;
1161

    
1162
        while ((bs1 = bdrv_next(bs1))) {
1163
            if (bdrv_can_snapshot(bs1) && bs1 != bs) {
1164
                ret = bdrv_snapshot_find(bs1, sn_info, sn->id_str);
1165
                if (ret < 0) {
1166
                    available = 0;
1167
                    break;
1168
                }
1169
            }
1170
        }
1171

    
1172
        if (available) {
1173
            available_snapshots[total] = i;
1174
            total++;
1175
        }
1176
    }
1177

    
1178
    if (total > 0) {
1179
        bdrv_snapshot_dump((fprintf_function)monitor_printf, mon, NULL);
1180
        monitor_printf(mon, "\n");
1181
        for (i = 0; i < total; i++) {
1182
            sn = &sn_tab[available_snapshots[i]];
1183
            bdrv_snapshot_dump((fprintf_function)monitor_printf, mon, sn);
1184
            monitor_printf(mon, "\n");
1185
        }
1186
    } else {
1187
        monitor_printf(mon, "There is no suitable snapshot available\n");
1188
    }
1189

    
1190
    g_free(sn_tab);
1191
    g_free(available_snapshots);
1192

    
1193
}
1194

    
1195
void vmstate_register_ram(MemoryRegion *mr, DeviceState *dev)
1196
{
1197
    qemu_ram_set_idstr(memory_region_get_ram_addr(mr) & TARGET_PAGE_MASK,
1198
                       memory_region_name(mr), dev);
1199
}
1200

    
1201
void vmstate_unregister_ram(MemoryRegion *mr, DeviceState *dev)
1202
{
1203
    /* Nothing do to while the implementation is in RAMBlock */
1204
}
1205

    
1206
void vmstate_register_ram_global(MemoryRegion *mr)
1207
{
1208
    vmstate_register_ram(mr, NULL);
1209
}