From mboxrd@z Thu Jan 1 00:00:00 1970 From: Isaku Yamahata Subject: [PATCH 08/21] arch_init/ram_load: refactor ram_load Date: Thu, 29 Dec 2011 10:25:47 +0900 Message-ID: References: Cc: yamahata@valinux.co.jp, t.hirofuchi@aist.go.jp, satoshi.itoh@aist.go.jp To: kvm@vger.kernel.org, qemu-devel@nongnu.org Return-path: Received: from mail.valinux.co.jp ([210.128.90.3]:47814 "EHLO mail.valinux.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754688Ab1L2B0D (ORCPT ); Wed, 28 Dec 2011 20:26:03 -0500 In-Reply-To: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org List-ID: Signed-off-by: Isaku Yamahata --- arch_init.c | 67 +++++++++++++++++++++++++++++++++------------------------- arch_init.h | 1 + 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/arch_init.c b/arch_init.c index 249b440..bc53092 100644 --- a/arch_init.c +++ b/arch_init.c @@ -395,6 +395,41 @@ static inline void *host_from_stream_offset(QEMUFile *f, return ram_load_host_from_stream_offset(f, offset, flags, &block); } +int ram_load_mem_size(QEMUFile *f, ram_addr_t total_ram_bytes) +{ + /* Synchronize RAM block list */ + char id[256]; + ram_addr_t length; + + while (total_ram_bytes) { + RAMBlock *block; + uint8_t len; + + len = qemu_get_byte(f); + qemu_get_buffer(f, (uint8_t *)id, len); + id[len] = 0; + length = qemu_get_be64(f); + + QLIST_FOREACH(block, &ram_list.blocks, next) { + if (!strncmp(id, block->idstr, sizeof(id))) { + if (block->length != length) + return -EINVAL; + break; + } + } + + if (!block) { + fprintf(stderr, "Unknown ramblock \"%s\", cannot " + "accept migration\n", id); + return -EINVAL; + } + + total_ram_bytes -= length; + } + + return 0; +} + int ram_load(QEMUFile *f, void *opaque, int version_id) { ram_addr_t addr; @@ -417,35 +452,9 @@ int ram_load(QEMUFile *f, void *opaque, int version_id) return -EINVAL; } } else { - /* Synchronize RAM block list */ - char id[256]; - ram_addr_t length; - ram_addr_t total_ram_bytes = addr; - - while (total_ram_bytes) { - RAMBlock *block; - uint8_t len; - - len = qemu_get_byte(f); - qemu_get_buffer(f, (uint8_t *)id, len); - id[len] = 0; - length = qemu_get_be64(f); - - QLIST_FOREACH(block, &ram_list.blocks, next) { - if (!strncmp(id, block->idstr, sizeof(id))) { - if (block->length != length) - return -EINVAL; - break; - } - } - - if (!block) { - fprintf(stderr, "Unknown ramblock \"%s\", cannot " - "accept migration\n", id); - return -EINVAL; - } - - total_ram_bytes -= length; + error = ram_load_mem_size(f, addr); + if (error) { + return error; } } } diff --git a/arch_init.h b/arch_init.h index 118461a..72b906d 100644 --- a/arch_init.h +++ b/arch_init.h @@ -49,6 +49,7 @@ void *ram_load_host_from_stream_offset(QEMUFile *f, ram_addr_t offset, int flags, RAMBlock **last_blockp); +int ram_load_mem_size(QEMUFile *f, ram_addr_t total_ram_bytes); #endif #endif -- 1.7.1.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:33904) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rg4l6-0005FY-C7 for qemu-devel@nongnu.org; Wed, 28 Dec 2011 20:26:19 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rg4kz-0004JA-OX for qemu-devel@nongnu.org; Wed, 28 Dec 2011 20:26:16 -0500 Received: from mail.valinux.co.jp ([210.128.90.3]:42977) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rg4kz-0004I0-3G for qemu-devel@nongnu.org; Wed, 28 Dec 2011 20:26:09 -0500 From: Isaku Yamahata Date: Thu, 29 Dec 2011 10:25:47 +0900 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [PATCH 08/21] arch_init/ram_load: refactor ram_load List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvm@vger.kernel.org, qemu-devel@nongnu.org Cc: yamahata@valinux.co.jp, t.hirofuchi@aist.go.jp, satoshi.itoh@aist.go.jp Signed-off-by: Isaku Yamahata --- arch_init.c | 67 +++++++++++++++++++++++++++++++++------------------------- arch_init.h | 1 + 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/arch_init.c b/arch_init.c index 249b440..bc53092 100644 --- a/arch_init.c +++ b/arch_init.c @@ -395,6 +395,41 @@ static inline void *host_from_stream_offset(QEMUFile *f, return ram_load_host_from_stream_offset(f, offset, flags, &block); } +int ram_load_mem_size(QEMUFile *f, ram_addr_t total_ram_bytes) +{ + /* Synchronize RAM block list */ + char id[256]; + ram_addr_t length; + + while (total_ram_bytes) { + RAMBlock *block; + uint8_t len; + + len = qemu_get_byte(f); + qemu_get_buffer(f, (uint8_t *)id, len); + id[len] = 0; + length = qemu_get_be64(f); + + QLIST_FOREACH(block, &ram_list.blocks, next) { + if (!strncmp(id, block->idstr, sizeof(id))) { + if (block->length != length) + return -EINVAL; + break; + } + } + + if (!block) { + fprintf(stderr, "Unknown ramblock \"%s\", cannot " + "accept migration\n", id); + return -EINVAL; + } + + total_ram_bytes -= length; + } + + return 0; +} + int ram_load(QEMUFile *f, void *opaque, int version_id) { ram_addr_t addr; @@ -417,35 +452,9 @@ int ram_load(QEMUFile *f, void *opaque, int version_id) return -EINVAL; } } else { - /* Synchronize RAM block list */ - char id[256]; - ram_addr_t length; - ram_addr_t total_ram_bytes = addr; - - while (total_ram_bytes) { - RAMBlock *block; - uint8_t len; - - len = qemu_get_byte(f); - qemu_get_buffer(f, (uint8_t *)id, len); - id[len] = 0; - length = qemu_get_be64(f); - - QLIST_FOREACH(block, &ram_list.blocks, next) { - if (!strncmp(id, block->idstr, sizeof(id))) { - if (block->length != length) - return -EINVAL; - break; - } - } - - if (!block) { - fprintf(stderr, "Unknown ramblock \"%s\", cannot " - "accept migration\n", id); - return -EINVAL; - } - - total_ram_bytes -= length; + error = ram_load_mem_size(f, addr); + if (error) { + return error; } } } diff --git a/arch_init.h b/arch_init.h index 118461a..72b906d 100644 --- a/arch_init.h +++ b/arch_init.h @@ -49,6 +49,7 @@ void *ram_load_host_from_stream_offset(QEMUFile *f, ram_addr_t offset, int flags, RAMBlock **last_blockp); +int ram_load_mem_size(QEMUFile *f, ram_addr_t total_ram_bytes); #endif #endif -- 1.7.1.1