On Fri, 2016-02-05 at 14:20 -0700, Tamas K Lengyel wrote: > When xc_map_foreign_batch got deprecated reinitializing vm_event on a domain > where an event listener was previously active broke as it relied on the flag > XEN_DOMCTL_PFINFO_XTAB to indicate that the magic page is not in the physmap. > Manually check the gpfn type, add it to the physmap if needed, and only then > try to map it. > > Signed-off-by: Tamas K Lengyel <tleng...@novetta.com> > Cc: Ian Jackson <ian.jack...@eu.citrix.com> > Cc: Stefano Stabellini <stefano.stabell...@eu.citrix.com> > Cc: Ian Campbell <ian.campb...@citrix.com> > Cc: Wei Liu <wei.l...@citrix.com> > Cc: Andrew Cooper <andrew.coop...@citrix.com>
Sorry for the breakage! Acked-by: Ian Campbell <ian.campb...@citrix.com> > --- > tools/libxc/xc_vm_event.c | 21 ++++++++++----------- > 1 file changed, 10 insertions(+), 11 deletions(-) > > diff --git a/tools/libxc/xc_vm_event.c b/tools/libxc/xc_vm_event.c > index 57abce0..443c73b 100644 > --- a/tools/libxc/xc_vm_event.c > +++ b/tools/libxc/xc_vm_event.c > @@ -72,11 +72,10 @@ void *xc_vm_event_enable(xc_interface *xch, domid_t > domain_id, int param, > > ring_pfn = pfn; > mmap_pfn = pfn; > - ring_page = xc_map_foreign_pages(xch, domain_id, PROT_READ | > PROT_WRITE, > - &mmap_pfn, 1); > - if ( !ring_page ) > + rc1 = xc_get_pfn_type_batch(xch, domain_id, 1, &mmap_pfn); > + if ( rc1 || mmap_pfn & XEN_DOMCTL_PFINFO_XTAB ) > { > - /* Map failed, populate ring page */ > + /* Page not in the physmap, try to populate it */ > rc1 = xc_domain_populate_physmap_exact(xch, domain_id, 1, 0, 0, > &ring_pfn); > if ( rc1 != 0 ) > @@ -84,15 +83,15 @@ void *xc_vm_event_enable(xc_interface *xch, domid_t > domain_id, int param, > PERROR("Failed to populate ring pfn\n"); > goto out; > } > + } > > - mmap_pfn = ring_pfn; > - ring_page = xc_map_foreign_pages(xch, domain_id, PROT_READ | > PROT_WRITE, > + mmap_pfn = ring_pfn; > + ring_page = xc_map_foreign_pages(xch, domain_id, PROT_READ | > PROT_WRITE, > &mmap_pfn, 1); > - if ( !ring_page ) > - { > - PERROR("Could not map the ring page\n"); > - goto out; > - } > + if ( !ring_page ) > + { > + PERROR("Could not map the ring page\n"); > + goto out; > } > > switch ( param ) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel