Commit 59ca9ee4 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'stable/for-linus-3.16-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip

Pull Xen fixes from Konrad Rzeszutek Wilk:
 "Two fixes found during migration of PV guests.  David would be the one
  doing this pull but he is on vacation.

  Fixes:
   - fix console deadlock when resuming PV guests
   - fix regression hit when ballooning and resuming PV guests"

* tag 'stable/for-linus-3.16-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip:
  xen/balloon: set ballooned out pages as invalid in p2m
  xen/manage: fix potential deadlock when resuming the console
parents 22d36854 fb9a0c44
...@@ -426,21 +426,19 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp) ...@@ -426,21 +426,19 @@ static enum bp_state decrease_reservation(unsigned long nr_pages, gfp_t gfp)
* p2m are consistent. * p2m are consistent.
*/ */
if (!xen_feature(XENFEAT_auto_translated_physmap)) { if (!xen_feature(XENFEAT_auto_translated_physmap)) {
unsigned long p; if (!PageHighMem(page)) {
struct page *scratch_page = get_balloon_scratch_page(); struct page *scratch_page = get_balloon_scratch_page();
if (!PageHighMem(page)) {
ret = HYPERVISOR_update_va_mapping( ret = HYPERVISOR_update_va_mapping(
(unsigned long)__va(pfn << PAGE_SHIFT), (unsigned long)__va(pfn << PAGE_SHIFT),
pfn_pte(page_to_pfn(scratch_page), pfn_pte(page_to_pfn(scratch_page),
PAGE_KERNEL_RO), 0); PAGE_KERNEL_RO), 0);
BUG_ON(ret); BUG_ON(ret);
}
p = page_to_pfn(scratch_page);
__set_phys_to_machine(pfn, pfn_to_mfn(p));
put_balloon_scratch_page(); put_balloon_scratch_page();
} }
__set_phys_to_machine(pfn, INVALID_P2M_ENTRY);
}
#endif #endif
balloon_append(page); balloon_append(page);
......
...@@ -88,7 +88,6 @@ static int xen_suspend(void *data) ...@@ -88,7 +88,6 @@ static int xen_suspend(void *data)
if (!si->cancelled) { if (!si->cancelled) {
xen_irq_resume(); xen_irq_resume();
xen_console_resume();
xen_timer_resume(); xen_timer_resume();
} }
...@@ -135,6 +134,10 @@ static void do_suspend(void) ...@@ -135,6 +134,10 @@ static void do_suspend(void)
err = stop_machine(xen_suspend, &si, cpumask_of(0)); err = stop_machine(xen_suspend, &si, cpumask_of(0));
/* Resume console as early as possible. */
if (!si.cancelled)
xen_console_resume();
raw_notifier_call_chain(&xen_resume_notifier, 0, NULL); raw_notifier_call_chain(&xen_resume_notifier, 0, NULL);
dpm_resume_start(si.cancelled ? PMSG_THAW : PMSG_RESTORE); dpm_resume_start(si.cancelled ? PMSG_THAW : PMSG_RESTORE);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment