Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 02 Feb 2011 09:30:54 -0800
From:      Julian Elischer <julian@freebsd.org>
To:        "Bjoern A. Zeeb" <bz@freebsd.org>
Cc:        FreeBSD virtualization mailing list <freebsd-virtualization@freebsd.org>
Subject:   Re: simulating wireless device (if_alloc panic, VirtualBox, VIMAGE)
Message-ID:  <4D4994CE.2090209@freebsd.org>
In-Reply-To: <20110202164827.I80258@maildrop.int.zabbadoz.net>
References:  <AANLkTik8D_bLwcUKZdBT-kpkJdDXtPTLvAqfUe0cLoSz@mail.gmail.com>	<4D484213.6050100@freebsd.org>	<AANLkTikJKZLQVA5X2PQs0oT4iFsZYBw7K07kjQTc9iGD@mail.gmail.com>	<4D486108.5060805@freebsd.org>	<AANLkTi=mk2vfyXJBaK5mV2sBWEj0-RDZneLs%2BXq_c7sb@mail.gmail.com> <20110202164827.I80258@maildrop.int.zabbadoz.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2/2/11 9:12 AM, Bjoern A. Zeeb wrote:
> On Wed, 2 Feb 2011, Monthadar Al Jaberi wrote:
>
> Hi,
>
>> Thanx makes more sense, but I have noticed something weired if you can
>> shade some light on.
>>
>> I added printfs one when the module is first loaded (static int
>> event_handler(module_t module, int event, void *arg)):
>> curthread=0xc3f95870
>> curthread->td_vnet=0xc3170e00
>> curthread->td_ucred=0xc3185d00
>> TD_TO_VNET=0
>> CRED_TO_VNET=0
>
> Try to load it from laoder on boot; I think that should work as we are
> setting the curvent for the kernel startup.
>
> The problem you are seeing is a bug in the current implementation that
> you cannot add any physical network interface after the kernel started.
> This applies to cardbus/usb/... as well as any kind of ethernet
> interface, so a kldload igb should yield it as well.
>
> The fix for that is easy and hard at the same time:
> A) either touch all drivers
> B) or touch all cloned interfaces and change 3 common lines.
>    or try to make cloners aware of vimages.
>
> Solution B) is sitting in perforce with the entire stuff that it 
> depends
> on and was started with CH=179022,179255 but not limited to that if you
> want to have a peek.
>
> What you certainly can do locally to your driver for now is to make a
> change like this:
>
> +#ifdef VIMAGE
> +       CURVNET_SET(vnet0);
> +#endif
>         ifp = if_alloc(IFT_ETHER);
> +#ifdef VIMAGE
> +       CURVNET_RESTORE();
> +#endif
>

you don't really need  the #ifdef except for readability as 
CURVNET_XXX ar enot defined for !vnet

> It's the type A) kind of change from above that will break eventually
> in the future.
>
> /bz
>




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4D4994CE.2090209>