Lines Matching +full:i +full:- +full:leak +full:- +full:current

1 /* SPDX-License-Identifier: GPL-2.0 */
3 * This file contains the light-weight system call handlers (fsyscall-handlers).
5 * Copyright (C) 2003 Hewlett-Packard Co
6 * David Mosberger-Tang <davidm@hpl.hp.com>
8 * 25-Sep-03 davidm Implement fsys_rt_sigprocmask().
9 * 18-Feb-03 louisk Implement fsys_gettimeofday().
10 * 28-Feb-03 davidm Fixed several bugs in fsys_gettimeofday(). Tuned it some more,
11 * probably broke it along the way... ;-)
12 * 13-Jul-04 clameter Implement fsys_clock_gettime and revise fsys_gettimeofday to make
14 * 08-Feb-07 Fenghua Yu Implement fsys_getcpu.
20 #include <asm/asm-offsets.h>
34 * r10 = 0 (i.e., defaults to "successful syscall return")
35 * r11 = saved ar.pfs (a user-level value)
37 * r16 = "current" task pointer (in normal kernel-mode, this is in r13)
38 * r32-r39 = system call arguments
39 * b6 = return address (a user-level value)
40 * ar.pfs = previous frame-state (a user-level value)
41 * PSR.be = cleared to zero (i.e., little-endian byte order is in effect)
42 * all other registers may contain values passed in from user-mode
47 * r32-r39 = system call arguments (as passed into the fsyscall handler)
49 * ar.pfs = previous frame-state (as passed into the fsyscall handler)
57 mov r10=-1
67 ld8 r17=[r17] // r17 = current->signal
74 ld8 r17=[r17] // r17 = current->signal->pids[PIDTYPE_TGID]
78 ld4 r8=[r8] // r8 = pid->level
79 add r17=IA64_PID_UPID_OFFSET,r17 // r17 = &pid->numbers[0]
83 add r17=r17,r8 // r17 = &pid->numbers[pid->level]
85 ld4 r8=[r17] // r8 = pid->numbers[pid->level].nr
103 ld8 r17=[r17] // r17 = current->thread_pid
109 ld4 r8=[r8] // r8 = pid->level
110 add r17=IA64_PID_UPID_OFFSET,r17 // r17 = &pid->numbers[0]
114 add r17=r17,r8 // r17 = &pid->numbers[pid->level]
116 ld4 r8=[r17] // r8 = pid->numbers[pid->level].nr
119 mov r17=-1
125 mov r17=0 // i must not leak kernel bits...
126 mov r18=0 // i must not leak kernel bits...
154 // r2,r3 = temp r4-r7 preserved
163 // r16 = preserved: current task pointer
183 // p10 = timesource mmio32 - not used
185 // p12 = memory time source ( = p9 | p10) - not used
219 ld8 r30 = [r21] // clocksource->mmio_ptr
241 ld8 r8 = [r22],-IA64_TIME_SN_SPEC_SNSEC_OFFSET // snsec
245 sub r10 = r2,r24 // current_cycle - last_cycle
259 nop.i 123
263 xmpy.l f8 = f8,f7 // nsec_per_cyc*(counter-last_counter)
275 // Now r8=tv->tv_nsec and r9=tv->tv_sec
308 mov r10 = -1
312 mov r10 = -1
330 * current_thread_info()->cpu and corresponding node in cpu_to_node_map.
341 ld4 r3=[r3] // M r3 = thread_info->cpu
342 ld4 r2=[r2] // M r2 = thread_info->flags
345 tnat.nz p7,p0 = r33 // I guard against NaT argument
390 * We only get here from light-weight syscall handlers. Thus, we already
391 * know that r15 contains a valid syscall number. No need to re-check.
393 adds r17=-1024,r15
399 ld8 r18=[r18] // load normal (heavy-weight) syscall entry-point
415 * interruption had occurred. To make syscall-restarts work,
426 * - normal fsyscall handler register usage, except
428 * - r18: address of syscall entry point
429 * - r21: ar.fpsr
430 * - r26: ar.pfs
431 * - r27: ar.rsc
432 * - r29: psr
439 * ended up clearing PSR.{BE,AC,I,DFL,DFH,DI,DB,SI,TB}.
444 * PSR.I : already turned off by the time fsys_bubble_down gets
447 * PSR.DFH: don't care --- kernel never touches f32-f127 on its own
451 * PSR.DB : don't care --- kernel never enables kernel-level
455 * will trigger a taken branch; the taken-trap-handler then
456 * converts the syscall into a break-based system-call.
459 * Reading psr.l gives us only bits 0-31, psr.it, and psr.mc.
473 mov r2=r16 // A get task addr to addl-addressable register
477 st1 [r16]=r0 // M2|3 clear current->thread.on_ustack flag
481 ld4 r3=[r3] // M0|1 r3 = current_thread_info()->flags
482 lfetch.fault.excl.nt1 [r22] // M0|1 prefetch register backing-store
483 nop.i 0
491 nop.i 0
494 mov.m r24=ar.rnat // M2 (5 cyc) read ar.rnat (dual-issues!)
495 nop.i 0
505 mov b6=r18 // I0 copy syscall entry-point to b6 (7 cyc)
506 addl r1=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2 // A compute base of memory stack
509 cmp.ne pKStk,pUStk=r0,r0 // A set pKStk <- 0, pUStk <- 1
517 ld8 r18=[r16],TI_AC_STIME-TI_AC_STAMP // time at last check in kernel
518 ld8 r19=[r17],TI_AC_UTIME-TI_AC_LEAVE // time at leave kernel
520 ld8 r20=[r16],TI_AC_STAMP-TI_AC_STIME // cumulated stime
524 st8 [r16]=r30,TI_AC_STIME-TI_AC_STAMP // update stamp
540 (p10) br.cond.spnt.many ia64_ret_from_syscall // B return if bad call-frame or r15 is a NaT
837 .space fsyscall_table + 8*NR_syscalls - .zero, 0