version 1.78, 2022/05/24 15:55:19 |
version 1.79, 2022/09/07 00:40:18 |
Line 123 IDTVEC(handle_x2apic_ipi) |
|
Line 123 IDTVEC(handle_x2apic_ipi) |
|
xorl %eax,%eax |
xorl %eax,%eax |
xorl %edx,%edx |
xorl %edx,%edx |
wrmsr |
wrmsr |
movl CPUVAR(ILEVEL),%ebx |
movzbl CPUVAR(ILEVEL),%ebx |
cmpl $IPL_HIGH,%ebx |
cmpl $IPL_HIGH,%ebx |
jae 2f |
jae 2f |
jmp 1f |
jmp 1f |
Line 131 IDTVEC_END(handle_x2apic_ipi) |
|
Line 131 IDTVEC_END(handle_x2apic_ipi) |
|
IDTVEC(handle_lapic_ipi) |
IDTVEC(handle_lapic_ipi) |
movq _C_LABEL(local_apic_va),%rbx |
movq _C_LABEL(local_apic_va),%rbx |
movl $0,LAPIC_EOI(%rbx) |
movl $0,LAPIC_EOI(%rbx) |
movl CPUVAR(ILEVEL),%ebx |
movzbl CPUVAR(ILEVEL),%ebx |
cmpl $IPL_HIGH,%ebx |
cmpl $IPL_HIGH,%ebx |
jae 2f |
jae 2f |
jmp 1f |
jmp 1f |
Line 139 IDTVEC_END(handle_lapic_ipi) |
|
Line 139 IDTVEC_END(handle_lapic_ipi) |
|
IDTVEC(resume_lapic_ipi) |
IDTVEC(resume_lapic_ipi) |
1: |
1: |
incl CPUVAR(IDEPTH) |
incl CPUVAR(IDEPTH) |
movl $IPL_HIGH,CPUVAR(ILEVEL) |
movb $IPL_HIGH,CPUVAR(ILEVEL) |
sti |
sti |
pushq %rbx |
pushq %rbx |
call _C_LABEL(x86_ipi_handler) |
call _C_LABEL(x86_ipi_handler) |
jmp _C_LABEL(Xdoreti) |
jmp _C_LABEL(Xdoreti) |
2: |
2: |
orl $(1 << LIR_IPI),CPUVAR(IPENDING) |
btsq $LIR_IPI,CPUVAR(IPENDING) |
INTRFASTEXIT |
INTRFASTEXIT |
IDTVEC_END(resume_lapic_ipi) |
IDTVEC_END(resume_lapic_ipi) |
|
|
Line 223 IDTVEC(handle_x2apic_ltimer) |
|
Line 223 IDTVEC(handle_x2apic_ltimer) |
|
xorl %eax,%eax |
xorl %eax,%eax |
xorl %edx,%edx |
xorl %edx,%edx |
wrmsr |
wrmsr |
movl CPUVAR(ILEVEL),%ebx |
movzbl CPUVAR(ILEVEL),%ebx |
cmpl $IPL_CLOCK,%ebx |
cmpl $IPL_CLOCK,%ebx |
jae 2f |
jae 2f |
jmp 1f |
jmp 1f |
Line 231 IDTVEC_END(handle_x2apic_ltimer) |
|
Line 231 IDTVEC_END(handle_x2apic_ltimer) |
|
IDTVEC(handle_lapic_ltimer) |
IDTVEC(handle_lapic_ltimer) |
movq _C_LABEL(local_apic_va),%rbx |
movq _C_LABEL(local_apic_va),%rbx |
movl $0,LAPIC_EOI(%rbx) |
movl $0,LAPIC_EOI(%rbx) |
movl CPUVAR(ILEVEL),%ebx |
movzbl CPUVAR(ILEVEL),%ebx |
cmpl $IPL_CLOCK,%ebx |
cmpl $IPL_CLOCK,%ebx |
jae 2f |
jae 2f |
jmp 1f |
jmp 1f |
Line 239 IDTVEC_END(handle_lapic_ltimer) |
|
Line 239 IDTVEC_END(handle_lapic_ltimer) |
|
IDTVEC(resume_lapic_ltimer) |
IDTVEC(resume_lapic_ltimer) |
1: |
1: |
incl CPUVAR(IDEPTH) |
incl CPUVAR(IDEPTH) |
movl $IPL_CLOCK,CPUVAR(ILEVEL) |
movb $IPL_CLOCK,CPUVAR(ILEVEL) |
sti |
sti |
pushq %rbx |
pushq %rbx |
movq %rsp,%rsi |
movq %rsp,%rsi |
Line 247 IDTVEC(resume_lapic_ltimer) |
|
Line 247 IDTVEC(resume_lapic_ltimer) |
|
call _C_LABEL(lapic_clockintr) |
call _C_LABEL(lapic_clockintr) |
jmp _C_LABEL(Xdoreti) |
jmp _C_LABEL(Xdoreti) |
2: |
2: |
orl $(1 << LIR_TIMER),CPUVAR(IPENDING) |
btsq $LIR_TIMER,CPUVAR(IPENDING) |
INTRFASTEXIT |
INTRFASTEXIT |
IDTVEC_END(resume_lapic_ltimer) |
IDTVEC_END(resume_lapic_ltimer) |
|
|
Line 279 IDTVEC(recurse_hyperv_hypercall) |
|
Line 279 IDTVEC(recurse_hyperv_hypercall) |
|
jmp 1f |
jmp 1f |
IDTVEC_END(recurse_hyperv_hypercall) |
IDTVEC_END(recurse_hyperv_hypercall) |
IDTVEC(handle_hyperv_hypercall) |
IDTVEC(handle_hyperv_hypercall) |
movl CPUVAR(ILEVEL),%ebx |
movzbl CPUVAR(ILEVEL),%ebx |
cmpl $IPL_NET,%ebx |
cmpl $IPL_NET,%ebx |
jae 2f |
jae 2f |
jmp 1f |
jmp 1f |
Line 287 IDTVEC_END(handle_hyperv_hypercall) |
|
Line 287 IDTVEC_END(handle_hyperv_hypercall) |
|
IDTVEC(resume_hyperv_hypercall) |
IDTVEC(resume_hyperv_hypercall) |
1: |
1: |
incl CPUVAR(IDEPTH) |
incl CPUVAR(IDEPTH) |
movl $IPL_NET,CPUVAR(ILEVEL) |
movb $IPL_NET,CPUVAR(ILEVEL) |
sti |
sti |
pushq %rbx |
pushq %rbx |
movq %rsp,%rsi |
movq %rsp,%rsi |
call _C_LABEL(hyperv_hypercall_intr) |
call _C_LABEL(hyperv_hypercall_intr) |
jmp _C_LABEL(Xdoreti) |
jmp _C_LABEL(Xdoreti) |
2: |
2: |
orl $(1 << LIR_HV),CPUVAR(IPENDING) |
btsq $LIR_HV,CPUVAR(IPENDING) |
INTRFASTEXIT |
INTRFASTEXIT |
IDTVEC_END(resume_hyperv_hypercall) |
IDTVEC_END(resume_hyperv_hypercall) |
|
|
Line 380 IDTVEC(handle_ ## name ## num) ;\ |
|
Line 380 IDTVEC(handle_ ## name ## num) ;\ |
|
testq %r14,%r14 ;\ |
testq %r14,%r14 ;\ |
jz 9f /* stray */ ;\ |
jz 9f /* stray */ ;\ |
movl IS_MAXLEVEL(%r14),%ebx ;\ |
movl IS_MAXLEVEL(%r14),%ebx ;\ |
movl CPUVAR(ILEVEL),%r13d ;\ |
movzbl CPUVAR(ILEVEL),%r13d ;\ |
cmpl %ebx,%r13d ;\ |
cmpl %ebx,%r13d ;\ |
jae 10f /* currently masked; hold it */ ;\ |
jae 10f /* currently masked; hold it */ ;\ |
incq CPUVAR(NINTR) /* statistical info */ ;\ |
incq CPUVAR(NINTR) /* statistical info */ ;\ |
incq IS_EVCNT(%r14) ;\ |
incq IS_EVCNT(%r14) ;\ |
1: \ |
1: \ |
pushq %r13 /* save for Xdoreti */ ;\ |
pushq %r13 /* save for Xdoreti */ ;\ |
movl %ebx,CPUVAR(ILEVEL) ;\ |
movb %bl,CPUVAR(ILEVEL) ;\ |
sti ;\ |
sti ;\ |
incl CPUVAR(IDEPTH) ;\ |
incl CPUVAR(IDEPTH) ;\ |
movq IS_HANDLERS(%r14),%rbx ;\ |
movq IS_HANDLERS(%r14),%rbx ;\ |
Line 399 IDTVEC(handle_ ## name ## num) ;\ |
|
Line 399 IDTVEC(handle_ ## name ## num) ;\ |
|
jle 7f ;\ |
jle 7f ;\ |
movq %rsp,%rsi ;\ |
movq %rsp,%rsi ;\ |
movq IH_ARG(%rbx),%rdi ;\ |
movq IH_ARG(%rbx),%rdi ;\ |
movl %r12d,CPUVAR(ILEVEL) ;\ |
movb %r12b,CPUVAR(ILEVEL) ;\ |
call *IH_FUN(%rbx) /* call it */ ;\ |
call *IH_FUN(%rbx) /* call it */ ;\ |
movq IH_NEXT(%rbx),%rbx /* next handler in chain */ ;\ |
movq IH_NEXT(%rbx),%rbx /* next handler in chain */ ;\ |
testq %rbx,%rbx ;\ |
testq %rbx,%rbx ;\ |
Line 414 IDTVEC(handle_ ## name ## num) ;\ |
|
Line 414 IDTVEC(handle_ ## name ## num) ;\ |
|
jmp _C_LABEL(Xdoreti) /* lower spl and do ASTs */ ;\ |
jmp _C_LABEL(Xdoreti) /* lower spl and do ASTs */ ;\ |
7: \ |
7: \ |
cli ;\ |
cli ;\ |
orl $(1 << num),CPUVAR(IPENDING) ;\ |
btsq $num,CPUVAR(IPENDING) ;\ |
8: level_mask(num) ;\ |
8: level_mask(num) ;\ |
late_ack(num) ;\ |
late_ack(num) ;\ |
sti ;\ |
sti ;\ |
jmp _C_LABEL(Xdoreti) /* lower spl and do ASTs */ ;\ |
jmp _C_LABEL(Xdoreti) /* lower spl and do ASTs */ ;\ |
12: \ |
12: \ |
cli ;\ |
cli ;\ |
orl $(1 << num),CPUVAR(IMASKED) ;\ |
btsq $num,CPUVAR(IMASKED) ;\ |
btrl $(num),CPUVAR(IPENDING) ;\ |
btrq $(num),CPUVAR(IPENDING) ;\ |
jmp 8b ;\ |
jmp 8b ;\ |
10: \ |
10: \ |
cli ;\ |
cli ;\ |
orl $(1 << num),CPUVAR(IPENDING) ;\ |
btsq $num,CPUVAR(IPENDING) ;\ |
level_mask(num) ;\ |
level_mask(num) ;\ |
late_ack(num) ;\ |
late_ack(num) ;\ |
INTRFASTEXIT ;\ |
INTRFASTEXIT ;\ |
Line 484 INTRSTUB(legacy,15,i8259_asm_ack2,voidop |
|
Line 484 INTRSTUB(legacy,15,i8259_asm_ack2,voidop |
|
|
|
#if NIOAPIC > 0 |
#if NIOAPIC > 0 |
|
|
INTRSTUB(ioapic_edge,0,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
#define INTRSTUB_56(name,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,1,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,0,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,2,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,1,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,3,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,2,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,4,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,3,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,5,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,4,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,6,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,5,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,7,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,6,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,8,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,7,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,9,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,8,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,10,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,9,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,11,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,10,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,12,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,11,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,13,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,12,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,14,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,13,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,15,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,14,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,16,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,15,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,17,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,16,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,18,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,17,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,19,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,18,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,20,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,19,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,21,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,20,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,22,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,21,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,23,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,22,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,24,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,23,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,25,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,24,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,26,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,25,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,27,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,26,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,28,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,27,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,29,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,28,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,30,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,29,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_edge,31,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(name,30,early_ack,late_ack,mask,unmask,level_mask) ;\ |
|
INTRSTUB(name,31,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,0,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,32,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,1,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,33,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,2,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,34,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,3,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,35,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,4,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,36,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,5,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,37,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,6,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,38,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,7,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,39,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,8,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,40,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,9,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,41,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,10,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,42,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,11,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,43,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,12,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,44,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,13,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,45,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,14,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,46,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,15,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,47,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,16,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,48,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,17,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,49,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,18,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,50,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,19,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,51,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,20,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,52,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,21,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,53,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,22,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,54,early_ack,late_ack,mask,unmask,level_mask) ;\ |
INTRSTUB(ioapic_level,23,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(name,55,early_ack,late_ack,mask,unmask,level_mask) |
INTRSTUB(ioapic_level,24,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(ioapic_level,25,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB_56(ioapic_edge,voidop,ioapic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(ioapic_level,26,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB_56(ioapic_level,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(ioapic_level,27,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(ioapic_level,28,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB_56(x2apic_edge,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
INTRSTUB(ioapic_level,29,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB_56(x2apic_level,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
INTRSTUB(ioapic_level,30,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(ioapic_level,31,voidop,ioapic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
|
|
INTRSTUB(x2apic_edge,0,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,1,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,2,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,3,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,4,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,5,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,6,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,7,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,8,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,9,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,10,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,11,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,12,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,13,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,14,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,15,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,16,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,17,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,18,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,19,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,20,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,21,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,22,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,23,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,24,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,25,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,26,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,27,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,28,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,29,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,30,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
INTRSTUB(x2apic_edge,31,voidop,x2apic_asm_ack,voidop,voidop,voidop) |
|
|
|
INTRSTUB(x2apic_level,0,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,1,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,2,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,3,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,4,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,5,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,6,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,7,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,8,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,9,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,10,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,11,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,12,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,13,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,14,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,15,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,16,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,17,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,18,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,19,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,20,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,21,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,22,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,23,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,24,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,25,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,26,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,27,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,28,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,29,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,30,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
INTRSTUB(x2apic_level,31,voidop,x2apic_asm_ack,voidop,ioapic_unmask,ioapic_mask) |
|
|
|
#endif |
#endif |
|
|
Line 651 LABEL(name ## _stubs) ; \ |
|
Line 583 LABEL(name ## _stubs) ; \ |
|
END(name ## _stubs) |
END(name ## _stubs) |
|
|
/* |
/* |
* Create an array of structs intrstub (32 entries). |
* Create an array of structs intrstub (56 entries). |
*/ |
*/ |
#define INTRSTUB_ARRAY_32(name) ; \ |
#define INTRSTUB_ARRAY_56(name) ; \ |
.type _C_LABEL(name ## _stubs), @object ; \ |
.type _C_LABEL(name ## _stubs), @object ; \ |
.align 8 ; \ |
.align 8 ; \ |
LABEL(name ## _stubs) ; \ |
LABEL(name ## _stubs) ; \ |
Line 689 LABEL(name ## _stubs) ; \ |
|
Line 621 LABEL(name ## _stubs) ; \ |
|
INTRSTUB_ENTRY(name ## 29) ; \ |
INTRSTUB_ENTRY(name ## 29) ; \ |
INTRSTUB_ENTRY(name ## 30) ; \ |
INTRSTUB_ENTRY(name ## 30) ; \ |
INTRSTUB_ENTRY(name ## 31) ; \ |
INTRSTUB_ENTRY(name ## 31) ; \ |
|
INTRSTUB_ENTRY(name ## 32) ; \ |
|
INTRSTUB_ENTRY(name ## 33) ; \ |
|
INTRSTUB_ENTRY(name ## 34) ; \ |
|
INTRSTUB_ENTRY(name ## 35) ; \ |
|
INTRSTUB_ENTRY(name ## 36) ; \ |
|
INTRSTUB_ENTRY(name ## 37) ; \ |
|
INTRSTUB_ENTRY(name ## 38) ; \ |
|
INTRSTUB_ENTRY(name ## 39) ; \ |
|
INTRSTUB_ENTRY(name ## 40) ; \ |
|
INTRSTUB_ENTRY(name ## 41) ; \ |
|
INTRSTUB_ENTRY(name ## 42) ; \ |
|
INTRSTUB_ENTRY(name ## 43) ; \ |
|
INTRSTUB_ENTRY(name ## 44) ; \ |
|
INTRSTUB_ENTRY(name ## 45) ; \ |
|
INTRSTUB_ENTRY(name ## 46) ; \ |
|
INTRSTUB_ENTRY(name ## 47) ; \ |
|
INTRSTUB_ENTRY(name ## 48) ; \ |
|
INTRSTUB_ENTRY(name ## 49) ; \ |
|
INTRSTUB_ENTRY(name ## 50) ; \ |
|
INTRSTUB_ENTRY(name ## 51) ; \ |
|
INTRSTUB_ENTRY(name ## 52) ; \ |
|
INTRSTUB_ENTRY(name ## 53) ; \ |
|
INTRSTUB_ENTRY(name ## 54) ; \ |
|
INTRSTUB_ENTRY(name ## 55) ; \ |
END(name ## _stubs) |
END(name ## _stubs) |
|
|
#endif /* !XENPV */ |
#endif /* !XENPV */ |
Line 707 IDTVEC(resume_ ## name ## sir) \ |
|
Line 663 IDTVEC(resume_ ## name ## sir) \ |
|
movq CPUVAR(ISOURCES) + (sir) * 8,%r14 ;\ |
movq CPUVAR(ISOURCES) + (sir) * 8,%r14 ;\ |
1: \ |
1: \ |
pushq %r13 ;\ |
pushq %r13 ;\ |
movl $level,CPUVAR(ILEVEL) ;\ |
movb $level,CPUVAR(ILEVEL) ;\ |
STI(si) ;\ |
STI(si) ;\ |
incl CPUVAR(IDEPTH) ;\ |
incl CPUVAR(IDEPTH) ;\ |
movq IS_HANDLERS(%r14),%rbx ;\ |
movq IS_HANDLERS(%r14),%rbx ;\ |
Line 772 ENTRY(hypervisor_callback) |
|
Line 728 ENTRY(hypervisor_callback) |
|
pushq $T_ASTFLT |
pushq $T_ASTFLT |
INTRENTRY |
INTRENTRY |
IDTVEC(handle_hypervisor_callback) |
IDTVEC(handle_hypervisor_callback) |
movl CPUVAR(ILEVEL),%edi |
movzbl CPUVAR(ILEVEL),%rdi |
pushq %rdi /* for Xdoreti */ |
pushq %rdi /* for Xdoreti */ |
incl CPUVAR(IDEPTH) |
incl CPUVAR(IDEPTH) |
movq %rsp,%rdi |
movq %rsp,%rdi |
Line 822 END(failsafe_callback) |
|
Line 778 END(failsafe_callback) |
|
INTRSTUB_ARRAY_16(legacy) |
INTRSTUB_ARRAY_16(legacy) |
|
|
#if NIOAPIC > 0 |
#if NIOAPIC > 0 |
INTRSTUB_ARRAY_32(ioapic_edge) |
INTRSTUB_ARRAY_56(ioapic_edge) |
INTRSTUB_ARRAY_32(ioapic_level) |
INTRSTUB_ARRAY_56(ioapic_level) |
|
|
INTRSTUB_ARRAY_32(x2apic_edge) |
INTRSTUB_ARRAY_56(x2apic_edge) |
INTRSTUB_ARRAY_32(x2apic_level) |
INTRSTUB_ARRAY_56(x2apic_level) |
#endif |
#endif |
#endif /* !XENPV */ |
#endif /* !XENPV */ |