xen/xenpaging.optimize_p2m_mem_paging_populate.patch
Charles Arnold 0c76f22ef1 - Update to Xen 4.0.2 rc2-pre, changeset 21443
- bnc#633573 - System fail to boot after running several warm
  reboot tests
  22749-vtd-workarounds.patch
- Upstream patches from Jan
  22744-ept-pod-locking.patch
  22777-vtd-ats-fixes.patch
  22781-pod-hap-logdirty.patch
  22782-x86-emul-smsw.patch
  22789-i386-no-x2apic.patch
  22790-svm-resume-migrate-pirqs.patch
  22816-x86-pirq-drop-priv-check.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=94
2011-02-04 21:19:54 +00:00

49 lines
1.6 KiB
Diff

Subject: xenpaging: optimize p2m_mem_paging_populate
p2m_mem_paging_populate will always put another request in the ring. To
reduce pressure on the ring, place only required requests in the ring.
If the gfn was already processed by another thread, and the current vcpu
does not need to be paused, p2m_mem_paging_resume will do nothing with
the request. And also xenpaging will drop the request if the vcpu does
not need a wakeup.
(xen-unstable changeset: 22444:7fe9cad00e15)
Signed-off-by: Olaf Hering <olaf@aepfle.de>
---
xen/arch/x86/mm/p2m.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
Index: xen-4.0.2-testing/xen/arch/x86/mm/p2m.c
===================================================================
--- xen-4.0.2-testing.orig/xen/arch/x86/mm/p2m.c
+++ xen-4.0.2-testing/xen/arch/x86/mm/p2m.c
@@ -2578,12 +2578,12 @@ void p2m_mem_paging_populate(struct doma
mem_event_request_t req;
p2m_type_t p2mt;
- memset(&req, 0, sizeof(req));
-
/* Check that there's space on the ring for this request */
if ( mem_event_check_ring(d) )
return;
+ memset(&req, 0, sizeof(req));
+
/* Fix p2m mapping */
/* XXX: It seems inefficient to have this here, as it's only needed
* in one case (ept guest accessing paging out page) */
@@ -2601,6 +2601,11 @@ void p2m_mem_paging_populate(struct doma
vcpu_pause_nosync(v);
req.flags |= MEM_EVENT_FLAG_VCPU_PAUSED;
}
+ else if ( p2mt != p2m_ram_paging_out && p2mt != p2m_ram_paged )
+ {
+ /* gfn is already on its way back and vcpu is not paused */
+ return;
+ }
/* Send request to pager */
req.gfn = gfn;