2000-12-23 14:40:27

by Manfred Spraul

[permalink] [raw]
Subject: Q: netdevice interface change

Hi Andrew,

I have 2 questions about your netdevice2.txt:
http://www.uow.edu.au/~andrewm/linux/netdevice2.txt

* is withdraw_netdevice() really required, can't unregister_netdev
check "hidden", and notify the protocols/hotplug based on that value?

* I don't like the backward compatibility section:

<<<<<<<<
Other things:

#define HAVE_PUBLISH_NETDEV

This is for 2.2-compatible drivers. They can do this:

#ifdef HAVE_PUBLISH_NETDEV
#define init_etherdev prepare_etherdev
#define publish_netdev(dev) do {} while (0)
#define withdraw_netdev unregister_netdev
#endif
>>>>>>>>

As far as I know Linus prefers backward compatibility the other way
around:

<<<<<<
A 2.4 driver that must remain compatible with 2.2 should use
the new interface and add these lines to their source file:

#ifndef HAVE_PUBLISH_NETDEV
#define prepare_etherdev init_etherdev
#define publish_netdev(dev) do {} while (0)
#define withdraw_netdev unregister_netdev
#endif
>>>>>>

--
Manfred


2000-12-23 15:31:46

by Andrew Morton

[permalink] [raw]
Subject: Re: Q: netdevice interface change

Manfred wrote:
>
> Hi Andrew,
>
> I have 2 questions about your netdevice2.txt:
> http://www.uow.edu.au/~andrewm/linux/netdevice2.txt
>
> * is withdraw_netdevice() really required, can't unregister_netdev
> check "hidden", and notify the protocols/hotplug based on that value?

Yes, it's basically the same thing and yes, it could be done
this way. The only difference is that withdraw_netdev()
will blurt out a warning if it is called on an unhidden device.
This is useful now, but less so later. I guess it could be
#defined onto unregister_netdev later..


> * I don't like the backward compatibility section:
>
> <<<<<<<<
> Other things:
>
> #define HAVE_PUBLISH_NETDEV
>
> This is for 2.2-compatible drivers. They can do this:
>
> #ifdef HAVE_PUBLISH_NETDEV
> #define init_etherdev prepare_etherdev
> #define publish_netdev(dev) do {} while (0)
> #define withdraw_netdev unregister_netdev
> #endif
> >>>>>>>>
>
> As far as I know Linus prefers backward compatibility the other way
> around:
>
> <<<<<<
> A 2.4 driver that must remain compatible with 2.2 should use
> the new interface and add these lines to their source file:
>
> #ifndef HAVE_PUBLISH_NETDEV
> #define prepare_etherdev init_etherdev
> #define publish_netdev(dev) do {} while (0)
> #define withdraw_netdev unregister_netdev
> #endif
> >>>>>>

You are correct, and that is in fact how I did it in rrunner.c.
I'll do eepro100 and acenic that way too. The manual is wrong :)

BTW: I just finished the ethernet devices, so my request for
help can be ignored. Fixed a truckload of unchecked kmallocs
and error-path memory leaks while I was at it. Sigh.

-