Make a typedef for a function that is refered as a function pointer.
Also move the conditial call of the callback function in fec_enet_mii()
of the area that is protected with spinlock beacause the callbacked
function might grab the same lock.
Signed-off-by: Sebastian Siewior <bigeasy@linutronix.de>
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -116,10 +116,10 @@ static unsigned char fec_mac_default[] =
/* Forward declarations of some structures to support different PHYs
*/
-
+typedef void (mii_func)(uint val, struct net_device *dev);
typedef struct {
uint mii_data;
- void (*funct)(uint mii_reg, struct net_device *dev);
+ mii_func *funct;
} phy_cmd_t;
typedef struct {
@@ -258,8 +258,7 @@ static mii_list_t *mii_free;
static mii_list_t *mii_head;
static mii_list_t *mii_tail;
-static int mii_queue(struct net_device *dev, int request,
- void (*func) (uint, struct net_device *));
+static int mii_queue(struct net_device *dev, int request, mii_func *funct);
/* Make MII read/write commands for the FEC.
*/
@@ -693,6 +692,7 @@ static void fec_enet_mii(struct net_devi
volatile fec_t *ep;
mii_list_t *mip;
uint mii_reg;
+ mii_func *mii_func = NULL;
fep = netdev_priv(dev);
ep = fep->hwp;
@@ -706,7 +706,7 @@ static void fec_enet_mii(struct net_devi
}
if (mip->mii_func != NULL)
- (*(mip->mii_func)) (mii_reg, dev);
+ mii_func = *(mip->mii_func);
mii_head = mip->mii_next;
mip->mii_next = mii_free;
@@ -717,11 +717,11 @@ static void fec_enet_mii(struct net_devi
unlock:
spin_unlock(&fep->lock);
+ if (mii_func)
+ mii_func(mii_reg, dev);
}
-static int
-mii_queue(struct net_device *dev, int regval,
- void (*func) (uint, struct net_device *))
+static int mii_queue(struct net_device *dev, int regval, mii_func *func)
{
struct fec_enet_private *fep;
unsigned long flags;
--
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
| Karl Meyer | PROBLEM: 2.6.23-rc "NETDEV WATCHDOG: eth0: transmit timed out" |
| Justin Piszcz | Linux Software RAID 5 Performance Optimizations: 2.6.19.1: (211MB/s read & 195... |
| Bart Van Assche | Integration of SCST in the mainstream Linux kernel |
| David P. Quigley | [RFC v3] Security Label Support for NFSv4 |
| YOSHIFUJI Hideaki / | [GIT PULL] [IPV6] COMPAT: Fix SSM applications on 64bit kernels. |
| Krzysztof Halasa | Re: [PATCH v2] Re: WAN: new PPP code for generic HDLC |
| Pavel Emelyanov | [PATCH][CAN]: Fix copy_from_user() results interpretation. |
| Roel Kluin | [PATCH 1] net: fix and typo's |
git: | |
| Peter Stahlir | Git as a filesystem |
| Miklos Vajna | [rfc] git submodules howto |
| Dan Zwell | $GIT_DIR usage |
| Wink Saville | Resolving conflicts |
| GVG GVG | ssh_exchange_identification: Connection closed by remote host |
| Xavier Mertens | newfs: cg 0: bad magic number |
| Laurent CARON | IPSEC VPN between OpenBSD and Linux (OpenSwan) |
| Didier Wiroth | win32-codecs, avi and amd64 question |
| Netfilter kernel module | 8 hours ago | Linux kernel |
| serial driver xmit problem | 11 hours ago | Linux kernel |
| Why Windows is better than Linux | 11 hours ago | Linux general |
| How can I see my kernel messages in vt12? | 18 hours ago | Linux kernel |
| Grub | 1 day ago | Linux general |
| vmalloc_fault handling in x86_64 | 1 day ago | Linux kernel |
| epoll_wait()ing on epoll FD | 1 day ago | Linux kernel |
| Framebuffer in x86_64 causes problems to multiseat | 1 day ago | Linux kernel |
| Difference between 2.4 and 2.6 regarding thread creation | 1 day ago | Linux general |
| Compiling gfs2 on kernel 2.6.27 | 2 days ago | Linux kernel |
