Index | Thread | Search

From:
Mike Larkin <mlarkin@nested.page>
Subject:
Re: implement pmap_shootept for non-MULTIPROCESSOR
To:
Dave Voutila <dv@sisu.io>
Cc:
tech@openbsd.org
Date:
Wed, 2 Oct 2024 10:35:29 -0700

Download raw body.

Thread
On Fri, Sep 27, 2024 at 01:51:45PM -0400, Dave Voutila wrote:
> Yesterday I committed a quick fix for my breakage of amd64/GENERIC
> kernels because of a missing pmap_shootept symbol. This adds in a
> simplified non-SMP version similar to how pmap_tlb_shoottlb() is
> implemented.
>
> This simplifies a different diff I was about to send today, so I'd
> rather land this first before asking for testers of a larger, uglier
> diff.
>
> ok?
>
>
> diffstat 4878470a40918f54d3d6099e01505877832370a9 370d0ec5da6c47b4bd6afbd2c7613b87e93c2466
>  M  sys/arch/amd64/amd64/pmap.c  |  18+  2-
>
> 1 file changed, 18 insertions(+), 2 deletions(-)
>
> diff 4878470a40918f54d3d6099e01505877832370a9 370d0ec5da6c47b4bd6afbd2c7613b87e93c2466
> commit - 4878470a40918f54d3d6099e01505877832370a9
> commit + 370d0ec5da6c47b4bd6afbd2c7613b87e93c2466
> blob - 7dbe6648b0dfc08784ccf85aefbd64977a5db388
> blob + c550a5e99aeb6c938cfcaddd4605f81d642df2d4
> --- sys/arch/amd64/amd64/pmap.c
> +++ sys/arch/amd64/amd64/pmap.c
> @@ -2503,9 +2503,7 @@ pmap_remove_ept(struct pmap *pmap, vaddr_t sgpa, vaddr
>  	for (v = sgpa; v < egpa + PAGE_SIZE; v += PAGE_SIZE)
>  		pmap_do_remove_ept(pmap, v, &free_pvs);
>
> -#ifdef MULTIPROCESSOR
>  	pmap_shootept(pmap, 1);
> -#endif /* MULTIPROCESSOR */
>
>  	mtx_leave(&pmap->pm_mtx);
>  	pmap_tlb_shootwait();
> @@ -3596,4 +3594,22 @@ pmap_tlb_shoottlb(struct pmap *pm, int shootself)
>  		}
>  	}
>  }
> +
> +#if NVMM > 0
> +void
> +pmap_shootept(struct pmap *pm, int shootself)
> +{
> +	struct cpu_info *self = curcpu();
> +	struct vmx_invept_descriptor vid;
> +
> +	KASSERT(pmap_is_ept(pm));
> +
> +	if (shootself && (self->ci_flags & CPUF_VMM)) {
> +		vid.vid_eptp = pm->eptp;
> +		vid.vid_reserved = 0;
> +		invept(self->ci_vmm_cap.vcc_vmx.vmx_invept_mode, &vid);
> +	}
> +}
> +#endif /* NVMM > 0 */
> +
>  #endif /* MULTIPROCESSOR */
>

ok mlarkin