|
@@ -108,7 +108,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
static inline void rps_lock_irqsave(struct softnet_data *sd,
|
|
|
unsigned long *flags)
|
|
|
{
|
|
|
-@@ -4449,6 +4475,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
|
|
+@@ -4451,6 +4477,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
|
|
|
/*************************************************************************
|
|
|
* Receiver routines
|
|
|
*************************************************************************/
|
|
@@ -116,7 +116,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
int netdev_max_backlog __read_mostly = 1000;
|
|
|
EXPORT_SYMBOL(netdev_max_backlog);
|
|
|
-@@ -4481,12 +4508,16 @@ static inline void ____napi_schedule(str
|
|
|
+@@ -4483,12 +4510,16 @@ static inline void ____napi_schedule(str
|
|
|
*/
|
|
|
thread = READ_ONCE(napi->thread);
|
|
|
if (thread) {
|
|
@@ -133,7 +133,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
list_add_tail(&napi->poll_list, &sd->poll_list);
|
|
|
WRITE_ONCE(napi->list_owner, smp_processor_id());
|
|
|
/* If not called from net_rx_action()
|
|
|
-@@ -4732,6 +4763,11 @@ static void napi_schedule_rps(struct sof
|
|
|
+@@ -4734,6 +4765,11 @@ static void napi_schedule_rps(struct sof
|
|
|
|
|
|
#ifdef CONFIG_RPS
|
|
|
if (sd != mysd) {
|
|
@@ -145,7 +145,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
sd->rps_ipi_next = mysd->rps_ipi_list;
|
|
|
mysd->rps_ipi_list = sd;
|
|
|
|
|
|
-@@ -5955,7 +5991,7 @@ static void net_rps_action_and_irq_enabl
|
|
|
+@@ -5957,7 +5993,7 @@ static void net_rps_action_and_irq_enabl
|
|
|
#ifdef CONFIG_RPS
|
|
|
struct softnet_data *remsd = sd->rps_ipi_list;
|
|
|
|
|
@@ -154,7 +154,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
sd->rps_ipi_list = NULL;
|
|
|
|
|
|
local_irq_enable();
|
|
|
-@@ -5970,7 +6006,7 @@ static void net_rps_action_and_irq_enabl
|
|
|
+@@ -5972,7 +6008,7 @@ static void net_rps_action_and_irq_enabl
|
|
|
static bool sd_has_rps_ipi_waiting(struct softnet_data *sd)
|
|
|
{
|
|
|
#ifdef CONFIG_RPS
|
|
@@ -163,7 +163,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
#else
|
|
|
return false;
|
|
|
#endif
|
|
|
-@@ -6014,7 +6050,7 @@ static int process_backlog(struct napi_s
|
|
|
+@@ -6016,7 +6052,7 @@ static int process_backlog(struct napi_s
|
|
|
* We can use a plain write instead of clear_bit(),
|
|
|
* and we dont need an smp_mb() memory barrier.
|
|
|
*/
|
|
@@ -172,7 +172,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
again = false;
|
|
|
} else {
|
|
|
skb_queue_splice_tail_init(&sd->input_pkt_queue,
|
|
|
-@@ -6680,43 +6716,48 @@ static void skb_defer_free_flush(struct
|
|
|
+@@ -6682,43 +6718,48 @@ static void skb_defer_free_flush(struct
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -250,7 +250,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-@@ -11297,7 +11338,7 @@ static int dev_cpu_dead(unsigned int old
|
|
|
+@@ -11299,7 +11340,7 @@ static int dev_cpu_dead(unsigned int old
|
|
|
|
|
|
list_del_init(&napi->poll_list);
|
|
|
if (napi->poll == process_backlog)
|
|
@@ -259,7 +259,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
else
|
|
|
____napi_schedule(sd, napi);
|
|
|
}
|
|
|
-@@ -11305,12 +11346,14 @@ static int dev_cpu_dead(unsigned int old
|
|
|
+@@ -11307,12 +11348,14 @@ static int dev_cpu_dead(unsigned int old
|
|
|
raise_softirq_irqoff(NET_TX_SOFTIRQ);
|
|
|
local_irq_enable();
|
|
|
|
|
@@ -278,7 +278,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
|
|
|
/* Process offline CPU's input_pkt_queue */
|
|
|
while ((skb = __skb_dequeue(&oldsd->process_queue))) {
|
|
|
-@@ -11573,6 +11616,38 @@ static struct pernet_operations __net_in
|
|
|
+@@ -11575,6 +11618,38 @@ static struct pernet_operations __net_in
|
|
|
*
|
|
|
*/
|
|
|
|
|
@@ -317,7 +317,7 @@ Signed-off-by: Paolo Abeni <[email protected]>
|
|
|
/*
|
|
|
* This is called single threaded during boot, so no need
|
|
|
* to take the rtnl semaphore.
|
|
|
-@@ -11623,7 +11698,10 @@ static int __init net_dev_init(void)
|
|
|
+@@ -11625,7 +11700,10 @@ static int __init net_dev_init(void)
|
|
|
init_gro_hash(&sd->backlog);
|
|
|
sd->backlog.poll = process_backlog;
|
|
|
sd->backlog.weight = weight_p;
|