Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/ia64/kernel/mca_drv_asm.S
10817 views
1
/*
2
* File: mca_drv_asm.S
3
* Purpose: Assembly portion of Generic MCA handling
4
*
5
* Copyright (C) 2004 FUJITSU LIMITED
6
* Copyright (C) 2004 Hidetoshi Seto <[email protected]>
7
*/
8
#include <linux/threads.h>
9
10
#include <asm/asmmacro.h>
11
#include <asm/processor.h>
12
#include <asm/ptrace.h>
13
14
GLOBAL_ENTRY(mca_handler_bhhook)
15
invala // clear RSE ?
16
cover
17
;;
18
clrrrb
19
;;
20
alloc r16=ar.pfs,0,2,3,0 // make a new frame
21
mov ar.rsc=0
22
mov r13=IA64_KR(CURRENT) // current task pointer
23
;;
24
mov r2=r13
25
;;
26
addl r22=IA64_RBS_OFFSET,r2
27
;;
28
mov ar.bspstore=r22
29
addl sp=IA64_STK_OFFSET-IA64_PT_REGS_SIZE,r2
30
;;
31
adds r2=IA64_TASK_THREAD_ON_USTACK_OFFSET,r13
32
;;
33
st1 [r2]=r0 // clear current->thread.on_ustack flag
34
mov loc0=r16
35
movl loc1=mca_handler_bh // recovery C function
36
;;
37
mov out0=r8 // poisoned address
38
mov out1=r9 // iip
39
mov out2=r10 // psr
40
mov b6=loc1
41
;;
42
mov loc1=rp
43
ssm psr.ic
44
;;
45
srlz.i
46
;;
47
ssm psr.i
48
br.call.sptk.many rp=b6 // does not return ...
49
;;
50
mov ar.pfs=loc0
51
mov rp=loc1
52
;;
53
mov r8=r0
54
br.ret.sptk.many rp
55
END(mca_handler_bhhook)
56
57