diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 00:23:19 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-15 00:23:19 -0500 |
| commit | 664a1566df81b44f7e5e234d55e3bc8c6c0be211 (patch) | |
| tree | 17eb4b827091279a60f60a36b34e0437ba804dc1 | |
| parent | b9e222904ce92e1b277f2b85411d1eb6bfe27410 (diff) | |
| parent | f8d8406bcb58ff70e97b71c35ff5be90c54fc3d0 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86
* git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86:
x86: cpa, fix out of date comment
KVM is not seen under X86 config with latest git (32 bit compile)
x86: cpa: ensure page alignment
x86: include proper prototypes for rodata_test
x86: fix gart_iommu_init()
x86: EFI set_memory_x()/set_memory_uc() fixes
x86: make dump_pagetable() static
x86: fix "BUG: sleeping function called from invalid context" in print_vma_addr()
| -rw-r--r-- | arch/x86/Kconfig | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/efi.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/pci-gart_64.c | 9 | ||||
| -rw-r--r-- | arch/x86/kernel/test_rodata.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/traps_64.c | 4 | ||||
| -rw-r--r-- | arch/x86/mm/fault.c | 2 | ||||
| -rw-r--r-- | arch/x86/mm/init_32.c | 1 | ||||
| -rw-r--r-- | arch/x86/mm/init_64.c | 1 | ||||
| -rw-r--r-- | arch/x86/mm/pageattr.c | 17 | ||||
| -rw-r--r-- | include/asm-x86/cacheflush.h | 7 | ||||
| -rw-r--r-- | include/asm-x86/kdebug.h | 1 | ||||
| -rw-r--r-- | mm/memory.c | 7 |
12 files changed, 46 insertions, 13 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index aaed1a3b92d6..3be2305709b7 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -21,6 +21,8 @@ config X86 | |||
| 21 | select HAVE_IDE | 21 | select HAVE_IDE |
| 22 | select HAVE_OPROFILE | 22 | select HAVE_OPROFILE |
| 23 | select HAVE_KPROBES | 23 | select HAVE_KPROBES |
| 24 | select HAVE_KVM | ||
| 25 | |||
| 24 | 26 | ||
| 25 | config GENERIC_LOCKBREAK | 27 | config GENERIC_LOCKBREAK |
| 26 | def_bool n | 28 | def_bool n |
| @@ -119,8 +121,6 @@ config ARCH_HAS_CPU_RELAX | |||
| 119 | config HAVE_SETUP_PER_CPU_AREA | 121 | config HAVE_SETUP_PER_CPU_AREA |
| 120 | def_bool X86_64 | 122 | def_bool X86_64 |
| 121 | 123 | ||
| 122 | select HAVE_KVM | ||
| 123 | |||
| 124 | config ARCH_HIBERNATION_POSSIBLE | 124 | config ARCH_HIBERNATION_POSSIBLE |
| 125 | def_bool y | 125 | def_bool y |
| 126 | depends on !SMP || !X86_VOYAGER | 126 | depends on !SMP || !X86_VOYAGER |
diff --git a/arch/x86/kernel/efi.c b/arch/x86/kernel/efi.c index cbdf9bacc575..0c0eeb163d90 100644 --- a/arch/x86/kernel/efi.c +++ b/arch/x86/kernel/efi.c | |||
| @@ -391,7 +391,7 @@ static void __init runtime_code_page_mkexec(void) | |||
| 391 | if (md->type != EFI_RUNTIME_SERVICES_CODE) | 391 | if (md->type != EFI_RUNTIME_SERVICES_CODE) |
| 392 | continue; | 392 | continue; |
| 393 | 393 | ||
| 394 | set_memory_x(md->virt_addr, md->num_pages << EFI_PAGE_SHIFT); | 394 | set_memory_x(md->virt_addr, md->num_pages); |
| 395 | } | 395 | } |
| 396 | } | 396 | } |
| 397 | 397 | ||
| @@ -434,7 +434,7 @@ void __init efi_enter_virtual_mode(void) | |||
| 434 | } | 434 | } |
| 435 | 435 | ||
| 436 | if (!(md->attribute & EFI_MEMORY_WB)) | 436 | if (!(md->attribute & EFI_MEMORY_WB)) |
| 437 | set_memory_uc(md->virt_addr, size); | 437 | set_memory_uc(md->virt_addr, md->num_pages); |
| 438 | 438 | ||
| 439 | systab = (u64) (unsigned long) efi_phys.systab; | 439 | systab = (u64) (unsigned long) efi_phys.systab; |
| 440 | if (md->phys_addr <= systab && systab < end) { | 440 | if (md->phys_addr <= systab && systab < end) { |
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index 65f6acb025c8..faf3229f8fb3 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
| @@ -749,6 +749,15 @@ void __init gart_iommu_init(void) | |||
| 749 | */ | 749 | */ |
| 750 | set_memory_np((unsigned long)__va(iommu_bus_base), | 750 | set_memory_np((unsigned long)__va(iommu_bus_base), |
| 751 | iommu_size >> PAGE_SHIFT); | 751 | iommu_size >> PAGE_SHIFT); |
| 752 | /* | ||
| 753 | * Tricky. The GART table remaps the physical memory range, | ||
| 754 | * so the CPU wont notice potential aliases and if the memory | ||
| 755 | * is remapped to UC later on, we might surprise the PCI devices | ||
| 756 | * with a stray writeout of a cacheline. So play it sure and | ||
| 757 | * do an explicit, full-scale wbinvd() _after_ having marked all | ||
| 758 | * the pages as Not-Present: | ||
| 759 | */ | ||
| 760 | wbinvd(); | ||
| 752 | 761 | ||
| 753 | /* | 762 | /* |
| 754 | * Try to workaround a bug (thanks to BenH) | 763 | * Try to workaround a bug (thanks to BenH) |
diff --git a/arch/x86/kernel/test_rodata.c b/arch/x86/kernel/test_rodata.c index 4c163772000e..c29e235792af 100644 --- a/arch/x86/kernel/test_rodata.c +++ b/arch/x86/kernel/test_rodata.c | |||
| @@ -10,8 +10,8 @@ | |||
| 10 | * of the License. | 10 | * of the License. |
| 11 | */ | 11 | */ |
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 13 | #include <asm/cacheflush.h> | ||
| 13 | #include <asm/sections.h> | 14 | #include <asm/sections.h> |
| 14 | extern int rodata_test_data; | ||
| 15 | 15 | ||
| 16 | int rodata_test(void) | 16 | int rodata_test(void) |
| 17 | { | 17 | { |
diff --git a/arch/x86/kernel/traps_64.c b/arch/x86/kernel/traps_64.c index efc66df728b6..045466681911 100644 --- a/arch/x86/kernel/traps_64.c +++ b/arch/x86/kernel/traps_64.c | |||
| @@ -84,7 +84,7 @@ static inline void conditional_sti(struct pt_regs *regs) | |||
| 84 | 84 | ||
| 85 | static inline void preempt_conditional_sti(struct pt_regs *regs) | 85 | static inline void preempt_conditional_sti(struct pt_regs *regs) |
| 86 | { | 86 | { |
| 87 | preempt_disable(); | 87 | inc_preempt_count(); |
| 88 | if (regs->flags & X86_EFLAGS_IF) | 88 | if (regs->flags & X86_EFLAGS_IF) |
| 89 | local_irq_enable(); | 89 | local_irq_enable(); |
| 90 | } | 90 | } |
| @@ -95,7 +95,7 @@ static inline void preempt_conditional_cli(struct pt_regs *regs) | |||
| 95 | local_irq_disable(); | 95 | local_irq_disable(); |
| 96 | /* Make sure to not schedule here because we could be running | 96 | /* Make sure to not schedule here because we could be running |
| 97 | on an exception stack. */ | 97 | on an exception stack. */ |
| 98 | preempt_enable_no_resched(); | 98 | dec_preempt_count(); |
| 99 | } | 99 | } |
| 100 | 100 | ||
| 101 | int kstack_depth_to_print = 12; | 101 | int kstack_depth_to_print = 12; |
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 621afb6343dc..fdc667422df9 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c | |||
| @@ -186,7 +186,7 @@ static int bad_address(void *p) | |||
| 186 | } | 186 | } |
| 187 | #endif | 187 | #endif |
| 188 | 188 | ||
| 189 | void dump_pagetable(unsigned long address) | 189 | static void dump_pagetable(unsigned long address) |
| 190 | { | 190 | { |
| 191 | #ifdef CONFIG_X86_32 | 191 | #ifdef CONFIG_X86_32 |
| 192 | __typeof__(pte_val(__pte(0))) page; | 192 | __typeof__(pte_val(__pte(0))) page; |
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c index 8106bba41ecb..ee1091a46964 100644 --- a/arch/x86/mm/init_32.c +++ b/arch/x86/mm/init_32.c | |||
| @@ -47,6 +47,7 @@ | |||
| 47 | #include <asm/sections.h> | 47 | #include <asm/sections.h> |
| 48 | #include <asm/paravirt.h> | 48 | #include <asm/paravirt.h> |
| 49 | #include <asm/setup.h> | 49 | #include <asm/setup.h> |
| 50 | #include <asm/cacheflush.h> | ||
| 50 | 51 | ||
| 51 | unsigned int __VMALLOC_RESERVE = 128 << 20; | 52 | unsigned int __VMALLOC_RESERVE = 128 << 20; |
| 52 | 53 | ||
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index b59fc238151f..a4a9cccdd4f2 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
| @@ -45,6 +45,7 @@ | |||
| 45 | #include <asm/sections.h> | 45 | #include <asm/sections.h> |
| 46 | #include <asm/kdebug.h> | 46 | #include <asm/kdebug.h> |
| 47 | #include <asm/numa.h> | 47 | #include <asm/numa.h> |
| 48 | #include <asm/cacheflush.h> | ||
| 48 | 49 | ||
| 49 | const struct dma_mapping_ops *dma_ops; | 50 | const struct dma_mapping_ops *dma_ops; |
| 50 | EXPORT_SYMBOL(dma_ops); | 51 | EXPORT_SYMBOL(dma_ops); |
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c index bd61ed13f9cf..4119379f80ff 100644 --- a/arch/x86/mm/pageattr.c +++ b/arch/x86/mm/pageattr.c | |||
| @@ -688,6 +688,15 @@ static int change_page_attr_set_clr(unsigned long addr, int numpages, | |||
| 688 | if (!pgprot_val(mask_set) && !pgprot_val(mask_clr)) | 688 | if (!pgprot_val(mask_set) && !pgprot_val(mask_clr)) |
| 689 | return 0; | 689 | return 0; |
| 690 | 690 | ||
| 691 | /* Ensure we are PAGE_SIZE aligned */ | ||
| 692 | if (addr & ~PAGE_MASK) { | ||
| 693 | addr &= PAGE_MASK; | ||
| 694 | /* | ||
| 695 | * People should not be passing in unaligned addresses: | ||
| 696 | */ | ||
| 697 | WARN_ON_ONCE(1); | ||
| 698 | } | ||
| 699 | |||
| 691 | cpa.vaddr = addr; | 700 | cpa.vaddr = addr; |
| 692 | cpa.numpages = numpages; | 701 | cpa.numpages = numpages; |
| 693 | cpa.mask_set = mask_set; | 702 | cpa.mask_set = mask_set; |
| @@ -861,8 +870,12 @@ void kernel_map_pages(struct page *page, int numpages, int enable) | |||
| 861 | return; | 870 | return; |
| 862 | 871 | ||
| 863 | /* | 872 | /* |
| 864 | * The return value is ignored - the calls cannot fail, | 873 | * The return value is ignored as the calls cannot fail. |
| 865 | * large pages are disabled at boot time: | 874 | * Large pages are kept enabled at boot time, and are |
| 875 | * split up quickly with DEBUG_PAGEALLOC. If a splitup | ||
| 876 | * fails here (due to temporary memory shortage) no damage | ||
| 877 | * is done because we just keep the largepage intact up | ||
| 878 | * to the next attempt when it will likely be split up: | ||
| 866 | */ | 879 | */ |
| 867 | if (enable) | 880 | if (enable) |
| 868 | __set_pages_p(page, numpages); | 881 | __set_pages_p(page, numpages); |
diff --git a/include/asm-x86/cacheflush.h b/include/asm-x86/cacheflush.h index 6a22212b4b20..5396c212d8c0 100644 --- a/include/asm-x86/cacheflush.h +++ b/include/asm-x86/cacheflush.h | |||
| @@ -48,12 +48,15 @@ void cpa_init(void); | |||
| 48 | 48 | ||
| 49 | #ifdef CONFIG_DEBUG_RODATA | 49 | #ifdef CONFIG_DEBUG_RODATA |
| 50 | void mark_rodata_ro(void); | 50 | void mark_rodata_ro(void); |
| 51 | extern const int rodata_test_data; | ||
| 51 | #endif | 52 | #endif |
| 53 | |||
| 52 | #ifdef CONFIG_DEBUG_RODATA_TEST | 54 | #ifdef CONFIG_DEBUG_RODATA_TEST |
| 53 | void rodata_test(void); | 55 | int rodata_test(void); |
| 54 | #else | 56 | #else |
| 55 | static inline void rodata_test(void) | 57 | static inline int rodata_test(void) |
| 56 | { | 58 | { |
| 59 | return 0; | ||
| 57 | } | 60 | } |
| 58 | #endif | 61 | #endif |
| 59 | 62 | ||
diff --git a/include/asm-x86/kdebug.h b/include/asm-x86/kdebug.h index dd442a1632c0..99dcbafa1511 100644 --- a/include/asm-x86/kdebug.h +++ b/include/asm-x86/kdebug.h | |||
| @@ -31,7 +31,6 @@ extern void show_trace(struct task_struct *t, struct pt_regs *regs, | |||
| 31 | unsigned long *sp, unsigned long bp); | 31 | unsigned long *sp, unsigned long bp); |
| 32 | extern void __show_regs(struct pt_regs *regs); | 32 | extern void __show_regs(struct pt_regs *regs); |
| 33 | extern void show_regs(struct pt_regs *regs); | 33 | extern void show_regs(struct pt_regs *regs); |
| 34 | extern void dump_pagetable(unsigned long); | ||
| 35 | extern unsigned long oops_begin(void); | 34 | extern unsigned long oops_begin(void); |
| 36 | extern void oops_end(unsigned long, struct pt_regs *, int signr); | 35 | extern void oops_end(unsigned long, struct pt_regs *, int signr); |
| 37 | 36 | ||
diff --git a/mm/memory.c b/mm/memory.c index e7a6dcacefc1..ce3c9e4492d8 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -2711,6 +2711,13 @@ void print_vma_addr(char *prefix, unsigned long ip) | |||
| 2711 | struct mm_struct *mm = current->mm; | 2711 | struct mm_struct *mm = current->mm; |
| 2712 | struct vm_area_struct *vma; | 2712 | struct vm_area_struct *vma; |
| 2713 | 2713 | ||
| 2714 | /* | ||
| 2715 | * Do not print if we are in atomic | ||
| 2716 | * contexts (in exception stacks, etc.): | ||
| 2717 | */ | ||
| 2718 | if (preempt_count()) | ||
| 2719 | return; | ||
| 2720 | |||
| 2714 | down_read(&mm->mmap_sem); | 2721 | down_read(&mm->mmap_sem); |
| 2715 | vma = find_vma(mm, ip); | 2722 | vma = find_vma(mm, ip); |
| 2716 | if (vma && vma->vm_file) { | 2723 | if (vma && vma->vm_file) { |
