|
@@ -162,7 +162,7 @@ struct net_dma {
|
|
|
struct dma_client client;
|
|
|
spinlock_t lock;
|
|
|
cpumask_t channel_mask;
|
|
|
- struct dma_chan *channels[NR_CPUS];
|
|
|
+ struct dma_chan **channels;
|
|
|
};
|
|
|
|
|
|
static enum dma_state_client
|
|
@@ -2444,7 +2444,7 @@ static struct netif_rx_stats *softnet_get_online(loff_t *pos)
|
|
|
{
|
|
|
struct netif_rx_stats *rc = NULL;
|
|
|
|
|
|
- while (*pos < NR_CPUS)
|
|
|
+ while (*pos < nr_cpu_ids)
|
|
|
if (cpu_online(*pos)) {
|
|
|
rc = &per_cpu(netdev_rx_stat, *pos);
|
|
|
break;
|
|
@@ -4324,7 +4324,7 @@ netdev_dma_event(struct dma_client *client, struct dma_chan *chan,
|
|
|
spin_lock(&net_dma->lock);
|
|
|
switch (state) {
|
|
|
case DMA_RESOURCE_AVAILABLE:
|
|
|
- for (i = 0; i < NR_CPUS; i++)
|
|
|
+ for (i = 0; i < nr_cpu_ids; i++)
|
|
|
if (net_dma->channels[i] == chan) {
|
|
|
found = 1;
|
|
|
break;
|
|
@@ -4339,7 +4339,7 @@ netdev_dma_event(struct dma_client *client, struct dma_chan *chan,
|
|
|
}
|
|
|
break;
|
|
|
case DMA_RESOURCE_REMOVED:
|
|
|
- for (i = 0; i < NR_CPUS; i++)
|
|
|
+ for (i = 0; i < nr_cpu_ids; i++)
|
|
|
if (net_dma->channels[i] == chan) {
|
|
|
found = 1;
|
|
|
pos = i;
|
|
@@ -4366,6 +4366,13 @@ netdev_dma_event(struct dma_client *client, struct dma_chan *chan,
|
|
|
*/
|
|
|
static int __init netdev_dma_register(void)
|
|
|
{
|
|
|
+ net_dma.channels = kzalloc(nr_cpu_ids * sizeof(struct net_dma),
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (unlikely(!net_dma.channels)) {
|
|
|
+ printk(KERN_NOTICE
|
|
|
+ "netdev_dma: no memory for net_dma.channels\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
spin_lock_init(&net_dma.lock);
|
|
|
dma_cap_set(DMA_MEMCPY, net_dma.client.cap_mask);
|
|
|
dma_async_client_register(&net_dma.client);
|