Skip to content

Commit abff716

Browse files
Arvid Brodindavem330
authored andcommitted
net/hsr: Move to per-hsr device prune timer.
Signed-off-by: Arvid Brodin <arvid.brodin@alten.se> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 81ba6af commit abff716

File tree

5 files changed

+15
-27
lines changed

5 files changed

+15
-27
lines changed

net/hsr/hsr_device.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,8 @@ static void hsr_dev_destroy(struct net_device *hsr_dev)
429429

430430
hsr = netdev_priv(hsr_dev);
431431

432-
del_timer(&hsr->announce_timer);
432+
del_timer_sync(&hsr->prune_timer);
433+
del_timer_sync(&hsr->announce_timer);
433434
unregister_hsr_master(hsr); /* calls list_del_rcu on hsr */
434435
restore_slaves(hsr_dev);
435436
call_rcu(&hsr->rcu_head, reclaim_hsr_dev); /* reclaim hsr */
@@ -523,6 +524,10 @@ int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
523524
hsr->announce_timer.function = hsr_announce;
524525
hsr->announce_timer.data = (unsigned long) hsr;
525526

527+
init_timer(&hsr->prune_timer);
528+
hsr->prune_timer.function = hsr_prune_nodes;
529+
hsr->prune_timer.data = (unsigned long) hsr;
530+
526531
ether_addr_copy(hsr->sup_multicast_addr, def_multicast_addr);
527532
hsr->sup_multicast_addr[ETH_ALEN - 1] = multicast_spec;
528533

@@ -596,6 +601,9 @@ int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
596601
if (res)
597602
goto fail;
598603

604+
hsr->prune_timer.expires = jiffies + msecs_to_jiffies(PRUNE_PERIOD);
605+
add_timer(&hsr->prune_timer);
606+
599607
register_hsr_master(hsr);
600608

601609
return 0;

net/hsr/hsr_framereg.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,12 +366,15 @@ static bool is_late(struct hsr_node *node, enum hsr_dev_idx dev_idx)
366366
/* Remove stale sequence_nr records. Called by timer every
367367
* HSR_LIFE_CHECK_INTERVAL (two seconds or so).
368368
*/
369-
void hsr_prune_nodes(struct hsr_priv *hsr)
369+
void hsr_prune_nodes(unsigned long data)
370370
{
371+
struct hsr_priv *hsr;
371372
struct hsr_node *node;
372373
unsigned long timestamp;
373374
unsigned long time_a, time_b;
374375

376+
hsr = (struct hsr_priv *) data;
377+
375378
rcu_read_lock();
376379
list_for_each_entry_rcu(node, &hsr->node_db, mac_list) {
377380
/* Shorthand */

net/hsr/hsr_framereg.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ void hsr_register_frame_in(struct hsr_node *node, enum hsr_dev_idx dev_idx);
3232
int hsr_register_frame_out(struct hsr_node *node, enum hsr_dev_idx dev_idx,
3333
struct sk_buff *skb);
3434

35-
void hsr_prune_nodes(struct hsr_priv *hsr);
35+
void hsr_prune_nodes(unsigned long data);
3636

3737
int hsr_create_self_node(struct list_head *self_node_db,
3838
unsigned char addr_a[ETH_ALEN],

net/hsr/hsr_main.c

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -175,22 +175,6 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
175175
}
176176

177177

178-
static struct timer_list prune_timer;
179-
180-
static void prune_nodes_all(unsigned long data)
181-
{
182-
struct hsr_priv *hsr;
183-
184-
rcu_read_lock();
185-
list_for_each_entry_rcu(hsr, &hsr_list, hsr_list)
186-
hsr_prune_nodes(hsr);
187-
rcu_read_unlock();
188-
189-
prune_timer.expires = jiffies + msecs_to_jiffies(PRUNE_PERIOD);
190-
add_timer(&prune_timer);
191-
}
192-
193-
194178
static struct notifier_block hsr_nb = {
195179
.notifier_call = hsr_netdev_notify, /* Slave event notifications */
196180
};
@@ -202,14 +186,7 @@ static int __init hsr_init(void)
202186

203187
BUILD_BUG_ON(sizeof(struct hsr_tag) != HSR_HLEN);
204188

205-
init_timer(&prune_timer);
206-
prune_timer.function = prune_nodes_all;
207-
prune_timer.data = 0;
208-
prune_timer.expires = jiffies + msecs_to_jiffies(PRUNE_PERIOD);
209-
add_timer(&prune_timer);
210-
211189
register_netdevice_notifier(&hsr_nb);
212-
213190
res = hsr_netlink_init();
214191

215192
return res;
@@ -218,7 +195,6 @@ static int __init hsr_init(void)
218195
static void __exit hsr_exit(void)
219196
{
220197
unregister_netdevice_notifier(&hsr_nb);
221-
del_timer_sync(&prune_timer);
222198
hsr_netlink_exit();
223199
}
224200

net/hsr/hsr_main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ struct hsr_priv {
153153
struct list_head node_db; /* Other HSR nodes */
154154
struct list_head self_node_db; /* MACs of slaves */
155155
struct timer_list announce_timer; /* Supervision frame dispatch */
156+
struct timer_list prune_timer;
156157
int announce_count;
157158
u16 sequence_nr;
158159
spinlock_t seqnr_lock; /* locking for sequence_nr */

0 commit comments

Comments
 (0)