Messages in this thread |  | | Date | Mon, 16 Oct 2000 17:23:18 +0300 | From | Petko Manolov <> | Subject | Re: [Q] init_etherdev() |
| |
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/
|  |