linux/debian/patches-rt/0232-net-Remove-preemption-...

72 lines
2.3 KiB
Diff
Raw Normal View History

2020-03-06 11:44:27 +00:00
From e55d9a3613381070dbd9c5e107501fb3c8b87b0b Mon Sep 17 00:00:00 2001
From: Priyanka Jain <Priyanka.Jain@freescale.com>
Date: Thu, 17 May 2012 09:35:11 +0530
2020-04-09 19:44:24 +00:00
Subject: [PATCH 232/328] net: Remove preemption disabling in netif_rx()
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.106-rt46.tar.xz
1)enqueue_to_backlog() (called from netif_rx) should be
bind to a particluar CPU. This can be achieved by
disabling migration. No need to disable preemption
2)Fixes crash "BUG: scheduling while atomic: ksoftirqd"
in case of RT.
If preemption is disabled, enqueue_to_backog() is called
in atomic context. And if backlog exceeds its count,
kfree_skb() is called. But in RT, kfree_skb() might
gets scheduled out, so it expects non atomic context.
3)When CONFIG_PREEMPT_RT_FULL is not defined,
migrate_enable(), migrate_disable() maps to
preempt_enable() and preempt_disable(), so no
change in functionality in case of non-RT.
-Replace preempt_enable(), preempt_disable() with
migrate_enable(), migrate_disable() respectively
-Replace get_cpu(), put_cpu() with get_cpu_light(),
put_cpu_light() respectively
Signed-off-by: Priyanka Jain <Priyanka.Jain@freescale.com>
Acked-by: Rajan Srivastava <Rajan.Srivastava@freescale.com>
Cc: <rostedt@goodmis.orgn>
Link: http://lkml.kernel.org/r/1337227511-2271-1-git-send-email-Priyanka.Jain@freescale.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
2019-04-08 23:49:20 +00:00
net/core/dev.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
2019-04-08 23:49:20 +00:00
diff --git a/net/core/dev.c b/net/core/dev.c
2020-03-06 11:44:27 +00:00
index 19e2cd0897b3..935156f1c5d4 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
2020-02-21 18:07:43 +00:00
@@ -4487,7 +4487,7 @@ static int netif_rx_internal(struct sk_buff *skb)
struct rps_dev_flow voidflow, *rflow = &voidflow;
int cpu;
- preempt_disable();
+ migrate_disable();
rcu_read_lock();
cpu = get_rps_cpu(skb->dev, skb, &rflow);
2020-02-21 18:07:43 +00:00
@@ -4497,14 +4497,14 @@ static int netif_rx_internal(struct sk_buff *skb)
ret = enqueue_to_backlog(skb, cpu, &rflow->last_qtail);
rcu_read_unlock();
- preempt_enable();
+ migrate_enable();
} else
#endif
{
unsigned int qtail;
- ret = enqueue_to_backlog(skb, get_cpu(), &qtail);
- put_cpu();
+ ret = enqueue_to_backlog(skb, get_cpu_light(), &qtail);
+ put_cpu_light();
}
return ret;
}
2020-01-03 23:36:11 +00:00
--
2020-04-09 19:44:24 +00:00
2.25.1
2020-01-03 23:36:11 +00:00