Statistics
| Branch: | Revision:

root / arch_init.c @ 9c339485

History | View | Annotate | Download (29.2 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
#include <stdint.h>
25
#include <stdarg.h>
26
#include <stdlib.h>
27
#ifndef _WIN32
28
#include <sys/types.h>
29
#include <sys/mman.h>
30
#endif
31
#include "config.h"
32
#include "monitor/monitor.h"
33
#include "sysemu/sysemu.h"
34
#include "qemu/bitops.h"
35
#include "qemu/bitmap.h"
36
#include "sysemu/arch_init.h"
37
#include "audio/audio.h"
38
#include "hw/pc.h"
39
#include "hw/pci/pci.h"
40
#include "hw/audiodev.h"
41
#include "sysemu/kvm.h"
42
#include "migration/migration.h"
43
#include "exec/gdbstub.h"
44
#include "hw/smbios.h"
45
#include "exec/address-spaces.h"
46
#include "hw/pcspk.h"
47
#include "migration/page_cache.h"
48
#include "qemu/config-file.h"
49
#include "qmp-commands.h"
50
#include "trace.h"
51
#include "exec/cpu-all.h"
52

    
53
#ifdef DEBUG_ARCH_INIT
54
#define DPRINTF(fmt, ...) \
55
    do { fprintf(stdout, "arch_init: " fmt, ## __VA_ARGS__); } while (0)
56
#else
57
#define DPRINTF(fmt, ...) \
58
    do { } while (0)
59
#endif
60

    
61
#ifdef TARGET_SPARC
62
int graphic_width = 1024;
63
int graphic_height = 768;
64
int graphic_depth = 8;
65
#else
66
int graphic_width = 800;
67
int graphic_height = 600;
68
int graphic_depth = 15;
69
#endif
70

    
71

    
72
#if defined(TARGET_ALPHA)
73
#define QEMU_ARCH QEMU_ARCH_ALPHA
74
#elif defined(TARGET_ARM)
75
#define QEMU_ARCH QEMU_ARCH_ARM
76
#elif defined(TARGET_CRIS)
77
#define QEMU_ARCH QEMU_ARCH_CRIS
78
#elif defined(TARGET_I386)
79
#define QEMU_ARCH QEMU_ARCH_I386
80
#elif defined(TARGET_M68K)
81
#define QEMU_ARCH QEMU_ARCH_M68K
82
#elif defined(TARGET_LM32)
83
#define QEMU_ARCH QEMU_ARCH_LM32
84
#elif defined(TARGET_MICROBLAZE)
85
#define QEMU_ARCH QEMU_ARCH_MICROBLAZE
86
#elif defined(TARGET_MIPS)
87
#define QEMU_ARCH QEMU_ARCH_MIPS
88
#elif defined(TARGET_OPENRISC)
89
#define QEMU_ARCH QEMU_ARCH_OPENRISC
90
#elif defined(TARGET_PPC)
91
#define QEMU_ARCH QEMU_ARCH_PPC
92
#elif defined(TARGET_S390X)
93
#define QEMU_ARCH QEMU_ARCH_S390X
94
#elif defined(TARGET_SH4)
95
#define QEMU_ARCH QEMU_ARCH_SH4
96
#elif defined(TARGET_SPARC)
97
#define QEMU_ARCH QEMU_ARCH_SPARC
98
#elif defined(TARGET_XTENSA)
99
#define QEMU_ARCH QEMU_ARCH_XTENSA
100
#elif defined(TARGET_UNICORE32)
101
#define QEMU_ARCH QEMU_ARCH_UNICORE32
102
#endif
103

    
104
const uint32_t arch_type = QEMU_ARCH;
105

    
106
/***********************************************************/
107
/* ram save/restore */
108

    
109
#define RAM_SAVE_FLAG_FULL     0x01 /* Obsolete, not used anymore */
110
#define RAM_SAVE_FLAG_COMPRESS 0x02
111
#define RAM_SAVE_FLAG_MEM_SIZE 0x04
112
#define RAM_SAVE_FLAG_PAGE     0x08
113
#define RAM_SAVE_FLAG_EOS      0x10
114
#define RAM_SAVE_FLAG_CONTINUE 0x20
115
#define RAM_SAVE_FLAG_XBZRLE   0x40
116

    
117
#ifdef __ALTIVEC__
118
#include <altivec.h>
119
#define VECTYPE        vector unsigned char
120
#define SPLAT(p)       vec_splat(vec_ld(0, p), 0)
121
#define ALL_EQ(v1, v2) vec_all_eq(v1, v2)
122
/* altivec.h may redefine the bool macro as vector type.
123
 * Reset it to POSIX semantics. */
124
#undef bool
125
#define bool _Bool
126
#elif defined __SSE2__
127
#include <emmintrin.h>
128
#define VECTYPE        __m128i
129
#define SPLAT(p)       _mm_set1_epi8(*(p))
130
#define ALL_EQ(v1, v2) (_mm_movemask_epi8(_mm_cmpeq_epi8(v1, v2)) == 0xFFFF)
131
#else
132
#define VECTYPE        unsigned long
133
#define SPLAT(p)       (*(p) * (~0UL / 255))
134
#define ALL_EQ(v1, v2) ((v1) == (v2))
135
#endif
136

    
137

    
138
static struct defconfig_file {
139
    const char *filename;
140
    /* Indicates it is an user config file (disabled by -no-user-config) */
141
    bool userconfig;
142
} default_config_files[] = {
143
    { CONFIG_QEMU_CONFDIR "/qemu.conf",                   true },
144
    { CONFIG_QEMU_CONFDIR "/target-" TARGET_ARCH ".conf", true },
145
    { NULL }, /* end of list */
146
};
147

    
148

    
149
int qemu_read_default_config_files(bool userconfig)
150
{
151
    int ret;
152
    struct defconfig_file *f;
153

    
154
    for (f = default_config_files; f->filename; f++) {
155
        if (!userconfig && f->userconfig) {
156
            continue;
157
        }
158
        ret = qemu_read_config_file(f->filename);
159
        if (ret < 0 && ret != -ENOENT) {
160
            return ret;
161
        }
162
    }
163
    
164
    return 0;
165
}
166

    
167
static int is_dup_page(uint8_t *page)
168
{
169
    VECTYPE *p = (VECTYPE *)page;
170
    VECTYPE val = SPLAT(page);
171
    int i;
172

    
173
    for (i = 0; i < TARGET_PAGE_SIZE / sizeof(VECTYPE); i++) {
174
        if (!ALL_EQ(val, p[i])) {
175
            return 0;
176
        }
177
    }
178

    
179
    return 1;
180
}
181

    
182
/* struct contains XBZRLE cache and a static page
183
   used by the compression */
184
static struct {
185
    /* buffer used for XBZRLE encoding */
186
    uint8_t *encoded_buf;
187
    /* buffer for storing page content */
188
    uint8_t *current_buf;
189
    /* buffer used for XBZRLE decoding */
190
    uint8_t *decoded_buf;
191
    /* Cache for XBZRLE */
192
    PageCache *cache;
193
} XBZRLE = {
194
    .encoded_buf = NULL,
195
    .current_buf = NULL,
196
    .decoded_buf = NULL,
197
    .cache = NULL,
198
};
199

    
200

    
201
int64_t xbzrle_cache_resize(int64_t new_size)
202
{
203
    if (XBZRLE.cache != NULL) {
204
        return cache_resize(XBZRLE.cache, new_size / TARGET_PAGE_SIZE) *
205
            TARGET_PAGE_SIZE;
206
    }
207
    return pow2floor(new_size);
208
}
209

    
210
/* accounting for migration statistics */
211
typedef struct AccountingInfo {
212
    uint64_t dup_pages;
213
    uint64_t norm_pages;
214
    uint64_t iterations;
215
    uint64_t xbzrle_bytes;
216
    uint64_t xbzrle_pages;
217
    uint64_t xbzrle_cache_miss;
218
    uint64_t xbzrle_overflows;
219
} AccountingInfo;
220

    
221
static AccountingInfo acct_info;
222

    
223
static void acct_clear(void)
224
{
225
    memset(&acct_info, 0, sizeof(acct_info));
226
}
227

    
228
uint64_t dup_mig_bytes_transferred(void)
229
{
230
    return acct_info.dup_pages * TARGET_PAGE_SIZE;
231
}
232

    
233
uint64_t dup_mig_pages_transferred(void)
234
{
235
    return acct_info.dup_pages;
236
}
237

    
238
uint64_t norm_mig_bytes_transferred(void)
239
{
240
    return acct_info.norm_pages * TARGET_PAGE_SIZE;
241
}
242

    
243
uint64_t norm_mig_pages_transferred(void)
244
{
245
    return acct_info.norm_pages;
246
}
247

    
248
uint64_t xbzrle_mig_bytes_transferred(void)
249
{
250
    return acct_info.xbzrle_bytes;
251
}
252

    
253
uint64_t xbzrle_mig_pages_transferred(void)
254
{
255
    return acct_info.xbzrle_pages;
256
}
257

    
258
uint64_t xbzrle_mig_pages_cache_miss(void)
259
{
260
    return acct_info.xbzrle_cache_miss;
261
}
262

    
263
uint64_t xbzrle_mig_pages_overflow(void)
264
{
265
    return acct_info.xbzrle_overflows;
266
}
267

    
268
static size_t save_block_hdr(QEMUFile *f, RAMBlock *block, ram_addr_t offset,
269
                             int cont, int flag)
270
{
271
    size_t size;
272

    
273
    qemu_put_be64(f, offset | cont | flag);
274
    size = 8;
275

    
276
    if (!cont) {
277
        qemu_put_byte(f, strlen(block->idstr));
278
        qemu_put_buffer(f, (uint8_t *)block->idstr,
279
                        strlen(block->idstr));
280
        size += 1 + strlen(block->idstr);
281
    }
282
    return size;
283
}
284

    
285
#define ENCODING_FLAG_XBZRLE 0x1
286

    
287
static int save_xbzrle_page(QEMUFile *f, uint8_t *current_data,
288
                            ram_addr_t current_addr, RAMBlock *block,
289
                            ram_addr_t offset, int cont, bool last_stage)
290
{
291
    int encoded_len = 0, bytes_sent = -1;
292
    uint8_t *prev_cached_page;
293

    
294
    if (!cache_is_cached(XBZRLE.cache, current_addr)) {
295
        if (!last_stage) {
296
            cache_insert(XBZRLE.cache, current_addr,
297
                         g_memdup(current_data, TARGET_PAGE_SIZE));
298
        }
299
        acct_info.xbzrle_cache_miss++;
300
        return -1;
301
    }
302

    
303
    prev_cached_page = get_cached_data(XBZRLE.cache, current_addr);
304

    
305
    /* save current buffer into memory */
306
    memcpy(XBZRLE.current_buf, current_data, TARGET_PAGE_SIZE);
307

    
308
    /* XBZRLE encoding (if there is no overflow) */
309
    encoded_len = xbzrle_encode_buffer(prev_cached_page, XBZRLE.current_buf,
310
                                       TARGET_PAGE_SIZE, XBZRLE.encoded_buf,
311
                                       TARGET_PAGE_SIZE);
312
    if (encoded_len == 0) {
313
        DPRINTF("Skipping unmodified page\n");
314
        return 0;
315
    } else if (encoded_len == -1) {
316
        DPRINTF("Overflow\n");
317
        acct_info.xbzrle_overflows++;
318
        /* update data in the cache */
319
        memcpy(prev_cached_page, current_data, TARGET_PAGE_SIZE);
320
        return -1;
321
    }
322

    
323
    /* we need to update the data in the cache, in order to get the same data */
324
    if (!last_stage) {
325
        memcpy(prev_cached_page, XBZRLE.current_buf, TARGET_PAGE_SIZE);
326
    }
327

    
328
    /* Send XBZRLE based compressed page */
329
    bytes_sent = save_block_hdr(f, block, offset, cont, RAM_SAVE_FLAG_XBZRLE);
330
    qemu_put_byte(f, ENCODING_FLAG_XBZRLE);
331
    qemu_put_be16(f, encoded_len);
332
    qemu_put_buffer(f, XBZRLE.encoded_buf, encoded_len);
333
    bytes_sent += encoded_len + 1 + 2;
334
    acct_info.xbzrle_pages++;
335
    acct_info.xbzrle_bytes += bytes_sent;
336

    
337
    return bytes_sent;
338
}
339

    
340

    
341
/* This is the last block that we have visited serching for dirty pages
342
 */
343
static RAMBlock *last_seen_block;
344
/* This is the last block from where we have sent data */
345
static RAMBlock *last_sent_block;
346
static ram_addr_t last_offset;
347
static unsigned long *migration_bitmap;
348
static uint64_t migration_dirty_pages;
349
static uint32_t last_version;
350

    
351
static inline
352
ram_addr_t migration_bitmap_find_and_reset_dirty(MemoryRegion *mr,
353
                                                 ram_addr_t start)
354
{
355
    unsigned long base = mr->ram_addr >> TARGET_PAGE_BITS;
356
    unsigned long nr = base + (start >> TARGET_PAGE_BITS);
357
    unsigned long size = base + (int128_get64(mr->size) >> TARGET_PAGE_BITS);
358

    
359
    unsigned long next = find_next_bit(migration_bitmap, size, nr);
360

    
361
    if (next < size) {
362
        clear_bit(next, migration_bitmap);
363
        migration_dirty_pages--;
364
    }
365
    return (next - base) << TARGET_PAGE_BITS;
366
}
367

    
368
static inline bool migration_bitmap_set_dirty(MemoryRegion *mr,
369
                                              ram_addr_t offset)
370
{
371
    bool ret;
372
    int nr = (mr->ram_addr + offset) >> TARGET_PAGE_BITS;
373

    
374
    ret = test_and_set_bit(nr, migration_bitmap);
375

    
376
    if (!ret) {
377
        migration_dirty_pages++;
378
    }
379
    return ret;
380
}
381

    
382
static void migration_bitmap_sync(void)
383
{
384
    RAMBlock *block;
385
    ram_addr_t addr;
386
    uint64_t num_dirty_pages_init = migration_dirty_pages;
387
    MigrationState *s = migrate_get_current();
388
    static int64_t start_time;
389
    static int64_t num_dirty_pages_period;
390
    int64_t end_time;
391

    
392
    if (!start_time) {
393
        start_time = qemu_get_clock_ms(rt_clock);
394
    }
395

    
396
    trace_migration_bitmap_sync_start();
397
    memory_global_sync_dirty_bitmap(get_system_memory());
398

    
399
    QTAILQ_FOREACH(block, &ram_list.blocks, next) {
400
        for (addr = 0; addr < block->length; addr += TARGET_PAGE_SIZE) {
401
            if (memory_region_test_and_clear_dirty(block->mr,
402
                                                   addr, TARGET_PAGE_SIZE,
403
                                                   DIRTY_MEMORY_MIGRATION)) {
404
                migration_bitmap_set_dirty(block->mr, addr);
405
            }
406
        }
407
    }
408
    trace_migration_bitmap_sync_end(migration_dirty_pages
409
                                    - num_dirty_pages_init);
410
    num_dirty_pages_period += migration_dirty_pages - num_dirty_pages_init;
411
    end_time = qemu_get_clock_ms(rt_clock);
412

    
413
    /* more than 1 second = 1000 millisecons */
414
    if (end_time > start_time + 1000) {
415
        s->dirty_pages_rate = num_dirty_pages_period * 1000
416
            / (end_time - start_time);
417
        start_time = end_time;
418
        num_dirty_pages_period = 0;
419
    }
420
}
421

    
422
/*
423
 * ram_save_block: Writes a page of memory to the stream f
424
 *
425
 * Returns:  The number of bytes written.
426
 *           0 means no dirty pages
427
 */
428

    
429
static int ram_save_block(QEMUFile *f, bool last_stage)
430
{
431
    RAMBlock *block = last_seen_block;
432
    ram_addr_t offset = last_offset;
433
    bool complete_round = false;
434
    int bytes_sent = 0;
435
    MemoryRegion *mr;
436
    ram_addr_t current_addr;
437

    
438
    if (!block)
439
        block = QTAILQ_FIRST(&ram_list.blocks);
440

    
441
    while (true) {
442
        mr = block->mr;
443
        offset = migration_bitmap_find_and_reset_dirty(mr, offset);
444
        if (complete_round && block == last_seen_block &&
445
            offset >= last_offset) {
446
            break;
447
        }
448
        if (offset >= block->length) {
449
            offset = 0;
450
            block = QTAILQ_NEXT(block, next);
451
            if (!block) {
452
                block = QTAILQ_FIRST(&ram_list.blocks);
453
                complete_round = true;
454
            }
455
        } else {
456
            uint8_t *p;
457
            int cont = (block == last_sent_block) ?
458
                RAM_SAVE_FLAG_CONTINUE : 0;
459

    
460
            p = memory_region_get_ram_ptr(mr) + offset;
461

    
462
            /* In doubt sent page as normal */
463
            bytes_sent = -1;
464
            if (is_dup_page(p)) {
465
                acct_info.dup_pages++;
466
                bytes_sent = save_block_hdr(f, block, offset, cont,
467
                                            RAM_SAVE_FLAG_COMPRESS);
468
                qemu_put_byte(f, *p);
469
                bytes_sent += 1;
470
            } else if (migrate_use_xbzrle()) {
471
                current_addr = block->offset + offset;
472
                bytes_sent = save_xbzrle_page(f, p, current_addr, block,
473
                                              offset, cont, last_stage);
474
                if (!last_stage) {
475
                    p = get_cached_data(XBZRLE.cache, current_addr);
476
                }
477
            }
478

    
479
            /* XBZRLE overflow or normal page */
480
            if (bytes_sent == -1) {
481
                bytes_sent = save_block_hdr(f, block, offset, cont, RAM_SAVE_FLAG_PAGE);
482
                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
483
                bytes_sent += TARGET_PAGE_SIZE;
484
                acct_info.norm_pages++;
485
            }
486

    
487
            /* if page is unmodified, continue to the next */
488
            if (bytes_sent > 0) {
489
                last_sent_block = block;
490
                break;
491
            }
492
        }
493
    }
494
    last_seen_block = block;
495
    last_offset = offset;
496

    
497
    return bytes_sent;
498
}
499

    
500
static uint64_t bytes_transferred;
501

    
502
static ram_addr_t ram_save_remaining(void)
503
{
504
    return migration_dirty_pages;
505
}
506

    
507
uint64_t ram_bytes_remaining(void)
508
{
509
    return ram_save_remaining() * TARGET_PAGE_SIZE;
510
}
511

    
512
uint64_t ram_bytes_transferred(void)
513
{
514
    return bytes_transferred;
515
}
516

    
517
uint64_t ram_bytes_total(void)
518
{
519
    RAMBlock *block;
520
    uint64_t total = 0;
521

    
522
    QTAILQ_FOREACH(block, &ram_list.blocks, next)
523
        total += block->length;
524

    
525
    return total;
526
}
527

    
528
static void migration_end(void)
529
{
530
    if (migration_bitmap) {
531
        memory_global_dirty_log_stop();
532
        g_free(migration_bitmap);
533
        migration_bitmap = NULL;
534
    }
535

    
536
    if (XBZRLE.cache) {
537
        cache_fini(XBZRLE.cache);
538
        g_free(XBZRLE.cache);
539
        g_free(XBZRLE.encoded_buf);
540
        g_free(XBZRLE.current_buf);
541
        g_free(XBZRLE.decoded_buf);
542
        XBZRLE.cache = NULL;
543
    }
544
}
545

    
546
static void ram_migration_cancel(void *opaque)
547
{
548
    migration_end();
549
}
550

    
551
static void reset_ram_globals(void)
552
{
553
    last_seen_block = NULL;
554
    last_sent_block = NULL;
555
    last_offset = 0;
556
    last_version = ram_list.version;
557
}
558

    
559
#define MAX_WAIT 50 /* ms, half buffered_file limit */
560

    
561
static int ram_save_setup(QEMUFile *f, void *opaque)
562
{
563
    RAMBlock *block;
564
    int64_t ram_pages = last_ram_offset() >> TARGET_PAGE_BITS;
565

    
566
    migration_bitmap = bitmap_new(ram_pages);
567
    bitmap_set(migration_bitmap, 0, ram_pages);
568
    migration_dirty_pages = ram_pages;
569

    
570
    qemu_mutex_lock_ramlist();
571
    bytes_transferred = 0;
572
    reset_ram_globals();
573

    
574
    if (migrate_use_xbzrle()) {
575
        XBZRLE.cache = cache_init(migrate_xbzrle_cache_size() /
576
                                  TARGET_PAGE_SIZE,
577
                                  TARGET_PAGE_SIZE);
578
        if (!XBZRLE.cache) {
579
            DPRINTF("Error creating cache\n");
580
            return -1;
581
        }
582
        XBZRLE.encoded_buf = g_malloc0(TARGET_PAGE_SIZE);
583
        XBZRLE.current_buf = g_malloc(TARGET_PAGE_SIZE);
584
        acct_clear();
585
    }
586

    
587
    memory_global_dirty_log_start();
588
    migration_bitmap_sync();
589

    
590
    qemu_put_be64(f, ram_bytes_total() | RAM_SAVE_FLAG_MEM_SIZE);
591

    
592
    QTAILQ_FOREACH(block, &ram_list.blocks, next) {
593
        qemu_put_byte(f, strlen(block->idstr));
594
        qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr));
595
        qemu_put_be64(f, block->length);
596
    }
597

    
598
    qemu_mutex_unlock_ramlist();
599
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
600

    
601
    return 0;
602
}
603

    
604
static int ram_save_iterate(QEMUFile *f, void *opaque)
605
{
606
    int ret;
607
    int i;
608
    int64_t t0;
609
    int total_sent = 0;
610

    
611
    qemu_mutex_lock_ramlist();
612

    
613
    if (ram_list.version != last_version) {
614
        reset_ram_globals();
615
    }
616

    
617
    t0 = qemu_get_clock_ns(rt_clock);
618
    i = 0;
619
    while ((ret = qemu_file_rate_limit(f)) == 0) {
620
        int bytes_sent;
621

    
622
        bytes_sent = ram_save_block(f, false);
623
        /* no more blocks to sent */
624
        if (bytes_sent == 0) {
625
            break;
626
        }
627
        total_sent += bytes_sent;
628
        acct_info.iterations++;
629
        /* we want to check in the 1st loop, just in case it was the 1st time
630
           and we had to sync the dirty bitmap.
631
           qemu_get_clock_ns() is a bit expensive, so we only check each some
632
           iterations
633
        */
634
        if ((i & 63) == 0) {
635
            uint64_t t1 = (qemu_get_clock_ns(rt_clock) - t0) / 1000000;
636
            if (t1 > MAX_WAIT) {
637
                DPRINTF("big wait: %" PRIu64 " milliseconds, %d iterations\n",
638
                        t1, i);
639
                break;
640
            }
641
        }
642
        i++;
643
    }
644

    
645
    qemu_mutex_unlock_ramlist();
646

    
647
    if (ret < 0) {
648
        bytes_transferred += total_sent;
649
        return ret;
650
    }
651

    
652
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
653
    total_sent += 8;
654
    bytes_transferred += total_sent;
655

    
656
    return total_sent;
657
}
658

    
659
static int ram_save_complete(QEMUFile *f, void *opaque)
660
{
661
    qemu_mutex_lock_ramlist();
662
    migration_bitmap_sync();
663

    
664
    /* try transferring iterative blocks of memory */
665

    
666
    /* flush all remaining blocks regardless of rate limiting */
667
    while (true) {
668
        int bytes_sent;
669

    
670
        bytes_sent = ram_save_block(f, true);
671
        /* no more blocks to sent */
672
        if (bytes_sent == 0) {
673
            break;
674
        }
675
        bytes_transferred += bytes_sent;
676
    }
677
    migration_end();
678

    
679
    qemu_mutex_unlock_ramlist();
680
    qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
681

    
682
    return 0;
683
}
684

    
685
static uint64_t ram_save_pending(QEMUFile *f, void *opaque, uint64_t max_size)
686
{
687
    uint64_t remaining_size;
688

    
689
    remaining_size = ram_save_remaining() * TARGET_PAGE_SIZE;
690

    
691
    if (remaining_size < max_size) {
692
        migration_bitmap_sync();
693
        remaining_size = ram_save_remaining() * TARGET_PAGE_SIZE;
694
    }
695
    return remaining_size;
696
}
697

    
698
static int load_xbzrle(QEMUFile *f, ram_addr_t addr, void *host)
699
{
700
    int ret, rc = 0;
701
    unsigned int xh_len;
702
    int xh_flags;
703

    
704
    if (!XBZRLE.decoded_buf) {
705
        XBZRLE.decoded_buf = g_malloc(TARGET_PAGE_SIZE);
706
    }
707

    
708
    /* extract RLE header */
709
    xh_flags = qemu_get_byte(f);
710
    xh_len = qemu_get_be16(f);
711

    
712
    if (xh_flags != ENCODING_FLAG_XBZRLE) {
713
        fprintf(stderr, "Failed to load XBZRLE page - wrong compression!\n");
714
        return -1;
715
    }
716

    
717
    if (xh_len > TARGET_PAGE_SIZE) {
718
        fprintf(stderr, "Failed to load XBZRLE page - len overflow!\n");
719
        return -1;
720
    }
721
    /* load data and decode */
722
    qemu_get_buffer(f, XBZRLE.decoded_buf, xh_len);
723

    
724
    /* decode RLE */
725
    ret = xbzrle_decode_buffer(XBZRLE.decoded_buf, xh_len, host,
726
                               TARGET_PAGE_SIZE);
727
    if (ret == -1) {
728
        fprintf(stderr, "Failed to load XBZRLE page - decode error!\n");
729
        rc = -1;
730
    } else  if (ret > TARGET_PAGE_SIZE) {
731
        fprintf(stderr, "Failed to load XBZRLE page - size %d exceeds %d!\n",
732
                ret, TARGET_PAGE_SIZE);
733
        abort();
734
    }
735

    
736
    return rc;
737
}
738

    
739
static inline void *host_from_stream_offset(QEMUFile *f,
740
                                            ram_addr_t offset,
741
                                            int flags)
742
{
743
    static RAMBlock *block = NULL;
744
    char id[256];
745
    uint8_t len;
746

    
747
    if (flags & RAM_SAVE_FLAG_CONTINUE) {
748
        if (!block) {
749
            fprintf(stderr, "Ack, bad migration stream!\n");
750
            return NULL;
751
        }
752

    
753
        return memory_region_get_ram_ptr(block->mr) + offset;
754
    }
755

    
756
    len = qemu_get_byte(f);
757
    qemu_get_buffer(f, (uint8_t *)id, len);
758
    id[len] = 0;
759

    
760
    QTAILQ_FOREACH(block, &ram_list.blocks, next) {
761
        if (!strncmp(id, block->idstr, sizeof(id)))
762
            return memory_region_get_ram_ptr(block->mr) + offset;
763
    }
764

    
765
    fprintf(stderr, "Can't find block %s!\n", id);
766
    return NULL;
767
}
768

    
769
static int ram_load(QEMUFile *f, void *opaque, int version_id)
770
{
771
    ram_addr_t addr;
772
    int flags, ret = 0;
773
    int error;
774
    static uint64_t seq_iter;
775

    
776
    seq_iter++;
777

    
778
    if (version_id < 4 || version_id > 4) {
779
        return -EINVAL;
780
    }
781

    
782
    do {
783
        addr = qemu_get_be64(f);
784

    
785
        flags = addr & ~TARGET_PAGE_MASK;
786
        addr &= TARGET_PAGE_MASK;
787

    
788
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
789
            if (version_id == 4) {
790
                /* Synchronize RAM block list */
791
                char id[256];
792
                ram_addr_t length;
793
                ram_addr_t total_ram_bytes = addr;
794

    
795
                while (total_ram_bytes) {
796
                    RAMBlock *block;
797
                    uint8_t len;
798

    
799
                    len = qemu_get_byte(f);
800
                    qemu_get_buffer(f, (uint8_t *)id, len);
801
                    id[len] = 0;
802
                    length = qemu_get_be64(f);
803

    
804
                    QTAILQ_FOREACH(block, &ram_list.blocks, next) {
805
                        if (!strncmp(id, block->idstr, sizeof(id))) {
806
                            if (block->length != length) {
807
                                ret =  -EINVAL;
808
                                goto done;
809
                            }
810
                            break;
811
                        }
812
                    }
813

    
814
                    if (!block) {
815
                        fprintf(stderr, "Unknown ramblock \"%s\", cannot "
816
                                "accept migration\n", id);
817
                        ret = -EINVAL;
818
                        goto done;
819
                    }
820

    
821
                    total_ram_bytes -= length;
822
                }
823
            }
824
        }
825

    
826
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
827
            void *host;
828
            uint8_t ch;
829

    
830
            host = host_from_stream_offset(f, addr, flags);
831
            if (!host) {
832
                return -EINVAL;
833
            }
834

    
835
            ch = qemu_get_byte(f);
836
            memset(host, ch, TARGET_PAGE_SIZE);
837
#ifndef _WIN32
838
            if (ch == 0 &&
839
                (!kvm_enabled() || kvm_has_sync_mmu()) &&
840
                getpagesize() <= TARGET_PAGE_SIZE) {
841
                qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
842
            }
843
#endif
844
        } else if (flags & RAM_SAVE_FLAG_PAGE) {
845
            void *host;
846

    
847
            host = host_from_stream_offset(f, addr, flags);
848
            if (!host) {
849
                return -EINVAL;
850
            }
851

    
852
            qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
853
        } else if (flags & RAM_SAVE_FLAG_XBZRLE) {
854
            if (!migrate_use_xbzrle()) {
855
                return -EINVAL;
856
            }
857
            void *host = host_from_stream_offset(f, addr, flags);
858
            if (!host) {
859
                return -EINVAL;
860
            }
861

    
862
            if (load_xbzrle(f, addr, host) < 0) {
863
                ret = -EINVAL;
864
                goto done;
865
            }
866
        }
867
        error = qemu_file_get_error(f);
868
        if (error) {
869
            ret = error;
870
            goto done;
871
        }
872
    } while (!(flags & RAM_SAVE_FLAG_EOS));
