diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-22 14:25:44 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-08-22 14:25:44 -0400 |
| commit | 4762e252f4afc6909edb0babe9c25f126afedcaa (patch) | |
| tree | f4d68be15b2c5887f98894996899e9e3f191ce4c | |
| parent | 3210d190dcb717c328d74f8c3f69ec717d665b40 (diff) | |
| parent | 60c5f08e154fd235056645e050f2cd5671b19125 (diff) | |
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/tracing: Fix tracing config option properly
xen: Do not enable PV IPIs when vector callback not present
xen/x86: replace order-based range checking of M2P table by linear one
xen: xen-selfballoon.c needs more header files
| -rw-r--r-- | arch/x86/include/asm/xen/page.h | 4 | ||||
| -rw-r--r-- | arch/x86/xen/Makefile | 2 | ||||
| -rw-r--r-- | arch/x86/xen/enlighten.c | 4 | ||||
| -rw-r--r-- | arch/x86/xen/mmu.c | 12 | ||||
| -rw-r--r-- | arch/x86/xen/smp.c | 4 |
5 files changed, 15 insertions, 11 deletions
diff --git a/arch/x86/include/asm/xen/page.h b/arch/x86/include/asm/xen/page.h index 64a619d47d34..7ff4669580cf 100644 --- a/arch/x86/include/asm/xen/page.h +++ b/arch/x86/include/asm/xen/page.h | |||
| @@ -39,7 +39,7 @@ typedef struct xpaddr { | |||
| 39 | ((unsigned long)((u64)CONFIG_XEN_MAX_DOMAIN_MEMORY * 1024 * 1024 * 1024 / PAGE_SIZE)) | 39 | ((unsigned long)((u64)CONFIG_XEN_MAX_DOMAIN_MEMORY * 1024 * 1024 * 1024 / PAGE_SIZE)) |
| 40 | 40 | ||
| 41 | extern unsigned long *machine_to_phys_mapping; | 41 | extern unsigned long *machine_to_phys_mapping; |
| 42 | extern unsigned int machine_to_phys_order; | 42 | extern unsigned long machine_to_phys_nr; |
| 43 | 43 | ||
| 44 | extern unsigned long get_phys_to_machine(unsigned long pfn); | 44 | extern unsigned long get_phys_to_machine(unsigned long pfn); |
| 45 | extern bool set_phys_to_machine(unsigned long pfn, unsigned long mfn); | 45 | extern bool set_phys_to_machine(unsigned long pfn, unsigned long mfn); |
| @@ -87,7 +87,7 @@ static inline unsigned long mfn_to_pfn(unsigned long mfn) | |||
| 87 | if (xen_feature(XENFEAT_auto_translated_physmap)) | 87 | if (xen_feature(XENFEAT_auto_translated_physmap)) |
| 88 | return mfn; | 88 | return mfn; |
| 89 | 89 | ||
| 90 | if (unlikely((mfn >> machine_to_phys_order) != 0)) { | 90 | if (unlikely(mfn >= machine_to_phys_nr)) { |
| 91 | pfn = ~0; | 91 | pfn = ~0; |
| 92 | goto try_override; | 92 | goto try_override; |
| 93 | } | 93 | } |
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile index 3326204e251f..add2c2d729ce 100644 --- a/arch/x86/xen/Makefile +++ b/arch/x86/xen/Makefile | |||
| @@ -15,7 +15,7 @@ obj-y := enlighten.o setup.o multicalls.o mmu.o irq.o \ | |||
| 15 | grant-table.o suspend.o platform-pci-unplug.o \ | 15 | grant-table.o suspend.o platform-pci-unplug.o \ |
| 16 | p2m.o | 16 | p2m.o |
| 17 | 17 | ||
| 18 | obj-$(CONFIG_FTRACE) += trace.o | 18 | obj-$(CONFIG_EVENT_TRACING) += trace.o |
| 19 | 19 | ||
| 20 | obj-$(CONFIG_SMP) += smp.o | 20 | obj-$(CONFIG_SMP) += smp.o |
| 21 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o | 21 | obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o |
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index e2345af01af0..2d69617950f7 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c | |||
| @@ -77,8 +77,8 @@ EXPORT_SYMBOL_GPL(xen_domain_type); | |||
| 77 | 77 | ||
| 78 | unsigned long *machine_to_phys_mapping = (void *)MACH2PHYS_VIRT_START; | 78 | unsigned long *machine_to_phys_mapping = (void *)MACH2PHYS_VIRT_START; |
| 79 | EXPORT_SYMBOL(machine_to_phys_mapping); | 79 | EXPORT_SYMBOL(machine_to_phys_mapping); |
| 80 | unsigned int machine_to_phys_order; | 80 | unsigned long machine_to_phys_nr; |
| 81 | EXPORT_SYMBOL(machine_to_phys_order); | 81 | EXPORT_SYMBOL(machine_to_phys_nr); |
| 82 | 82 | ||
| 83 | struct start_info *xen_start_info; | 83 | struct start_info *xen_start_info; |
| 84 | EXPORT_SYMBOL_GPL(xen_start_info); | 84 | EXPORT_SYMBOL_GPL(xen_start_info); |
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c index 8cce339db5e7..20a614275064 100644 --- a/arch/x86/xen/mmu.c +++ b/arch/x86/xen/mmu.c | |||
| @@ -1713,15 +1713,19 @@ static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn) | |||
| 1713 | void __init xen_setup_machphys_mapping(void) | 1713 | void __init xen_setup_machphys_mapping(void) |
| 1714 | { | 1714 | { |
| 1715 | struct xen_machphys_mapping mapping; | 1715 | struct xen_machphys_mapping mapping; |
| 1716 | unsigned long machine_to_phys_nr_ents; | ||
| 1717 | 1716 | ||
| 1718 | if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) { | 1717 | if (HYPERVISOR_memory_op(XENMEM_machphys_mapping, &mapping) == 0) { |
| 1719 | machine_to_phys_mapping = (unsigned long *)mapping.v_start; | 1718 | machine_to_phys_mapping = (unsigned long *)mapping.v_start; |
| 1720 | machine_to_phys_nr_ents = mapping.max_mfn + 1; | 1719 | machine_to_phys_nr = mapping.max_mfn + 1; |
| 1721 | } else { | 1720 | } else { |
| 1722 | machine_to_phys_nr_ents = MACH2PHYS_NR_ENTRIES; | 1721 | machine_to_phys_nr = MACH2PHYS_NR_ENTRIES; |
| 1723 | } | 1722 | } |
| 1724 | machine_to_phys_order = fls(machine_to_phys_nr_ents - 1); | 1723 | #ifdef CONFIG_X86_32 |
| 1724 | if ((machine_to_phys_mapping + machine_to_phys_nr) | ||
| 1725 | < machine_to_phys_mapping) | ||
| 1726 | machine_to_phys_nr = (unsigned long *)NULL | ||
| 1727 | - machine_to_phys_mapping; | ||
| 1728 | #endif | ||
| 1725 | } | 1729 | } |
| 1726 | 1730 | ||
| 1727 | #ifdef CONFIG_X86_64 | 1731 | #ifdef CONFIG_X86_64 |
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c index b4533a86d7e4..e79dbb95482b 100644 --- a/arch/x86/xen/smp.c +++ b/arch/x86/xen/smp.c | |||
| @@ -521,8 +521,6 @@ static void __init xen_hvm_smp_prepare_cpus(unsigned int max_cpus) | |||
| 521 | native_smp_prepare_cpus(max_cpus); | 521 | native_smp_prepare_cpus(max_cpus); |
| 522 | WARN_ON(xen_smp_intr_init(0)); | 522 | WARN_ON(xen_smp_intr_init(0)); |
| 523 | 523 | ||
| 524 | if (!xen_have_vector_callback) | ||
| 525 | return; | ||
| 526 | xen_init_lock_cpu(0); | 524 | xen_init_lock_cpu(0); |
| 527 | xen_init_spinlocks(); | 525 | xen_init_spinlocks(); |
| 528 | } | 526 | } |
| @@ -546,6 +544,8 @@ static void xen_hvm_cpu_die(unsigned int cpu) | |||
| 546 | 544 | ||
| 547 | void __init xen_hvm_smp_init(void) | 545 | void __init xen_hvm_smp_init(void) |
| 548 | { | 546 | { |
| 547 | if (!xen_have_vector_callback) | ||
| 548 | return; | ||
| 549 | smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; | 549 | smp_ops.smp_prepare_cpus = xen_hvm_smp_prepare_cpus; |
| 550 | smp_ops.smp_send_reschedule = xen_smp_send_reschedule; | 550 | smp_ops.smp_send_reschedule = xen_smp_send_reschedule; |
| 551 | smp_ops.cpu_up = xen_hvm_cpu_up; | 551 | smp_ops.cpu_up = xen_hvm_cpu_up; |
