Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Feb 2011 19:05:39 +0100
From:      Monthadar Al Jaberi <monthadar@gmail.com>
To:        Julian Elischer <julian@freebsd.org>
Cc:        "Bjoern A. Zeeb" <bz@freebsd.org>, FreeBSD virtualization mailing list <freebsd-virtualization@freebsd.org>
Subject:   Re: simulating wireless device (if_alloc panic, VirtualBox, VIMAGE)
Message-ID:  <AANLkTimDZRefv57_nanxGUbHjP1wqeQ41iWHvpXogmvU@mail.gmail.com>
In-Reply-To: <4D4994CE.2090209@freebsd.org>
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> <4D4994CE.2090209@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I just tried something that seems to work, but please dont hit me ^^;;;

in wtap_ioctl I assigned curthread->td_vnet myself to point to a VNET
(saved it when the module first loaded) (I have not created any jails
yet)... and it works... I didnt put any CURVNET macros...

my assumption is that if ath drivers dont use VNET I shouldnt :P

What is wrong with this hack?

br,

P.S. I have printed "porting to vnet" text to have it always at hand,
but its a bit hard for me... doing my best.

On Wed, Feb 2, 2011 at 6:30 PM, Julian Elischer <julian@freebsd.org> wrote:
> 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=3D0xc3f95870
>>> curthread->td_vnet=3D0xc3170e00
>>> curthread->td_ucred=3D0xc3185d00
>>> TD_TO_VNET=3D0
>>> CRED_TO_VNET=3D0
>>
>> 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.
>> =A0 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=3D179022,179255 but not limited to that if yo=
u
>> 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
>> + =A0 =A0 =A0 CURVNET_SET(vnet0);
>> +#endif
>> =A0 =A0 =A0 =A0ifp =3D if_alloc(IFT_ETHER);
>> +#ifdef VIMAGE
>> + =A0 =A0 =A0 CURVNET_RESTORE();
>> +#endif
>>
>
> you don't really need =A0the #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
>>
>
>



--=20
//Monthadar Al Jaberi



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