On Wed, Nov 09, 2022 at 06:58:32AM +0100, Anton Lindqvist wrote:
> 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]
ok stsp@
> 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:
>
>