net/pktgen: remove interruptible_sleep_on_timeout() usage
Subsystems (3)
PATCH 5/20 net/pktgen: remove interruptible_sleep_on_timeout() usage
Hello,
The first and last replacements in the following patch were slightly confusing to me, as I have not used wait-queues that much myself. I did not exactly understand how a locally defined wait-queue could be slept on, especially since there are no wake_up() calls in pktgen.c. I was tempted to make the first sleep a msleep_interruptible(100), but decided to patch for the same code before I did that.
Description: Replace deprecated interruptible_sleep_on_timeout() with direct wait-queue usage or wait_event_interruptible_timeout() as appropriate.
net/core/pktgen.c +15 -10
@@ -135,6 +135,7 @@#include <linux/ipv6.h> #include <linux/udp.h> #include <linux/proc_fs.h> +#include <linux/wait.h> #include <net/checksum.h> #include <net/ipv6.h> #include <net/addrconf.h>
@@ -2409,16 +2410,18 @@ static int running(struct pktgen_threadstatic int pktgen_wait_thread_run (struct pktgen_thread *t ) { -wait_queue_head_t queue; - -init_waitqueue_head (&queue); - +DEFINE_WAIT (wait); +wait_queue_head_t queue; +init_waitqueue_head (&queue); +if_lock (t);while (running (t)) {if_unlock (t); - -interruptible_sleep_on_timeout (&queue,HZ /10 ); + +prepare_to_wait (&queue, &wait,TASK_INTERRUPTIBLE ); +schedule_timeout (HZ /10 ); +finish_wait (&queue, &wait);if (signal_pending (current)) goto signal;if_lock (t);
@@ -2738,6 +2741,7 @@ __inline__ void pktgen_xmit(struct pktgestatic void pktgen_thread_worker (struct pktgen_thread *t) { +DEFINE_WAIT (wait);struct pktgen_dev *pkt_dev =NULL ;int cpu = t->cpu;sigset_t tmpsig;
@@ -2805,9 +2809,11 @@ static void pktgen_thread_worker(structdo_softirq (); tx_since_softirq =0 ; } + }else { +prepare_to_wait (&(t->queue), &wait,TASK_INTERRUPTIBLE ); +schedule_timeout (HZ /10 ); +finish_wait (&(t->queue), &wait); } -else -interruptible_sleep_on_timeout (&(t->queue),HZ /10 );/* * Back from sleep, either due to the timeout or signal.
@@ -3118,8 +3124,7 @@ static void __exit pg_cleanup(void)struct pktgen_thread *t = pktgen_threads; pktgen_threads->control |= (T_TERMINATE ); -while ( t == pktgen_threads) -interruptible_sleep_on_timeout (&queue,HZ ); +wait_event_interruptible_timeout (queue, (t != pktgen_threads),HZ ); }/* Un-register us from receiving netdevice events */
_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors
PATCH 5/20 net/pktgen: remove interruptible_sleep_on_timeout() usage
Quoted 9 lines · Nishanth Aravamudan
The first and last replacements in the following patch were slightly confusing to me, as I have not used wait-queues that much myself. I did not exactly understand how a locally defined wait-queue could be slept on, especially since there are no
wake_up()calls inpktgen.c. I was tempted to make the first sleep amsleep_interruptible(100), but decided to patch for the same code before I did that.Description: Replace deprecated
interruptible_sleep_on_timeout()with direct wait-queue usage orwait_event_interruptible_timeout()as appropriate.
Tbanks!
I've tested the patch w. msleep_interruptible(). It seems fine. Dave. This is on top of a patch I sent some days ago..
--ro
core/pktgen.c renamed from core/pktgen.c.050201 +14 -11
@@ -104,6 +104,8 @@* Corrections from Nikolai Malykh ([email protected]) * Removed unused flags F_SET_SRCMAC & F_SET_SRCIP 041230 * +* interruptible_sleep_on_timeout() replaced Nishanth Aravamudan <[email protected]> +* 050103 */ #include <linux/sys.h> #include <linux/types.h>
@@ -135,6 +137,7 @@#include <linux/ipv6.h> #include <linux/udp.h> #include <linux/proc_fs.h> +#include <linux/wait.h> #include <net/checksum.h> #include <net/ipv6.h> #include <net/addrconf.h>
@@ -148,7 +151,7 @@#include <asm/timex.h> -#define VERSION "pktgen v2.56: Packet Generator for packet performance testing.\n" +#define VERSION "pktgen v2.57: Packet Generator for packet performance testing.\n"/* #define PG_DEBUG(a) a */ #define PG_DEBUG (a)
@@ -2402,16 +2405,14 @@static int pktgen_wait_thread_run (struct pktgen_thread *t ) { -wait_queue_head_t queue; - -init_waitqueue_head (&queue); -if_lock (t);while (thread_is_running (t)) { +if_unlock (t); - -interruptible_sleep_on_timeout (&queue,HZ /10 ); + +msleep_interruptible (100 ); +if (signal_pending (current)) goto signal;if_lock (t);
@@ -2733,6 +2734,7 @@static void pktgen_thread_worker (struct pktgen_thread *t) { +DEFINE_WAIT (wait);struct pktgen_dev *pkt_dev =NULL ;int cpu = t->cpu;sigset_t tmpsig;
@@ -2800,9 +2802,11 @@do_softirq (); tx_since_softirq =0 ; } + }else { +prepare_to_wait (&(t->queue), &wait,TASK_INTERRUPTIBLE ); +schedule_timeout (HZ /10 ); +finish_wait (&(t->queue), &wait); } -else -interruptible_sleep_on_timeout (&(t->queue),HZ /10 );/* * Back from sleep, either due to the timeout or signal.
@@ -3112,8 +3116,7 @@struct pktgen_thread *t = pktgen_threads; pktgen_threads->control |= (T_TERMINATE ); -while ( t == pktgen_threads) -interruptible_sleep_on_timeout (&queue,HZ ); +wait_event_interruptible_timeout (queue, (t != pktgen_threads),HZ ); }/* Un-register us from receiving netdevice events */
_______________________________________________
Kernel-janitors mailing list
[email protected]
http://lists.osdl.org/mailman/listinfo/kernel-janitors