diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-02-25 02:27:46 -0500 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-02-25 02:27:46 -0500 |
| commit | 95f66b3770d6d0755b4a2d818c237574ffd74e4c (patch) | |
| tree | 61889ead58d8e262e6451c75194c3c68a21c4181 | |
| parent | 46cb27f5169d37be38be8e5729b9a0100e989fa8 (diff) | |
| parent | 9f331119a4f95a44d918fe6d5e85998fabf99b72 (diff) | |
Merge branch 'x86/asm' into x86/mm
| -rw-r--r-- | arch/x86/include/asm/irq_vectors.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/uaccess_64.h | 16 | ||||
| -rw-r--r-- | arch/x86/kernel/efi_stub_32.S | 1 | ||||
| -rw-r--r-- | arch/x86/kernel/efi_stub_64.S | 7 | ||||
| -rw-r--r-- | arch/x86/kernel/entry_64.S | 23 | ||||
| -rw-r--r-- | arch/x86/kernel/head_64.S | 4 |
6 files changed, 32 insertions, 21 deletions
diff --git a/arch/x86/include/asm/irq_vectors.h b/arch/x86/include/asm/irq_vectors.h index b07278c55e9e..8a285f356f8a 100644 --- a/arch/x86/include/asm/irq_vectors.h +++ b/arch/x86/include/asm/irq_vectors.h | |||
| @@ -128,7 +128,7 @@ | |||
| 128 | #ifndef __ASSEMBLY__ | 128 | #ifndef __ASSEMBLY__ |
| 129 | static inline int invalid_vm86_irq(int irq) | 129 | static inline int invalid_vm86_irq(int irq) |
| 130 | { | 130 | { |
| 131 | return irq < 3 || irq > 15; | 131 | return irq < FIRST_VM86_IRQ || irq > LAST_VM86_IRQ; |
| 132 | } | 132 | } |
| 133 | #endif | 133 | #endif |
| 134 | 134 | ||
diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h index 84210c479fca..987a2c10fe20 100644 --- a/arch/x86/include/asm/uaccess_64.h +++ b/arch/x86/include/asm/uaccess_64.h | |||
| @@ -192,14 +192,26 @@ static inline int __copy_from_user_nocache(void *dst, const void __user *src, | |||
| 192 | unsigned size) | 192 | unsigned size) |
| 193 | { | 193 | { |
| 194 | might_sleep(); | 194 | might_sleep(); |
| 195 | return __copy_user_nocache(dst, src, size, 1); | 195 | /* |
| 196 | * In practice this limit means that large file write()s | ||
| 197 | * which get chunked to 4K copies get handled via | ||
| 198 | * non-temporal stores here. Smaller writes get handled | ||
| 199 | * via regular __copy_from_user(): | ||
| 200 | */ | ||
| 201 | if (likely(size >= PAGE_SIZE)) | ||
| 202 | return __copy_user_nocache(dst, src, size, 1); | ||
| 203 | else | ||
| 204 | return __copy_from_user(dst, src, size); | ||
| 196 | } | 205 | } |
| 197 | 206 | ||
| 198 | static inline int __copy_from_user_inatomic_nocache(void *dst, | 207 | static inline int __copy_from_user_inatomic_nocache(void *dst, |
| 199 | const void __user *src, | 208 | const void __user *src, |
| 200 | unsigned size) | 209 | unsigned size) |
| 201 | { | 210 | { |
| 202 | return __copy_user_nocache(dst, src, size, 0); | 211 | if (likely(size >= PAGE_SIZE)) |
| 212 | return __copy_user_nocache(dst, src, size, 0); | ||
| 213 | else | ||
| 214 | return __copy_from_user_inatomic(dst, src, size); | ||
| 203 | } | 215 | } |
| 204 | 216 | ||
| 205 | unsigned long | 217 | unsigned long |
diff --git a/arch/x86/kernel/efi_stub_32.S b/arch/x86/kernel/efi_stub_32.S index 8b9171b9cbd2..fbe66e626c09 100644 --- a/arch/x86/kernel/efi_stub_32.S +++ b/arch/x86/kernel/efi_stub_32.S | |||
| @@ -113,6 +113,7 @@ ENTRY(efi_call_phys) | |||
| 113 | movl (%edx), %ecx | 113 | movl (%edx), %ecx |
| 114 | pushl %ecx | 114 | pushl %ecx |
| 115 | ret | 115 | ret |
| 116 | ENDPROC(efi_call_phys) | ||
| 116 | .previous | 117 | .previous |
| 117 | 118 | ||
| 118 | .data | 119 | .data |
diff --git a/arch/x86/kernel/efi_stub_64.S b/arch/x86/kernel/efi_stub_64.S index 99b47d48c9f4..4c07ccab8146 100644 --- a/arch/x86/kernel/efi_stub_64.S +++ b/arch/x86/kernel/efi_stub_64.S | |||
| @@ -41,6 +41,7 @@ ENTRY(efi_call0) | |||
| 41 | addq $32, %rsp | 41 | addq $32, %rsp |
| 42 | RESTORE_XMM | 42 | RESTORE_XMM |
| 43 | ret | 43 | ret |
| 44 | ENDPROC(efi_call0) | ||
| 44 | 45 | ||
| 45 | ENTRY(efi_call1) | 46 | ENTRY(efi_call1) |
| 46 | SAVE_XMM | 47 | SAVE_XMM |
| @@ -50,6 +51,7 @@ ENTRY(efi_call1) | |||
| 50 | addq $32, %rsp | 51 | addq $32, %rsp |
| 51 | RESTORE_XMM | 52 | RESTORE_XMM |
| 52 | ret | 53 | ret |
| 54 | ENDPROC(efi_call1) | ||
| 53 | 55 | ||
| 54 | ENTRY(efi_call2) | 56 | ENTRY(efi_call2) |
| 55 | SAVE_XMM | 57 | SAVE_XMM |
| @@ -59,6 +61,7 @@ ENTRY(efi_call2) | |||
| 59 | addq $32, %rsp | 61 | addq $32, %rsp |
| 60 | RESTORE_XMM | 62 | RESTORE_XMM |
| 61 | ret | 63 | ret |
| 64 | ENDPROC(efi_call2) | ||
| 62 | 65 | ||
| 63 | ENTRY(efi_call3) | 66 | ENTRY(efi_call3) |
| 64 | SAVE_XMM | 67 | SAVE_XMM |
| @@ -69,6 +72,7 @@ ENTRY(efi_call3) | |||
| 69 | addq $32, %rsp | 72 | addq $32, %rsp |
| 70 | RESTORE_XMM | 73 | RESTORE_XMM |
| 71 | ret | 74 | ret |
| 75 | ENDPROC(efi_call3) | ||
| 72 | 76 | ||
| 73 | ENTRY(efi_call4) | 77 | ENTRY(efi_call4) |
| 74 | SAVE_XMM | 78 | SAVE_XMM |
| @@ -80,6 +84,7 @@ ENTRY(efi_call4) | |||
| 80 | addq $32, %rsp | 84 | addq $32, %rsp |
| 81 | RESTORE_XMM | 85 | RESTORE_XMM |
| 82 | ret | 86 | ret |
| 87 | ENDPROC(efi_call4) | ||
| 83 | 88 | ||
| 84 | ENTRY(efi_call5) | 89 | ENTRY(efi_call5) |
| 85 | SAVE_XMM | 90 | SAVE_XMM |
| @@ -92,6 +97,7 @@ ENTRY(efi_call5) | |||
| 92 | addq $48, %rsp | 97 | addq $48, %rsp |
| 93 | RESTORE_XMM | 98 | RESTORE_XMM |
| 94 | ret | 99 | ret |
| 100 | ENDPROC(efi_call5) | ||
| 95 | 101 | ||
| 96 | ENTRY(efi_call6) | 102 | ENTRY(efi_call6) |
| 97 | SAVE_XMM | 103 | SAVE_XMM |
| @@ -107,3 +113,4 @@ ENTRY(efi_call6) | |||
| 107 | addq $48, %rsp | 113 | addq $48, %rsp |
| 108 | RESTORE_XMM | 114 | RESTORE_XMM |
| 109 | ret | 115 | ret |
| 116 | ENDPROC(efi_call6) | ||
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S index dcf31283f949..83d1836b9467 100644 --- a/arch/x86/kernel/entry_64.S +++ b/arch/x86/kernel/entry_64.S | |||
| @@ -77,20 +77,17 @@ ENTRY(ftrace_caller) | |||
| 77 | movq 8(%rbp), %rsi | 77 | movq 8(%rbp), %rsi |
| 78 | subq $MCOUNT_INSN_SIZE, %rdi | 78 | subq $MCOUNT_INSN_SIZE, %rdi |
| 79 | 79 | ||
| 80 | .globl ftrace_call | 80 | GLOBAL(ftrace_call) |
| 81 | ftrace_call: | ||
| 82 | call ftrace_stub | 81 | call ftrace_stub |
| 83 | 82 | ||
| 84 | MCOUNT_RESTORE_FRAME | 83 | MCOUNT_RESTORE_FRAME |
| 85 | 84 | ||
| 86 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 85 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER |
| 87 | .globl ftrace_graph_call | 86 | GLOBAL(ftrace_graph_call) |
| 88 | ftrace_graph_call: | ||
| 89 | jmp ftrace_stub | 87 | jmp ftrace_stub |
| 90 | #endif | 88 | #endif |
| 91 | 89 | ||
| 92 | .globl ftrace_stub | 90 | GLOBAL(ftrace_stub) |
| 93 | ftrace_stub: | ||
| 94 | retq | 91 | retq |
| 95 | END(ftrace_caller) | 92 | END(ftrace_caller) |
| 96 | 93 | ||
| @@ -110,8 +107,7 @@ ENTRY(mcount) | |||
| 110 | jnz ftrace_graph_caller | 107 | jnz ftrace_graph_caller |
| 111 | #endif | 108 | #endif |
| 112 | 109 | ||
| 113 | .globl ftrace_stub | 110 | GLOBAL(ftrace_stub) |
| 114 | ftrace_stub: | ||
| 115 | retq | 111 | retq |
| 116 | 112 | ||
| 117 | trace: | 113 | trace: |
| @@ -148,9 +144,7 @@ ENTRY(ftrace_graph_caller) | |||
| 148 | retq | 144 | retq |
| 149 | END(ftrace_graph_caller) | 145 | END(ftrace_graph_caller) |
| 150 | 146 | ||
| 151 | 147 | GLOBAL(return_to_handler) | |
| 152 | .globl return_to_handler | ||
| 153 | return_to_handler: | ||
| 154 | subq $80, %rsp | 148 | subq $80, %rsp |
| 155 | 149 | ||
| 156 | movq %rax, (%rsp) | 150 | movq %rax, (%rsp) |
| @@ -188,6 +182,7 @@ return_to_handler: | |||
| 188 | ENTRY(native_usergs_sysret64) | 182 | ENTRY(native_usergs_sysret64) |
| 189 | swapgs | 183 | swapgs |
| 190 | sysretq | 184 | sysretq |
| 185 | ENDPROC(native_usergs_sysret64) | ||
| 191 | #endif /* CONFIG_PARAVIRT */ | 186 | #endif /* CONFIG_PARAVIRT */ |
| 192 | 187 | ||
| 193 | 188 | ||
| @@ -633,16 +628,14 @@ tracesys: | |||
| 633 | * Syscall return path ending with IRET. | 628 | * Syscall return path ending with IRET. |
| 634 | * Has correct top of stack, but partial stack frame. | 629 | * Has correct top of stack, but partial stack frame. |
| 635 | */ | 630 | */ |
| 636 | .globl int_ret_from_sys_call | 631 | GLOBAL(int_ret_from_sys_call) |
| 637 | .globl int_with_check | ||
| 638 | int_ret_from_sys_call: | ||
| 639 | DISABLE_INTERRUPTS(CLBR_NONE) | 632 | DISABLE_INTERRUPTS(CLBR_NONE) |
| 640 | TRACE_IRQS_OFF | 633 | TRACE_IRQS_OFF |
| 641 | testl $3,CS-ARGOFFSET(%rsp) | 634 | testl $3,CS-ARGOFFSET(%rsp) |
| 642 | je retint_restore_args | 635 | je retint_restore_args |
| 643 | movl $_TIF_ALLWORK_MASK,%edi | 636 | movl $_TIF_ALLWORK_MASK,%edi |
| 644 | /* edi: mask to check */ | 637 | /* edi: mask to check */ |
| 645 | int_with_check: | 638 | GLOBAL(int_with_check) |
| 646 | LOCKDEP_SYS_EXIT_IRQ | 639 | LOCKDEP_SYS_EXIT_IRQ |
| 647 | GET_THREAD_INFO(%rcx) | 640 | GET_THREAD_INFO(%rcx) |
| 648 | movl TI_flags(%rcx),%edx | 641 | movl TI_flags(%rcx),%edx |
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S index 2e648e3a5ea4..54b29bb24e71 100644 --- a/arch/x86/kernel/head_64.S +++ b/arch/x86/kernel/head_64.S | |||
| @@ -329,8 +329,6 @@ early_idt_ripmsg: | |||
| 329 | #endif /* CONFIG_EARLY_PRINTK */ | 329 | #endif /* CONFIG_EARLY_PRINTK */ |
| 330 | .previous | 330 | .previous |
| 331 | 331 | ||
| 332 | .balign PAGE_SIZE | ||
| 333 | |||
| 334 | #define NEXT_PAGE(name) \ | 332 | #define NEXT_PAGE(name) \ |
| 335 | .balign PAGE_SIZE; \ | 333 | .balign PAGE_SIZE; \ |
| 336 | ENTRY(name) | 334 | ENTRY(name) |
| @@ -419,7 +417,7 @@ ENTRY(phys_base) | |||
| 419 | .section .bss, "aw", @nobits | 417 | .section .bss, "aw", @nobits |
| 420 | .align L1_CACHE_BYTES | 418 | .align L1_CACHE_BYTES |
| 421 | ENTRY(idt_table) | 419 | ENTRY(idt_table) |
| 422 | .skip 256 * 16 | 420 | .skip IDT_ENTRIES * 16 |
| 423 | 421 | ||
| 424 | .section .bss.page_aligned, "aw", @nobits | 422 | .section .bss.page_aligned, "aw", @nobits |
| 425 | .align PAGE_SIZE | 423 | .align PAGE_SIZE |
