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 /arch | |
parent | 46cb27f5169d37be38be8e5729b9a0100e989fa8 (diff) | |
parent | 9f331119a4f95a44d918fe6d5e85998fabf99b72 (diff) |
Merge branch 'x86/asm' into x86/mm
Diffstat (limited to 'arch')
-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 |