Commit 5a124d38 authored by Stefan Richter's avatar Stefan Richter

firewire: net: allow for unordered unit discovery

Decouple the creation and destruction of the net_device from the order
of discovery and removal of nodes with RFC 2734 unit directories since
there is no reliable order.  The net_device is now created when the
first RFC 2734 unit on a card is discovered, and destroyed when the last
RFC 2734 unit on a card went away.  This includes all remote units as
well as the local unit, which is therefore tracked as a peer now too.

Also, locking around the list of peers is slightly extended to guard
against peer removal.  As a side effect, fwnet_peer.pdg_lock has become
superfluous and is deleted.

Peer data (max_rec, speed, node ID, generation) are updated more
carefully.
Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent f91e3bd8
...@@ -429,8 +429,6 @@ void fw_card_initialize(struct fw_card *card, ...@@ -429,8 +429,6 @@ void fw_card_initialize(struct fw_card *card,
card->local_node = NULL; card->local_node = NULL;
INIT_DELAYED_WORK(&card->work, fw_card_bm_work); INIT_DELAYED_WORK(&card->work, fw_card_bm_work);
card->netdev = NULL;
INIT_LIST_HEAD(&card->peer_list);
} }
EXPORT_SYMBOL(fw_card_initialize); EXPORT_SYMBOL(fw_card_initialize);
......
This diff is collapsed.
...@@ -131,10 +131,6 @@ struct fw_card { ...@@ -131,10 +131,6 @@ struct fw_card {
bool broadcast_channel_allocated; bool broadcast_channel_allocated;
u32 broadcast_channel; u32 broadcast_channel;
u32 topology_map[(CSR_TOPOLOGY_MAP_END - CSR_TOPOLOGY_MAP) / 4]; u32 topology_map[(CSR_TOPOLOGY_MAP_END - CSR_TOPOLOGY_MAP) / 4];
/* firewire-net driver data */
void *netdev;
struct list_head peer_list;
}; };
static inline struct fw_card *fw_card_get(struct fw_card *card) static inline struct fw_card *fw_card_get(struct fw_card *card)
......
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