Revision 94a6b54f vl.c

b/vl.c
3094 3094
    int ret;
3095 3095
    ram_addr_t i;
3096 3096

  
3097
    if (qemu_get_be32(f) != phys_ram_size)
3097
    if (qemu_get_be32(f) != last_ram_offset)
3098 3098
        return -EINVAL;
3099
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
3099
    for(i = 0; i < last_ram_offset; i+= TARGET_PAGE_SIZE) {
3100 3100
        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
3101 3101
        if (ret)
3102 3102
            return ret;
......
3182 3182
    ram_addr_t addr = 0;
3183 3183
    int found = 0;
3184 3184

  
3185
    while (addr < phys_ram_size) {
3185
    while (addr < last_ram_offset) {
3186 3186
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
3187 3187
            uint8_t *p;
3188 3188

  
......
3204 3204
            break;
3205 3205
        }
3206 3206
        addr += TARGET_PAGE_SIZE;
3207
        current_addr = (saved_addr + addr) % phys_ram_size;
3207
        current_addr = (saved_addr + addr) % last_ram_offset;
3208 3208
    }
3209 3209

  
3210 3210
    return found;
......
3217 3217
    ram_addr_t addr;
3218 3218
    ram_addr_t count = 0;
3219 3219

  
3220
    for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3220
    for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3221 3221
        if (cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3222 3222
            count++;
3223 3223
    }
......
3231 3231

  
3232 3232
    if (stage == 1) {
3233 3233
        /* Make sure all dirty bits are set */
3234
        for (addr = 0; addr < phys_ram_size; addr += TARGET_PAGE_SIZE) {
3234
        for (addr = 0; addr < last_ram_offset; addr += TARGET_PAGE_SIZE) {
3235 3235
            if (!cpu_physical_memory_get_dirty(addr, MIGRATION_DIRTY_FLAG))
3236 3236
                cpu_physical_memory_set_dirty(addr);
3237 3237
        }
......
3239 3239
        /* Enable dirty memory tracking */
3240 3240
        cpu_physical_memory_set_dirty_tracking(1);
3241 3241

  
3242
        qemu_put_be64(f, phys_ram_size | RAM_SAVE_FLAG_MEM_SIZE);
3242
        qemu_put_be64(f, last_ram_offset | RAM_SAVE_FLAG_MEM_SIZE);
3243 3243
    }
3244 3244

  
3245 3245
    while (!qemu_file_rate_limit(f)) {
......
3272 3272

  
3273 3273
    if (ram_decompress_open(s, f) < 0)
3274 3274
        return -EINVAL;
3275
    for(i = 0; i < phys_ram_size; i+= BDRV_HASH_BLOCK_SIZE) {
3275
    for(i = 0; i < last_ram_offset; i+= BDRV_HASH_BLOCK_SIZE) {
3276 3276
        if (ram_decompress_buf(s, buf, 1) < 0) {
3277 3277
            fprintf(stderr, "Error while reading ram block header\n");
3278 3278
            goto error;
......
3303 3303
        return ram_load_v1(f, opaque);
3304 3304

  
3305 3305
    if (version_id == 2) {
3306
        if (qemu_get_be32(f) != phys_ram_size)
3306
        if (qemu_get_be32(f) != last_ram_offset)
3307 3307
            return -EINVAL;
3308 3308
        return ram_load_dead(f, opaque);
3309 3309
    }
......
3318 3318
        addr &= TARGET_PAGE_MASK;
3319 3319

  
3320 3320
        if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
3321
            if (addr != phys_ram_size)
3321
            if (addr != last_ram_offset)
3322 3322
                return -EINVAL;
3323 3323
        }
3324 3324

  
......
5132 5132
            exit(1);
5133 5133

  
5134 5134
    /* init the memory */
5135
    phys_ram_size = machine->ram_require & ~RAMSIZE_FIXED;
5136

  
5137
    if (machine->ram_require & RAMSIZE_FIXED) {
5138
        if (ram_size > 0) {
5139
            if (ram_size < phys_ram_size) {
5140
                fprintf(stderr, "Machine `%s' requires %llu bytes of memory\n",
5141
                                machine->name, (unsigned long long) phys_ram_size);
5142
                exit(-1);
5143
            }
5144

  
5145
            phys_ram_size = ram_size;
5146
        } else
5147
            ram_size = phys_ram_size;
5148
    } else {
5149
        if (ram_size == 0)
5150
            ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5151

  
5152
        phys_ram_size += ram_size;
5153
    }
5135
    if (ram_size == 0)
5136
        ram_size = DEFAULT_RAM_SIZE * 1024 * 1024;
5154 5137

  
5155
    phys_ram_base = qemu_vmalloc(phys_ram_size);
5156
    if (!phys_ram_base) {
5157
        fprintf(stderr, "Could not allocate physical memory\n");
5158
        exit(1);
5138
#ifdef USE_KQEMU
5139
    /* FIXME: This is a nasty hack because kqemu can't cope with dynamic
5140
       guest ram allocation.  It needs to go away.  */
5141
    if (kqemu_allowed) {
5142
        kqemu_phys_ram_size = ram_size + VGA_RAM_SIZE + 4 * 1024 * 1024;
5143
        kqemu_phys_ram_base = qemu_vmalloc(kqemu_phys_ram_size);
5144
        if (!kqemu_phys_ram_base) {
5145
            fprintf(stderr, "Could not allocate physical memory\n");
5146
            exit(1);
5147
        }
5159 5148
    }
5149
#endif
5160 5150

  
5161 5151
    /* init the dynamic translator */
5162 5152
    cpu_exec_init_all(tb_size * 1024 * 1024);

Also available in: Unified diff