diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2012-03-07 21:10:04 +0100 |
---|---|---|
committer | Clark Williams <williams@redhat.com> | 2012-03-07 16:15:18 -0600 |
commit | 4d787e8704b7e563c87fd683c55ed4945d633f79 (patch) | |
tree | 801dc85d21e4c2c730fe41d41b693eaa35b168fd /net/packet/af_packet.c | |
parent | 0a466c6154c14150a1b2d42612a1c8a8e9a639de (diff) |
net: Use cpu_chill() instead of cpu_relax()
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>
Cc: stable-rt@vger.kernel.org
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r-- | net/packet/af_packet.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index d9d4970b9b07..ed8ef1eb2569 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -89,6 +89,7 @@ #include <linux/virtio_net.h> #include <linux/errqueue.h> #include <linux/net_tstamp.h> +#include <linux/delay.h> #ifdef CONFIG_INET #include <net/inet_common.h> @@ -673,7 +674,7 @@ static void prb_retire_rx_blk_timer_expired(unsigned long data) if (BLOCK_NUM_PKTS(pbd)) { while (atomic_read(&pkc->blk_fill_in_prog)) { /* Waiting for skb_copy_bits to finish... */ - cpu_relax(); + cpu_chill(); } } @@ -928,7 +929,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); |