Commit 1e94d72f authored by Tom Herbert's avatar Tom Herbert Committed by David S. Miller

rps: Fixed build with CONFIG_SMP not enabled.

Signed-off-by: default avatarTom Herbert <therbert@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent a0340162
...@@ -1341,7 +1341,9 @@ struct softnet_data { ...@@ -1341,7 +1341,9 @@ struct softnet_data {
struct sk_buff *completion_queue; struct sk_buff *completion_queue;
/* Elements below can be accessed between CPUs for RPS */ /* Elements below can be accessed between CPUs for RPS */
#ifdef CONFIG_SMP
struct call_single_data csd ____cacheline_aligned_in_smp; struct call_single_data csd ____cacheline_aligned_in_smp;
#endif
struct sk_buff_head input_pkt_queue; struct sk_buff_head input_pkt_queue;
struct napi_struct backlog; struct napi_struct backlog;
}; };
......
...@@ -2174,6 +2174,7 @@ int weight_p __read_mostly = 64; /* old backlog weight */ ...@@ -2174,6 +2174,7 @@ int weight_p __read_mostly = 64; /* old backlog weight */
DEFINE_PER_CPU(struct netif_rx_stats, netdev_rx_stat) = { 0, }; DEFINE_PER_CPU(struct netif_rx_stats, netdev_rx_stat) = { 0, };
#ifdef CONFIG_SMP
/* /*
* get_rps_cpu is called from netif_receive_skb and returns the target * get_rps_cpu is called from netif_receive_skb and returns the target
* CPU from the RPS map of the receiving queue for a given skb. * CPU from the RPS map of the receiving queue for a given skb.
...@@ -2293,6 +2294,7 @@ static void trigger_softirq(void *data) ...@@ -2293,6 +2294,7 @@ static void trigger_softirq(void *data)
__napi_schedule(&queue->backlog); __napi_schedule(&queue->backlog);
__get_cpu_var(netdev_rx_stat).received_rps++; __get_cpu_var(netdev_rx_stat).received_rps++;
} }
#endif /* CONFIG_SMP */
/* /*
* enqueue_to_backlog is called to queue an skb to a per CPU backlog * enqueue_to_backlog is called to queue an skb to a per CPU backlog
...@@ -2320,6 +2322,7 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu) ...@@ -2320,6 +2322,7 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu)
/* Schedule NAPI for backlog device */ /* Schedule NAPI for backlog device */
if (napi_schedule_prep(&queue->backlog)) { if (napi_schedule_prep(&queue->backlog)) {
#ifdef CONFIG_SMP
if (cpu != smp_processor_id()) { if (cpu != smp_processor_id()) {
struct rps_remote_softirq_cpus *rcpus = struct rps_remote_softirq_cpus *rcpus =
&__get_cpu_var(rps_remote_softirq_cpus); &__get_cpu_var(rps_remote_softirq_cpus);
...@@ -2328,6 +2331,9 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu) ...@@ -2328,6 +2331,9 @@ static int enqueue_to_backlog(struct sk_buff *skb, int cpu)
__raise_softirq_irqoff(NET_RX_SOFTIRQ); __raise_softirq_irqoff(NET_RX_SOFTIRQ);
} else } else
__napi_schedule(&queue->backlog); __napi_schedule(&queue->backlog);
#else
__napi_schedule(&queue->backlog);
#endif
} }
goto enqueue; goto enqueue;
} }
...@@ -2367,9 +2373,13 @@ int netif_rx(struct sk_buff *skb) ...@@ -2367,9 +2373,13 @@ int netif_rx(struct sk_buff *skb)
if (!skb->tstamp.tv64) if (!skb->tstamp.tv64)
net_timestamp(skb); net_timestamp(skb);
#ifdef CONFIG_SMP
cpu = get_rps_cpu(skb->dev, skb); cpu = get_rps_cpu(skb->dev, skb);
if (cpu < 0) if (cpu < 0)
cpu = smp_processor_id(); cpu = smp_processor_id();
#else
cpu = smp_processor_id();
#endif
return enqueue_to_backlog(skb, cpu); return enqueue_to_backlog(skb, cpu);
} }
...@@ -2735,6 +2745,7 @@ int __netif_receive_skb(struct sk_buff *skb) ...@@ -2735,6 +2745,7 @@ int __netif_receive_skb(struct sk_buff *skb)
*/ */
int netif_receive_skb(struct sk_buff *skb) int netif_receive_skb(struct sk_buff *skb)
{ {
#ifdef CONFIG_SMP
int cpu; int cpu;
cpu = get_rps_cpu(skb->dev, skb); cpu = get_rps_cpu(skb->dev, skb);
...@@ -2743,6 +2754,9 @@ int netif_receive_skb(struct sk_buff *skb) ...@@ -2743,6 +2754,9 @@ int netif_receive_skb(struct sk_buff *skb)
return __netif_receive_skb(skb); return __netif_receive_skb(skb);
else else
return enqueue_to_backlog(skb, cpu); return enqueue_to_backlog(skb, cpu);
#else
return __netif_receive_skb(skb);
#endif
} }
EXPORT_SYMBOL(netif_receive_skb); EXPORT_SYMBOL(netif_receive_skb);
...@@ -3168,6 +3182,7 @@ void netif_napi_del(struct napi_struct *napi) ...@@ -3168,6 +3182,7 @@ void netif_napi_del(struct napi_struct *napi)
} }
EXPORT_SYMBOL(netif_napi_del); EXPORT_SYMBOL(netif_napi_del);
#ifdef CONFIG_SMP
/* /*
* net_rps_action sends any pending IPI's for rps. This is only called from * net_rps_action sends any pending IPI's for rps. This is only called from
* softirq and interrupts must be enabled. * softirq and interrupts must be enabled.
...@@ -3184,6 +3199,7 @@ static void net_rps_action(cpumask_t *mask) ...@@ -3184,6 +3199,7 @@ static void net_rps_action(cpumask_t *mask)
} }
cpus_clear(*mask); cpus_clear(*mask);
} }
#endif
static void net_rx_action(struct softirq_action *h) static void net_rx_action(struct softirq_action *h)
{ {
...@@ -3191,8 +3207,10 @@ static void net_rx_action(struct softirq_action *h) ...@@ -3191,8 +3207,10 @@ static void net_rx_action(struct softirq_action *h)
unsigned long time_limit = jiffies + 2; unsigned long time_limit = jiffies + 2;
int budget = netdev_budget; int budget = netdev_budget;
void *have; void *have;
#ifdef CONFIG_SMP
int select; int select;
struct rps_remote_softirq_cpus *rcpus; struct rps_remote_softirq_cpus *rcpus;
#endif
local_irq_disable(); local_irq_disable();
...@@ -3255,6 +3273,7 @@ static void net_rx_action(struct softirq_action *h) ...@@ -3255,6 +3273,7 @@ static void net_rx_action(struct softirq_action *h)
netpoll_poll_unlock(have); netpoll_poll_unlock(have);
} }
out: out:
#ifdef CONFIG_SMP
rcpus = &__get_cpu_var(rps_remote_softirq_cpus); rcpus = &__get_cpu_var(rps_remote_softirq_cpus);
select = rcpus->select; select = rcpus->select;
rcpus->select ^= 1; rcpus->select ^= 1;
...@@ -3262,6 +3281,9 @@ static void net_rx_action(struct softirq_action *h) ...@@ -3262,6 +3281,9 @@ static void net_rx_action(struct softirq_action *h)
local_irq_enable(); local_irq_enable();
net_rps_action(&rcpus->mask[select]); net_rps_action(&rcpus->mask[select]);
#else
local_irq_enable();
#endif
#ifdef CONFIG_NET_DMA #ifdef CONFIG_NET_DMA
/* /*
...@@ -6204,9 +6226,11 @@ static int __init net_dev_init(void) ...@@ -6204,9 +6226,11 @@ static int __init net_dev_init(void)
queue->completion_queue = NULL; queue->completion_queue = NULL;
INIT_LIST_HEAD(&queue->poll_list); INIT_LIST_HEAD(&queue->poll_list);
#ifdef CONFIG_SMP
queue->csd.func = trigger_softirq; queue->csd.func = trigger_softirq;
queue->csd.info = queue; queue->csd.info = queue;
queue->csd.flags = 0; queue->csd.flags = 0;
#endif
queue->backlog.poll = process_backlog; queue->backlog.poll = process_backlog;
queue->backlog.weight = weight_p; queue->backlog.weight = weight_p;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment