diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2007-11-05 05:10:07 -0500 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2007-11-05 05:10:16 -0500 |
commit | 33583c3657ef30cd7f4cb563071ac23cb6ff69a0 (patch) | |
tree | a65a508bf9b29278ea1b83aa3908ed148f201dfe /drivers/s390 | |
parent | 74521c28e550c4ec265cda14114bd9b908e9de34 (diff) |
[S390] cio: use INIT_WORK to initialize struct work.
Use INIT_WORK to initialize struct work and don't initialize a
struct work partial by explicitly initializing its private structures.
Fixes the following lockdep bug because no key was assigned:
INFO: trying to register non-static key.
the code is fine but needs lockdep annotation.
turning off the locking correctness validator.
0000000001f07bb8 0000000001f07bf8 0000000000000002 0000000000000000
0000000001f07c98 0000000001f07c10 0000000001f07c10 0000000000015406
0000000000000000 0000000000000002 0000000000000000 0000000000000000
0000000001f07bf8 000000000000000c 0000000001f07bf8 0000000001f07c68
000000000039ae60 0000000000015406 0000000001f07bf8 0000000001f07c48
Call Trace:
([<0000000000015376>] show_trace+0xda/0x104)
[<0000000000015460>] show_stack+0xc0/0xf8
[<00000000000154c6>] dump_stack+0x2e/0x3c
[<000000000006a71e>] __lock_acquire+0x47e/0x11a0
[<000000000006b4f0>] lock_acquire+0xb0/0xd8
[<00000000000555a6>] run_workqueue+0x1aa/0x24c
[<00000000000556de>] worker_thread+0x96/0xf4
[<000000000005c210>] kthread+0x90/0xb4
[<000000000001947a>] kernel_thread_starter+0x6/0xc
[<0000000000019474>] kernel_thread_starter+0x0/0xc
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r-- | drivers/s390/cio/device.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/s390/cio/device.c b/drivers/s390/cio/device.c index 7ee57f084a89..74f6b539974a 100644 --- a/drivers/s390/cio/device.c +++ b/drivers/s390/cio/device.c | |||
@@ -738,7 +738,7 @@ static int io_subchannel_initialize_dev(struct subchannel *sch, | |||
738 | atomic_set(&cdev->private->onoff, 0); | 738 | atomic_set(&cdev->private->onoff, 0); |
739 | cdev->dev.parent = &sch->dev; | 739 | cdev->dev.parent = &sch->dev; |
740 | cdev->dev.release = ccw_device_release; | 740 | cdev->dev.release = ccw_device_release; |
741 | INIT_LIST_HEAD(&cdev->private->kick_work.entry); | 741 | INIT_WORK(&cdev->private->kick_work, NULL); |
742 | cdev->dev.groups = ccwdev_attr_groups; | 742 | cdev->dev.groups = ccwdev_attr_groups; |
743 | /* Do first half of device_register. */ | 743 | /* Do first half of device_register. */ |
744 | device_initialize(&cdev->dev); | 744 | device_initialize(&cdev->dev); |