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
> @@ -68,6 +68,7 @@
>  #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
> @@ -323,7 +323,8 @@
>      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
> @@ -457,7 +458,8 @@
>          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
_______________________________________________
freebsd-current@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to