[PKTGEN]: Sleeping function called under lock
pktgen is calling kmalloc GFP_KERNEL and vmalloc with lock held. The simplest fix is to turn the lock into a semaphore, since the thread lock is only used for admin control from user context. Signed-off-by: Stephen Hemminger <shemminger@osdl.org> Signed-off-by: Robert Olsson <robert.olsson@its.uu.se> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
This commit is contained in:
parent
670c02c2bf
commit
b7c8921bf1
|
@ -177,8 +177,8 @@
|
||||||
#define T_REMDEV (1<<3) /* Remove all devs */
|
#define T_REMDEV (1<<3) /* Remove all devs */
|
||||||
|
|
||||||
/* Locks */
|
/* Locks */
|
||||||
#define thread_lock() spin_lock(&_thread_lock)
|
#define thread_lock() down(&pktgen_sem)
|
||||||
#define thread_unlock() spin_unlock(&_thread_lock)
|
#define thread_unlock() up(&pktgen_sem)
|
||||||
|
|
||||||
/* If lock -- can be removed after some work */
|
/* If lock -- can be removed after some work */
|
||||||
#define if_lock(t) spin_lock(&(t->if_lock));
|
#define if_lock(t) spin_lock(&(t->if_lock));
|
||||||
|
@ -503,7 +503,7 @@ static int pg_delay_d = 0;
|
||||||
static int pg_clone_skb_d = 0;
|
static int pg_clone_skb_d = 0;
|
||||||
static int debug = 0;
|
static int debug = 0;
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(_thread_lock);
|
static DECLARE_MUTEX(pktgen_sem);
|
||||||
static struct pktgen_thread *pktgen_threads = NULL;
|
static struct pktgen_thread *pktgen_threads = NULL;
|
||||||
|
|
||||||
static char module_fname[128];
|
static char module_fname[128];
|
||||||
|
|
Loading…
Reference in New Issue