mirror of https://gitee.com/openkylin/linux.git
IB/hfi1: Fix integrity errors counter value calculation
PMA should not sum TX and RX replay counts when reporting local link integrity errors. Fixed by removing C_DC_TX_REPLAY counter from calculation of the link integrity errors counter value. Reviewed-by: Ira Weiny <ira.weiny@intel.com> Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Jakub Pawlak <jakub.pawlak@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
parent
2821c509fc
commit
3210314ad3
|
@ -2418,14 +2418,9 @@ static int pma_get_opa_portstatus(struct opa_pma_mad *pmp,
|
|||
rsp->port_rcv_remote_physical_errors =
|
||||
cpu_to_be64(read_dev_cntr(dd, C_DC_RMT_PHY_ERR,
|
||||
CNTR_INVALID_VL));
|
||||
tmp = read_dev_cntr(dd, C_DC_RX_REPLAY, CNTR_INVALID_VL);
|
||||
tmp2 = tmp + read_dev_cntr(dd, C_DC_TX_REPLAY, CNTR_INVALID_VL);
|
||||
if (tmp2 < tmp) {
|
||||
/* overflow/wrapped */
|
||||
rsp->local_link_integrity_errors = cpu_to_be64(~0);
|
||||
} else {
|
||||
rsp->local_link_integrity_errors = cpu_to_be64(tmp2);
|
||||
}
|
||||
rsp->local_link_integrity_errors =
|
||||
cpu_to_be64(read_dev_cntr(dd, C_DC_RX_REPLAY,
|
||||
CNTR_INVALID_VL));
|
||||
tmp = read_dev_cntr(dd, C_DC_SEQ_CRC_CNT, CNTR_INVALID_VL);
|
||||
tmp2 = tmp + read_dev_cntr(dd, C_DC_REINIT_FROM_PEER_CNT,
|
||||
CNTR_INVALID_VL);
|
||||
|
@ -2520,9 +2515,8 @@ static u64 get_error_counter_summary(struct ib_device *ibdev, u8 port,
|
|||
error_counter_summary += read_dev_cntr(dd, C_DC_RMT_PHY_ERR,
|
||||
CNTR_INVALID_VL);
|
||||
/* local link integrity must be right-shifted by the lli resolution */
|
||||
tmp = read_dev_cntr(dd, C_DC_RX_REPLAY, CNTR_INVALID_VL);
|
||||
tmp += read_dev_cntr(dd, C_DC_TX_REPLAY, CNTR_INVALID_VL);
|
||||
error_counter_summary += (tmp >> res_lli);
|
||||
error_counter_summary += (read_dev_cntr(dd, C_DC_RX_REPLAY,
|
||||
CNTR_INVALID_VL) >> res_lli);
|
||||
/* link error recovery must b right-shifted by the ler resolution */
|
||||
tmp = read_dev_cntr(dd, C_DC_SEQ_CRC_CNT, CNTR_INVALID_VL);
|
||||
tmp += read_dev_cntr(dd, C_DC_REINIT_FROM_PEER_CNT, CNTR_INVALID_VL);
|
||||
|
@ -2791,14 +2785,9 @@ static void pma_get_opa_port_ectrs(struct ib_device *ibdev,
|
|||
rsp->port_rcv_constraint_errors =
|
||||
cpu_to_be64(read_port_cntr(ppd, C_SW_RCV_CSTR_ERR,
|
||||
CNTR_INVALID_VL));
|
||||
tmp = read_dev_cntr(dd, C_DC_RX_REPLAY, CNTR_INVALID_VL);
|
||||
tmp2 = tmp + read_dev_cntr(dd, C_DC_TX_REPLAY, CNTR_INVALID_VL);
|
||||
if (tmp2 < tmp) {
|
||||
/* overflow/wrapped */
|
||||
rsp->local_link_integrity_errors = cpu_to_be64(~0);
|
||||
} else {
|
||||
rsp->local_link_integrity_errors = cpu_to_be64(tmp2);
|
||||
}
|
||||
rsp->local_link_integrity_errors =
|
||||
cpu_to_be64(read_dev_cntr(dd, C_DC_RX_REPLAY,
|
||||
CNTR_INVALID_VL));
|
||||
rsp->excessive_buffer_overruns =
|
||||
cpu_to_be64(read_dev_cntr(dd, C_RCV_OVF, CNTR_INVALID_VL));
|
||||
}
|
||||
|
@ -3156,10 +3145,8 @@ static int pma_set_opa_portstatus(struct opa_pma_mad *pmp,
|
|||
if (counter_select & CS_PORT_RCV_REMOTE_PHYSICAL_ERRORS)
|
||||
write_dev_cntr(dd, C_DC_RMT_PHY_ERR, CNTR_INVALID_VL, 0);
|
||||
|
||||
if (counter_select & CS_LOCAL_LINK_INTEGRITY_ERRORS) {
|
||||
write_dev_cntr(dd, C_DC_TX_REPLAY, CNTR_INVALID_VL, 0);
|
||||
if (counter_select & CS_LOCAL_LINK_INTEGRITY_ERRORS)
|
||||
write_dev_cntr(dd, C_DC_RX_REPLAY, CNTR_INVALID_VL, 0);
|
||||
}
|
||||
|
||||
if (counter_select & CS_LINK_ERROR_RECOVERY) {
|
||||
write_dev_cntr(dd, C_DC_SEQ_CRC_CNT, CNTR_INVALID_VL, 0);
|
||||
|
@ -3956,7 +3943,6 @@ void clear_linkup_counters(struct hfi1_devdata *dd)
|
|||
write_dev_cntr(dd, C_DC_SEQ_CRC_CNT, CNTR_INVALID_VL, 0);
|
||||
write_dev_cntr(dd, C_DC_REINIT_FROM_PEER_CNT, CNTR_INVALID_VL, 0);
|
||||
/* LocalLinkIntegrityErrors */
|
||||
write_dev_cntr(dd, C_DC_TX_REPLAY, CNTR_INVALID_VL, 0);
|
||||
write_dev_cntr(dd, C_DC_RX_REPLAY, CNTR_INVALID_VL, 0);
|
||||
/* ExcessiveBufferOverruns */
|
||||
write_dev_cntr(dd, C_RCV_OVF, CNTR_INVALID_VL, 0);
|
||||
|
|
Loading…
Reference in New Issue