8390/8390p: Fix compat netdev ops handling.

Based upon a report from Randy Dunlap.

The compat netdev ops assignments need to happen in
8390.c and 8390p.c, not lib8390.c, as only the type
specific code can assign the correct function pointers.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2008-12-15 15:14:59 -08:00
parent 8b124a8e14
commit 9a4a84294b
3 changed files with 20 additions and 8 deletions

View File

@ -72,7 +72,16 @@ EXPORT_SYMBOL(ei_netdev_ops);
struct net_device *__alloc_ei_netdev(int size)
{
return ____alloc_ei_netdev(size);
struct net_device *dev = ____alloc_ei_netdev(size);
#ifdef CONFIG_COMPAT_NET_DEV_OPS
if (dev) {
dev->hard_start_xmit = ei_start_xmit;
dev->get_stats = ei_get_stats;
dev->set_multicast_list = ei_set_multicast_list;
dev->tx_timeout = ei_tx_timeout;
}
#endif
return dev;
}
EXPORT_SYMBOL(__alloc_ei_netdev);

View File

@ -77,7 +77,16 @@ EXPORT_SYMBOL(eip_netdev_ops);
struct net_device *__alloc_eip_netdev(int size)
{
return ____alloc_ei_netdev(size);
struct net_device *dev = ____alloc_ei_netdev(size);
#ifdef CONFIG_COMPAT_NET_DEV_OPS
if (dev) {
dev->hard_start_xmit = eip_start_xmit;
dev->get_stats = eip_get_stats;
dev->set_multicast_list = eip_set_multicast_list;
dev->tx_timeout = eip_tx_timeout;
}
#endif
return dev;
}
EXPORT_SYMBOL(__alloc_eip_netdev);

View File

@ -1010,12 +1010,6 @@ static void ethdev_setup(struct net_device *dev)
if (ei_debug > 1)
printk(version);
#ifdef CONFIG_COMPAT_NET_DEV_OPS
dev->hard_start_xmit = ei_start_xmit;
dev->get_stats = ei_get_stats;
dev->set_multicast_list = ei_set_multicast_list;
dev->tx_timeout = __ei_tx_timeout;
#endif
ether_setup(dev);
spin_lock_init(&ei_local->page_lock);