873

    
874
done:
875
    DPRINTF("Completed load of VM with exit code %d seq iteration "
876
            "%" PRIu64 "\n", ret, seq_iter);
877
    return ret;
878
}
879

    
880
SaveVMHandlers savevm_ram_handlers = {
881
    .save_live_setup = ram_save_setup,
882
    .save_live_iterate = ram_save_iterate,
883
    .save_live_complete = ram_save_complete,
884
    .save_live_pending = ram_save_pending,
885
    .load_state = ram_load,
886
    .cancel = ram_migration_cancel,
887
};
888

    
889
#ifdef HAS_AUDIO
890
struct soundhw {
891
    const char *name;
892
    const char *descr;
893
    int enabled;
894
    int isa;
895
    union {
896
        int (*init_isa) (ISABus *bus);
897
        int (*init_pci) (PCIBus *bus);
898
    } init;
899
};
900

    
901
static struct soundhw soundhw[] = {
902
#ifdef HAS_AUDIO_CHOICE
903
#ifdef CONFIG_PCSPK
904
    {
905
        "pcspk",
906
        "PC speaker",
907
        0,
908
        1,
909
        { .init_isa = pcspk_audio_init }
910
    },
911
#endif
912

    
913
#ifdef CONFIG_SB16
914
    {
915
        "sb16",
916
        "Creative Sound Blaster 16",
917
        0,
918
        1,
919
        { .init_isa = SB16_init }
920
    },
921
#endif
922

    
923
#ifdef CONFIG_CS4231A
924
    {
925
        "cs4231a",
926
        "CS4231A",
927
        0,
928
        1,
929
        { .init_isa = cs4231a_init }
930
    },
931
#endif
932

    
933
#ifdef CONFIG_ADLIB
934
    {
935
        "adlib",
936
#ifdef HAS_YMF262
937
        "Yamaha YMF262 (OPL3)",
938
#else
939
        "Yamaha YM3812 (OPL2)",
940
#endif
941
        0,
942
        1,
943
        { .init_isa = Adlib_init }
944
    },
945
#endif
946

    
947
#ifdef CONFIG_GUS
948
    {
949
        "gus",
950
        "Gravis Ultrasound GF1",
951
        0,
952
        1,
953
        { .init_isa = GUS_init }
954
    },
955
#endif
956

    
957
#ifdef CONFIG_AC97
958
    {
959
        "ac97",
960
        "Intel 82801AA AC97 Audio",
961
        0,
962
        0,
963
        { .init_pci = ac97_init }
964
    },
965
#endif
966

    
967
#ifdef CONFIG_ES1370
968
    {
969
        "es1370",
970
        "ENSONIQ AudioPCI ES1370",
971
        0,
972
        0,
973
        { .init_pci = es1370_init }
974
    },
975
#endif
976

    
977
#ifdef CONFIG_HDA
978
    {
979
        "hda",
980
        "Intel HD Audio",
981
        0,
982
        0,
983
        { .init_pci = intel_hda_and_codec_init }
984
    },
985
#endif
986

    
987
#endif /* HAS_AUDIO_CHOICE */
988

    
989
    { NULL, NULL, 0, 0, { NULL } }
990
};
991

    
992
void select_soundhw(const char *optarg)
993
{
994
    struct soundhw *c;
995

    
996
    if (is_help_option(optarg)) {
997
    show_valid_cards:
998

    
999
#ifdef HAS_AUDIO_CHOICE
1000
        printf("Valid sound card names (comma separated):\n");
1001
        for (c = soundhw; c->name; ++c) {
1002
            printf ("%-11s %s\n", c->name, c->descr);
1003
        }
1004
        printf("\n-soundhw all will enable all of the above\n");
1005
#else
1006
        printf("Machine has no user-selectable audio hardware "
1007
               "(it may or may not have always-present audio hardware).\n");
1008
#endif
1009
        exit(!is_help_option(optarg));
1010
    }
1011
    else {
1012
        size_t l;
1013
        const char *p;
1014
        char *e;
1015
        int bad_card = 0;
1016

    
1017
        if (!strcmp(optarg, "all")) {
1018
            for (c = soundhw; c->name; ++c) {
1019
                c->enabled = 1;
1020
            }
1021
            return;
1022
        }
1023

    
1024
        p = optarg;
1025
        while (*p) {
1026
            e = strchr(p, ',');
1027
            l = !e ? strlen(p) : (size_t) (e - p);
1028

    
1029
            for (c = soundhw; c->name; ++c) {
1030
                if (!strncmp(c->name, p, l) && !c->name[l]) {
1031
                    c->enabled = 1;
1032
                    break;
1033
                }
1034
            }
1035

    
1036
            if (!c->name) {
1037
                if (l > 80) {
1038
                    fprintf(stderr,
1039
                            "Unknown sound card name (too big to show)\n");
1040
                }
1041
                else {
1042
                    fprintf(stderr, "Unknown sound card name `%.*s'\n",
1043
                            (int) l, p);
1044
                }
1045
                bad_card = 1;
1046
            }
1047
            p += l + (e != NULL);
1048
        }
1049

    
1050
        if (bad_card) {
1051
            goto show_valid_cards;
1052
        }
1053
    }
1054
}
1055

    
1056
void audio_init(ISABus *isa_bus, PCIBus *pci_bus)
1057
{
1058
    struct soundhw *c;
1059

    
1060
    for (c = soundhw; c->name; ++c) {
1061
        if (c->enabled) {
1062
            if (c->isa) {
1063
                if (isa_bus) {
1064
                    c->init.init_isa(isa_bus);
1065
                }
1066
            } else {
1067
                if (pci_bus) {
1068
                    c->init.init_pci(pci_bus);
1069
                }
1070
            }
1071
        }
1072
    }
1073
}
1074
#else
1075
void select_soundhw(const char *optarg)
1076
{
1077
}
1078
void audio_init(ISABus *isa_bus, PCIBus *pci_bus)
1079
{
1080
}
1081
#endif
1082

    
1083
int qemu_uuid_parse(const char *str, uint8_t *uuid)
1084
{
1085
    int ret;
1086

    
1087
    if (strlen(str) != 36) {
1088
        return -1;
1089
    }
1090

    
1091
    ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
1092
                 &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
1093
                 &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14],
