diff options
Diffstat (limited to 'debian/patches-rt/0188-net-Use-cpu_chill-instead-of-cpu_relax.patch')
-rw-r--r-- | debian/patches-rt/0188-net-Use-cpu_chill-instead-of-cpu_relax.patch | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/debian/patches-rt/0188-net-Use-cpu_chill-instead-of-cpu_relax.patch b/debian/patches-rt/0188-net-Use-cpu_chill-instead-of-cpu_relax.patch new file mode 100644 index 000000000..eace39fdc --- /dev/null +++ b/debian/patches-rt/0188-net-Use-cpu_chill-instead-of-cpu_relax.patch @@ -0,0 +1,70 @@ +From 6113e8d5c66aab6927b9d8656e1c5b1e8d7e35fb Mon Sep 17 00:00:00 2001 +From: Thomas Gleixner <tglx@linutronix.de> +Date: Wed, 7 Mar 2012 21:10:04 +0100 +Subject: [PATCH 188/347] net: Use cpu_chill() instead of cpu_relax() +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.tar.xz + +Retry loops on RT might loop forever when the modifying side was +preempted. Use cpu_chill() instead of cpu_relax() to let the system +make progress. + +Signed-off-by: Thomas Gleixner <tglx@linutronix.de> +--- + net/packet/af_packet.c | 5 +++-- + net/rds/ib_rdma.c | 3 ++- + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c +index f654f79e3310..31ce7d1fbee1 100644 +--- a/net/packet/af_packet.c ++++ b/net/packet/af_packet.c +@@ -63,6 +63,7 @@ + #include <linux/if_packet.h> + #include <linux/wireless.h> + #include <linux/kernel.h> ++#include <linux/delay.h> + #include <linux/kmod.h> + #include <linux/slab.h> + #include <linux/vmalloc.h> +@@ -668,7 +669,7 @@ static void prb_retire_rx_blk_timer_expired(struct timer_list *t) + if (BLOCK_NUM_PKTS(pbd)) { + while (atomic_read(&pkc->blk_fill_in_prog)) { + /* Waiting for skb_copy_bits to finish... */ +- cpu_relax(); ++ cpu_chill(); + } + } + +@@ -930,7 +931,7 @@ static void prb_retire_current_block(struct tpacket_kbdq_core *pkc, + if (!(status & TP_STATUS_BLK_TMO)) { + while (atomic_read(&pkc->blk_fill_in_prog)) { + /* Waiting for skb_copy_bits to finish... */ +- cpu_relax(); ++ cpu_chill(); + } + } + prb_close_block(pkc, pbd, po, status); +diff --git a/net/rds/ib_rdma.c b/net/rds/ib_rdma.c +index 0b347f46b2f4..f395f06031bc 100644 +--- a/net/rds/ib_rdma.c ++++ b/net/rds/ib_rdma.c +@@ -34,6 +34,7 @@ + #include <linux/slab.h> + #include <linux/rculist.h> + #include <linux/llist.h> ++#include <linux/delay.h> + + #include "rds_single_path.h" + #include "ib_mr.h" +@@ -222,7 +223,7 @@ static inline void wait_clean_list_grace(void) + for_each_online_cpu(cpu) { + flag = &per_cpu(clean_list_grace, cpu); + while (test_bit(CLEAN_LIST_BUSY_BIT, flag)) +- cpu_relax(); ++ cpu_chill(); + } + } + +-- +2.36.1 + |