* [PATCH v2] x86/PoD: tighten conditions for checking super page
@ 2015-11-09 14:48 Jan Beulich
2015-11-19 17:12 ` George Dunlap
0 siblings, 1 reply; 2+ messages in thread
From: Jan Beulich @ 2015-11-09 14:48 UTC (permalink / raw)
To: xen-devel; +Cc: George Dunlap, Andrew Cooper
[-- Attachment #1: Type: text/plain, Size: 1976 bytes --]
Since calling the function isn't cheap, try to avoid the call when we
know up front it won't help; see the code comment for details on those
conditions.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Adjust conditions and body of the if() to make them easier
understandable, without altering behavior (requested by George).
--- a/xen/arch/x86/mm/p2m-pod.c
+++ b/xen/arch/x86/mm/p2m-pod.c
@@ -528,7 +528,6 @@ p2m_pod_decrease_reservation(struct doma
if ( unlikely(d->is_dying) )
goto out_unlock;
-recount:
pod = nonpod = ram = 0;
/* Figure out if we need to steal some freed memory for our cache */
@@ -568,15 +567,20 @@ recount:
goto out_entry_check;
}
- /* Try to grab entire superpages if possible. Since the common case is for drivers
- * to pass back singleton pages, see if we can take the whole page back and mark the
- * rest PoD. */
- if ( steal_for_cache
- && p2m_pod_zero_check_superpage(p2m, gpfn & ~(SUPERPAGE_PAGES-1)))
+ /*
+ * Try to grab entire superpages if possible. Since the common case is for
+ * drivers to pass back singleton pages, see if we can take the whole page
+ * back and mark the rest PoD.
+ * No need to do this though if
+ * - order >= SUPERPAGE_ORDER (the loop below will take care of this)
+ * - not all of the pages were RAM (now knowing order < SUPERPAGE_ORDER)
+ */
+ if ( steal_for_cache && order < SUPERPAGE_ORDER && ram == (1 << order) &&
+ p2m_pod_zero_check_superpage(p2m, gpfn & ~(SUPERPAGE_PAGES - 1)) )
{
- /* Since order may be arbitrary, we may have taken more or less
- * than we were actually asked to; so just re-count from scratch */
- goto recount;
+ pod = 1 << order;
+ ram = nonpod = 0;
+ ASSERT(steal_for_cache == (p2m->pod.entry_count > p2m->pod.count));
}
/* Process as long as:
[-- Attachment #2: x86-PoD-emerg-avoid-check-super.patch --]
[-- Type: text/plain, Size: 2025 bytes --]
x86/PoD: tighten conditions for checking super page
Since calling the function isn't cheap, try to avoid the call when we
know up front it won't help; see the code comment for details on those
conditions.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
---
v2: Adjust conditions and body of the if() to make them easier
understandable, without altering behavior (requested by George).
--- a/xen/arch/x86/mm/p2m-pod.c
+++ b/xen/arch/x86/mm/p2m-pod.c
@@ -528,7 +528,6 @@ p2m_pod_decrease_reservation(struct doma
if ( unlikely(d->is_dying) )
goto out_unlock;
-recount:
pod = nonpod = ram = 0;
/* Figure out if we need to steal some freed memory for our cache */
@@ -568,15 +567,20 @@ recount:
goto out_entry_check;
}
- /* Try to grab entire superpages if possible. Since the common case is for drivers
- * to pass back singleton pages, see if we can take the whole page back and mark the
- * rest PoD. */
- if ( steal_for_cache
- && p2m_pod_zero_check_superpage(p2m, gpfn & ~(SUPERPAGE_PAGES-1)))
+ /*
+ * Try to grab entire superpages if possible. Since the common case is for
+ * drivers to pass back singleton pages, see if we can take the whole page
+ * back and mark the rest PoD.
+ * No need to do this though if
+ * - order >= SUPERPAGE_ORDER (the loop below will take care of this)
+ * - not all of the pages were RAM (now knowing order < SUPERPAGE_ORDER)
+ */
+ if ( steal_for_cache && order < SUPERPAGE_ORDER && ram == (1 << order) &&
+ p2m_pod_zero_check_superpage(p2m, gpfn & ~(SUPERPAGE_PAGES - 1)) )
{
- /* Since order may be arbitrary, we may have taken more or less
- * than we were actually asked to; so just re-count from scratch */
- goto recount;
+ pod = 1 << order;
+ ram = nonpod = 0;
+ ASSERT(steal_for_cache == (p2m->pod.entry_count > p2m->pod.count));
}
/* Process as long as:
[-- Attachment #3: Type: text/plain, Size: 126 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2015-11-19 17:13 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-09 14:48 [PATCH v2] x86/PoD: tighten conditions for checking super page Jan Beulich
2015-11-19 17:12 ` George Dunlap
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).