diff options
author | Dan Williams <dan.j.williams@intel.com> | 2009-01-06 13:38:15 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2009-01-06 13:38:15 -0500 |
commit | f67b45999205164958de4ec0658d51fa4bee066d (patch) | |
tree | 2fc3c2e833fdfea2f029dca05d5401ba9ae63229 /net/core | |
parent | 2ba05622b8b143b0c95968ba59bddfbd6d2f2559 (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.c | 40 |
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 | |||
4838 | static 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: |