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
This commit is contained in:
@@ -184,6 +184,19 @@ static unsigned long __init xen_set_identity(const struct e820entry *list,
|
|||||||
PFN_UP(start_pci), PFN_DOWN(last));
|
PFN_UP(start_pci), PFN_DOWN(last));
|
||||||
return identity;
|
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.
|
* 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);
|
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);
|
extra_pages += xen_return_unused_memory(xen_start_info->nr_pages, &e820);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -32,6 +32,7 @@
|
|||||||
#include <xen/page.h>
|
#include <xen/page.h>
|
||||||
#include <xen/events.h>
|
#include <xen/events.h>
|
||||||
|
|
||||||
|
#include <xen/hvc-console.h>
|
||||||
#include "xen-ops.h"
|
#include "xen-ops.h"
|
||||||
#include "mmu.h"
|
#include "mmu.h"
|
||||||
|
|
||||||
@@ -207,6 +208,15 @@ static void __init xen_smp_prepare_cpus(unsigned int max_cpus)
|
|||||||
unsigned cpu;
|
unsigned cpu;
|
||||||
unsigned int i;
|
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);
|
xen_init_lock_cpu(0);
|
||||||
|
|
||||||
smp_store_cpu_info(0);
|
smp_store_cpu_info(0);
|
||||||
|
@@ -113,11 +113,13 @@ xen_iret_start_crit:
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* If there's something pending, mask events again so we can
|
* 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
|
* From this point on the registers are restored and the stack
|
||||||
|
Reference in New Issue
Block a user