aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/xen
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-10-19 15:19:19 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-10-19 15:19:19 -0400
commite05dacd71db0a5da7c1a44bcaab2a8a240b9c233 (patch)
tree31382cf1c7d62c03126448affb2fc86e8c4aaa8b /arch/x86/xen
parent3ab0b83bf6a1e834f4b884150d8012990c75d25d (diff)
parentddffeb8c4d0331609ef2581d84de4d763607bd37 (diff)
Merge commit 'v3.7-rc1' into stable/for-linus-3.7
* commit 'v3.7-rc1': (10892 commits) Linux 3.7-rc1 x86, boot: Explicitly include autoconf.h for hostprogs perf: Fix UAPI fallout ARM: config: make sure that platforms are ordered by option string ARM: config: sort select statements alphanumerically UAPI: (Scripted) Disintegrate include/linux/byteorder UAPI: (Scripted) Disintegrate include/linux UAPI: Unexport linux/blk_types.h UAPI: Unexport part of linux/ppp-comp.h perf: Handle new rbtree implementation procfs: don't need a PATH_MAX allocation to hold a string representation of an int vfs: embed struct filename inside of names_cache allocation if possible audit: make audit_inode take struct filename vfs: make path_openat take a struct filename pointer vfs: turn do_path_lookup into wrapper around struct filename variant audit: allow audit code to satisfy getname requests from its names_list vfs: define struct filename and have getname() return it btrfs: Fix compilation with user namespace support enabled userns: Fix posix_acl_file_xattr_userns gid conversion userns: Properly print bluetooth socket uids ...
Diffstat (limited to 'arch/x86/xen')
-rw-r--r--arch/x86/xen/enlighten.c4
-rw-r--r--arch/x86/xen/mmu.c3
-rw-r--r--arch/x86/xen/p2m.c27
-rw-r--r--arch/x86/xen/setup.c4
-rw-r--r--arch/x86/xen/smp.c6
5 files changed, 22 insertions, 22 deletions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 783522b66b0f..586d83812b67 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -1474,6 +1474,10 @@ asmlinkage void __init xen_start_kernel(void)
1474 pci_request_acs(); 1474 pci_request_acs();
1475 1475
1476 xen_acpi_sleep_register(); 1476 xen_acpi_sleep_register();
1477
1478 /* Avoid searching for BIOS MP tables */
1479 x86_init.mpparse.find_smp_config = x86_init_noop;
1480 x86_init.mpparse.get_smp_config = x86_init_uint_noop;
1477 } 1481 }
1478#ifdef CONFIG_PCI 1482#ifdef CONFIG_PCI
1479 /* PCI BIOS service won't work from a PV guest. */ 1483 /* PCI BIOS service won't work from a PV guest. */
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 963cb2df636a..6226c99729b9 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -2492,8 +2492,7 @@ int xen_remap_domain_mfn_range(struct vm_area_struct *vma,
2492 2492
2493 prot = __pgprot(pgprot_val(prot) | _PAGE_IOMAP); 2493 prot = __pgprot(pgprot_val(prot) | _PAGE_IOMAP);
2494 2494
2495 BUG_ON(!((vma->vm_flags & (VM_PFNMAP | VM_RESERVED | VM_IO)) == 2495 BUG_ON(!((vma->vm_flags & (VM_PFNMAP | VM_IO)) == (VM_PFNMAP | VM_IO)));
2496 (VM_PFNMAP | VM_RESERVED | VM_IO)));
2497 2496
2498 rmd.mfn = mfn; 2497 rmd.mfn = mfn;
2499 rmd.prot = prot; 2498 rmd.prot = prot;
diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
index b5e4d302a067..95fb2aa5927e 100644
--- a/arch/x86/xen/p2m.c
+++ b/arch/x86/xen/p2m.c
@@ -906,9 +906,6 @@ int m2p_add_override(unsigned long mfn, struct page *page,
906 906
907 xen_mc_issue(PARAVIRT_LAZY_MMU); 907 xen_mc_issue(PARAVIRT_LAZY_MMU);
908 } 908 }
909 /* let's use dev_bus_addr to record the old mfn instead */
910 kmap_op->dev_bus_addr = page->index;
911 page->index = (unsigned long) kmap_op;
912 } 909 }
913 spin_lock_irqsave(&m2p_override_lock, flags); 910 spin_lock_irqsave(&m2p_override_lock, flags);
914 list_add(&page->lru, &m2p_overrides[mfn_hash(mfn)]); 911 list_add(&page->lru, &m2p_overrides[mfn_hash(mfn)]);
@@ -935,7 +932,8 @@ int m2p_add_override(unsigned long mfn, struct page *page,
935 return 0; 932 return 0;
936} 933}
937EXPORT_SYMBOL_GPL(m2p_add_override); 934EXPORT_SYMBOL_GPL(m2p_add_override);
938int m2p_remove_override(struct page *page, bool clear_pte) 935int m2p_remove_override(struct page *page,
936 struct gnttab_map_grant_ref *kmap_op)
939{ 937{
940 unsigned long flags; 938 unsigned long flags;
941 unsigned long mfn; 939 unsigned long mfn;
@@ -965,10 +963,8 @@ int m2p_remove_override(struct page *page, bool clear_pte)
965 WARN_ON(!PagePrivate(page)); 963 WARN_ON(!PagePrivate(page));
966 ClearPagePrivate(page); 964 ClearPagePrivate(page);
967 965
968 if (clear_pte) { 966 set_phys_to_machine(pfn, page->index);
969 struct gnttab_map_grant_ref *map_op = 967 if (kmap_op != NULL) {
970 (struct gnttab_map_grant_ref *) page->index;
971 set_phys_to_machine(pfn, map_op->dev_bus_addr);
972 if (!PageHighMem(page)) { 968 if (!PageHighMem(page)) {
973 struct multicall_space mcs; 969 struct multicall_space mcs;
974 struct gnttab_unmap_grant_ref *unmap_op; 970 struct gnttab_unmap_grant_ref *unmap_op;
@@ -980,13 +976,13 @@ int m2p_remove_override(struct page *page, bool clear_pte)
980 * issued. In this case handle is going to -1 because 976 * issued. In this case handle is going to -1 because
981 * it hasn't been modified yet. 977 * it hasn't been modified yet.
982 */ 978 */
983 if (map_op->handle == -1) 979 if (kmap_op->handle == -1)
984 xen_mc_flush(); 980 xen_mc_flush();
985 /* 981 /*
986 * Now if map_op->handle is negative it means that the 982 * Now if kmap_op->handle is negative it means that the
987 * hypercall actually returned an error. 983 * hypercall actually returned an error.
988 */ 984 */
989 if (map_op->handle == GNTST_general_error) { 985 if (kmap_op->handle == GNTST_general_error) {
990 printk(KERN_WARNING "m2p_remove_override: " 986 printk(KERN_WARNING "m2p_remove_override: "
991 "pfn %lx mfn %lx, failed to modify kernel mappings", 987 "pfn %lx mfn %lx, failed to modify kernel mappings",
992 pfn, mfn); 988 pfn, mfn);
@@ -996,8 +992,8 @@ int m2p_remove_override(struct page *page, bool clear_pte)
996 mcs = xen_mc_entry( 992 mcs = xen_mc_entry(
997 sizeof(struct gnttab_unmap_grant_ref)); 993 sizeof(struct gnttab_unmap_grant_ref));
998 unmap_op = mcs.args; 994 unmap_op = mcs.args;
999 unmap_op->host_addr = map_op->host_addr; 995 unmap_op->host_addr = kmap_op->host_addr;
1000 unmap_op->handle = map_op->handle; 996 unmap_op->handle = kmap_op->handle;
1001 unmap_op->dev_bus_addr = 0; 997 unmap_op->dev_bus_addr = 0;
1002 998
1003 MULTI_grant_table_op(mcs.mc, 999 MULTI_grant_table_op(mcs.mc,
@@ -1008,10 +1004,9 @@ int m2p_remove_override(struct page *page, bool clear_pte)
1008 set_pte_at(&init_mm, address, ptep, 1004 set_pte_at(&init_mm, address, ptep,
1009 pfn_pte(pfn, PAGE_KERNEL)); 1005 pfn_pte(pfn, PAGE_KERNEL));
1010 __flush_tlb_single(address); 1006 __flush_tlb_single(address);
1011 map_op->host_addr = 0; 1007 kmap_op->host_addr = 0;
1012 } 1008 }
1013 } else 1009 }
1014 set_phys_to_machine(pfn, page->index);
1015 1010
1016 /* p2m(m2p(mfn)) == FOREIGN_FRAME(mfn): the mfn is already present 1011 /* p2m(m2p(mfn)) == FOREIGN_FRAME(mfn): the mfn is already present
1017 * somewhere in this domain, even before being added to the 1012 * somewhere in this domain, even before being added to the
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 3edb320d508f..8971a26d21ab 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -17,6 +17,7 @@
17#include <asm/e820.h> 17#include <asm/e820.h>
18#include <asm/setup.h> 18#include <asm/setup.h>
19#include <asm/acpi.h> 19#include <asm/acpi.h>
20#include <asm/numa.h>
20#include <asm/xen/hypervisor.h> 21#include <asm/xen/hypervisor.h>
21#include <asm/xen/hypercall.h> 22#include <asm/xen/hypercall.h>
22 23
@@ -562,4 +563,7 @@ void __init xen_arch_setup(void)
562 disable_cpufreq(); 563 disable_cpufreq();
563 WARN_ON(set_pm_idle_to_default()); 564 WARN_ON(set_pm_idle_to_default());
564 fiddle_vdso(); 565 fiddle_vdso();
566#ifdef CONFIG_NUMA
567 numa_off = 1;
568#endif
565} 569}
diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
index f58dca7a6e52..353c50f18702 100644
--- a/arch/x86/xen/smp.c
+++ b/arch/x86/xen/smp.c
@@ -377,7 +377,8 @@ static int __cpuinit xen_cpu_up(unsigned int cpu, struct task_struct *idle)
377 return rc; 377 return rc;
378 378
379 if (num_online_cpus() == 1) 379 if (num_online_cpus() == 1)
380 alternatives_smp_switch(1); 380 /* Just in case we booted with a single CPU. */
381 alternatives_enable_smp();
381 382
382 rc = xen_smp_intr_init(cpu); 383 rc = xen_smp_intr_init(cpu);
383 if (rc) 384 if (rc)
@@ -424,9 +425,6 @@ static void xen_cpu_die(unsigned int cpu)
424 unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL); 425 unbind_from_irqhandler(per_cpu(xen_irq_work, cpu), NULL);
425 xen_uninit_lock_cpu(cpu); 426 xen_uninit_lock_cpu(cpu);
426 xen_teardown_timer(cpu); 427 xen_teardown_timer(cpu);
427
428 if (num_online_cpus() == 1)
429 alternatives_smp_switch(0);
430} 428}
431 429
432static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */ 430static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */