All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olaf Hering <olaf@aepfle.de>
To: xen-devel@lists.xensource.com
Subject: [PATCH 05/16] xenpaging: update machine_to_phys_mapping during page-in and page-out
Date: Tue, 02 Nov 2010 23:30:15 +0100	[thread overview]
Message-ID: <20101102223012.460890479@aepfle.de> (raw)
In-Reply-To: 20101102223010.603002116@aepfle.de

[-- Attachment #1: xen-unstable.xenpaging.machine_to_phys_mapping.patch --]
[-- Type: text/plain, Size: 1978 bytes --]

The machine_to_phys_mapping array needs updating during page-out.
If a page is gone, a call to get_gpfn_from_mfn will still return the old
gfn for an already paged-out page.  This happens when the entire guest
ram is paged-out before xen_vga_populate_vram() runs.  Then
XENMEM_populate_physmap is called with gfn 0xff000.  A new page is
allocated with alloc_domheap_pages.  This new page does not have a gfn
yet.  However, in guest_physmap_add_entry() the passed mfn maps still to
an old gfn.  This old gfn is paged-out and has no mfn anymore.  As a
result, the ASSERT() triggers because p2m_is_ram() is true for
p2m_ram_paging* types.

If the machine_to_phys_mapping array is updated properly, both loops in
guest_physmap_add_entry() turn into no-ops for the new page and the
mfn/gfn mapping will be done at the end of the function.


The same thing needs to happen dring a page-in.
If XENMEM_add_to_physmap is used with XENMAPSPACE_gmfn,
get_gpfn_from_mfn() will return an appearently valid gfn.  As a result,
guest_physmap_remove_page() is called.  The ASSERT in p2m_remove_page
triggers because the passed mfn does not match the old mfn for the
passed gfn.

Signed-off-by: Olaf Hering <olaf@aepfle.de>

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

--- xen-unstable.hg-4.1.22344.orig/xen/arch/x86/mm/p2m.c
+++ xen-unstable.hg-4.1.22344/xen/arch/x86/mm/p2m.c
@@ -2742,6 +2742,7 @@ int p2m_mem_paging_evict(struct p2m_doma
     /* Remove mapping from p2m table */
     p2m_lock(p2m);
     set_p2m_entry(p2m, gfn, _mfn(PAGING_MFN), 0, p2m_ram_paged);
+    set_gpfn_from_mfn(mfn_x(mfn), INVALID_M2P_ENTRY);
     p2m_unlock(p2m);
 
     /* Put the page back so it gets freed */
@@ -2820,6 +2821,7 @@ void p2m_mem_paging_resume(struct p2m_do
     mfn = gfn_to_mfn(p2m, rsp.gfn, &p2mt);
     p2m_lock(p2m);
     set_p2m_entry(p2m, rsp.gfn, mfn, 0, p2m_ram_rw);
+    set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
     p2m_unlock(p2m);
 
     /* Unpause domain */

  parent reply	other threads:[~2010-11-02 22:30 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-02 22:30 [PATCH 00/16] xenpaging changes for xen-unstable Olaf Hering
2010-11-02 22:30 ` [PATCH 01/16] xenpaging: whitespace fixes after addition of __get_paged_frame Olaf Hering
2010-11-03 12:37   ` Ian Jackson
2010-11-02 22:30 ` [PATCH 02/16] xenpaging: break endless loop during inital page-out with large pagefiles Olaf Hering
2010-11-02 22:30 ` [PATCH 03/16] xenpaging: Open paging file only if xenpaging_init() succeeds Olaf Hering
2010-11-02 22:30 ` [PATCH 04/16] xenpaging: allow only one xenpaging binary per guest Olaf Hering
2010-11-02 22:30 ` Olaf Hering [this message]
2010-11-03 18:32   ` [PATCH 05/16] xenpaging: update machine_to_phys_mapping during page-in and page-out Olaf Hering
2010-11-02 22:30 ` [PATCH 06/16] xenpaging: drop paged pages in guest_remove_page Olaf Hering
2010-11-03 18:33   ` Olaf Hering
2010-11-02 22:30 ` [PATCH 07/16] xenpaging: populate only paged-out pages Olaf Hering
2010-11-03 12:38   ` Ian Jackson
2010-11-09 10:40     ` Olaf Hering
2010-11-10  8:37       ` Olaf Hering
2010-11-02 22:30 ` [PATCH 08/16] xenpaging: reduce MINIMUM_RESTART_TIME Olaf Hering
2010-11-03 12:43   ` Ian Jackson
2010-11-03 14:13     ` Olaf Hering
2010-11-03 16:55       ` Ian Jackson
2010-11-03 17:09         ` Xavier Beaudouin
2010-11-04 17:10           ` Ian Jackson
2010-11-02 22:30 ` [PATCH 09/16] xenpaging: start xenpaging via config option Olaf Hering
2010-11-02 22:30 ` [PATCH 10/16] xenpaging: add signal handling Olaf Hering
2010-11-02 22:30 ` [PATCH 11/16] xenpaging: increase recently used pages from 4MB to 64MB Olaf Hering
2010-11-02 22:30 ` [PATCH 12/16] xenpaging: print info when free request slots drop below 3 Olaf Hering
2010-11-02 22:30 ` [PATCH 13/16] xenpaging: prevent page-out of first 16MB Olaf Hering
2010-11-02 22:30 ` [PATCH 14/16] xenpaging: add dynamic startup delay for xenpaging Olaf Hering
2010-11-02 22:30 ` [PATCH 15/16] xenpaging: print p2mt for already paged-in pages Olaf Hering
2010-11-02 22:30 ` [PATCH 16/16] xenpaging: (sparse) documenation Olaf Hering
2010-11-03  8:22 ` [PATCH 00/16] xenpaging changes for xen-unstable Olaf Hering
2010-11-03 19:24 ` [PATCH 17/16] xenpaging: notify policy only on resume Olaf Hering

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101102223012.460890479@aepfle.de \
    --to=olaf@aepfle.de \
    --cc=xen-devel@lists.xensource.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.