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

Commit 11545267 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'stable/bug.fixes' of git://oss.oracle.com/git/kwilk/xen

* 'stable/bug.fixes' of git://oss.oracle.com/git/kwilk/xen:
  xen/smp: Warn user why they keel over - nosmp or noapic and what to use instead.
  xen: x86_32: do not enable iterrupts when returning from exception in interrupt context
  xen: use maximum reservation to limit amount of usable RAM
parents 768b56f5 ed467e69
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -184,6 +184,19 @@ static unsigned long __init xen_set_identity(const struct e820entry *list,
					PFN_UP(start_pci), PFN_DOWN(last));
	return identity;
}

static unsigned long __init xen_get_max_pages(void)
{
	unsigned long max_pages = MAX_DOMAIN_PAGES;
	domid_t domid = DOMID_SELF;
	int ret;

	ret = HYPERVISOR_memory_op(XENMEM_maximum_reservation, &domid);
	if (ret > 0)
		max_pages = ret;
	return min(max_pages, MAX_DOMAIN_PAGES);
}

/**
 * machine_specific_memory_setup - Hook for machine specific memory setup.
 **/
@@ -292,6 +305,12 @@ char * __init xen_memory_setup(void)

	sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);

	extra_limit = xen_get_max_pages();
	if (extra_limit >= max_pfn)
		extra_pages = extra_limit - max_pfn;
	else
		extra_pages = 0;

	extra_pages += xen_return_unused_memory(xen_start_info->nr_pages, &e820);

	/*
+10 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <xen/page.h>
#include <xen/events.h>

#include <xen/hvc-console.h>
#include "xen-ops.h"
#include "mmu.h"

@@ -207,6 +208,15 @@ static void __init xen_smp_prepare_cpus(unsigned int max_cpus)
	unsigned cpu;
	unsigned int i;

	if (skip_ioapic_setup) {
		char *m = (max_cpus == 0) ?
			"The nosmp parameter is incompatible with Xen; " \
			"use Xen dom0_max_vcpus=1 parameter" :
			"The noapic parameter is incompatible with Xen";

		xen_raw_printk(m);
		panic(m);
	}
	xen_init_lock_cpu(0);

	smp_store_cpu_info(0);
+5 −3
Original line number Diff line number Diff line
@@ -113,11 +113,13 @@ xen_iret_start_crit:

	/*
	 * If there's something pending, mask events again so we can
	 * jump back into xen_hypervisor_callback
	 * jump back into xen_hypervisor_callback. Otherwise do not
	 * touch XEN_vcpu_info_mask.
	 */
	sete XEN_vcpu_info_mask(%eax)
	jne 1f
	movb $1, XEN_vcpu_info_mask(%eax)

	popl %eax
1:	popl %eax

	/*
	 * From this point on the registers are restored and the stack