Message ID | 1497544575-18628-2-git-send-email-a.perevalov@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Jun 15, 2017 at 07:36:13PM +0300, Alexey Perevalov wrote: > Need to mark copied pages as closer as possible to the place where it > tracks down. That will be necessary in futher patch. > > Reviewed-by: Juan Quintela <quintela@redhat.com> > Signed-off-by: Alexey Perevalov <a.perevalov@samsung.com> > --- > migration/postcopy-ram.c | 13 ++++++++----- > migration/postcopy-ram.h | 4 ++-- > migration/ram.c | 4 ++-- > 3 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c > index c8c4500..743ca6c 100644 > --- a/migration/postcopy-ram.c > +++ b/migration/postcopy-ram.c > @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) > * returns 0 on success > */ > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize) > + RAMBlock *rb) > { > struct uffdio_copy copy_struct; > + size_t pagesize = qemu_ram_pagesize(rb); > > copy_struct.dst = (uint64_t)(uintptr_t)host; > copy_struct.src = (uint64_t)(uintptr_t)from; > @@ -597,10 +598,12 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > * returns 0 on success > */ > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize) > + RAMBlock *rb) > { > + size_t pagesize; > trace_postcopy_place_page_zero(host); > > + pagesize = qemu_ram_pagesize(rb); Nit: we can remove pagesize val since it's only used in below line? Other than that: Reviewed-by: Peter Xu <peterx@redhat.com> > if (pagesize == getpagesize()) { > struct uffdio_zeropage zero_struct; > zero_struct.range.start = (uint64_t)(uintptr_t)host; > @@ -631,7 +634,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size); > } > return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page, > - pagesize); > + rb); > } > > return 0; > @@ -694,14 +697,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) > } > > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize) > + RAMBlock *rb) > { > assert(0); > return -1; > } > > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize) > + RAMBlock *rb) > { > assert(0); > return -1; > diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h > index 52d51e8..78a3591 100644 > --- a/migration/postcopy-ram.h > +++ b/migration/postcopy-ram.h > @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms, > * returns 0 on success > */ > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize); > + RAMBlock *rb); > > /* > * Place a zero page at (host) atomically > * returns 0 on success > */ > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize); > + RAMBlock *rb); > > /* The current postcopy state is read/set by postcopy_state_get/set > * which update it atomically. > diff --git a/migration/ram.c b/migration/ram.c > index 8dbdfdb..f50479d 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f) > > if (all_zero) { > ret = postcopy_place_page_zero(mis, place_dest, > - block->page_size); > + block); > } else { > ret = postcopy_place_page(mis, place_dest, > - place_source, block->page_size); > + place_source, block); > } > } > if (!ret) { > -- > 1.9.1 >
* Alexey Perevalov (a.perevalov@samsung.com) wrote: > Need to mark copied pages as closer as possible to the place where it > tracks down. That will be necessary in futher patch. > > Reviewed-by: Juan Quintela <quintela@redhat.com> > Signed-off-by: Alexey Perevalov <a.perevalov@samsung.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> > --- > migration/postcopy-ram.c | 13 ++++++++----- > migration/postcopy-ram.h | 4 ++-- > migration/ram.c | 4 ++-- > 3 files changed, 12 insertions(+), 9 deletions(-) > > diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c > index c8c4500..743ca6c 100644 > --- a/migration/postcopy-ram.c > +++ b/migration/postcopy-ram.c > @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) > * returns 0 on success > */ > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize) > + RAMBlock *rb) > { > struct uffdio_copy copy_struct; > + size_t pagesize = qemu_ram_pagesize(rb); > > copy_struct.dst = (uint64_t)(uintptr_t)host; > copy_struct.src = (uint64_t)(uintptr_t)from; > @@ -597,10 +598,12 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > * returns 0 on success > */ > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize) > + RAMBlock *rb) > { > + size_t pagesize; > trace_postcopy_place_page_zero(host); > > + pagesize = qemu_ram_pagesize(rb); > if (pagesize == getpagesize()) { > struct uffdio_zeropage zero_struct; > zero_struct.range.start = (uint64_t)(uintptr_t)host; > @@ -631,7 +634,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size); > } > return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page, > - pagesize); > + rb); > } > > return 0; > @@ -694,14 +697,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) > } > > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize) > + RAMBlock *rb) > { > assert(0); > return -1; > } > > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize) > + RAMBlock *rb) > { > assert(0); > return -1; > diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h > index 52d51e8..78a3591 100644 > --- a/migration/postcopy-ram.h > +++ b/migration/postcopy-ram.h > @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms, > * returns 0 on success > */ > int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, > - size_t pagesize); > + RAMBlock *rb); > > /* > * Place a zero page at (host) atomically > * returns 0 on success > */ > int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, > - size_t pagesize); > + RAMBlock *rb); > > /* The current postcopy state is read/set by postcopy_state_get/set > * which update it atomically. > diff --git a/migration/ram.c b/migration/ram.c > index 8dbdfdb..f50479d 100644 > --- a/migration/ram.c > +++ b/migration/ram.c > @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f) > > if (all_zero) { > ret = postcopy_place_page_zero(mis, place_dest, > - block->page_size); > + block); > } else { > ret = postcopy_place_page(mis, place_dest, > - place_source, block->page_size); > + place_source, block); > } > } > if (!ret) { > -- > 1.9.1 > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c index c8c4500..743ca6c 100644 --- a/migration/postcopy-ram.c +++ b/migration/postcopy-ram.c @@ -566,9 +566,10 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) * returns 0 on success */ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, - size_t pagesize) + RAMBlock *rb) { struct uffdio_copy copy_struct; + size_t pagesize = qemu_ram_pagesize(rb); copy_struct.dst = (uint64_t)(uintptr_t)host; copy_struct.src = (uint64_t)(uintptr_t)from; @@ -597,10 +598,12 @@ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, * returns 0 on success */ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize) + RAMBlock *rb) { + size_t pagesize; trace_postcopy_place_page_zero(host); + pagesize = qemu_ram_pagesize(rb); if (pagesize == getpagesize()) { struct uffdio_zeropage zero_struct; zero_struct.range.start = (uint64_t)(uintptr_t)host; @@ -631,7 +634,7 @@ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, memset(mis->postcopy_tmp_zero_page, '\0', mis->largest_page_size); } return postcopy_place_page(mis, host, mis->postcopy_tmp_zero_page, - pagesize); + rb); } return 0; @@ -694,14 +697,14 @@ int postcopy_ram_enable_notify(MigrationIncomingState *mis) } int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, - size_t pagesize) + RAMBlock *rb) { assert(0); return -1; } int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize) + RAMBlock *rb) { assert(0); return -1; diff --git a/migration/postcopy-ram.h b/migration/postcopy-ram.h index 52d51e8..78a3591 100644 --- a/migration/postcopy-ram.h +++ b/migration/postcopy-ram.h @@ -72,14 +72,14 @@ void postcopy_discard_send_finish(MigrationState *ms, * returns 0 on success */ int postcopy_place_page(MigrationIncomingState *mis, void *host, void *from, - size_t pagesize); + RAMBlock *rb); /* * Place a zero page at (host) atomically * returns 0 on success */ int postcopy_place_page_zero(MigrationIncomingState *mis, void *host, - size_t pagesize); + RAMBlock *rb); /* The current postcopy state is read/set by postcopy_state_get/set * which update it atomically. diff --git a/migration/ram.c b/migration/ram.c index 8dbdfdb..f50479d 100644 --- a/migration/ram.c +++ b/migration/ram.c @@ -2465,10 +2465,10 @@ static int ram_load_postcopy(QEMUFile *f) if (all_zero) { ret = postcopy_place_page_zero(mis, place_dest, - block->page_size); + block); } else { ret = postcopy_place_page(mis, place_dest, - place_source, block->page_size); + place_source, block); } } if (!ret) {