9
.pushsection .fixup, "a"
10
.long 777b + \delta - vapic_base
18
.long vapic_base ; fixup
19
.long fixup_start ; fixup
20
.long fixup_end ; fixup
29
.long set_tpr_eax ; fixup
30
.long get_tpr_eax ; fixup
31
.long get_tpr_ecx ; fixup
32
.long get_tpr_edx ; fixup
33
.long get_tpr_ebx ; fixup
34
.long 0 /* esp. won't work. */
35
.long get_tpr_ebp ; fixup
36
.long get_tpr_esi ; fixup
37
.long get_tpr_edi ; fixup
40
.byte 0x0f, 0x01, 0xc1
43
kvm_hypercall_vapic_poll_irq = 1
45
tr_vcpu_signature = 0xdb
54
cmp $tr_vcpu_signature, %al
58
mov vcpu_shift, %ecx ; fixup
60
movzbl vapic(%eax), %eax ; fixup
68
mov real_tpr, %eax ; fixup
122
cmp $tr_vcpu_signature, %al
126
mov vcpu_shift, %ecx ; fixup
129
mov vapic(%edx), %eax ; fixup
134
/* %ebx = new vapic (%bl = tpr, %bh = isr, %b3 = irr) */
136
lock cmpxchg %ebx, vapic(%edx) ; fixup
146
mov %bl, %ch /* ch = ppr */
148
/* now: %bl = irr, %bh = ppr */
161
mov $kvm_hypercall_vapic_poll_irq, %eax
167
mov real_tpr, %eax ; fixup
174
* per-vcpu records of size 2^vcpu shift.
176
* byte 1: highest in-service interrupt (isr) (r/o); bits 3:0 are zero
178
* byte 3: highest pending interrupt (irr) (r/o)