All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kai Huang <kai.huang@linux.intel.com>
To: andrew.cooper3@citrix.com, tim@xen.org, jbeulich@suse.com,
	kevin.tian@intel.com, xen-devel@lists.xen.org
Cc: Kai Huang <kai.huang@linux.intel.com>
Subject: [v2 03/11] log-dirty: add new paging_mark_gfn_dirty
Date: Wed, 15 Apr 2015 15:03:45 +0800	[thread overview]
Message-ID: <1429081433-9600-4-git-send-email-kai.huang@linux.intel.com> (raw)
In-Reply-To: <1429081433-9600-1-git-send-email-kai.huang@linux.intel.com>

PML logs GPA in PML buffer. Original paging_mark_dirty takes MFN as parameter
but it gets guest pfn internally and use guest pfn to as index for looking up
radix log-dirty tree. In flushing PML buffer, calling paging_mark_dirty directly
introduces redundant p2m lookups (gfn->mfn->gfn), therefore we introduce
paging_mark_gfn_dirty which is bulk of paging_mark_dirty but takes guest pfn as
parameter, and in flushing PML buffer we call paging_mark_gfn_dirty directly.
Original paging_mark_dirty then simply is a wrapper of paging_mark_gfn_dirty.

Signed-off-by: Kai Huang <kai.huang@linux.intel.com>
---
 xen/arch/x86/mm/paging.c     | 31 +++++++++++++++++++++----------
 xen/include/asm-x86/paging.h |  2 ++
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c
index b54d76a..77c929b 100644
--- a/xen/arch/x86/mm/paging.c
+++ b/xen/arch/x86/mm/paging.c
@@ -266,24 +266,17 @@ static int paging_log_dirty_disable(struct domain *d, bool_t resuming)
     return ret;
 }
 
-/* Mark a page as dirty */
-void paging_mark_dirty(struct domain *d, unsigned long guest_mfn)
+/* Mark a page as dirty, with taking guest pfn as parameter */
+void paging_mark_gfn_dirty(struct domain *d, unsigned long pfn)
 {
-    unsigned long pfn;
-    mfn_t gmfn;
     int changed;
     mfn_t mfn, *l4, *l3, *l2;
     unsigned long *l1;
     int i1, i2, i3, i4;
 
-    gmfn = _mfn(guest_mfn);
-
-    if ( !paging_mode_log_dirty(d) || !mfn_valid(gmfn) ||
-         page_get_owner(mfn_to_page(gmfn)) != d )
+    if ( !paging_mode_log_dirty(d) )
         return;
 
-    /* We /really/ mean PFN here, even for non-translated guests. */
-    pfn = get_gpfn_from_mfn(mfn_x(gmfn));
     /* Shared MFNs should NEVER be marked dirty */
     BUG_ON(SHARED_M2P(pfn));
 
@@ -351,6 +344,24 @@ out:
     return;
 }
 
+/* Mark a page as dirty */
+void paging_mark_dirty(struct domain *d, unsigned long guest_mfn)
+{
+    unsigned long pfn;
+    mfn_t gmfn;
+
+    gmfn = _mfn(guest_mfn);
+
+    if ( !paging_mode_log_dirty(d) || !mfn_valid(gmfn) ||
+         page_get_owner(mfn_to_page(gmfn)) != d )
+        return;
+
+    /* We /really/ mean PFN here, even for non-translated guests. */
+    pfn = get_gpfn_from_mfn(mfn_x(gmfn));
+
+    paging_mark_gfn_dirty(d, pfn);
+}
+
 
 /* Is this guest page dirty? */
 int paging_mfn_is_dirty(struct domain *d, mfn_t gmfn)
