mirror of https://gitee.com/openkylin/linux.git
Merge branch 'stable/bug.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen
* 'stable/bug.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/konrad/xen: xen/setup: Fix for incorrect xen_extra_mem_start. xen: When calling power_off, don't call the halt function. xen: Fix compile warning when CONFIG_SMP is not defined. xen: support CONFIG_MAXSMP xen: partially revert "xen: set max_pfn_mapped to the last pfn mapped"
This commit is contained in:
commit
ef46222e7b
|
@ -1033,6 +1033,13 @@ static void xen_machine_halt(void)
|
|||
xen_reboot(SHUTDOWN_poweroff);
|
||||
}
|
||||
|
||||
static void xen_machine_power_off(void)
|
||||
{
|
||||
if (pm_power_off)
|
||||
pm_power_off();
|
||||
xen_reboot(SHUTDOWN_poweroff);
|
||||
}
|
||||
|
||||
static void xen_crash_shutdown(struct pt_regs *regs)
|
||||
{
|
||||
xen_reboot(SHUTDOWN_crash);
|
||||
|
@ -1058,7 +1065,7 @@ int xen_panic_handler_init(void)
|
|||
static const struct machine_ops xen_machine_ops __initconst = {
|
||||
.restart = xen_restart,
|
||||
.halt = xen_machine_halt,
|
||||
.power_off = xen_machine_halt,
|
||||
.power_off = xen_machine_power_off,
|
||||
.shutdown = xen_machine_halt,
|
||||
.crash_shutdown = xen_crash_shutdown,
|
||||
.emergency_restart = xen_emergency_restart,
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/init.h>
|
||||
#include <asm/pat.h>
|
||||
#include <asm/smp.h>
|
||||
|
||||
#include <asm/xen/hypercall.h>
|
||||
#include <asm/xen/hypervisor.h>
|
||||
|
@ -1231,7 +1232,7 @@ static void xen_flush_tlb_others(const struct cpumask *cpus,
|
|||
{
|
||||
struct {
|
||||
struct mmuext_op op;
|
||||
DECLARE_BITMAP(mask, NR_CPUS);
|
||||
DECLARE_BITMAP(mask, num_processors);
|
||||
} *args;
|
||||
struct multicall_space mcs;
|
||||
|
||||
|
@ -1599,6 +1600,11 @@ static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
|
|||
for (pteidx = 0; pteidx < PTRS_PER_PTE; pteidx++, pfn++) {
|
||||
pte_t pte;
|
||||
|
||||
#ifdef CONFIG_X86_32
|
||||
if (pfn > max_pfn_mapped)
|
||||
max_pfn_mapped = pfn;
|
||||
#endif
|
||||
|
||||
if (!pte_none(pte_page[pteidx]))
|
||||
continue;
|
||||
|
||||
|
@ -1766,7 +1772,9 @@ pgd_t * __init xen_setup_kernel_pagetable(pgd_t *pgd,
|
|||
initial_kernel_pmd =
|
||||
extend_brk(sizeof(pmd_t) * PTRS_PER_PMD, PAGE_SIZE);
|
||||
|
||||
max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->mfn_list));
|
||||
max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->pt_base) +
|
||||
xen_start_info->nr_pt_frames * PAGE_SIZE +
|
||||
512*1024);
|
||||
|
||||
kernel_pmd = m2v(pgd[KERNEL_PGD_BOUNDARY].pgd);
|
||||
memcpy(initial_kernel_pmd, kernel_pmd, sizeof(pmd_t) * PTRS_PER_PMD);
|
||||
|
|
|
@ -227,11 +227,7 @@ char * __init xen_memory_setup(void)
|
|||
|
||||
memcpy(map_raw, map, sizeof(map));
|
||||
e820.nr_map = 0;
|
||||
#ifdef CONFIG_X86_32
|
||||
xen_extra_mem_start = mem_end;
|
||||
#else
|
||||
xen_extra_mem_start = max((1ULL << 32), mem_end);
|
||||
#endif
|
||||
for (i = 0; i < memmap.nr_entries; i++) {
|
||||
unsigned long long end;
|
||||
|
||||
|
@ -266,6 +262,12 @@ char * __init xen_memory_setup(void)
|
|||
if (map[i].size > 0)
|
||||
e820_add_region(map[i].addr, map[i].size, map[i].type);
|
||||
}
|
||||
/* Align the balloon area so that max_low_pfn does not get set
|
||||
* to be at the _end_ of the PCI gap at the far end (fee01000).
|
||||
* Note that xen_extra_mem_start gets set in the loop above to be
|
||||
* past the last E820 region. */
|
||||
if (xen_initial_domain() && (xen_extra_mem_start < (1ULL<<32)))
|
||||
xen_extra_mem_start = (1ULL<<32);
|
||||
|
||||
/*
|
||||
* In domU, the ISA region is normal, usable memory, but we
|
||||
|
|
|
@ -205,11 +205,18 @@ static void __init xen_smp_prepare_boot_cpu(void)
|
|||
static void __init xen_smp_prepare_cpus(unsigned int max_cpus)
|
||||
{
|
||||
unsigned cpu;
|
||||
unsigned int i;
|
||||
|
||||
xen_init_lock_cpu(0);
|
||||
|
||||
smp_store_cpu_info(0);
|
||||
cpu_data(0).x86_max_cores = 1;
|
||||
|
||||
for_each_possible_cpu(i) {
|
||||
zalloc_cpumask_var(&per_cpu(cpu_sibling_map, i), GFP_KERNEL);
|
||||
zalloc_cpumask_var(&per_cpu(cpu_core_map, i), GFP_KERNEL);
|
||||
zalloc_cpumask_var(&per_cpu(cpu_llc_shared_map, i), GFP_KERNEL);
|
||||
}
|
||||
set_cpu_sibling_map(0);
|
||||
|
||||
if (xen_smp_intr_init(0))
|
||||
|
|
|
@ -395,9 +395,9 @@ static void unmask_evtchn(int port)
|
|||
static void xen_irq_init(unsigned irq)
|
||||
{
|
||||
struct irq_info *info;
|
||||
#ifdef CONFIG_SMP
|
||||
struct irq_desc *desc = irq_to_desc(irq);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/* By default all event channels notify CPU#0. */
|
||||
cpumask_copy(desc->irq_data.affinity, cpumask_of(0));
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue