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

Re: [Xen-devel] [PATCHv4 5/5] xen: Set the vram dirty when an error occur.



On Tue, 19 Feb 2013, Alex Bligh wrote:
> If the call to xc_hvm_track_dirty_vram() fails, then we set dirtybit on all 
> the
> video ram. This case happens during migration.
> 
> Backport of 8aba7dc02d5660df7e7d8651304b3079908358be
> 
> Signed-off-by: Alex Bligh <alex@xxxxxxxxxxx>
> ---
>  xen-all.c |   20 ++++++++++++++++++--
>  1 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/xen-all.c b/xen-all.c
> index 121289d..dbd759c 100644
> --- a/xen-all.c
> +++ b/xen-all.c
> @@ -470,7 +470,21 @@ static int xen_sync_dirty_bitmap(XenIOState *state,
>      rc = xc_hvm_track_dirty_vram(xen_xc, xen_domid,
>                                   start_addr >> TARGET_PAGE_BITS, npages,
>                                   bitmap);
> -    if (rc) {
> +    if (rc < 0) {
> +        if (rc != -ENODATA) {
> +            ram_addr_t addr, end;
> +
> +            xen_modified_memory(start_addr, size);
> +            
> +            end = TARGET_PAGE_ALIGN(start_addr + size);
> +            for (addr = start_addr & TARGET_PAGE_MASK; addr < end; addr += 
> TARGET_PAGE_SIZE) {
> +                cpu_physical_memory_set_dirty(addr);
> +            }
> +
> +            DPRINTF("xen: track_dirty_vram failed (0x" TARGET_FMT_plx
> +                    ", 0x" TARGET_FMT_plx "): %s\n",
> +                    start_addr, start_addr + size, strerror(-rc));
> +        }
>          return rc;
>      }

8aba7dc02d5660df7e7d8651304b3079908358be only adds a simple call to
xen_modified_memory if rc != ENODATA.
Where does the rest of the code you are adding comes from?


> @@ -479,7 +493,9 @@ static int xen_sync_dirty_bitmap(XenIOState *state,
>          while (map != 0) {
>              j = ffsl(map) - 1;
>              map &= ~(1ul << j);
> -            cpu_physical_memory_set_dirty(vram_offset + (i * width + j) * 
> TARGET_PAGE_SIZE);
> +            target_phys_addr_t todirty = vram_offset + (i * width + j) * 
> TARGET_PAGE_SIZE;
> +            xen_modified_memory(todirty, TARGET_PAGE_SIZE);
> +            cpu_physical_memory_set_dirty(todirty);
>          };
>      }

where does this chuck come from?
Wouldn't it make more sense to add a call to xen_modified_memory from
cpu_physical_memory_set_dirty?


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.