aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2009-01-06 13:38:15 -0500
committerDan Williams <dan.j.williams@intel.com>2009-01-06 13:38:15 -0500
commitf67b45999205164958de4ec0658d51fa4bee066d (patch)
tree2fc3c2e833fdfea2f029dca05d5401ba9ae63229 /net/core
parent2ba05622b8b143b0c95968ba59bddfbd6d2f2559 (diff)
net_dma: convert to dma_find_channel
Use the general-purpose channel allocation provided by dmaengine. Reviewed-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c40
1 files changed, 0 insertions, 40 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index e40b0d57f8ff..bbb07dbe1740 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -4828,44 +4828,6 @@ static int dev_cpu_callback(struct notifier_block *nfb,
4828 4828
4829#ifdef CONFIG_NET_DMA 4829#ifdef CONFIG_NET_DMA
4830/** 4830/**
4831 * net_dma_rebalance - try to maintain one DMA channel per CPU
4832 * @net_dma: DMA client and associated data (lock, channels, channel_mask)
4833 *
4834 * This is called when the number of channels allocated to the net_dma client
4835 * changes. The net_dma client tries to have one DMA channel per CPU.
4836 */
4837
4838static void net_dma_rebalance(struct net_dma *net_dma)
4839{
4840 unsigned int cpu, i, n, chan_idx;
4841 struct dma_chan *chan;
4842
4843 if (cpus_empty(net_dma->channel_mask)) {
4844 for_each_online_cpu(cpu)
4845 rcu_assign_pointer(per_cpu(softnet_data, cpu).net_dma, NULL);
4846 return;
4847 }
4848
4849 i = 0;
4850 cpu = first_cpu(cpu_online_map);
4851
4852 for_each_cpu_mask_nr(chan_idx, net_dma->channel_mask) {
4853 chan = net_dma->channels[chan_idx];
4854
4855 n = ((num_online_cpus() / cpus_weight(net_dma->channel_mask))
4856 + (i < (num_online_cpus() %
4857 cpus_weight(net_dma->channel_mask)) ? 1 : 0));
4858
4859 while(n) {
4860 per_cpu(softnet_data, cpu).net_dma = chan;
4861 cpu = next_cpu(cpu, cpu_online_map);
4862 n--;
4863 }
4864 i++;
4865 }
4866}
4867
4868/**
4869 * netdev_dma_event - event callback for the net_dma_client 4831 * netdev_dma_event - event callback for the net_dma_client
4870 * @client: should always be net_dma_client 4832 * @client: should always be net_dma_client
4871 * @chan: DMA channel for the event 4833 * @chan: DMA channel for the event
@@ -4894,7 +4856,6 @@ netdev_dma_event(struct dma_client *client, struct dma_chan *chan,
4894 ack = DMA_ACK; 4856 ack = DMA_ACK;
4895 net_dma->channels[pos] = chan; 4857 net_dma->channels[pos] = chan;
4896 cpu_set(pos, net_dma->channel_mask); 4858 cpu_set(pos, net_dma->channel_mask);
4897 net_dma_rebalance(net_dma);
4898 } 4859 }
4899 break; 4860 break;
4900 case DMA_RESOURCE_REMOVED: 4861 case DMA_RESOURCE_REMOVED:
@@ -4909,7 +4870,6 @@ netdev_dma_event(struct dma_client *client, struct dma_chan *chan,
4909 ack = DMA_ACK; 4870 ack = DMA_ACK;
4910 cpu_clear(pos, net_dma->channel_mask); 4871 cpu_clear(pos, net_dma->channel_mask);
4911 net_dma->channels[i] = NULL; 4872 net_dma->channels[i] = NULL;
4912 net_dma_rebalance(net_dma);
4913 } 4873 }
4914 break; 4874 break;
4915 default: 4875 default: