x86: visws_quirks, fix build error
[deliverable/linux.git] / arch / x86 / kernel / process_64.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 * Copyright (C) 1995 Linus Torvalds
3 *
4 * Pentium III FXSR, SSE support
5 * Gareth Hughes <gareth@valinux.com>, May 2000
6612538c 6 *
1da177e4
LT
7 * X86-64 port
8 * Andi Kleen.
76e4f660
AR
9 *
10 * CPU hotplug support - ashok.raj@intel.com
1da177e4
LT
11 */
12
13/*
14 * This file handles the architecture-dependent parts of process handling..
15 */
16
17#include <stdarg.h>
18
76e4f660 19#include <linux/cpu.h>
1da177e4
LT
20#include <linux/errno.h>
21#include <linux/sched.h>
6612538c 22#include <linux/fs.h>
1da177e4
LT
23#include <linux/kernel.h>
24#include <linux/mm.h>
25#include <linux/elfcore.h>
26#include <linux/smp.h>
27#include <linux/slab.h>
28#include <linux/user.h>
1da177e4 29#include <linux/interrupt.h>
6612538c 30#include <linux/utsname.h>
1da177e4 31#include <linux/delay.h>
6612538c 32#include <linux/module.h>
1da177e4 33#include <linux/ptrace.h>
1da177e4 34#include <linux/random.h>
95833c83 35#include <linux/notifier.h>
c6fd91f0 36#include <linux/kprobes.h>
1eeb66a1 37#include <linux/kdebug.h>
02290683 38#include <linux/tick.h>
529e25f6 39#include <linux/prctl.h>
1da177e4
LT
40
41#include <asm/uaccess.h>
42#include <asm/pgtable.h>
43#include <asm/system.h>
44#include <asm/io.h>
45#include <asm/processor.h>
46#include <asm/i387.h>
47#include <asm/mmu_context.h>
48#include <asm/pda.h>
49#include <asm/prctl.h>
1da177e4
LT
50#include <asm/desc.h>
51#include <asm/proto.h>
52#include <asm/ia32.h>
95833c83 53#include <asm/idle.h>
1da177e4
LT
54
55asmlinkage extern void ret_from_fork(void);
56
57unsigned long kernel_thread_flags = CLONE_VM | CLONE_UNTRACED;
58
e041c683 59static ATOMIC_NOTIFIER_HEAD(idle_notifier);
95833c83
AK
60
61void idle_notifier_register(struct notifier_block *n)
62{
e041c683 63 atomic_notifier_chain_register(&idle_notifier, n);
95833c83 64}
95833c83 65
95833c83
AK
66void enter_idle(void)
67{
a15da49d 68 write_pda(isidle, 1);
e041c683 69 atomic_notifier_call_chain(&idle_notifier, IDLE_START, NULL);
95833c83
AK
70}
71
72static void __exit_idle(void)
73{
9446868b 74 if (test_and_clear_bit_pda(0, isidle) == 0)
a15da49d 75 return;
e041c683 76 atomic_notifier_call_chain(&idle_notifier, IDLE_END, NULL);
95833c83
AK
77}
78
79/* Called from interrupts to signify idle end */
80void exit_idle(void)
81{
a15da49d
AK
82 /* idle loop has pid 0 */
83 if (current->pid)
95833c83
AK
84 return;
85 __exit_idle();
86}
87
76e4f660
AR
88#ifdef CONFIG_HOTPLUG_CPU
89DECLARE_PER_CPU(int, cpu_state);
90
91#include <asm/nmi.h>
1fa744e6 92/* We halt the CPU with physical CPU hotplug */
76e4f660
AR
93static inline void play_dead(void)
94{
95 idle_task_exit();
96 wbinvd();
97 mb();
98 /* Ack it */
99 __get_cpu_var(cpu_state) = CPU_DEAD;
100
1fa744e6 101 local_irq_disable();
76e4f660 102 while (1)
1fa744e6 103 halt();
76e4f660
AR
104}
105#else
106static inline void play_dead(void)
107{
108 BUG();
109}
110#endif /* CONFIG_HOTPLUG_CPU */
111
1da177e4
LT
112/*
113 * The idle thread. There's no useful work to be
114 * done, so just try to conserve power and have a
115 * low exit latency (ie sit in a loop waiting for
116 * somebody to say that they'd like to reschedule)
117 */
b10db7f0 118void cpu_idle(void)
1da177e4 119{
495ab9c0 120 current_thread_info()->status |= TS_POLLING;
1da177e4
LT
121 /* endless idle loop with no priority at all */
122 while (1) {
b8f8c3cf 123 tick_nohz_stop_sched_tick(1);
1da177e4 124 while (!need_resched()) {
1da177e4 125
1da177e4 126 rmb();
6ddd2a27 127
76e4f660
AR
128 if (cpu_is_offline(smp_processor_id()))
129 play_dead();
d331e739
VP
130 /*
131 * Idle routines should keep interrupts disabled
132 * from here on, until they go to idle.
133 * Otherwise, idle callbacks can misfire.
134 */
135 local_irq_disable();
95833c83 136 enter_idle();
81d68a96
SR
137 /* Don't trace irqs off for idle */
138 stop_critical_timings();
6ddd2a27 139 pm_idle();
81d68a96 140 start_critical_timings();
a15da49d
AK
141 /* In many cases the interrupt that ended idle
142 has already called exit_idle. But some idle
143 loops can be woken up without interrupt. */
95833c83 144 __exit_idle();
1da177e4
LT
145 }
146
02290683 147 tick_nohz_restart_sched_tick();
5bfb5d69 148 preempt_enable_no_resched();
1da177e4 149 schedule();
5bfb5d69 150 preempt_disable();
1da177e4
LT
151 }
152}
153
6612538c 154/* Prints also some state that isn't saved in the pt_regs */
1da177e4
LT
155void __show_regs(struct pt_regs * regs)
156{
157 unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L, fs, gs, shadowgs;
bb1995d5 158 unsigned long d0, d1, d2, d3, d6, d7;
6612538c
HS
159 unsigned int fsindex, gsindex;
160 unsigned int ds, cs, es;
1da177e4
LT
161
162 printk("\n");
163 print_modules();
9acf23c4
AK
164 printk("Pid: %d, comm: %.20s %s %s %.*s\n",
165 current->pid, current->comm, print_tainted(),
96b644bd
SH
166 init_utsname()->release,
167 (int)strcspn(init_utsname()->version, " "),
168 init_utsname()->version);
65ea5b03 169 printk("RIP: %04lx:[<%016lx>] ", regs->cs & 0xffff, regs->ip);
aafbd7eb 170 printk_address(regs->ip, 1);
65ea5b03
PA
171 printk("RSP: %04lx:%016lx EFLAGS: %08lx\n", regs->ss, regs->sp,
172 regs->flags);
1da177e4 173 printk("RAX: %016lx RBX: %016lx RCX: %016lx\n",
65ea5b03 174 regs->ax, regs->bx, regs->cx);
1da177e4 175 printk("RDX: %016lx RSI: %016lx RDI: %016lx\n",
65ea5b03 176 regs->dx, regs->si, regs->di);
1da177e4 177 printk("RBP: %016lx R08: %016lx R09: %016lx\n",
65ea5b03 178 regs->bp, regs->r8, regs->r9);
1da177e4
LT
179 printk("R10: %016lx R11: %016lx R12: %016lx\n",
180 regs->r10, regs->r11, regs->r12);
181 printk("R13: %016lx R14: %016lx R15: %016lx\n",
182 regs->r13, regs->r14, regs->r15);
183
184 asm("movl %%ds,%0" : "=r" (ds));
185 asm("movl %%cs,%0" : "=r" (cs));
186 asm("movl %%es,%0" : "=r" (es));
187 asm("movl %%fs,%0" : "=r" (fsindex));
188 asm("movl %%gs,%0" : "=r" (gsindex));
189
190 rdmsrl(MSR_FS_BASE, fs);
191 rdmsrl(MSR_GS_BASE, gs);
192 rdmsrl(MSR_KERNEL_GS_BASE, shadowgs);
193
f51c9452
GOC
194 cr0 = read_cr0();
195 cr2 = read_cr2();
196 cr3 = read_cr3();
197 cr4 = read_cr4();
1da177e4
LT
198
199 printk("FS: %016lx(%04x) GS:%016lx(%04x) knlGS:%016lx\n",
200 fs,fsindex,gs,gsindex,shadowgs);
201 printk("CS: %04x DS: %04x ES: %04x CR0: %016lx\n", cs, ds, es, cr0);
202 printk("CR2: %016lx CR3: %016lx CR4: %016lx\n", cr2, cr3, cr4);
bb1995d5
AS
203
204 get_debugreg(d0, 0);
205 get_debugreg(d1, 1);
206 get_debugreg(d2, 2);
207 printk("DR0: %016lx DR1: %016lx DR2: %016lx\n", d0, d1, d2);
208 get_debugreg(d3, 3);
209 get_debugreg(d6, 6);
210 get_debugreg(d7, 7);
211 printk("DR3: %016lx DR6: %016lx DR7: %016lx\n", d3, d6, d7);
1da177e4
LT
212}
213
214void show_regs(struct pt_regs *regs)
215{
c078d326 216 printk("CPU %d:", smp_processor_id());
1da177e4 217 __show_regs(regs);
bc850d6b 218 show_trace(NULL, regs, (void *)(regs + 1), regs->bp);
1da177e4
LT
219}
220
221/*
222 * Free current thread data structures etc..
223 */
224void exit_thread(void)
225{
226 struct task_struct *me = current;
227 struct thread_struct *t = &me->thread;
73649dab 228
6612538c 229 if (me->thread.io_bitmap_ptr) {
1da177e4
LT
230 struct tss_struct *tss = &per_cpu(init_tss, get_cpu());
231
232 kfree(t->io_bitmap_ptr);
233 t->io_bitmap_ptr = NULL;
d3a4f48d 234 clear_thread_flag(TIF_IO_BITMAP);
1da177e4
LT
235 /*
236 * Careful, clear this in the TSS too:
237 */
238 memset(tss->io_bitmap, 0xff, t->io_bitmap_max);
239 t->io_bitmap_max = 0;
240 put_cpu();
241 }
242}
243
244void flush_thread(void)
245{
246 struct task_struct *tsk = current;
1da177e4 247
303cd153
MD
248 if (test_tsk_thread_flag(tsk, TIF_ABI_PENDING)) {
249 clear_tsk_thread_flag(tsk, TIF_ABI_PENDING);
250 if (test_tsk_thread_flag(tsk, TIF_IA32)) {
251 clear_tsk_thread_flag(tsk, TIF_IA32);
252 } else {
253 set_tsk_thread_flag(tsk, TIF_IA32);
4d9bc79c 254 current_thread_info()->status |= TS_COMPAT;
303cd153 255 }
4d9bc79c 256 }
303cd153 257 clear_tsk_thread_flag(tsk, TIF_DEBUG);
1da177e4
LT
258
259 tsk->thread.debugreg0 = 0;
260 tsk->thread.debugreg1 = 0;
261 tsk->thread.debugreg2 = 0;
262 tsk->thread.debugreg3 = 0;
263 tsk->thread.debugreg6 = 0;
264 tsk->thread.debugreg7 = 0;
6612538c 265 memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
1da177e4
LT
266 /*
267 * Forget coprocessor state..
268 */
75118a82 269 tsk->fpu_counter = 0;
1da177e4
LT
270 clear_fpu(tsk);
271 clear_used_math();
272}
273
274void release_thread(struct task_struct *dead_task)
275{
276 if (dead_task->mm) {
277 if (dead_task->mm->context.size) {
278 printk("WARNING: dead process %8s still has LDT? <%p/%d>\n",
279 dead_task->comm,
280 dead_task->mm->context.ldt,
281 dead_task->mm->context.size);
282 BUG();
283 }
284 }
285}
286
287static inline void set_32bit_tls(struct task_struct *t, int tls, u32 addr)
288{
6612538c 289 struct user_desc ud = {
1da177e4
LT
290 .base_addr = addr,
291 .limit = 0xfffff,
292 .seg_32bit = 1,
293 .limit_in_pages = 1,
294 .useable = 1,
295 };
ade1af77 296 struct desc_struct *desc = t->thread.tls_array;
1da177e4 297 desc += tls;
80fbb69a 298 fill_ldt(desc, &ud);
1da177e4
LT
299}
300
301static inline u32 read_32bit_tls(struct task_struct *t, int tls)
302{
91394eb0 303 return get_desc_base(&t->thread.tls_array[tls]);
1da177e4
LT
304}
305
306/*
307 * This gets called before we allocate a new thread and copy
308 * the current task into it.
309 */
310void prepare_to_copy(struct task_struct *tsk)
311{
312 unlazy_fpu(tsk);
313}
314
65ea5b03 315int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
1da177e4
LT
316 unsigned long unused,
317 struct task_struct * p, struct pt_regs * regs)
318{
319 int err;
320 struct pt_regs * childregs;
321 struct task_struct *me = current;
322
a88cde13 323 childregs = ((struct pt_regs *)
57eafdc2 324 (THREAD_SIZE + task_stack_page(p))) - 1;
1da177e4
LT
325 *childregs = *regs;
326
65ea5b03
PA
327 childregs->ax = 0;
328 childregs->sp = sp;
329 if (sp == ~0UL)
330 childregs->sp = (unsigned long)childregs;
1da177e4 331
faca6227
PA
332 p->thread.sp = (unsigned long) childregs;
333 p->thread.sp0 = (unsigned long) (childregs+1);
334 p->thread.usersp = me->thread.usersp;
1da177e4 335
e4f17c43 336 set_tsk_thread_flag(p, TIF_FORK);
1da177e4
LT
337
338 p->thread.fs = me->thread.fs;
339 p->thread.gs = me->thread.gs;
340
ada85708
JF
341 savesegment(gs, p->thread.gsindex);
342 savesegment(fs, p->thread.fsindex);
343 savesegment(es, p->thread.es);
344 savesegment(ds, p->thread.ds);
1da177e4 345
d3a4f48d 346 if (unlikely(test_tsk_thread_flag(me, TIF_IO_BITMAP))) {
1da177e4
LT
347 p->thread.io_bitmap_ptr = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
348 if (!p->thread.io_bitmap_ptr) {
349 p->thread.io_bitmap_max = 0;
350 return -ENOMEM;
351 }
a88cde13
AK
352 memcpy(p->thread.io_bitmap_ptr, me->thread.io_bitmap_ptr,
353 IO_BITMAP_BYTES);
d3a4f48d 354 set_tsk_thread_flag(p, TIF_IO_BITMAP);
6612538c 355 }
1da177e4
LT
356
357 /*
358 * Set a new TLS for the child thread?
359 */
360 if (clone_flags & CLONE_SETTLS) {
361#ifdef CONFIG_IA32_EMULATION
362 if (test_thread_flag(TIF_IA32))
efd1ca52 363 err = do_set_thread_area(p, -1,
65ea5b03 364 (struct user_desc __user *)childregs->si, 0);
1da177e4
LT
365 else
366#endif
367 err = do_arch_prctl(p, ARCH_SET_FS, childregs->r8);
368 if (err)
369 goto out;
370 }
371 err = 0;
372out:
373 if (err && p->thread.io_bitmap_ptr) {
374 kfree(p->thread.io_bitmap_ptr);
375 p->thread.io_bitmap_max = 0;
376 }
377 return err;
378}
379
513ad84b
IM
380void
381start_thread(struct pt_regs *regs, unsigned long new_ip, unsigned long new_sp)
382{
ada85708
JF
383 loadsegment(fs, 0);
384 loadsegment(es, 0);
385 loadsegment(ds, 0);
513ad84b
IM
386 load_gs_index(0);
387 regs->ip = new_ip;
388 regs->sp = new_sp;
389 write_pda(oldrsp, new_sp);
390 regs->cs = __USER_CS;
391 regs->ss = __USER_DS;
392 regs->flags = 0x200;
393 set_fs(USER_DS);
aa283f49
SS
394 /*
395 * Free the old FP and other extended state
396 */
397 free_thread_xstate(current);
513ad84b
IM
398}
399EXPORT_SYMBOL_GPL(start_thread);
400
529e25f6
EB
401static void hard_disable_TSC(void)
402{
403 write_cr4(read_cr4() | X86_CR4_TSD);
404}
405
406void disable_TSC(void)
407{
408 preempt_disable();
409 if (!test_and_set_thread_flag(TIF_NOTSC))
410 /*
411 * Must flip the CPU state synchronously with
412 * TIF_NOTSC in the current running context.
413 */
414 hard_disable_TSC();
415 preempt_enable();
416}
417
418static void hard_enable_TSC(void)
419{
420 write_cr4(read_cr4() & ~X86_CR4_TSD);
421}
422
a4928cff 423static void enable_TSC(void)
529e25f6
EB
424{
425 preempt_disable();
426 if (test_and_clear_thread_flag(TIF_NOTSC))
427 /*
428 * Must flip the CPU state synchronously with
429 * TIF_NOTSC in the current running context.
430 */
431 hard_enable_TSC();
432 preempt_enable();
433}
434
435int get_tsc_mode(unsigned long adr)
436{
437 unsigned int val;
438
439 if (test_thread_flag(TIF_NOTSC))
440 val = PR_TSC_SIGSEGV;
441 else
442 val = PR_TSC_ENABLE;
443
444 return put_user(val, (unsigned int __user *)adr);
445}
446
447int set_tsc_mode(unsigned int val)
448{
449 if (val == PR_TSC_SIGSEGV)
450 disable_TSC();
451 else if (val == PR_TSC_ENABLE)
452 enable_TSC();
453 else
454 return -EINVAL;
455
456 return 0;
457}
458
1da177e4
LT
459/*
460 * This special macro can be used to load a debugging register
461 */
6612538c
HS
462#define loaddebug(thread, r) set_debugreg(thread->debugreg ## r, r)
463
d3a4f48d 464static inline void __switch_to_xtra(struct task_struct *prev_p,
6612538c
HS
465 struct task_struct *next_p,
466 struct tss_struct *tss)
d3a4f48d
SE
467{
468 struct thread_struct *prev, *next;
eee3af4a 469 unsigned long debugctl;
d3a4f48d
SE
470
471 prev = &prev_p->thread,
472 next = &next_p->thread;
473
eee3af4a
MM
474 debugctl = prev->debugctlmsr;
475 if (next->ds_area_msr != prev->ds_area_msr) {
476 /* we clear debugctl to make sure DS
477 * is not in use when we change it */
478 debugctl = 0;
5b0e5084 479 update_debugctlmsr(0);
eee3af4a
MM
480 wrmsrl(MSR_IA32_DS_AREA, next->ds_area_msr);
481 }
482
483 if (next->debugctlmsr != debugctl)
5b0e5084 484 update_debugctlmsr(next->debugctlmsr);
7e991604 485
d3a4f48d
SE
486 if (test_tsk_thread_flag(next_p, TIF_DEBUG)) {
487 loaddebug(next, 0);
488 loaddebug(next, 1);
489 loaddebug(next, 2);
490 loaddebug(next, 3);
491 /* no 4 and 5 */
492 loaddebug(next, 6);
493 loaddebug(next, 7);
494 }
495
529e25f6
EB
496 if (test_tsk_thread_flag(prev_p, TIF_NOTSC) ^
497 test_tsk_thread_flag(next_p, TIF_NOTSC)) {
498 /* prev and next are different */
499 if (test_tsk_thread_flag(next_p, TIF_NOTSC))
500 hard_disable_TSC();
501 else
502 hard_enable_TSC();
503 }
504
d3a4f48d
SE
505 if (test_tsk_thread_flag(next_p, TIF_IO_BITMAP)) {
506 /*
507 * Copy the relevant range of the IO bitmap.
508 * Normally this is 128 bytes or less:
509 */
510 memcpy(tss->io_bitmap, next->io_bitmap_ptr,
511 max(prev->io_bitmap_max, next->io_bitmap_max));
512 } else if (test_tsk_thread_flag(prev_p, TIF_IO_BITMAP)) {
513 /*
514 * Clear any possible leftover bits:
515 */
516 memset(tss->io_bitmap, 0xff, prev->io_bitmap_max);
517 }
eee3af4a 518
b4ef95de 519#ifdef X86_BTS
eee3af4a
MM
520 if (test_tsk_thread_flag(prev_p, TIF_BTS_TRACE_TS))
521 ptrace_bts_take_timestamp(prev_p, BTS_TASK_DEPARTS);
522
523 if (test_tsk_thread_flag(next_p, TIF_BTS_TRACE_TS))
524 ptrace_bts_take_timestamp(next_p, BTS_TASK_ARRIVES);
b4ef95de 525#endif
d3a4f48d
SE
526}
527
1da177e4
LT
528/*
529 * switch_to(x,y) should switch tasks from x to y.
530 *
6612538c 531 * This could still be optimized:
1da177e4
LT
532 * - fold all the options into a flag word and test it with a single test.
533 * - could test fs/gs bitsliced
099f318b
AK
534 *
535 * Kprobes not supported here. Set the probe on schedule instead.
1da177e4 536 */
f438d914 537struct task_struct *
a88cde13 538__switch_to(struct task_struct *prev_p, struct task_struct *next_p)
1da177e4 539{
87b935a0
JF
540 struct thread_struct *prev = &prev_p->thread;
541 struct thread_struct *next = &next_p->thread;
6612538c 542 int cpu = smp_processor_id();
1da177e4 543 struct tss_struct *tss = &per_cpu(init_tss, cpu);
478de5a9 544 unsigned fsindex, gsindex;
1da177e4 545
e07e23e1
AV
546 /* we're going to use this soon, after a few expensive things */
547 if (next_p->fpu_counter>5)
61c4628b 548 prefetch(next->xstate);
e07e23e1 549
1da177e4
LT
550 /*
551 * Reload esp0, LDT and the page table pointer:
552 */
7818a1e0 553 load_sp0(tss, next);
1da177e4
LT
554
555 /*
556 * Switch DS and ES.
557 * This won't pick up thread selector changes, but I guess that is ok.
558 */
ada85708 559 savesegment(es, prev->es);
1da177e4
LT
560 if (unlikely(next->es | prev->es))
561 loadsegment(es, next->es);
ada85708
JF
562
563 savesegment(ds, prev->ds);
1da177e4
LT
564 if (unlikely(next->ds | prev->ds))
565 loadsegment(ds, next->ds);
566
478de5a9
JF
567
568 /* We must save %fs and %gs before load_TLS() because
569 * %fs and %gs may be cleared by load_TLS().
570 *
571 * (e.g. xen_load_tls())
572 */
573 savesegment(fs, fsindex);
574 savesegment(gs, gsindex);
575
1da177e4
LT
576 load_TLS(next, cpu);
577
3fe0a63e
JF
578 /*
579 * Leave lazy mode, flushing any hypercalls made here.
580 * This must be done before restoring TLS segments so
581 * the GDT and LDT are properly updated, and must be
582 * done before math_state_restore, so the TS bit is up
583 * to date.
584 */
585 arch_leave_lazy_cpu_mode();
586
1da177e4
LT
587 /*
588 * Switch FS and GS.
87b935a0
JF
589 *
590 * Segment register != 0 always requires a reload. Also
591 * reload when it has changed. When prev process used 64bit
592 * base always reload to avoid an information leak.
1da177e4 593 */
87b935a0
JF
594 if (unlikely(fsindex | next->fsindex | prev->fs)) {
595 loadsegment(fs, next->fsindex);
596 /*
597 * Check if the user used a selector != 0; if yes
598 * clear 64bit base, since overloaded base is always
599 * mapped to the Null selector
600 */
601 if (fsindex)
1da177e4 602 prev->fs = 0;
87b935a0
JF
603 }
604 /* when next process has a 64bit base use it */
605 if (next->fs)
606 wrmsrl(MSR_FS_BASE, next->fs);
607 prev->fsindex = fsindex;
608
609 if (unlikely(gsindex | next->gsindex | prev->gs)) {
610 load_gs_index(next->gsindex);
611 if (gsindex)
1da177e4 612 prev->gs = 0;
1da177e4 613 }
87b935a0
JF
614 if (next->gs)
615 wrmsrl(MSR_KERNEL_GS_BASE, next->gs);
616 prev->gsindex = gsindex;
1da177e4 617
0a5ace2a
AK
618 /* Must be after DS reload */
619 unlazy_fpu(prev_p);
620
1da177e4 621 /*
45948d77 622 * Switch the PDA and FPU contexts.
1da177e4 623 */
faca6227
PA
624 prev->usersp = read_pda(oldrsp);
625 write_pda(oldrsp, next->usersp);
1da177e4 626 write_pda(pcurrent, next_p);
18bd057b 627
a88cde13 628 write_pda(kernelstack,
87b935a0
JF
629 (unsigned long)task_stack_page(next_p) +
630 THREAD_SIZE - PDA_STACKOFFSET);
0a425405
AV
631#ifdef CONFIG_CC_STACKPROTECTOR
632 write_pda(stack_canary, next_p->stack_canary);
633 /*
634 * Build time only check to make sure the stack_canary is at
635 * offset 40 in the pda; this is a gcc ABI requirement
636 */
637 BUILD_BUG_ON(offsetof(struct x8664_pda, stack_canary) != 40);
638#endif
1da177e4
LT
639
640 /*
d3a4f48d 641 * Now maybe reload the debug registers and handle I/O bitmaps
1da177e4 642 */
eee3af4a
MM
643 if (unlikely(task_thread_info(next_p)->flags & _TIF_WORK_CTXSW_NEXT ||
644 task_thread_info(prev_p)->flags & _TIF_WORK_CTXSW_PREV))
d3a4f48d 645 __switch_to_xtra(prev_p, next_p, tss);
1da177e4 646
e07e23e1
AV
647 /* If the task has used fpu the last 5 timeslices, just do a full
648 * restore of the math state immediately to avoid the trap; the
649 * chances of needing FPU soon are obviously high now
870568b3
SS
650 *
651 * tsk_used_math() checks prevent calling math_state_restore(),
652 * which can sleep in the case of !tsk_used_math()
e07e23e1 653 */
870568b3 654 if (tsk_used_math(next_p) && next_p->fpu_counter > 5)
e07e23e1 655 math_state_restore();
1da177e4
LT
656 return prev_p;
657}
658
659/*
660 * sys_execve() executes a new program.
661 */
6612538c 662asmlinkage
1da177e4 663long sys_execve(char __user *name, char __user * __user *argv,
5d119b2c 664 char __user * __user *envp, struct pt_regs *regs)
1da177e4
LT
665{
666 long error;
667 char * filename;
668
669 filename = getname(name);
670 error = PTR_ERR(filename);
5d119b2c 671 if (IS_ERR(filename))
1da177e4 672 return error;
5d119b2c 673 error = do_execve(filename, argv, envp, regs);
1da177e4
LT
674 putname(filename);
675 return error;
676}
677
678void set_personality_64bit(void)
679{
680 /* inherit personality from parent */
681
682 /* Make sure to be in 64bit mode */
6612538c 683 clear_thread_flag(TIF_IA32);
1da177e4
LT
684
685 /* TBD: overwrites user setup. Should have two bits.
686 But 64bit processes have always behaved this way,
687 so it's not too bad. The main problem is just that
6612538c 688 32bit childs are affected again. */
1da177e4
LT
689 current->personality &= ~READ_IMPLIES_EXEC;
690}
691
692asmlinkage long sys_fork(struct pt_regs *regs)
693{
65ea5b03 694 return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL);
1da177e4
LT
695}
696
a88cde13
AK
697asmlinkage long
698sys_clone(unsigned long clone_flags, unsigned long newsp,
699 void __user *parent_tid, void __user *child_tid, struct pt_regs *regs)
1da177e4
LT
700{
701 if (!newsp)
65ea5b03 702 newsp = regs->sp;
1da177e4
LT
703 return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid);
704}
705
706/*
707 * This is trivial, and on the face of it looks like it
708 * could equally well be done in user mode.
709 *
710 * Not so, for quite unobvious reasons - register pressure.
711 * In user mode vfork() cannot have a stack frame, and if
712 * done by calling the "clone()" system call directly, you
713 * do not have enough call-clobbered registers to hold all
714 * the information you need.
715 */
716asmlinkage long sys_vfork(struct pt_regs *regs)
717{
65ea5b03 718 return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->sp, regs, 0,
1da177e4
LT
719 NULL, NULL);
720}
721
722unsigned long get_wchan(struct task_struct *p)
723{
724 unsigned long stack;
65ea5b03 725 u64 fp,ip;
1da177e4
LT
726 int count = 0;
727
728 if (!p || p == current || p->state==TASK_RUNNING)
729 return 0;
57eafdc2 730 stack = (unsigned long)task_stack_page(p);
faca6227 731 if (p->thread.sp < stack || p->thread.sp > stack+THREAD_SIZE)
1da177e4 732 return 0;
faca6227 733 fp = *(u64 *)(p->thread.sp);
1da177e4 734 do {
a88cde13
AK
735 if (fp < (unsigned long)stack ||
736 fp > (unsigned long)stack+THREAD_SIZE)
1da177e4 737 return 0;
65ea5b03
PA
738 ip = *(u64 *)(fp+8);
739 if (!in_sched_functions(ip))
740 return ip;
1da177e4
LT
741 fp = *(u64 *)fp;
742 } while (count++ < 16);
743 return 0;
744}
745
746long do_arch_prctl(struct task_struct *task, int code, unsigned long addr)
747{
748 int ret = 0;
749 int doit = task == current;
750 int cpu;
751
752 switch (code) {
753 case ARCH_SET_GS:
84929801 754 if (addr >= TASK_SIZE_OF(task))
1da177e4
LT
755 return -EPERM;
756 cpu = get_cpu();
757 /* handle small bases via the GDT because that's faster to
758 switch. */
759 if (addr <= 0xffffffff) {
760 set_32bit_tls(task, GS_TLS, addr);
761 if (doit) {
762 load_TLS(&task->thread, cpu);
763 load_gs_index(GS_TLS_SEL);
764 }
765 task->thread.gsindex = GS_TLS_SEL;
766 task->thread.gs = 0;
767 } else {
768 task->thread.gsindex = 0;
769 task->thread.gs = addr;
770 if (doit) {
a88cde13
AK
771 load_gs_index(0);
772 ret = checking_wrmsrl(MSR_KERNEL_GS_BASE, addr);
1da177e4
LT
773 }
774 }
775 put_cpu();
776 break;
777 case ARCH_SET_FS:
778 /* Not strictly needed for fs, but do it for symmetry
779 with gs */
84929801 780 if (addr >= TASK_SIZE_OF(task))
6612538c 781 return -EPERM;
1da177e4 782 cpu = get_cpu();
6612538c 783 /* handle small bases via the GDT because that's faster to
1da177e4 784 switch. */
6612538c 785 if (addr <= 0xffffffff) {
1da177e4 786 set_32bit_tls(task, FS_TLS, addr);
6612538c
HS
787 if (doit) {
788 load_TLS(&task->thread, cpu);
ada85708 789 loadsegment(fs, FS_TLS_SEL);
1da177e4
LT
790 }
791 task->thread.fsindex = FS_TLS_SEL;
792 task->thread.fs = 0;
6612538c 793 } else {
1da177e4
LT
794 task->thread.fsindex = 0;
795 task->thread.fs = addr;
796 if (doit) {
797 /* set the selector to 0 to not confuse
798 __switch_to */
ada85708 799 loadsegment(fs, 0);
a88cde13 800 ret = checking_wrmsrl(MSR_FS_BASE, addr);
1da177e4
LT
801 }
802 }
803 put_cpu();
804 break;
6612538c
HS
805 case ARCH_GET_FS: {
806 unsigned long base;
1da177e4
LT
807 if (task->thread.fsindex == FS_TLS_SEL)
808 base = read_32bit_tls(task, FS_TLS);
a88cde13 809 else if (doit)
1da177e4 810 rdmsrl(MSR_FS_BASE, base);
a88cde13 811 else
1da177e4 812 base = task->thread.fs;
6612538c
HS
813 ret = put_user(base, (unsigned long __user *)addr);
814 break;
1da177e4 815 }
6612538c 816 case ARCH_GET_GS: {
1da177e4 817 unsigned long base;
97c2803c 818 unsigned gsindex;
1da177e4
LT
819 if (task->thread.gsindex == GS_TLS_SEL)
820 base = read_32bit_tls(task, GS_TLS);
97c2803c 821 else if (doit) {
ada85708 822 savesegment(gs, gsindex);
97c2803c
JB
823 if (gsindex)
824 rdmsrl(MSR_KERNEL_GS_BASE, base);
825 else
826 base = task->thread.gs;
827 }
a88cde13 828 else
1da177e4 829 base = task->thread.gs;
6612538c 830 ret = put_user(base, (unsigned long __user *)addr);
1da177e4
LT
831 break;
832 }
833
834 default:
835 ret = -EINVAL;
836 break;
6612538c 837 }
1da177e4 838
6612538c
HS
839 return ret;
840}
1da177e4
LT
841
842long sys_arch_prctl(int code, unsigned long addr)
843{
844 return do_arch_prctl(current, code, addr);
1da177e4
LT
845}
846
847unsigned long arch_align_stack(unsigned long sp)
848{
c16b63e0 849 if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
1da177e4
LT
850 sp -= get_random_int() % 8192;
851 return sp & ~0xf;
852}
c1d171a0
JK
853
854unsigned long arch_randomize_brk(struct mm_struct *mm)
855{
856 unsigned long range_end = mm->brk + 0x02000000;
857 return randomize_range(mm->brk, range_end, 0) ? : mm->brk;
858}
This page took 0.457112 seconds and 5 git commands to generate.