Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −7
Original line number Original line Diff line number Diff line
@@ -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);
+4 −1
Original line number Original line Diff line number Diff line
@@ -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)


	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);