diff options
author | Sebastian Andrzej Siewior <bigeasy@linutronix.de> | 2022-11-29 19:48:14 +0300 |
---|---|---|
committer | Jakub Kicinski <kuba@kernel.org> | 2022-12-02 07:26:22 +0300 |
commit | 20d3c1e9b861b85e1a774e1876d6adeeb0251fc3 (patch) | |
tree | 9ca4270648ab96dbeae707218f0b0694d7c472c6 /net/hsr/hsr_main.h | |
parent | 5c7aa13210c3abdd34fd421f62347665ec6eb551 (diff) | |
download | linux-20d3c1e9b861b85e1a774e1876d6adeeb0251fc3.tar.xz |
hsr: Use a single struct for self_node.
self_node_db is a list_head with one entry of struct hsr_node. The
purpose is to hold the two MAC addresses of the node itself.
It is convenient to recycle the structure. However having a list_head
and fetching always the first entry is not really optimal.
Created a new data strucure contaning the two MAC addresses named
hsr_self_node. Access that structure like an RCU protected pointer so
it can be replaced on the fly without blocking the reader.
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Kurt Kanzenbach <kurt@linutronix.de>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/hsr/hsr_main.h')
-rw-r--r-- | net/hsr/hsr_main.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/hsr/hsr_main.h b/net/hsr/hsr_main.h index 16ae9fb09ccd..5584c80a5c79 100644 --- a/net/hsr/hsr_main.h +++ b/net/hsr/hsr_main.h @@ -182,11 +182,17 @@ struct hsr_proto_ops { void (*update_san_info)(struct hsr_node *node, bool is_sup); }; +struct hsr_self_node { + unsigned char macaddress_A[ETH_ALEN]; + unsigned char macaddress_B[ETH_ALEN]; + struct rcu_head rcu_head; +}; + struct hsr_priv { struct rcu_head rcu_head; struct list_head ports; struct list_head node_db; /* Known HSR nodes */ - struct list_head self_node_db; /* MACs of slaves */ + struct hsr_self_node __rcu *self_node; /* MACs of slaves */ struct timer_list announce_timer; /* Supervision frame dispatch */ struct timer_list prune_timer; int announce_count; |