diff options
Diffstat (limited to 'debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch')
-rw-r--r-- | debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch b/debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch index caf96c5f5..c4c909787 100644 --- a/debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch +++ b/debian/patches-rt/0198-net-move-xmit_recursion-to-per-task-variable-on-RT.patch @@ -1,7 +1,7 @@ From: Clark Williams <williams@redhat.com> Date: Fri, 17 Dec 2021 14:31:31 -0600 -Subject: [PATCH 198/353] net: move xmit_recursion to per-task variable on -RT -Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=9fcf3310d12df456718d378ff2826b302f35c28b +Subject: [PATCH 198/354] net: move xmit_recursion to per-task variable on -RT +Origin: https://git.kernel.org/cgit/linux/kernel/git/rt/linux-stable-rt.git/commit?id=f0c1a3fa8d4d3a2a90e975e9aa5dea6e7144a06b A softirq on -RT can be preempted. That means one task is in __dev_queue_xmit(), gets preempted and another task may enter @@ -24,10 +24,10 @@ Signed-off-by: Clark Williams <williams@redhat.com> 3 files changed, 77 insertions(+), 3 deletions(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h -index d3e4b3f195ff..63a0574e2ac2 100644 +index 77209c1c2e7e..1644390430a3 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h -@@ -590,7 +590,11 @@ struct netdev_queue { +@@ -597,7 +597,11 @@ struct netdev_queue { * write-mostly part */ spinlock_t _xmit_lock ____cacheline_aligned_in_smp; @@ -39,7 +39,7 @@ index d3e4b3f195ff..63a0574e2ac2 100644 /* * Time (in jiffies) of last Tx */ -@@ -3011,14 +3015,38 @@ static inline void input_queue_tail_incr_save(struct softnet_data *sd, +@@ -3017,14 +3021,38 @@ static inline void input_queue_tail_incr_save(struct softnet_data *sd, #endif } @@ -79,7 +79,7 @@ index d3e4b3f195ff..63a0574e2ac2 100644 static inline bool dev_xmit_recursion(void) { return unlikely(__this_cpu_read(softnet_data.xmit.recursion) > -@@ -3034,6 +3062,7 @@ static inline void dev_xmit_recursion_dec(void) +@@ -3040,6 +3068,7 @@ static inline void dev_xmit_recursion_dec(void) { __this_cpu_dec(softnet_data.xmit.recursion); } @@ -87,7 +87,7 @@ index d3e4b3f195ff..63a0574e2ac2 100644 void __netif_schedule(struct Qdisc *q); void netif_schedule_queue(struct netdev_queue *txq); -@@ -3843,6 +3872,44 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) +@@ -3849,6 +3878,44 @@ static inline u32 netif_msg_init(int debug_value, int default_msg_enable_bits) return (1U << debug_value) - 1; } @@ -132,7 +132,7 @@ index d3e4b3f195ff..63a0574e2ac2 100644 static inline void __netif_tx_lock(struct netdev_queue *txq, int cpu) { spin_lock(&txq->_xmit_lock); -@@ -3895,7 +3962,7 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) +@@ -3901,7 +3968,7 @@ static inline void __netif_tx_unlock_bh(struct netdev_queue *txq) static inline void txq_trans_update(struct netdev_queue *txq) { @@ -156,7 +156,7 @@ index 3bc6b3206e14..7aa299de5ebf 100644 int pagefault_disabled; #ifdef CONFIG_MMU diff --git a/net/core/dev.c b/net/core/dev.c -index 7bce4581d6f0..32e8b237496c 100644 +index 97c74c2e500e..01f06514aed9 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3837,10 +3837,14 @@ static int __dev_queue_xmit(struct sk_buff *skb, struct net_device *sb_dev) @@ -174,7 +174,7 @@ index 7bce4581d6f0..32e8b237496c 100644 if (dev_xmit_recursion()) goto recursion_alert; -@@ -8598,7 +8602,7 @@ static void netdev_init_one_queue(struct net_device *dev, +@@ -8600,7 +8604,7 @@ static void netdev_init_one_queue(struct net_device *dev, /* Initialize queue lock */ spin_lock_init(&queue->_xmit_lock); netdev_set_xmit_lockdep_class(&queue->_xmit_lock, dev->type); |