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)