On Tue, Nov 08, 2022 at 12:18:47PM -0700, David Gwynne wrote:
> CVSROOT: /cvs
> Module name: src
> Changes by: [email protected] 2022/11/08 12:18:47
>
> Modified files:
> sys/arch/amd64/include: vmmvar.h
> sys/arch/amd64/amd64: vmm.c
>
> Log message:
> further speed up delivery of interrupts to a running vcpu.
>
> this records which physical cpu a vcpu is running on. this is used
> by the code that marks a vcpu as having a pending interrupt to check
> if the vcpu is currently running. if it thinks the vcpu is running,
> it sends a nop IPI to the physical cpu it is running on to trigger
> a vmexit, which in turn runs interrupt handling in the guest.
>
> ok mlarkin@
GENERIC is broken:
vmm.c:900:3: error: implicit declaration of function 'x86_send_ipi' is
invalid in C99 [-Werror,-Wimplicit-function-declaration]
Index: vmm.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/vmm.c,v
retrieving revision 1.329
diff -u -p -r1.329 vmm.c
--- vmm.c 8 Nov 2022 19:38:34 -0000 1.329
+++ vmm.c 9 Nov 2022 05:57:26 -0000
@@ -877,7 +877,9 @@ vm_intr_pending(struct vm_intr_params *v
{
struct vm *vm;
struct vcpu *vcpu;
+#ifdef MULTIPROCESSOR
struct cpu_info *ci;
+#endif
int error, ret = 0;
/* Find the desired VM */
@@ -894,10 +896,12 @@ vm_intr_pending(struct vm_intr_params *v
goto out;
}
+#ifdef MULTIPROCESSOR
vcpu->vc_intr = vip->vip_intr;
ci = READ_ONCE(vcpu->vc_curcpu);
if (ci != NULL)
x86_send_ipi(ci, X86_IPI_NOP);
+#endif
refcnt_rele_wake(&vcpu->vc_refcnt);
out: