xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] vm_event: Fix regression caused by b701ccc8
@ 2016-02-05 21:20 Tamas K Lengyel
  2016-02-08  9:39 ` Ian Campbell
  0 siblings, 1 reply; 3+ messages in thread
From: Tamas K Lengyel @ 2016-02-05 21:20 UTC (permalink / raw)
  To: xen-devel
  Cc: Wei Liu, Ian Campbell, Stefano Stabellini, Andrew Cooper,
	Ian Jackson, Tamas K Lengyel

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@novetta.com>
Cc: Ian Jackson <ian.jackson@eu.citrix.com>
Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Cc: Ian Campbell <ian.campbell@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>
Cc: Andrew Cooper <andrew.cooper3@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 )
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH] vm_event: Fix regression caused by b701ccc8
  2016-02-05 21:20 [PATCH] vm_event: Fix regression caused by b701ccc8 Tamas K Lengyel
@ 2016-02-08  9:39 ` Ian Campbell
  2016-02-08 15:46   ` Ian Campbell
  0 siblings, 1 reply; 3+ messages in thread
From: Ian Campbell @ 2016-02-08  9:39 UTC (permalink / raw)
  To: Tamas K Lengyel, xen-devel, Razvan Cojocaru
  Cc: Wei Liu, Andrew Cooper, Ian Jackson, Stefano Stabellini

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 <tlengyel@novetta.com>
> Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> Cc: Ian Campbell <ian.campbell@citrix.com>
> Cc: Wei Liu <wei.liu2@citrix.com>
> Cc: Andrew Cooper <andrew.cooper3@citrix.com>

Sorry for the breakage!

Acked-by: Ian Campbell <ian.campbell@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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] vm_event: Fix regression caused by b701ccc8
  2016-02-08  9:39 ` Ian Campbell
@ 2016-02-08 15:46   ` Ian Campbell
  0 siblings, 0 replies; 3+ messages in thread
From: Ian Campbell @ 2016-02-08 15:46 UTC (permalink / raw)
  To: Tamas K Lengyel, xen-devel, Razvan Cojocaru
  Cc: Andrew Cooper, Wei Liu, Ian Jackson, Stefano Stabellini

On Mon, 2016-02-08 at 09:39 +0000, Ian Campbell wrote:
> 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 <tlengyel@novetta.com>
> > Cc: Ian Jackson <ian.jackson@eu.citrix.com>
> > Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
> > Cc: Ian Campbell <ian.campbell@citrix.com>
> > Cc: Wei Liu <wei.liu2@citrix.com>
> > Cc: Andrew Cooper <andrew.cooper3@citrix.com>
> 
> Sorry for the breakage!
> 
> Acked-by: Ian Campbell <ian.campbell@citrix.com>

+ applied now.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-02-08 15:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-05 21:20 [PATCH] vm_event: Fix regression caused by b701ccc8 Tamas K Lengyel
2016-02-08  9:39 ` Ian Campbell
2016-02-08 15:46   ` Ian Campbell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).