All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0 of 2] Two p2m bug fixes
@ 2012-01-13  5:33 Andres Lagar-Cavilla
  2012-01-13  5:33 ` [PATCH 1 of 2] x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_add Andres Lagar-Cavilla
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Andres Lagar-Cavilla @ 2012-01-13  5:33 UTC (permalink / raw)
  To: xen-devel; +Cc: andres, tim, adin

- An assert for an invalid mfn was being triggered in 
  guest_physmap_add_entry, even though the target gfn was paged out.

- Fix how gfn's are put when mapping grants.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>
Signed-off-by: Adin Scannell <adin@scannell.ca>

 xen/arch/x86/mm/p2m.c    |  4 ++--
 xen/common/grant_table.c |  8 ++++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

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

* [PATCH 1 of 2] x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_add
  2012-01-13  5:33 [PATCH 0 of 2] Two p2m bug fixes Andres Lagar-Cavilla
@ 2012-01-13  5:33 ` Andres Lagar-Cavilla
  2012-01-13  5:33 ` [PATCH 2 of 2] Correct p2m unlocking during grant table map Andres Lagar-Cavilla
  2012-01-19 10:44 ` [PATCH 0 of 2] Two p2m bug fixes Tim Deegan
  2 siblings, 0 replies; 4+ messages in thread
From: Andres Lagar-Cavilla @ 2012-01-13  5:33 UTC (permalink / raw)
  To: xen-devel; +Cc: andres, tim, adin

 xen/arch/x86/mm/p2m.c |  4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)


Signed-off-by: Adin Scannell <adin@scannell.ca>
Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>

diff -r 4aa843efe1ac -r 1ab50ad829d6 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -489,7 +489,7 @@ guest_physmap_add_entry(struct domain *d
             
             return -EINVAL;
         }
-        else if ( p2m_is_ram(ot) )
+        else if ( p2m_is_ram(ot) && !p2m_is_paged(ot) )
         {
             ASSERT(mfn_valid(omfn));
             set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY);
@@ -514,7 +514,7 @@ guest_physmap_add_entry(struct domain *d
             P2M_DEBUG("aliased! mfn=%#lx, old gfn=%#lx, new gfn=%#lx\n",
                       mfn + i, ogfn, gfn + i);
             omfn = p2m->get_entry(p2m, ogfn, &ot, &a, p2m_query, NULL);
-            if ( p2m_is_ram(ot) )
+            if ( p2m_is_ram(ot) && !p2m_is_paged(ot) )
             {
                 ASSERT(mfn_valid(omfn));
                 P2M_DEBUG("old gfn=%#lx -> mfn %#lx\n",

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

* [PATCH 2 of 2] Correct p2m unlocking during grant table map
  2012-01-13  5:33 [PATCH 0 of 2] Two p2m bug fixes Andres Lagar-Cavilla
  2012-01-13  5:33 ` [PATCH 1 of 2] x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_add Andres Lagar-Cavilla
@ 2012-01-13  5:33 ` Andres Lagar-Cavilla
  2012-01-19 10:44 ` [PATCH 0 of 2] Two p2m bug fixes Tim Deegan
  2 siblings, 0 replies; 4+ messages in thread
From: Andres Lagar-Cavilla @ 2012-01-13  5:33 UTC (permalink / raw)
  To: xen-devel; +Cc: andres, tim, adin

 xen/common/grant_table.c |  8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)


We were not putting gfn's consistently.

Signed-off-by: Andres Lagar-Cavilla <andres@lagarcavilla.org>

diff -r 1ab50ad829d6 -r abdb908c0aed xen/common/grant_table.c
--- a/xen/common/grant_table.c
+++ b/xen/common/grant_table.c
@@ -141,7 +141,7 @@ shared_entry_header(struct grant_table *
 #define active_entry(t, e) \
     ((t)->active[(e)/ACGNT_PER_PAGE][(e)%ACGNT_PER_PAGE])
 
-/* Check if the page has been paged out */
+/* Check if the page has been paged out. If rc == GNTST_okay, caller must do put_gfn(rd, gfn) */
 static int __get_paged_frame(unsigned long gfn, unsigned long *frame, int readonly, struct domain *rd)
 {
     int rc = GNTST_okay;
@@ -573,7 +573,10 @@ __gnttab_map_grant_ref(
             gfn = sha1 ? sha1->frame : sha2->full_page.frame;
             rc = __get_paged_frame(gfn, &frame, !!(op->flags & GNTMAP_readonly), rd);
             if ( rc != GNTST_okay )
+            {
+                gfn = INVALID_GFN;
                 goto unlock_out;
+            }
             act->gfn = gfn;
             act->domid = ld->domain_id;
             act->frame = frame;
@@ -700,7 +703,8 @@ __gnttab_map_grant_ref(
     op->handle       = handle;
     op->status       = GNTST_okay;
 
-    put_gfn(rd, gfn);
+    if ( gfn != INVALID_GFN )
+        put_gfn(rd, gfn);
     rcu_unlock_domain(rd);
     return;

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

* Re: [PATCH 0 of 2] Two p2m bug fixes
  2012-01-13  5:33 [PATCH 0 of 2] Two p2m bug fixes Andres Lagar-Cavilla
  2012-01-13  5:33 ` [PATCH 1 of 2] x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_add Andres Lagar-Cavilla
  2012-01-13  5:33 ` [PATCH 2 of 2] Correct p2m unlocking during grant table map Andres Lagar-Cavilla
@ 2012-01-19 10:44 ` Tim Deegan
  2 siblings, 0 replies; 4+ messages in thread
From: Tim Deegan @ 2012-01-19 10:44 UTC (permalink / raw)
  To: Andres Lagar-Cavilla; +Cc: andres, xen-devel, tim, adin

At 00:33 -0500 on 13 Jan (1326414817), Andres Lagar-Cavilla wrote:
> - An assert for an invalid mfn was being triggered in 
>   guest_physmap_add_entry, even though the target gfn was paged out.
> 
> - Fix how gfn's are put when mapping grants.

Applied, thanks.

Tim.

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

end of thread, other threads:[~2012-01-19 10:44 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-01-13  5:33 [PATCH 0 of 2] Two p2m bug fixes Andres Lagar-Cavilla
2012-01-13  5:33 ` [PATCH 1 of 2] x86/mm: Don't ASSERT() for a valid mfn on paged p2m entries in guest_physmap_add Andres Lagar-Cavilla
2012-01-13  5:33 ` [PATCH 2 of 2] Correct p2m unlocking during grant table map Andres Lagar-Cavilla
2012-01-19 10:44 ` [PATCH 0 of 2] Two p2m bug fixes Tim Deegan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.