1094
                 &uuid[15]);
1095

    
1096
    if (ret != 16) {
1097
        return -1;
1098
    }
1099
#ifdef TARGET_I386
1100
    smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
1101
#endif
1102
    return 0;
1103
}
1104

    
1105
void do_acpitable_option(const char *optarg)
1106
{
1107
#ifdef TARGET_I386
1108
    if (acpi_table_add(optarg) < 0) {
1109
        fprintf(stderr, "Wrong acpi table provided\n");
1110
        exit(1);
1111
    }
1112
#endif
1113
}
1114

    
1115
void do_smbios_option(const char *optarg)
1116
{
1117
#ifdef TARGET_I386
1118
    if (smbios_entry_add(optarg) < 0) {
1119
        fprintf(stderr, "Wrong smbios provided\n");
1120
        exit(1);
1121
    }
1122
#endif
1123
}
1124

    
1125
void cpudef_init(void)
1126
{
1127
#if defined(cpudef_setup)
1128
    cpudef_setup(); /* parse cpu definitions in target config file */
1129
#endif
1130
}
1131

    
1132
int audio_available(void)
1133
{
1134
#ifdef HAS_AUDIO
1135
    return 1;
1136
#else
1137
    return 0;
1138
#endif
1139
}
1140

    
1141
int tcg_available(void)
1142
{
1143
    return 1;
1144
}
1145

    
1146
int kvm_available(void)
1147
{
1148
#ifdef CONFIG_KVM
1149
    return 1;
1150
#else
1151
    return 0;
1152
#endif
1153
}
1154

    
1155
int xen_available(void)
1156
{
1157
#ifdef CONFIG_XEN
1158
    return 1;
1159
#else
1160
    return 0;
1161
#endif
1162
}
1163

    
1164

    
1165
TargetInfo *qmp_query_target(Error **errp)
1166
{
1167
    TargetInfo *info = g_malloc0(sizeof(*info));
1168

    
1169
    info->arch = TARGET_TYPE;
1170

    
1171
    return info;
1172
}