On Wed, 2011-03-16 at 12:09 +0200, Michael S. Tsirkin 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 <m...@redhat.com>
> 
> Note: this lead to crashes during migration, so the patch
> is needed on the stable branch too.
> 
> ---
>  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;

Reviewed-by: Alex Williamson <alex.william...@redhat.com>


Reply via email to