net: sfp: report error on failure to read sfp soft status
Report a rate-limited error if we fail to read the SFP soft status, and preserve the current status in that case. This avoids I2C bus errors from triggering a link flap. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d8e419da04
commit
0dea4d039a
@ -442,13 +442,20 @@ static unsigned int sfp_soft_get_state(struct sfp *sfp)
|
|||||||
{
|
{
|
||||||
unsigned int state = 0;
|
unsigned int state = 0;
|
||||||
u8 status;
|
u8 status;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status)) ==
|
ret = sfp_read(sfp, true, SFP_STATUS, &status, sizeof(status));
|
||||||
sizeof(status)) {
|
if (ret == sizeof(status)) {
|
||||||
if (status & SFP_STATUS_RX_LOS)
|
if (status & SFP_STATUS_RX_LOS)
|
||||||
state |= SFP_F_LOS;
|
state |= SFP_F_LOS;
|
||||||
if (status & SFP_STATUS_TX_FAULT)
|
if (status & SFP_STATUS_TX_FAULT)
|
||||||
state |= SFP_F_TX_FAULT;
|
state |= SFP_F_TX_FAULT;
|
||||||
|
} else {
|
||||||
|
dev_err_ratelimited(sfp->dev,
|
||||||
|
"failed to read SFP soft status: %d\n",
|
||||||
|
ret);
|
||||||
|
/* Preserve the current state */
|
||||||
|
state = sfp->state;
|
||||||
}
|
}
|
||||||
|
|
||||||
return state & sfp->state_soft_mask;
|
return state & sfp->state_soft_mask;
|
||||||
|
Loading…
Reference in New Issue
Block a user