Re: Fwd: Re: r365488 page faults on AMD Ryzen 9 3950X

From: Rainer Hurling <rhurlin_at_gwdg.de>
Date: Wed, 23 Sep 2020 18:35:00 +0200
On 23.09.20 00:51, Mark Johnston wrote:
> On Tue, Sep 22, 2020 at 01:13:29AM +0300, Konstantin Belousov wrote:
>> On Mon, Sep 21, 2020 at 08:57:46PM +0200, Rainer Hurling wrote:
>>> Fatal trap 12: page fault while in kernel mode
>>> cpuid = 31; apic id = 1f
>>> fault virtual address   = 0x25407efa
>> This address is very suspicious.
>>
>> I cannot claim it as the fact, but most likely cause for such garbage
>> pointer value is mismatched ABI between kernel and module.  In other
>> words, the module was built against headers from different kernel.
> 
> For some reason clang is not complaining about a missing declaration for
> vm_pager_allocate(), despite -Wmissing-prototypes in the CFLAGS...
> 
> This patch is required on top of a patched extract of the vbox sources:
> 
> --- the-freebsd-kernel.h.orig	2020-09-22 18:49:26.499329000 -0400
> +++ the-freebsd-kernel.h	2020-09-22 18:49:55.317615000 -0400
> _at__at_ -68,6 +68,7 _at__at_
>  #include <vm/vm_kern.h>
>  #include <vm/vm_param.h>        /* KERN_SUCCESS ++ */
>  #include <vm/vm_page.h>
> +#include <vm/vm_pager.h>
>  #include <vm/vm_phys.h>         /* vm_phys_alloc_* */
>  #include <vm/vm_extern.h>       /* kmem_alloc_attr */
>  #include <vm/vm_pageout.h>      /* vm_contig_grow_cache */
> --- memobj-r0drv-freebsd.c.orig	2020-09-22 18:49:25.010456000 -0400
> +++ memobj-r0drv-freebsd.c	2020-09-22 18:49:47.462276000 -0400
> _at__at_ -323,7 +323,8 _at__at_
>      size_t      cPages = atop(pMemFreeBSD->Core.cb);
>      int         rc;
>  
> -    pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, cPages);
> +    pMemFreeBSD->pObject = vm_pager_allocate(OBJT_PHYS, NULL,
> +        pMemFreeBSD->Core.cb, VM_PROT_ALL, 0, curthread->td_ucred);
>  
>      /* No additional object reference for auto-deallocation upon unmapping. */
>  #if __FreeBSD_version >= 1000055
> _at__at_ -457,7 +458,8 _at__at_
>          return VERR_NO_MEMORY;
>      }
>  
> -    pMemFreeBSD->pObject = vm_object_allocate(OBJT_PHYS, atop(cb));
> +    pMemFreeBSD->pObject = vm_pager_allocate(OBJT_PHYS, NULL,
> +        pMemFreeBSD->Core.cb, VM_PROT_ALL, 0, curthread->td_ucred);
>  
>      if (PhysHighest != NIL_RTHCPHYS)
>          VmPhysAddrHigh = PhysHighest;
> 

I can confirm that these patches (two files) work for me. The system
reboots with loaded vbox kernel modules.

Many thanks for your help and investigations!

Best regards,
Rainer
Received on Wed Sep 23 2020 - 14:35:08 UTC

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