Commit 7259f0d0 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Linus Torvalds

[PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD

kernel: INFO: trying to register non-static key.
kernel: the code is fine but needs lockdep annotation.
kernel: turning off the locking correctness validator.
kernel:  [<c04051ed>] show_trace_log_lvl+0x58/0x16a
kernel:  [<c04057fa>] show_trace+0xd/0x10
kernel:  [<c0405913>] dump_stack+0x19/0x1b
kernel:  [<c043b1e2>] __lock_acquire+0xf0/0x90d
kernel:  [<c043bf70>] lock_acquire+0x4b/0x6b
kernel:  [<c061472f>] _spin_lock_irqsave+0x22/0x32
kernel:  [<c04363d3>] prepare_to_wait+0x17/0x4b
kernel:  [<f89a24b6>] lpfc_do_work+0xdd/0xcc2 [lpfc]
kernel:  [<c04361b9>] kthread+0xc3/0xf2
kernel:  [<c0402005>] kernel_thread_helper+0x5/0xb

Another case of non-static lockdep keys; duplicate the paradigm set by
DECLARE_COMPLETION_ONSTACK and introduce DECLARE_WAIT_QUEUE_HEAD_ONSTACK.
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Greg KH <gregkh@suse.de>
Cc: Markus Lidel <markus.lidel@shadowconnect.com>
Acked-by: default avatarIngo Molnar <mingo@elte.hu>
Cc: Arjan van de Ven <arjan@infradead.org>
Cc: James Bottomley <James.Bottomley@steeleye.com>
Cc: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 70812522
...@@ -282,7 +282,7 @@ static void bluecard_write_wakeup(bluecard_info_t *info) ...@@ -282,7 +282,7 @@ static void bluecard_write_wakeup(bluecard_info_t *info)
clear_bit(ready_bit, &(info->tx_state)); clear_bit(ready_bit, &(info->tx_state));
if (bt_cb(skb)->pkt_type & 0x80) { if (bt_cb(skb)->pkt_type & 0x80) {
DECLARE_WAIT_QUEUE_HEAD(wq); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
unsigned char baud_reg; unsigned char baud_reg;
......
...@@ -124,7 +124,7 @@ static void i2o_exec_wait_free(struct i2o_exec_wait *wait) ...@@ -124,7 +124,7 @@ static void i2o_exec_wait_free(struct i2o_exec_wait *wait)
int i2o_msg_post_wait_mem(struct i2o_controller *c, struct i2o_message *msg, int i2o_msg_post_wait_mem(struct i2o_controller *c, struct i2o_message *msg,
unsigned long timeout, struct i2o_dma *dma) unsigned long timeout, struct i2o_dma *dma)
{ {
DECLARE_WAIT_QUEUE_HEAD(wq); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
struct i2o_exec_wait *wait; struct i2o_exec_wait *wait;
static u32 tcntxt = 0x80000000; static u32 tcntxt = 0x80000000;
unsigned long flags; unsigned long flags;
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#include <linux/wait.h> #include <linux/wait.h>
typedef wait_queue_head_t adpt_wait_queue_head_t; typedef wait_queue_head_t adpt_wait_queue_head_t;
#define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) DECLARE_WAIT_QUEUE_HEAD(wait) #define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait)
typedef wait_queue_t adpt_wait_queue_t; typedef wait_queue_t adpt_wait_queue_t;
/* /*
......
...@@ -1153,7 +1153,7 @@ static int __imm_attach(struct parport *pb) ...@@ -1153,7 +1153,7 @@ static int __imm_attach(struct parport *pb)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
imm_struct *dev; imm_struct *dev;
DECLARE_WAIT_QUEUE_HEAD(waiting); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
int ports; int ports;
int modes, ppb; int modes, ppb;
......
...@@ -305,7 +305,7 @@ lpfc_do_work(void *p) ...@@ -305,7 +305,7 @@ lpfc_do_work(void *p)
{ {
struct lpfc_hba *phba = p; struct lpfc_hba *phba = p;
int rc; int rc;
DECLARE_WAIT_QUEUE_HEAD(work_waitq); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(work_waitq);
set_user_nice(current, -20); set_user_nice(current, -20);
phba->work_wait = &work_waitq; phba->work_wait = &work_waitq;
......
...@@ -2983,7 +2983,7 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba, ...@@ -2983,7 +2983,7 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba,
struct lpfc_iocbq * prspiocbq, struct lpfc_iocbq * prspiocbq,
uint32_t timeout) uint32_t timeout)
{ {
DECLARE_WAIT_QUEUE_HEAD(done_q); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
long timeleft, timeout_req = 0; long timeleft, timeout_req = 0;
int retval = IOCB_SUCCESS; int retval = IOCB_SUCCESS;
uint32_t creg_val; uint32_t creg_val;
...@@ -3061,7 +3061,7 @@ int ...@@ -3061,7 +3061,7 @@ int
lpfc_sli_issue_mbox_wait(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq, lpfc_sli_issue_mbox_wait(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq,
uint32_t timeout) uint32_t timeout)
{ {
DECLARE_WAIT_QUEUE_HEAD(done_q); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
DECLARE_WAITQUEUE(wq_entry, current); DECLARE_WAITQUEUE(wq_entry, current);
uint32_t timeleft = 0; uint32_t timeleft = 0;
int retval; int retval;
......
...@@ -1012,7 +1012,7 @@ static LIST_HEAD(ppa_hosts); ...@@ -1012,7 +1012,7 @@ static LIST_HEAD(ppa_hosts);
static int __ppa_attach(struct parport *pb) static int __ppa_attach(struct parport *pb)
{ {
struct Scsi_Host *host; struct Scsi_Host *host;
DECLARE_WAIT_QUEUE_HEAD(waiting); DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
ppa_struct *dev; ppa_struct *dev;
int ports; int ports;
......
...@@ -554,7 +554,7 @@ static int usbnet_stop (struct net_device *net) ...@@ -554,7 +554,7 @@ static int usbnet_stop (struct net_device *net)
{ {
struct usbnet *dev = netdev_priv(net); struct usbnet *dev = netdev_priv(net);
int temp; int temp;
DECLARE_WAIT_QUEUE_HEAD (unlink_wakeup); DECLARE_WAIT_QUEUE_HEAD_ONSTACK (unlink_wakeup);
DECLARE_WAITQUEUE (wait, current); DECLARE_WAITQUEUE (wait, current);
netif_stop_queue (net); netif_stop_queue (net);
......
...@@ -79,6 +79,15 @@ struct task_struct; ...@@ -79,6 +79,15 @@ struct task_struct;
extern void init_waitqueue_head(wait_queue_head_t *q); extern void init_waitqueue_head(wait_queue_head_t *q);
#ifdef CONFIG_LOCKDEP
# define __WAIT_QUEUE_HEAD_INIT_ONSTACK(name) \
({ init_waitqueue_head(&name); name; })
# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) \
wait_queue_head_t name = __WAIT_QUEUE_HEAD_INIT_ONSTACK(name)
#else
# define DECLARE_WAIT_QUEUE_HEAD_ONSTACK(name) DECLARE_WAIT_QUEUE_HEAD(name)
#endif
static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p) static inline void init_waitqueue_entry(wait_queue_t *q, struct task_struct *p)
{ {
q->flags = 0; q->flags = 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment