[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [RFC PATCH 5/6] savevm: Migrate RAM based on name/offse
From: |
Chris Wright |
Subject: |
[Qemu-devel] Re: [RFC PATCH 5/6] savevm: Migrate RAM based on name/offset |
Date: |
Tue, 8 Jun 2010 13:54:47 -0700 |
User-agent: |
Mutt/1.5.20 (2009-08-17) |
* Alex Williamson (address@hidden) wrote:
> @@ -257,7 +272,7 @@ int ram_load(QEMUFile *f, void *opaque, int version_id)
> ram_addr_t addr;
> int flags;
>
> - if (version_id != 3) {
> + if (version_id < 3) {
> return -EINVAL;
Should we clamp to 3 and 4?
> }
>
> @@ -268,23 +283,89 @@ int ram_load(QEMUFile *f, void *opaque, int version_id)
> addr &= TARGET_PAGE_MASK;
>
> if (flags & RAM_SAVE_FLAG_MEM_SIZE) {
Does it simplify anything to simply add a new flag?
> - if (addr != ram_bytes_total()) {
> - return -EINVAL;
> + if (version_id == 3) {
> + if (addr != ram_bytes_total()) {
> + return -EINVAL;
> + }
> + } else {
> + /* Synchronize RAM block list */
> + char name[64];
> + ram_addr_t length;
> + ram_addr_t total_ram_bytes = addr;
> +
> + while (total_ram_bytes) {
> + RAMBlock *block;
> + qemu_get_buffer(f, (uint8_t *)name, sizeof(name));
> + length = qemu_get_be64(f);
> +
> + QLIST_FOREACH(block, &ram.blocks, next) {
> + if (!strncmp(name, block->name, sizeof(name))) {
> + if (block->length != length)
> + return -EINVAL;
> + break;
> + }
> + }
> +
> + if (!block) {
> + if (!qemu_ram_alloc(name, length))
> + return -ENOMEM;
Is there any usee to finding blocks in stream such that we simply allocate
them all dynamically?
thanks,
-chris
[Qemu-devel] [RFC PATCH 4/6] Remove uses of ram.last_offset (aka last_ram_offset), Alex Williamson, 2010/06/08
[Qemu-devel] [RFC PATCH 5/6] savevm: Migrate RAM based on name/offset, Alex Williamson, 2010/06/08
[Qemu-devel] [RFC PATCH 6/6] savevm: Use RAM blocks for basis of migration, Alex Williamson, 2010/06/08