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

[Xen-changelog] [xen master] vm_event: Fix regression caused by b701ccc8



commit c9c430df0062e0f6a1d95c5d3eb8af267183c6f0
Author:     Tamas K Lengyel <tlengyel@xxxxxxxxxxx>
AuthorDate: Fri Feb 5 14:20:16 2016 -0700
Commit:     Ian Campbell <ian.campbell@xxxxxxxxxx>
CommitDate: Mon Feb 8 15:10:15 2016 +0000

    vm_event: Fix regression caused by b701ccc8
    
    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 <tlengyel@xxxxxxxxxxx>
    Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
    Cc: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
    Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
    Cc: Wei Liu <wei.liu2@xxxxxxxxxx>
    Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
---
 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 )
--
generated by git-patchbot for /home/xen/git/xen.git#master

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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