qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Re: [PATCH v3 2/6] Introduce bit-based phys_ram_dirty f


From: Yoshiaki Tamura
Subject: Re: [Qemu-devel] Re: [PATCH v3 2/6] Introduce bit-based phys_ram_dirty for VGA, CODE, MIGRATION and MASTER.
Date: Mon, 19 Apr 2010 20:52:26 +0900
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4

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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]