diff options
author | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-10-19 15:19:19 -0400 |
---|---|---|
committer | Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | 2012-10-19 15:19:19 -0400 |
commit | e05dacd71db0a5da7c1a44bcaab2a8a240b9c233 (patch) | |
tree | 31382cf1c7d62c03126448affb2fc86e8c4aaa8b /arch/x86/xen | |
parent | 3ab0b83bf6a1e834f4b884150d8012990c75d25d (diff) | |
parent | ddffeb8c4d0331609ef2581d84de4d763607bd37 (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.c | 4 | ||||
-rw-r--r-- | arch/x86/xen/mmu.c | 3 | ||||
-rw-r--r-- | arch/x86/xen/p2m.c | 27 | ||||
-rw-r--r-- | arch/x86/xen/setup.c | 4 | ||||
-rw-r--r-- | arch/x86/xen/smp.c | 6 |
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 | } |
937 | EXPORT_SYMBOL_GPL(m2p_add_override); | 934 | EXPORT_SYMBOL_GPL(m2p_add_override); |
938 | int m2p_remove_override(struct page *page, bool clear_pte) | 935 | int 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 | ||
432 | static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */ | 430 | static void __cpuinit xen_play_dead(void) /* used only with HOTPLUG_CPU */ |