summaryrefslogtreecommitdiffstats
path: root/drivers/firewire/fw-device.h
diff options
context:
space:
mode:
authorJay Fenlason <fenlason@redhat.com>2008-10-03 11:19:09 -0400
committerStefan Richter <stefanr@s5r6.in-berlin.de>2009-03-24 20:56:36 +0100
commitcf417e5494582453c033d8cac9e1352e74215435 (patch)
treea1681ef863c8c4219506e16b7982e51dc0718387 /drivers/firewire/fw-device.h
parent1aa292bb1c53500e3ab570b955d03afa97a9404d (diff)
firewire: add a client_list_lock
This adds a client_list_lock, which only protects the device's client_list, so that future versions of the driver can call code that takes the card->lock while holding the client_list_lock. Adding this lock is much simpler than adding __ versions of all the functions that the future version may need. The one ordering issue is to make sure code never takes the client_list_lock with card->lock held. Since client_list_lock is only used in three places, that isn't hard. Signed-off-by: Jay Fenlason <fenlason@redhat.com> Update fill_bus_reset_event() accordingly. Include linux/spinlock.h. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to 'drivers/firewire/fw-device.h')
-rw-r--r--drivers/firewire/fw-device.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/firewire/fw-device.h b/drivers/firewire/fw-device.h
index 8ef6ec2ca21..008a7908a86 100644
--- a/drivers/firewire/fw-device.h
+++ b/drivers/firewire/fw-device.h
@@ -23,6 +23,7 @@
#include <linux/cdev.h>
#include <linux/idr.h>
#include <linux/rwsem.h>
+#include <linux/spinlock.h>
#include <asm/atomic.h>
enum fw_device_state {
@@ -64,6 +65,8 @@ struct fw_device {
bool cmc;
struct fw_card *card;
struct device device;
+ /* to prevent deadlocks, never take this lock with card->lock held */
+ spinlock_t client_list_lock;
struct list_head client_list;
u32 *config_rom;
size_t config_rom_length;