Skip to content

Commit 18632a3

Browse files
committed
optimize port state refresh logic
Signed-off-by: Dante Su <[email protected]>
1 parent 081d491 commit 18632a3

File tree

1 file changed

+17
-35
lines changed

1 file changed

+17
-35
lines changed

orchagent/portsorch.cpp

+17-35
Original file line numberDiff line numberDiff line change
@@ -6005,36 +6005,17 @@ void PortsOrch::updatePortOperStatus(Port &port, sai_port_oper_status_t status)
60056005
if (port.m_type == Port::PHY)
60066006
{
60076007
updateDbPortOperStatus(port, status);
6008-
if (port.m_admin_state_up && port.m_autoneg > 0)
6008+
6009+
/* Refresh the port states and reschedule the poller tasks */
6010+
if (port.m_autoneg > 0)
60096011
{
6010-
if (status == SAI_PORT_OPER_STATUS_UP)
6011-
{
6012-
/* Refresh AN port states */
6013-
refreshPortStateAutoNeg(port);
6014-
/* Stop port state polling for AN */
6015-
updatePortStatePoll(port, PORT_STATE_POLL_AN, false);
6016-
}
6017-
else
6018-
{
6019-
/* Restart autoneg state polling upon link down event */
6020-
m_portStateTable.hdel(port.m_alias, "rmt_adv_speeds");
6021-
updatePortStatePoll(port, PORT_STATE_POLL_AN, true);
6022-
}
6012+
refreshPortStateAutoNeg(port);
6013+
updatePortStatePoll(port, PORT_STATE_POLL_AN, !(status == SAI_PORT_OPER_STATUS_UP));
60236014
}
6024-
if (port.m_admin_state_up && port.m_link_training > 0)
6015+
if (port.m_link_training > 0)
60256016
{
6026-
/* Refresh LT port states for both link up and down */
60276017
refreshPortStateLinkTraining(port);
6028-
if (status == SAI_PORT_OPER_STATUS_UP)
6029-
{
6030-
/* Stop port state polling for LT */
6031-
updatePortStatePoll(port, PORT_STATE_POLL_LT, false);
6032-
}
6033-
else
6034-
{
6035-
/* Restart port state polling upon link down event */
6036-
updatePortStatePoll(port, PORT_STATE_POLL_LT, true);
6037-
}
6018+
updatePortStatePoll(port, PORT_STATE_POLL_LT, !(status == SAI_PORT_OPER_STATUS_UP));
60386019
}
60396020
}
60406021
port.m_oper_status = status;
@@ -7231,17 +7212,18 @@ void PortsOrch::refreshPortStateAutoNeg(const Port &port)
72317212
return;
72327213
}
72337214

7234-
string adv_speeds;
7215+
string adv_speeds = "N/A";
72357216

7236-
if (getPortAdvSpeeds(port, true, adv_speeds))
7237-
{
7238-
m_portStateTable.hset(port.m_alias, "rmt_adv_speeds", adv_speeds);
7239-
}
7240-
else
7217+
if (port.m_admin_state_up)
72417218
{
7242-
m_portStateTable.hset(port.m_alias, "rmt_adv_speeds", "N/A");
7243-
updatePortStatePoll(port, PORT_STATE_POLL_AN, false);
7219+
if (!getPortAdvSpeeds(port, true, adv_speeds))
7220+
{
7221+
adv_speeds = "N/A";
7222+
updatePortStatePoll(port, PORT_STATE_POLL_AN, false);
7223+
}
72447224
}
7225+
7226+
m_portStateTable.hset(port.m_alias, "rmt_adv_speeds", adv_speeds);
72457227
}
72467228

72477229
/* Refresh the per-port Link-Training operational states */
@@ -7256,7 +7238,7 @@ void PortsOrch::refreshPortStateLinkTraining(const Port &port)
72567238

72577239
string status = "off";
72587240

7259-
if ((port.m_link_training > 0) && (port.m_cap_lt > 0))
7241+
if (port.m_admin_state_up && port.m_link_training > 0 && port.m_cap_lt > 0)
72607242
{
72617243
sai_port_link_training_rx_status_t rx_status;
72627244
sai_port_link_training_failure_status_t failure;

0 commit comments

Comments
 (0)