diff options
author | Dan Williams <dan.j.williams@intel.com> | 2009-01-11 03:20:39 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-01-11 03:20:39 -0500 |
commit | 649274d993212e7c23c0cb734572c2311c200872 (patch) | |
tree | 84ff8e44e5b44bbe3c388eded5c3e28bf0bd2375 /net/core/dev.c | |
parent | 47fd23fe8efeea3af4593a8424419df48724eb25 (diff) |
net_dma: acquire/release dma channels on ifup/ifdown
The recent dmaengine rework removed the capability to remove dma device
driver modules while net_dma is active. Rather than notify
dmaengine-clients that channels are trying to be removed, we now rely on
clients to notify dmaengine when they no longer have a need for
channels. Teach net_dma to release channels by taking dmaengine
references at netdevice open and dropping references at netdevice close.
Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r-- | net/core/dev.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 5f736f1ceeae..b715a55cccc4 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
@@ -1088,6 +1088,11 @@ int dev_open(struct net_device *dev) | |||
1088 | dev->flags |= IFF_UP; | 1088 | dev->flags |= IFF_UP; |
1089 | 1089 | ||
1090 | /* | 1090 | /* |
1091 | * Enable NET_DMA | ||
1092 | */ | ||
1093 | dmaengine_get(); | ||
1094 | |||
1095 | /* | ||
1091 | * Initialize multicasting status | 1096 | * Initialize multicasting status |
1092 | */ | 1097 | */ |
1093 | dev_set_rx_mode(dev); | 1098 | dev_set_rx_mode(dev); |
@@ -1164,6 +1169,11 @@ int dev_close(struct net_device *dev) | |||
1164 | */ | 1169 | */ |
1165 | call_netdevice_notifiers(NETDEV_DOWN, dev); | 1170 | call_netdevice_notifiers(NETDEV_DOWN, dev); |
1166 | 1171 | ||
1172 | /* | ||
1173 | * Shutdown NET_DMA | ||
1174 | */ | ||
1175 | dmaengine_put(); | ||
1176 | |||
1167 | return 0; | 1177 | return 0; |
1168 | } | 1178 | } |
1169 | 1179 | ||
@@ -5151,9 +5161,6 @@ static int __init net_dev_init(void) | |||
5151 | hotcpu_notifier(dev_cpu_callback, 0); | 5161 | hotcpu_notifier(dev_cpu_callback, 0); |
5152 | dst_init(); | 5162 | dst_init(); |
5153 | dev_mcast_init(); | 5163 | dev_mcast_init(); |
5154 | #ifdef CONFIG_NET_DMA | ||
5155 | dmaengine_get(); | ||
5156 | #endif | ||
5157 | rc = 0; | 5164 | rc = 0; |
5158 | out: | 5165 | out: |
5159 | return rc; | 5166 | return rc; |