Re: [Q] init_etherdev()

From: Petko Manolov (petkan@dce.bg)
Date: Mon Oct 16 2000 - 09:23:18 EST


        Hi all,

If we are talking about 2.4 there are two options:
        - call init_etherdev() with arguments == 0;
        - call it with non zero arguments;

Successful return from init_etherdev(0,0) means that
ethernet device is already registered and "eth?" is
asigned to the driver allocated. This requires unregister_netdev()
on driver exit (in MODULE case).

If init_etherdev(0,0) returns NULL (i.e. error) there is no
need to take any action - no devices were registered nor
memory was allocated.

When init_etherdev() fails if called with arguments then you
need you need to release previous allocated resources in reverse
order.

        Petkan

Andrey Panin wrote:
>
> On Mon, Oct 16, 2000 at 02:34:44AM -0400, Jeff Garzik wrote:
> > Andrey Panin wrote:
> > >
> > > Hi all,
> > >
> > > after walking through some of NIC drivers and trying to remove check_region()
> > > calls, i have two small questions:
> > >
> > > 1) many NIC drivers contain (in XXX_probe1 functions) check like this:
> > >
> > > if (dev == NULL) {
> > > dev = init_etherdev();
> > > }
> > >
> > > but many drivers don't check (dev == NULL) at all. So first question: is this check
> > > and init_etherdev() call really required or this is old crap waiting for removal ?
> >
> > Look at the call paths for the drivers coming from Space.c... Most of
> > the NIC drivers that do the above are ISA drivers, where they are always
> > provided a device struct. I believe that we can change the above to
> >
> > if (dev == NULL)
> > BUG ();
> >
>
> Looks like init_etherdev() calls can be safely removed or replaced by BUG()'s
> (at least for ISA NIC drivers). Anybody have any objections ?
>
> >
> > > 2) if init_etherdev() is required, than call to unregister_netdevice() is
> > > required too (in case of probe failure), isn't it ?
> >
> > I think so.. I do know that if init_etherdev() is required, you must
> > also kfree() in the module_exit() function. Since this case is so rare
> > (AFAICS), most drivers don't handle this case, and never call kfree at
> > all.
> >
> > -If- init_etherdev is required at all (I think it is not), then you
> > would need a flag... You would need two flags, if you want to handle
> > the case where dev->priv is allocated manually, versus allocated in
> > init_etherdev.
> >
> > if (dev == NULL) {
> > dev = init_etherdev (0, 0);
> > if (!dev) return -ENOMEM;
> > tp->have_dynamic_netdev = 1;
> > }
> >
>
> As far as I can remember, I did not see such checks in NIC drivers :(
>
> > --
> > Jeff Garzik | The difference between laziness and
> > Building 1024 | prioritization is the end result.
> > MandrakeSoft |
> > -
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to majordomo@vger.kernel.org
> > Please read the FAQ at http://www.tux.org/lkml/
>
> Best regards,
> Andrey
> --
> Andrey Panin | Embedded systems software engineer
> pazke@orbita1.ru | PGP key: http://www.orbita1.ru/~pazke/AndreyPanin.asc
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> Please read the FAQ at http://www.tux.org/lkml/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Oct 23 2000 - 21:00:09 EST