diff --git a/xen/include/asm-x86/paging.h b/xen/include/asm-x86/paging.h
index 53de715..c99324c 100644
--- a/xen/include/asm-x86/paging.h
+++ b/xen/include/asm-x86/paging.h
@@ -156,6 +156,8 @@ void paging_log_dirty_init(struct domain *d,
 
 /* mark a page as dirty */
 void paging_mark_dirty(struct domain *d, unsigned long guest_mfn);
+/* mark a page as dirty with taking guest pfn as parameter */
+void paging_mark_gfn_dirty(struct domain *d, unsigned long pfn);
 
 /* is this guest page dirty? 
  * This is called from inside paging code, with the paging lock held. */
-- 
2.1.0

  parent reply	other threads:[~2015-04-15  7:03 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-15  7:03 [v2 00/11] PML (Paging Modification Logging) support Kai Huang
2015-04-15  7:03 ` [v2 01/11] vmx: add new boot parameter to control PML enabling Kai Huang
2015-04-15 10:12   ` Andrew Cooper
2015-04-15 12:20   ` Jan Beulich
2015-04-15 13:20     ` Kai Huang
2015-04-15 13:47       ` Jan Beulich
2015-04-15  7:03 ` [v2 02/11] doc: add description for new PML boot parameter Kai Huang
2015-04-15 10:15   ` Andrew Cooper
2015-04-15 12:17     ` Jan Beulich
2015-04-16  4:47     ` Kai Huang
2015-04-16 14:49       ` Andrew Cooper
2015-04-15  7:03 ` Kai Huang [this message]
2015-04-15  7:03 ` [v2 04/11] vmx: add PML definition and feature detection Kai Huang
2015-04-16 22:35   ` Tian, Kevin
2015-04-17  2:14     ` Kai Huang
2015-04-15  7:03 ` [v2 05/11] vmx: add new data structure member to support PML Kai Huang
2015-04-16 15:33   ` Jan Beulich
2015-04-17  2:12     ` Kai Huang
2015-04-16 22:39   ` Tian, Kevin
2015-04-17  2:31     ` Kai Huang
2015-04-21  6:04       ` Kai Huang
2015-04-21 13:10         ` Tian, Kevin
2015-04-15  7:03 ` [v2 06/11] vmx: add help functions " Kai Huang
2015-04-16 15:42   ` Jan Beulich
2015-04-17  3:10     ` Kai Huang
2015-04-17  6:23       ` Jan Beulich
2015-04-17  6:51         ` Kai Huang
2015-04-17  6:58           ` Jan Beulich
2015-04-17  7:23             ` Kai Huang
2015-04-17  7:37               ` Jan Beulich
2015-04-17  7:45                 ` Kai Huang
2015-04-24  6:32                 ` Kai Huang
2015-04-24  7:30                   ` Jan Beulich
2015-04-24  7:41                     ` Kai Huang
2015-04-16 22:57   ` Tian, Kevin
2015-04-17  0:10     ` Tim Deegan
2015-04-17  3:32       ` Kai Huang
2015-04-17  8:36         ` Tim Deegan
2015-04-17  9:29           ` Kai Huang
2015-04-20  8:29             ` Tim Deegan
2015-04-20 10:08               ` Kai Huang
2015-04-20 10:13                 ` Tim Deegan
2015-04-17  3:15     ` Kai Huang
2015-04-16 22:59   ` Tian, Kevin
2015-04-15  7:03 ` [v2 07/11] vmx: handle PML buffer full VMEXIT Kai Huang
2015-04-15  7:03 ` [v2 08/11] vmx: handle PML enabling in vmx_vcpu_initialise Kai Huang
2015-04-15  7:03 ` [v2 09/11] vmx: disable PML in vmx_vcpu_destroy Kai Huang
2015-04-15  7:03 ` [v2 10/11] log-dirty: refine common code to support PML Kai Huang
2015-04-16 15:51   ` Jan Beulich
2015-04-16 23:07     ` Tian, Kevin
2015-04-17  2:47       ` Kai Huang
2015-04-17  2:46     ` Kai Huang
2015-04-17  6:28       ` Jan Beulich
2015-04-17  6:55         ` Kai Huang
2015-04-15  7:03 ` [v2 11/11] p2m/ept: enable PML in p2m-ept for log-dirty Kai Huang
2015-04-16 15:54   ` Jan Beulich
2015-04-17  2:40     ` Kai Huang
2015-04-17  6:28       ` Jan Beulich
2015-04-17  7:10         ` Kai Huang
2015-04-17  7:33           ` Jan Beulich
2015-04-16 14:41 ` [v2 00/11] PML (Paging Modification Logging) support Tim Deegan
2015-04-16 15:18   ` Kai Huang

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=1429081433-9600-4-git-send-email-kai.huang@linux.intel.com \
    --to=kai.huang@linux.intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=kevin.tian@intel.com \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xen.org \
    /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.