530b27fd-x86-MCE-Fix-race-condition-in-mctelem_reserve.patch 530b2880-Nested-VMX-update-nested-paging-mode-on-vmexit.patch 530b28c5-x86-MSI-don-t-risk-division-by-zero.patch 530c54c3-x86-mce-Reduce-boot-time-logspam.patch 5310bac3-mm-ensure-useful-progress-in-decrease_reservation.patch 5315a254-IOMMU-generalize-and-correct-softirq-processing.patch 5315a3bb-x86-don-t-propagate-acpi_skip_timer_override-do-Dom0.patch 5315a43a-x86-ACPI-also-print-address-space-for-PM1x-fields.patch 531d8db1-x86-hvm-refine-the-judgment-on-IDENT_PT-for-EMT.patch 531d8e09-x86-HVM-fix-memory-type-merging-in-epte_get_entry_emt.patch 531d8e34-x86-HVM-consolidate-passthrough-handling-in-epte_get_entry_emt.patch 531d8fd0-kexec-identify-which-cpu-the-kexec-image-is-being-executed-on.patch 531dc0e2-xmalloc-handle-correctly-page-allocation-when-align-size.patch - Add conversion tool for migrating xend/xm managed VMs to libvirt xen2libvirt.py (Jim Fehlig) OBS-URL: https://build.opensuse.org/package/show/Virtualization/xen?expand=0&rev=304
33 lines
1.1 KiB
Diff
33 lines
1.1 KiB
Diff
# Commit 79de2d31f1ff8910231b7ec15519405953e6571a
|
|
# Date 2014-02-28 17:35:15 +0100
|
|
# Author Wei Liu <wei.liu2@citrix.com>
|
|
# Committer Jan Beulich <jbeulich@suse.com>
|
|
mm: ensure useful progress in decrease_reservation
|
|
|
|
During my fun time playing with balloon driver I found that hypervisor's
|
|
preemption check kept decrease_reservation from doing any useful work
|
|
for 32 bit guests, resulting in hanging the guests.
|
|
|
|
As Andrew suggested, we can force the check to fail for the first
|
|
iteration to ensure progress. We did this in d3a55d7d9 "x86/mm: Ensure
|
|
useful progress in alloc_l2_table()" already.
|
|
|
|
After this change I cannot see the hang caused by continuation logic
|
|
anymore.
|
|
|
|
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
|
|
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
|
Acked-by: Keir Fraser <keir@xen.org>
|
|
|
|
--- a/xen/common/memory.c
|
|
+++ b/xen/common/memory.c
|
|
@@ -268,7 +268,7 @@ static void decrease_reservation(struct
|
|
|
|
for ( i = a->nr_done; i < a->nr_extents; i++ )
|
|
{
|
|
- if ( hypercall_preempt_check() )
|
|
+ if ( hypercall_preempt_check() && i != a->nr_done )
|
|
{
|
|
a->preempted = 1;
|
|
goto out;
|