Virtualbox

Giovanni Trematerra giovanni.trematerra at gmail.com
Wed Feb 24 12:26:12 UTC 2010


On Wed, Feb 24, 2010 at 12:16 PM, Jacques Fourie
<jacques.fourie at gmail.com> wrote:
> As a test you can apply the following mod to sys/i386/include/pmap.h
> and re-compile vboxdrv.ko. It fixed the problem for me but I'm by no
> means an expert on the i386 pmap stuff so use at your own risk. Also
> revert the change to pmap.h after re-compiling vboxdrv just so that
> you don't inadvertently break something else.
>
> Index: pmap.h
> ===================================================================
> --- pmap.h      (revision 204194)
> +++ pmap.h      (working copy)
> @@ -296,7 +296,10 @@
>                 * however, safe to use the old PDE because the page table
>                 * page is preserved by the promotion.
>                 */
> -               pa = KPTmap[i386_btop(va)];
> +               if (va >= KERNBASE)
> +                       pa = KPTmap[i386_btop(va)];
> +               else
> +                       pa = *vtopte(va);
>                pa = (pa & PG_FRAME) | (va & PAGE_MASK);
>        }
>        return (pa);

pmap_kextract is intend to be used with kernel virtual addresses and
not user virtual addresses.
The problem lies in the driver not in the kernel.

The vboxdrv call vtophys macro passing user virtual addresses through
rtR0MemObjNativeGetPagePhysAddr and this is wrong.

If you want a way to get virtualbox works try to revert this commit (r202894):
http://www.mail-archive.com/svn-src-all@freebsd.org/msg19081.html

If you don't use ZFS with superpages enable you have a good chance to
get a work system until a patch to vboxdrv will be around.

--
Gianni


More information about the freebsd-current mailing list