Home | History | Annotate | Download | only in qemu
      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 "sysemu/arch_init.h"
     35 #include "audio/audio.h"
     36 #include "hw/irq.h"
     37 #include "hw/pci/pci.h"
     38 #include "hw/audiodev.h"
     39 #include "sysemu/kvm.h"
     40 #include "migration/migration.h"
     41 #include "migration/qemu-file.h"
     42 #include "net/net.h"
     43 #include "exec/gdbstub.h"
     44 #include "hw/i386/smbios.h"
     45 
     46 #ifdef TARGET_SPARC
     47 int graphic_width = 1024;
     48 int graphic_height = 768;
     49 int graphic_depth = 8;
     50 #else
     51 int graphic_width = 800;
     52 int graphic_height = 600;
     53 int graphic_depth = 15;
     54 #endif
     55 
     56 const char arch_config_name[] = CONFIG_QEMU_SHAREDIR "/target-" TARGET_ARCH ".conf";
     57 
     58 #if defined(TARGET_ALPHA)
     59 #define QEMU_ARCH QEMU_ARCH_ALPHA
     60 #elif defined(TARGET_ARM)
     61 #define QEMU_ARCH QEMU_ARCH_ARM
     62 #elif defined(TARGET_CRIS)
     63 #define QEMU_ARCH QEMU_ARCH_CRIS
     64 #elif defined(TARGET_I386)
     65 #define QEMU_ARCH QEMU_ARCH_I386
     66 #elif defined(TARGET_M68K)
     67 #define QEMU_ARCH QEMU_ARCH_M68K
     68 #elif defined(TARGET_LM32)
     69 #define QEMU_ARCH QEMU_ARCH_LM32
     70 #elif defined(TARGET_MICROBLAZE)
     71 #define QEMU_ARCH QEMU_ARCH_MICROBLAZE
     72 #elif defined(TARGET_MIPS)
     73 #define QEMU_ARCH QEMU_ARCH_MIPS
     74 #elif defined(TARGET_PPC)
     75 #define QEMU_ARCH QEMU_ARCH_PPC
     76 #elif defined(TARGET_S390X)
     77 #define QEMU_ARCH QEMU_ARCH_S390X
     78 #elif defined(TARGET_SH4)
     79 #define QEMU_ARCH QEMU_ARCH_SH4
     80 #elif defined(TARGET_SPARC)
     81 #define QEMU_ARCH QEMU_ARCH_SPARC
     82 #endif
     83 
     84 const uint32_t arch_type = QEMU_ARCH;
     85 
     86 #if 1
     87 /***********************************************************/
     88 /* ram save/restore */
     89 
     90 #define RAM_SAVE_FLAG_FULL     0x01 /* Obsolete, not used anymore */
     91 #define RAM_SAVE_FLAG_COMPRESS 0x02
     92 #define RAM_SAVE_FLAG_MEM_SIZE 0x04
     93 #define RAM_SAVE_FLAG_PAGE     0x08
     94 #define RAM_SAVE_FLAG_EOS      0x10
     95 #define RAM_SAVE_FLAG_CONTINUE 0x20
     96 
     97 static int is_dup_page(uint8_t *page, uint8_t ch)
     98 {
     99     uint32_t val = ch << 24 | ch << 16 | ch << 8 | ch;
    100     uint32_t *array = (uint32_t *)page;
    101     int i;
    102 
    103     for (i = 0; i < (TARGET_PAGE_SIZE / 4); i++) {
    104         if (array[i] != val) {
    105             return 0;
    106         }
    107     }
    108 
    109     return 1;
    110 }
    111 
    112 static RAMBlock *last_block;
    113 static ram_addr_t last_offset;
    114 
    115 static int ram_save_block(QEMUFile *f)
    116 {
    117     RAMBlock *block = last_block;
    118     ram_addr_t offset = last_offset;
    119     ram_addr_t current_addr;
    120     int bytes_sent = 0;
    121 
    122     if (!block)
    123         block = QTAILQ_FIRST(&ram_list.blocks);
    124 
    125     current_addr = block->offset + offset;
    126 
    127     do {
    128         if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
    129             uint8_t *p;
    130             int cont = (block == last_block) ? RAM_SAVE_FLAG_CONTINUE : 0;
    131 
    132             cpu_physical_memory_reset_dirty(current_addr,
    133                                             current_addr + TARGET_PAGE_SIZE,
    134                                             MIGRATION_DIRTY_FLAG);
    135 
    136             p = block->host + offset;
    137 
    138             if (is_dup_page(p, *p)) {
    139                 qemu_put_be64(f, offset | cont | RAM_SAVE_FLAG_COMPRESS);
    140                 if (!cont) {
    141                     qemu_put_byte(f, strlen(block->idstr));
    142                     qemu_put_buffer(f, (uint8_t *)block->idstr,
    143                                     strlen(block->idstr));
    144                 }
    145                 qemu_put_byte(f, *p);
    146                 bytes_sent = 1;
    147             } else {
    148                 qemu_put_be64(f, offset | cont | RAM_SAVE_FLAG_PAGE);
    149                 if (!cont) {
    150                     qemu_put_byte(f, strlen(block->idstr));
    151                     qemu_put_buffer(f, (uint8_t *)block->idstr,
    152                                     strlen(block->idstr));
    153                 }
    154                 qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
    155                 bytes_sent = TARGET_PAGE_SIZE;
    156             }
    157 
    158             break;
    159         }
    160 
    161         offset += TARGET_PAGE_SIZE;
    162         if (offset >= block->length) {
    163             offset = 0;
    164             block = QTAILQ_NEXT(block, next);
    165             if (!block)
    166                 block = QTAILQ_FIRST(&ram_list.blocks);
    167         }
    168 
    169         current_addr = block->offset + offset;
    170 
    171     } while (current_addr != last_block->offset + last_offset);
    172 
    173     last_block = block;
    174     last_offset = offset;
    175 
    176     return bytes_sent;
    177 }
    178 
    179 static uint64_t bytes_transferred;
    180 
    181 static ram_addr_t ram_save_remaining(void)
    182 {
    183     RAMBlock *block;
    184     ram_addr_t count = 0;
    185 
    186     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    187         ram_addr_t addr;
    188         for (addr = block->offset; addr < block->offset + block->length;
    189              addr += TARGET_PAGE_SIZE) {
    190             if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG)) {
    191                 count++;
    192             }
    193         }
    194     }
    195 
    196     return count;
    197 }
    198 
    199 uint64_t ram_bytes_remaining(void)
    200 {
    201     return ram_save_remaining() * TARGET_PAGE_SIZE;
    202 }
    203 
    204 uint64_t ram_bytes_transferred(void)
    205 {
    206     return bytes_transferred;
    207 }
    208 
    209 uint64_t ram_bytes_total(void)
    210 {
    211     RAMBlock *block;
    212     uint64_t total = 0;
    213 
    214     QTAILQ_FOREACH(block, &ram_list.blocks, next)
    215         total += block->length;
    216 
    217     return total;
    218 }
    219 
    220 static int block_compar(const void *a, const void *b)
    221 {
    222     RAMBlock * const *ablock = a;
    223     RAMBlock * const *bblock = b;
    224     if ((*ablock)->offset < (*bblock)->offset) {
    225         return -1;
    226     } else if ((*ablock)->offset > (*bblock)->offset) {
    227         return 1;
    228     }
    229     return 0;
    230 }
    231 
    232 static void sort_ram_list(void)
    233 {
    234     RAMBlock *block, *nblock, **blocks;
    235     int n;
    236     n = 0;
    237     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    238         ++n;
    239     }
    240     blocks = g_malloc(n * sizeof *blocks);
    241     n = 0;
    242     QTAILQ_FOREACH_SAFE(block, &ram_list.blocks, next, nblock) {
    243         blocks[n++] = block;
    244         QTAILQ_REMOVE(&ram_list.blocks, block, next);
    245     }
    246     qsort(blocks, n, sizeof *blocks, block_compar);
    247     while (--n >= 0) {
    248         QTAILQ_INSERT_HEAD(&ram_list.blocks, blocks[n], next);
    249     }
    250     g_free(blocks);
    251 }
    252 
    253 int ram_save_live(QEMUFile *f, int stage, void *opaque)
    254 {
    255     ram_addr_t addr;
    256     uint64_t bytes_transferred_last;
    257     double bwidth = 0;
    258     uint64_t expected_time = 0;
    259 
    260     if (stage < 0) {
    261         cpu_physical_memory_set_dirty_tracking(0);
    262         return 0;
    263     }
    264 
    265     if (cpu_physical_sync_dirty_bitmap(0, TARGET_PHYS_ADDR_MAX) != 0) {
    266         qemu_file_set_error(f, -errno);
    267         return 0;
    268     }
    269 
    270     if (stage == 1) {
    271         RAMBlock *block;
    272         bytes_transferred = 0;
    273         last_block = NULL;
    274         last_offset = 0;
    275         sort_ram_list();
    276 
    277         /* Make sure all dirty bits are set */
    278         QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    279             for (addr = block->offset; addr < block->offset + block->length;
    280                  addr += TARGET_PAGE_SIZE) {
    281                 if (!cpu_physical_memory_get_dirty(addr,
    282                                                    MIGRATION_DIRTY_FLAG)) {
    283                     cpu_physical_memory_set_dirty(addr);
    284                 }
    285             }
    286         }
    287 
    288         /* Enable dirty memory tracking */
    289         cpu_physical_memory_set_dirty_tracking(1);
    290 
    291         qemu_put_be64(f, ram_bytes_total() | RAM_SAVE_FLAG_MEM_SIZE);
    292 
    293         QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    294             qemu_put_byte(f, strlen(block->idstr));
    295             qemu_put_buffer(f, (uint8_t *)block->idstr, strlen(block->idstr));
    296             qemu_put_be64(f, block->length);
    297         }
    298     }
    299 
    300     bytes_transferred_last = bytes_transferred;
    301     bwidth = qemu_clock_get_ns(QEMU_CLOCK_REALTIME);
    302 
    303     while (!qemu_file_rate_limit(f)) {
    304         int bytes_sent;
    305 
    306         bytes_sent = ram_save_block(f);
    307         bytes_transferred += bytes_sent;
    308         if (bytes_sent == 0) { /* no more blocks */
    309             break;
    310         }
    311     }
    312 
    313     bwidth = qemu_clock_get_ns(QEMU_CLOCK_REALTIME) - bwidth;
    314     bwidth = (bytes_transferred - bytes_transferred_last) / bwidth;
    315 
    316     /* if we haven't transferred anything this round, force expected_time to a
    317      * a very high value, but without crashing */
    318     if (bwidth == 0) {
    319         bwidth = 0.000001;
    320     }
    321 
    322     /* try transferring iterative blocks of memory */
    323     if (stage == 3) {
    324         int bytes_sent;
    325 
    326         /* flush all remaining blocks regardless of rate limiting */
    327         while ((bytes_sent = ram_save_block(f)) != 0) {
    328             bytes_transferred += bytes_sent;
    329         }
    330         cpu_physical_memory_set_dirty_tracking(0);
    331     }
    332 
    333     qemu_put_be64(f, RAM_SAVE_FLAG_EOS);
    334 
    335     expected_time = ram_save_remaining() * TARGET_PAGE_SIZE / bwidth;
    336 
    337     return (stage == 2) && (expected_time <= migrate_max_downtime());
    338 }
    339 
    340 static inline void *host_from_stream_offset(QEMUFile *f,
    341                                             ram_addr_t offset,
    342                                             int flags)
    343 {
    344     static RAMBlock *block = NULL;
    345     char id[256];
    346     uint8_t len;
    347 
    348     if (flags & RAM_SAVE_FLAG_CONTINUE) {
    349         if (!block) {
    350             fprintf(stderr, "Ack, bad migration stream!\n");
    351             return NULL;
    352         }
    353 
    354         return block->host + offset;
    355     }
    356 
    357     len = qemu_get_byte(f);
    358     qemu_get_buffer(f, (uint8_t *)id, len);
    359     id[len] = 0;
    360 
    361     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    362         if (!strncmp(id, block->idstr, sizeof(id)))
    363             return block->host + offset;
    364     }
    365 
    366     fprintf(stderr, "Can't find block %s!\n", id);
    367     return NULL;
    368 }
    369 
    370 int ram_load(QEMUFile *f, void *opaque, int version_id)
    371 {
    372     ram_addr_t addr;
    373     int flags;
    374 
    375     if (version_id < 3 || version_id > 4) {
    376         return -EINVAL;
    377     }
    378 
    379     do {
    380         addr = qemu_get_be64(f);
    381 
    382         flags = addr & ~TARGET_PAGE_MASK;
    383         addr &= TARGET_PAGE_MASK;
    384 
    385         if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
    386             if (version_id != 3) {
    387                 if (addr != ram_bytes_total()) {
    388                     return -EINVAL;
    389                 }
    390             } else {
    391                 /* Synchronize RAM block list */
    392                 char id[256];
    393                 ram_addr_t length;
    394                 ram_addr_t total_ram_bytes = addr;
    395 
    396                 while (total_ram_bytes) {
    397                     RAMBlock *block;
    398                     uint8_t len;
    399 
    400                     len = qemu_get_byte(f);
    401                     qemu_get_buffer(f, (uint8_t *)id, len);
    402                     id[len] = 0;
    403                     length = qemu_get_be64(f);
    404 
    405                     QTAILQ_FOREACH(block, &ram_list.blocks, next) {
    406                         if (!strncmp(id, block->idstr, sizeof(id))) {
    407                             if (block->length != length)
    408                                 return -EINVAL;
    409                             break;
    410                         }
    411                     }
    412 
    413                     if (!block) {
    414                         fprintf(stderr, "Unknown ramblock \"%s\", cannot "
    415                                 "accept migration\n", id);
    416                         return -EINVAL;
    417                     }
    418 
    419                     total_ram_bytes -= length;
    420                 }
    421             }
    422         } else if (flags & RAM_SAVE_FLAG_COMPRESS) {
    423             void *host;
    424             uint8_t ch;
    425 
    426             if (version_id != 3)
    427                 host = qemu_get_ram_ptr(addr);
    428             else
    429                 host = host_from_stream_offset(f, addr, flags);
    430             if (!host) {
    431                 return -EINVAL;
    432             }
    433 
    434             ch = qemu_get_byte(f);
    435             memset(host, ch, TARGET_PAGE_SIZE);
    436 #ifndef _WIN32
    437             if (ch == 0 &&
    438                 (!kvm_enabled() || kvm_has_sync_mmu())) {
    439                 qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
    440             }
    441 #endif
    442         } else if (flags & RAM_SAVE_FLAG_PAGE) {
    443             void *host;
    444 
    445             if (version_id != 3)
    446                 host = qemu_get_ram_ptr(addr);
    447             else
    448                 host = host_from_stream_offset(f, addr, flags);
    449 
    450             qemu_get_buffer(f, host, TARGET_PAGE_SIZE);
    451         }
    452         if (qemu_file_get_error(f)) {
    453             return -EIO;
    454         }
    455     } while (!(flags & RAM_SAVE_FLAG_EOS));
    456 
    457     return 0;
    458 }
    459 #endif
    460 
    461 #ifdef HAS_AUDIO
    462 struct soundhw {
    463     const char *name;
    464     const char *descr;
    465     int enabled;
    466     int isa;
    467     union {
    468         int (*init_isa) (qemu_irq *pic);
    469         int (*init_pci) (PCIBus *bus);
    470     } init;
    471 };
    472 
    473 static struct soundhw soundhw[] = {
    474 #ifdef HAS_AUDIO_CHOICE
    475 #if defined(TARGET_I386) || defined(TARGET_MIPS)
    476     {
    477         "pcspk",
    478         "PC speaker",
    479         0,
    480         1,
    481         { .init_isa = pcspk_audio_init }
    482     },
    483 #endif
    484 
    485 #ifdef CONFIG_SB16
    486     {
    487         "sb16",
    488         "Creative Sound Blaster 16",
    489         0,
    490         1,
    491         { .init_isa = SB16_init }
    492     },
    493 #endif
    494 
    495 #ifdef CONFIG_CS4231A
    496     {
    497         "cs4231a",
    498         "CS4231A",
    499         0,
    500         1,
    501         { .init_isa = cs4231a_init }
    502     },
    503 #endif
    504 
    505 #ifdef CONFIG_ADLIB
    506     {
    507         "adlib",
    508 #ifdef HAS_YMF262
    509         "Yamaha YMF262 (OPL3)",
    510 #else
    511         "Yamaha YM3812 (OPL2)",
    512 #endif
    513         0,
    514         1,
    515         { .init_isa = Adlib_init }
    516     },
    517 #endif
    518 
    519 #ifdef CONFIG_GUS
    520     {
    521         "gus",
    522         "Gravis Ultrasound GF1",
    523         0,
    524         1,
    525         { .init_isa = GUS_init }
    526     },
    527 #endif
    528 
    529 #ifdef CONFIG_AC97
    530     {
    531         "ac97",
    532         "Intel 82801AA AC97 Audio",
    533         0,
    534         0,
    535         { .init_pci = ac97_init }
    536     },
    537 #endif
    538 
    539 #ifdef CONFIG_ES1370
    540     {
    541         "es1370",
    542         "ENSONIQ AudioPCI ES1370",
    543         0,
    544         0,
    545         { .init_pci = es1370_init }
    546     },
    547 #endif
    548 
    549 #ifdef CONFIG_HDA
    550     {
    551         "hda",
    552         "Intel HD Audio",
    553         0,
    554         0,
    555         { .init_pci = intel_hda_and_codec_init }
    556     },
    557 #endif
    558 
    559 #endif /* HAS_AUDIO_CHOICE */
    560 
    561     { NULL, NULL, 0, 0, { NULL } }
    562 };
    563 
    564 void select_soundhw(const char *optarg)
    565 {
    566     struct soundhw *c;
    567 
    568     if (*optarg == '?') {
    569     show_valid_cards:
    570 
    571         printf("Valid sound card names (comma separated):\n");
    572         for (c = soundhw; c->name; ++c) {
    573             printf ("%-11s %s\n", c->name, c->descr);
    574         }
    575         printf("\n-soundhw all will enable all of the above\n");
    576         exit(*optarg != '?');
    577     }
    578     else {
    579         size_t l;
    580         const char *p;
    581         char *e;
    582         int bad_card = 0;
    583 
    584         if (!strcmp(optarg, "all")) {
    585             for (c = soundhw; c->name; ++c) {
    586                 c->enabled = 1;
    587             }
    588             return;
    589         }
    590 
    591         p = optarg;
    592         while (*p) {
    593             e = strchr(p, ',');
    594             l = !e ? strlen(p) : (size_t) (e - p);
    595 
    596             for (c = soundhw; c->name; ++c) {
    597                 if (!strncmp(c->name, p, l) && !c->name[l]) {
    598                     c->enabled = 1;
    599                     break;
    600                 }
    601             }
    602 
    603             if (!c->name) {
    604                 if (l > 80) {
    605                     fprintf(stderr,
    606                             "Unknown sound card name (too big to show)\n");
    607                 }
    608                 else {
    609                     fprintf(stderr, "Unknown sound card name `%.*s'\n",
    610                             (int) l, p);
    611                 }
    612                 bad_card = 1;
    613             }
    614             p += l + (e != NULL);
    615         }
    616 
    617         if (bad_card) {
    618             goto show_valid_cards;
    619         }
    620     }
    621 }
    622 
    623 void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
    624 {
    625     struct soundhw *c;
    626 
    627     for (c = soundhw; c->name; ++c) {
    628         if (c->enabled) {
    629             if (c->isa) {
    630                 if (isa_pic) {
    631                     c->init.init_isa(isa_pic);
    632                 }
    633             } else {
    634                 if (pci_bus) {
    635                     c->init.init_pci(pci_bus);
    636                 }
    637             }
    638         }
    639     }
    640 }
    641 #else
    642 void select_soundhw(const char *optarg)
    643 {
    644 }
    645 void audio_init(qemu_irq *isa_pic, PCIBus *pci_bus)
    646 {
    647 }
    648 #endif
    649 
    650 int qemu_uuid_parse(const char *str, uint8_t *uuid)
    651 {
    652     int ret;
    653 
    654     if (strlen(str) != 36) {
    655         return -1;
    656     }
    657 
    658     ret = sscanf(str, UUID_FMT, &uuid[0], &uuid[1], &uuid[2], &uuid[3],
    659                  &uuid[4], &uuid[5], &uuid[6], &uuid[7], &uuid[8], &uuid[9],
    660                  &uuid[10], &uuid[11], &uuid[12], &uuid[13], &uuid[14],
    661                  &uuid[15]);
    662 
    663     if (ret != 16) {
    664         return -1;
    665     }
    666 #ifdef TARGET_I386
    667     smbios_add_field(1, offsetof(struct smbios_type_1, uuid), 16, uuid);
    668 #endif
    669     return 0;
    670 }
    671 
    672 #if 0
    673 void do_acpitable_option(const char *optarg)
    674 {
    675 #ifdef TARGET_I386
    676     if (acpi_table_add(optarg) < 0) {
    677         fprintf(stderr, "Wrong acpi table provided\n");
    678         exit(1);
    679     }
    680 #endif
    681 }
    682 #endif
    683 
    684 void do_smbios_option(const char *optarg)
    685 {
    686 #ifdef TARGET_I386
    687     if (smbios_entry_add(optarg) < 0) {
    688         fprintf(stderr, "Wrong smbios provided\n");
    689         exit(1);
    690     }
    691 #endif
    692 }
    693 
    694 void cpudef_init(void)
    695 {
    696 #if defined(cpudef_setup)
    697     cpudef_setup(); /* parse cpu definitions in target config file */
    698 #endif
    699 }
    700 
    701 int audio_available(void)
    702 {
    703 #ifdef HAS_AUDIO
    704     return 1;
    705 #else
    706     return 0;
    707 #endif
    708 }
    709 
    710 int kvm_available(void)
    711 {
    712 #ifdef CONFIG_KVM
    713     return 1;
    714 #else
    715     return 0;
    716 #endif
    717 }
    718 
    719 int xen_available(void)
    720 {
    721 #ifdef CONFIG_XEN
    722     return 1;
    723 #else
    724     return 0;
    725 #endif
    726 }
    727