Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

firewire: Move fw_card kref functions into linux/firewire.h

When writing a firewire driver that doesn't deal with struct fw_device
objects (e.g. it only publishes FireWire units and doesn't subscribe to
them), you likely need to keep referenced to struct fw_card objects so
that you can send messages to other nodes. This patch moves
fw_card_put(), fw_card_get() and fw_card_release() into the public
include/linux/firewire.h header instead of drivers/firewire/core.h, and
adds EXPORT_SYMBOL_GPL(fw_card_release).

The firewire-sbp-target module requires these so it can keep a reference
to the fw_card object in order that it can fetch ORBs to execute and
read/write related data and status information.

Signed-off-by: Chris Boot <bootc@bootc.net>
Acked-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Cc: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

authored by

Chris Boot and committed by
Nicholas Bellinger
fc5f80b1 253d9237

+15 -15
+1
drivers/firewire/core-card.c
··· 676 676 677 677 complete(&card->done); 678 678 } 679 + EXPORT_SYMBOL_GPL(fw_card_release); 679 680 680 681 void fw_core_remove_card(struct fw_card *card) 681 682 {
-15
drivers/firewire/core.h
··· 120 120 void fw_schedule_bus_reset(struct fw_card *card, bool delayed, bool short_reset); 121 121 void fw_schedule_bm_work(struct fw_card *card, unsigned long delay); 122 122 123 - static inline struct fw_card *fw_card_get(struct fw_card *card) 124 - { 125 - kref_get(&card->kref); 126 - 127 - return card; 128 - } 129 - 130 - void fw_card_release(struct kref *kref); 131 - 132 - static inline void fw_card_put(struct fw_card *card) 133 - { 134 - kref_put(&card->kref, fw_card_release); 135 - } 136 - 137 - 138 123 /* -cdev */ 139 124 140 125 extern const struct file_operations fw_device_ops;
+14
include/linux/firewire.h
··· 135 135 __be32 maint_utility_register; 136 136 }; 137 137 138 + static inline struct fw_card *fw_card_get(struct fw_card *card) 139 + { 140 + kref_get(&card->kref); 141 + 142 + return card; 143 + } 144 + 145 + void fw_card_release(struct kref *kref); 146 + 147 + static inline void fw_card_put(struct fw_card *card) 148 + { 149 + kref_put(&card->kref, fw_card_release); 150 + } 151 + 138 152 struct fw_attribute_group { 139 153 struct attribute_group *groups[2]; 140 154 struct attribute_group group;