[PATCH] lockdep: annotate DECLARE_WAIT_QUEUE_HEAD
authorPeter Zijlstra <a.p.zijlstra@chello.nl>
Mon, 30 Oct 2006 06:46:36 +0000 (22:46 -0800)
committerLinus Torvalds <torvalds@g5.osdl.org>
Mon, 30 Oct 2006 20:08:40 +0000 (12:08 -0800)
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: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Greg KH <gregkh@suse.de>
Cc: Markus Lidel <markus.lidel@shadowconnect.com>
Acked-by: Ingo 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: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/bluetooth/bluecard_cs.c
drivers/message/i2o/exec-osm.c
drivers/scsi/dpt/dpti_i2o.h
drivers/scsi/imm.c
drivers/scsi/lpfc/lpfc_hbadisc.c
drivers/scsi/lpfc/lpfc_sli.c
drivers/scsi/ppa.c
drivers/usb/net/usbnet.c
include/linux/wait.h

index 845b8680032a0a904de4460f25873b2a1ccd857d..cbc07250b8984f1c95f07539da45f89d6a914a57 100644 (file)
@@ -282,7 +282,7 @@ static void bluecard_write_wakeup(bluecard_info_t *info)
                clear_bit(ready_bit, &(info->tx_state));
 
                if (bt_cb(skb)->pkt_type & 0x80) {
-                       DECLARE_WAIT_QUEUE_HEAD(wq);
+                       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
                        DEFINE_WAIT(wait);
 
                        unsigned char baud_reg;
index 01a5a702b037e9c12e22fd1ef43ebd211b8f4204..a2350640384b5a75c09fc17a5f744c9a7fac9462 100644 (file)
@@ -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,
                          unsigned long timeout, struct i2o_dma *dma)
 {
-       DECLARE_WAIT_QUEUE_HEAD(wq);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
        struct i2o_exec_wait *wait;
        static u32 tcntxt = 0x80000000;
        unsigned long flags;
index b3fa7ed71faf2ffdebef04f0bc3ff46a33340651..5a49216fe4cfb5e81b2064ad51fe88075e8d0972 100644 (file)
@@ -49,7 +49,7 @@
 
 #include <linux/wait.h>
 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;
 
 /*
index 2d95ac9c32c1576e1a6ea01c562fac839330dac6..e31f6122106f1ed830c6972be2c10e471df4e773 100644 (file)
@@ -1153,7 +1153,7 @@ static int __imm_attach(struct parport *pb)
 {
        struct Scsi_Host *host;
        imm_struct *dev;
-       DECLARE_WAIT_QUEUE_HEAD(waiting);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
        DEFINE_WAIT(wait);
        int ports;
        int modes, ppb;
index d586c3d3b0d0dac1381ae240547fab3ea675713b..19c79a0549a7718cbf4560d3818c23e81c059579 100644 (file)
@@ -305,7 +305,7 @@ lpfc_do_work(void *p)
 {
        struct lpfc_hba *phba = p;
        int rc;
-       DECLARE_WAIT_QUEUE_HEAD(work_waitq);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(work_waitq);
 
        set_user_nice(current, -20);
        phba->work_wait = &work_waitq;
index 24a1779b9af4366a761c19955a22b68fb6b4d368..582f5ea4e84e3c7b9f00c59ae58f5fab2af41925 100644 (file)
@@ -2983,7 +2983,7 @@ lpfc_sli_issue_iocb_wait(struct lpfc_hba * phba,
                         struct lpfc_iocbq * prspiocbq,
                         uint32_t timeout)
 {
-       DECLARE_WAIT_QUEUE_HEAD(done_q);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
        long timeleft, timeout_req = 0;
        int retval = IOCB_SUCCESS;
        uint32_t creg_val;
@@ -3061,7 +3061,7 @@ int
 lpfc_sli_issue_mbox_wait(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq,
                         uint32_t timeout)
 {
-       DECLARE_WAIT_QUEUE_HEAD(done_q);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(done_q);
        DECLARE_WAITQUEUE(wq_entry, current);
        uint32_t timeleft = 0;
        int retval;
index b0eba39f208af27612ed5c86cd45c5cffe5e6205..89a2a9f11e41f6352f287ed976a0fc58e9abbbb5 100644 (file)
@@ -1012,7 +1012,7 @@ static LIST_HEAD(ppa_hosts);
 static int __ppa_attach(struct parport *pb)
 {
        struct Scsi_Host *host;
-       DECLARE_WAIT_QUEUE_HEAD(waiting);
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK(waiting);
        DEFINE_WAIT(wait);
        ppa_struct *dev;
        int ports;
index cf3d20eb781cde127e53f1af4c553bea198fa13a..40873635d80e70d24b4dd57be0ba83488e950766 100644 (file)
@@ -554,7 +554,7 @@ static int usbnet_stop (struct net_device *net)
 {
        struct usbnet           *dev = netdev_priv(net);
        int                     temp;
-       DECLARE_WAIT_QUEUE_HEAD (unlink_wakeup); 
+       DECLARE_WAIT_QUEUE_HEAD_ONSTACK (unlink_wakeup);
        DECLARE_WAITQUEUE (wait, current);
 
        netif_stop_queue (net);
index b3b9048421d8489568d27f41ff1303e09ab51f37..e820d00e13836af125710e67753ad5fee2b9bc36 100644 (file)
@@ -79,6 +79,15 @@ struct task_struct;
 
 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)
 {
        q->flags = 0;