Re: EFIRT on machines with pcid after r337773

From: O. Hartmann <ohartmann_at_walstatt.org>
Date: Wed, 15 Aug 2018 11:55:58 +0200
On Wed, 15 Aug 2018 01:17:55 +0300
Konstantin Belousov <kostikbel_at_gmail.com> wrote:

> If you use UEFI boot, have EFIRT compiled in kernel (the case of
> GENERIC) or pre-loaded as module, and efirt is not disabled by a tunable,
> and the machine resets during kernel initialization, try this.
> 
> diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
> index d5d795ab502..c9334eab916 100644
> --- a/sys/amd64/amd64/pmap.c
> +++ b/sys/amd64/amd64/pmap.c
> _at__at_ -1188,7 +1188,7 _at__at_ pmap_bootstrap(vm_paddr_t *firstaddr)
>  			kernel_pmap->pm_pcids[i].pm_pcid = PMAP_PCID_KERN;
>  			kernel_pmap->pm_pcids[i].pm_gen = 1;
>  		}
> -		PCPU_SET(pcid_next, PMAP_PCID_KERN + 1);
> +		PCPU_SET(pcid_next, PMAP_PCID_KERN + 2);
>  		PCPU_SET(pcid_gen, 1);
>  		/*
>  		 * pcpu area for APs is zeroed during AP startup.
> _at__at_ -2651,8 +2651,8 _at__at_ pmap_pinit0(pmap_t pmap)
>  	bzero(&pmap->pm_stats, sizeof pmap->pm_stats);
>  	pmap->pm_flags = pmap_flags;
>  	CPU_FOREACH(i) {
> -		pmap->pm_pcids[i].pm_pcid = PMAP_PCID_NONE;
> -		pmap->pm_pcids[i].pm_gen = 0;
> +		pmap->pm_pcids[i].pm_pcid = PMAP_PCID_KERN + 1;
> +		pmap->pm_pcids[i].pm_gen = 1;
>  		if (!pti) {
>  			__pcpu[i].pc_kcr3 = PMAP_NO_CR3;
>  			__pcpu[i].pc_ucr3 = PMAP_NO_CR3;
> _______________________________________________
> freebsd-current_at_freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-current
> To unsubscribe, send any mail to "freebsd-current-unsubscribe_at_freebsd.org"

Is this patch going to hit the tree soon? Since it seems crucial to UEFI
booting systems having options EFIRT set in the kernel (as GENERIC does).

Regards,

oh
Received on Wed Aug 15 2018 - 07:56:03 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:17 UTC