| Submitter | Rogério Brito |
|---|---|
| Date | April 27, 2009, 12:16 p.m. |
| Message ID | <20090427121633.GA29608@ime.usp.br> |
| Download | mbox | patch |
| Permalink | /patch/26498/ |
| State | Rejected |
| Headers | show |
Comments
From: Rogério Brito <rbrito@ime.usp.br> Date: Mon, 27 Apr 2009 09:16:33 -0300 > Is this anything close to what needs to be done? It's not without > failures, because the function mace_set_timeout receives a pointer to a > struct net_device, but is marked inline and is used by mace_tx_timeout, > which receives an unsigned long (which calls mace_set_timeout). > > Perhaps it would be a case of removing the inline hint to the compiler? > I guess that BenH or Paul could comment here better... > > Signed-off-by: Rogério Brito <rbrito@ime.usp.br> You can fix the mace_set_timeout() function arguments by having a helper function that simply wraps around it and provides the second expection of argument types. Your patch is also wrong, it's missing a lot of netdev_ops entries that are implicitly obtained via alloc_etherdev(), namely: .ndo_change_mtu = eth_change_mtu, .ndo_set_mac_address = eth_mac_addr, .ndo_validate_addr = eth_validate_addr,
Hi, Dave. On Apr 27 2009, David Miller wrote: > You can fix the mace_set_timeout() function arguments by having a > helper function that simply wraps around it and provides the second > expection of argument types. Hummm, this means that I'm not that bad... The wrapper function was the first thing that came to my mind, but I just wanted to be as least disruptive as possible. > Your patch is also wrong, it's missing a lot of netdev_ops > entries that are implicitly obtained via alloc_etherdev(), > namely: Thanks for pointing those out. I didn't find the documentation about netdev_ops under Documentation (a simple grep didn't turn any results). > .ndo_change_mtu = eth_change_mtu, > .ndo_set_mac_address = eth_mac_addr, > .ndo_validate_addr = eth_validate_addr, Nice. I will incorporate such things. Thanks, Rogério Brito.
Patch
--- a/drivers/net/mace.c 2008-12-29 15:25:15.000000000 -0200 +++ b/drivers/net/mace.c 2009-04-27 08:54:16.000000000 -0300 @@ -89,6 +89,16 @@ static inline void dbdma_reset(volatile static inline void mace_clean_rings(struct mace_data *mp); static void __mace_set_address(struct net_device *dev, void *addr); +/* Conversion to netdev_ops. */ +static const struct net_device_ops mace_netdev_ops = { + .ndo_open = mace_open, + .ndo_stop = mace_close, + .ndo_start_xmit = mace_xmit_start, + .ndo_tx_timeout = mace_set_timeout, + .ndo_set_multicast_list = mace_set_multicast, + .ndo_set_mac_address = mace_set_address, +}; + /* * If we can't get a skbuff when we need it, we use this area for DMA. */ @@ -208,11 +217,7 @@ static int __devinit mace_probe(struct m } } - dev->open = mace_open; - dev->stop = mace_close; - dev->hard_start_xmit = mace_xmit_start; - dev->set_multicast_list = mace_set_multicast; - dev->set_mac_address = mace_set_address; + dev->netdev_ops = &mace_netdev_ops; /* * Most of what is below could be moved to mace_open()