[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH master, stable] vhost: fix dirty page handling
From: |
Juan Quintela |
Subject: |
[Qemu-devel] Re: [PATCH master, stable] vhost: fix dirty page handling |
Date: |
Wed, 16 Mar 2011 13:53:46 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux) |
"Michael S. Tsirkin" <address@hidden> wrote:
> vhost was passing a physical address to cpu_physical_memory_set_dirty,
> which is wrong: we need to translate to ram address first.
>
> Signed-off-by: Michael S. Tsirkin <address@hidden>
>
> Note: this lead to crashes during migration, so the patch
> is needed on the stable branch too.
Reviewed-by: Juan Quintela <address@hidden>
We have been having strange migration corruptions for some time, this
can explain what was going on.
> ---
> hw/vhost.c | 4 +++-
> 1 files changed, 3 insertions(+), 1 deletions(-)
>
> diff --git a/hw/vhost.c b/hw/vhost.c
> index aaa34e4..97a1299 100644
> --- a/hw/vhost.c
> +++ b/hw/vhost.c
> @@ -49,8 +49,10 @@ static void vhost_dev_sync_region(struct vhost_dev *dev,
> log = __sync_fetch_and_and(from, 0);
> while ((bit = sizeof(log) > sizeof(int) ?
> ffsll(log) : ffs(log))) {
> + ram_addr_t ram_addr;
> bit -= 1;
> - cpu_physical_memory_set_dirty(addr + bit * VHOST_LOG_PAGE);
> + ram_addr = cpu_get_physical_page_desc(addr + bit *
> VHOST_LOG_PAGE);
> + cpu_physical_memory_set_dirty(ram_addr);
> log &= ~(0x1ull << bit);
> }
> addr += VHOST_LOG_CHUNK;
<#secure method=pgpmime mode=sign>