Skip to content

Commit e9aae56

Browse files
Arvid Brodindavem330
authored andcommitted
net/hsr: Operstate handling cleanup.
Signed-off-by: Arvid Brodin <arvid.brodin@alten.se> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent abff716 commit e9aae56

File tree

3 files changed

+30
-22
lines changed

3 files changed

+30
-22
lines changed

net/hsr/hsr_device.c

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,31 +46,36 @@ static void __hsr_set_operstate(struct net_device *dev, int transition)
4646
}
4747
}
4848

49-
void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1,
50-
struct net_device *slave2)
49+
static void hsr_set_operstate(struct net_device *hsr_dev, bool has_carrier)
5150
{
5251
if (!is_admin_up(hsr_dev)) {
5352
__hsr_set_operstate(hsr_dev, IF_OPER_DOWN);
5453
return;
5554
}
5655

57-
if (is_slave_up(slave1) || is_slave_up(slave2))
56+
if (has_carrier)
5857
__hsr_set_operstate(hsr_dev, IF_OPER_UP);
5958
else
6059
__hsr_set_operstate(hsr_dev, IF_OPER_LOWERLAYERDOWN);
6160
}
6261

63-
void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1,
64-
struct net_device *slave2)
62+
static bool hsr_check_carrier(struct hsr_priv *hsr)
6563
{
66-
if (is_slave_up(slave1) || is_slave_up(slave2))
67-
netif_carrier_on(hsr_dev);
64+
bool has_carrier;
65+
66+
has_carrier = (is_slave_up(hsr->slave[0]) || is_slave_up(hsr->slave[1]));
67+
68+
if (has_carrier)
69+
netif_carrier_on(hsr->dev);
6870
else
69-
netif_carrier_off(hsr_dev);
71+
netif_carrier_off(hsr->dev);
72+
73+
return has_carrier;
7074
}
7175

7276

73-
void hsr_check_announce(struct net_device *hsr_dev, int old_operstate)
77+
static void hsr_check_announce(struct net_device *hsr_dev,
78+
unsigned char old_operstate)
7479
{
7580
struct hsr_priv *hsr;
7681

@@ -89,6 +94,20 @@ void hsr_check_announce(struct net_device *hsr_dev, int old_operstate)
8994
del_timer(&hsr->announce_timer);
9095
}
9196

97+
void hsr_check_carrier_and_operstate(struct hsr_priv *hsr)
98+
{
99+
unsigned char old_operstate;
100+
bool has_carrier;
101+
102+
/* netif_stacked_transfer_operstate() cannot be used here since
103+
* it doesn't set IF_OPER_LOWERLAYERDOWN (?)
104+
*/
105+
old_operstate = hsr->dev->operstate;
106+
has_carrier = hsr_check_carrier(hsr);
107+
hsr_set_operstate(hsr->dev, has_carrier);
108+
hsr_check_announce(hsr->dev, old_operstate);
109+
}
110+
92111

93112
int hsr_get_max_mtu(struct hsr_priv *hsr)
94113
{

net/hsr/hsr_device.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,7 @@
1818
void hsr_dev_setup(struct net_device *dev);
1919
int hsr_dev_finalize(struct net_device *hsr_dev, struct net_device *slave[2],
2020
unsigned char multicast_spec);
21-
void hsr_set_operstate(struct net_device *hsr_dev, struct net_device *slave1,
22-
struct net_device *slave2);
23-
void hsr_set_carrier(struct net_device *hsr_dev, struct net_device *slave1,
24-
struct net_device *slave2);
25-
void hsr_check_announce(struct net_device *hsr_dev, int old_operstate);
21+
void hsr_check_carrier_and_operstate(struct hsr_priv *hsr);
2622
bool is_hsr_master(struct net_device *dev);
2723
int hsr_get_max_mtu(struct hsr_priv *hsr);
2824

net/hsr/hsr_main.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
9191
{
9292
struct net_device *slave, *other_slave;
9393
struct hsr_priv *hsr;
94-
int old_operstate;
9594
int mtu_max;
9695
int res;
9796
struct net_device *dev;
@@ -115,13 +114,7 @@ static int hsr_netdev_notify(struct notifier_block *nb, unsigned long event,
115114
case NETDEV_UP: /* Administrative state DOWN */
116115
case NETDEV_DOWN: /* Administrative state UP */
117116
case NETDEV_CHANGE: /* Link (carrier) state changes */
118-
old_operstate = hsr->dev->operstate;
119-
hsr_set_carrier(hsr->dev, slave, other_slave);
120-
/* netif_stacked_transfer_operstate() cannot be used here since
121-
* it doesn't set IF_OPER_LOWERLAYERDOWN (?)
122-
*/
123-
hsr_set_operstate(hsr->dev, slave, other_slave);
124-
hsr_check_announce(hsr->dev, old_operstate);
117+
hsr_check_carrier_and_operstate(hsr);
125118
break;
126119
case NETDEV_CHANGEADDR:
127120

0 commit comments

Comments
 (0)