From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O3pWu-0003kd-68 for qemu-devel@nongnu.org; Mon, 19 Apr 2010 07:52:44 -0400 Received: from [140.186.70.92] (port=46685 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O3pWm-0003fV-IN for qemu-devel@nongnu.org; Mon, 19 Apr 2010 07:52:42 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O3pWj-0002CZ-0r for qemu-devel@nongnu.org; Mon, 19 Apr 2010 07:52:36 -0400 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]:41553) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O3pWi-0002BW-2i for qemu-devel@nongnu.org; Mon, 19 Apr 2010 07:52:32 -0400 Message-ID: <4BCC43FA.3090704@lab.ntt.co.jp> Date: Mon, 19 Apr 2010 20:52:26 +0900 From: Yoshiaki Tamura MIME-Version: 1.0 Subject: Re: [Qemu-devel] Re: [PATCH v3 2/6] Introduce bit-based phys_ram_dirty for VGA, CODE, MIGRATION and MASTER. References: <1271670198-12793-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <1271670198-12793-3-git-send-email-tamura.yoshiaki@lab.ntt.co.jp> <4BCC2DBA.4000602@redhat.com> <4BCC3226.20305@lab.ntt.co.jp> <4BCC40C6.1040203@redhat.com> In-Reply-To: <4BCC40C6.1040203@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: aliguori@us.ibm.com, mtosatti@redhat.com, qemu-devel@nongnu.org, ohmura.kei@lab.ntt.co.jp Avi Kivity wrote: > On 04/19/2010 02:31 PM, Yoshiaki Tamura wrote: >> >>>>> typedef struct RAMBlock { >>>>> @@ -2825,10 +2825,16 @@ ram_addr_t qemu_ram_alloc(ram_addr_t size) >>>>> new_block->next = ram_blocks; >>>>> ram_blocks = new_block; >>>>> >>>>> - phys_ram_dirty = qemu_realloc(phys_ram_dirty, >>>>> - (last_ram_offset + size)>> TARGET_PAGE_BITS); >>>>> - memset(phys_ram_dirty + (last_ram_offset>> TARGET_PAGE_BITS), >>>>> - 0xff, size>> TARGET_PAGE_BITS); >>>>> + if (BITMAP_SIZE(last_ram_offset + size) != >>>>> BITMAP_SIZE(last_ram_offset)) { >>>> This check is unneeded - the code will work fine even if the bitmap >>>> size >>>> doesn't change. >>> OK. I'll remove it. >> I have a problem here. >> If I remove this check, glibc reports an error as below. >> >> *** glibc detected *** /usr/local/qemu/bin/qemu-system-x86_64: >> realloc(): invalid pointer: 0x0000000001f0e450 *** >> ======= Backtrace: ========= >> /lib64/libc.so.6[0x369fa75a96] >> /lib64/libc.so.6(realloc+0x2a1)[0x369fa7b881] >> /usr/local/qemu/bin/qemu-system-x86_64[0x437d93] >> /usr/local/qemu/bin/qemu-system-x86_64[0x4f03f6] >> /usr/local/qemu/bin/qemu-system-x86_64[0x5b052c] >> /usr/local/qemu/bin/qemu-system-x86_64[0x5b0d8b] >> /usr/local/qemu/bin/qemu-system-x86_64[0x41ec2b] >> /lib64/libc.so.6(__libc_start_main+0xfd)[0x369fa1ea2d] >> /usr/local/qemu/bin/qemu-system-x86_64[0x406479] >> ======= Memory map: ======== >> >> I reminded that I put this check to avoid reallocating same size to >> the bitmap. >> qemu goes this routine at start up, and extends last_ram_offset at >> small numbers. >> The error above is reported at the extension phase. >> > > This probably means that an old bitmap pointer leaked somewhere, and we > realloc() it after free? Or perhaps a glibc bug. Original qemu doesn't have a code the frees phys_ram_dirty, and I didn't either. Hmmm.