sfc: Implement message level control
Replace EFX_ERR() with netif_err(), EFX_INFO() with netif_info(), EFX_LOG() with netif_dbg() and EFX_TRACE() and EFX_REGDUMP() with netif_vdbg(). Replace EFX_ERR_RL(), EFX_INFO_RL() and EFX_LOG_RL() using explicit calls to net_ratelimit(). Implement the ethtool operations to get and set message level flags, and add a 'debug' module parameter for the initial value. Signed-off-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
0c605a2061
commit
62776d034c
@@ -168,11 +168,12 @@ static int efx_mcdi_poll(struct efx_nic *efx)
|
||||
error = EFX_DWORD_FIELD(reg, MCDI_HEADER_ERROR);
|
||||
|
||||
if (error && mcdi->resplen == 0) {
|
||||
EFX_ERR(efx, "MC rebooted\n");
|
||||
netif_err(efx, hw, efx->net_dev, "MC rebooted\n");
|
||||
rc = EIO;
|
||||
} else if ((respseq ^ mcdi->seqno) & SEQ_MASK) {
|
||||
EFX_ERR(efx, "MC response mismatch tx seq 0x%x rx seq 0x%x\n",
|
||||
respseq, mcdi->seqno);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MC response mismatch tx seq 0x%x rx seq 0x%x\n",
|
||||
respseq, mcdi->seqno);
|
||||
rc = EIO;
|
||||
} else if (error) {
|
||||
efx_readd(efx, ®, pdu + 4);
|
||||
@@ -303,8 +304,9 @@ static void efx_mcdi_ev_cpl(struct efx_nic *efx, unsigned int seqno,
|
||||
/* The request has been cancelled */
|
||||
--mcdi->credits;
|
||||
else
|
||||
EFX_ERR(efx, "MC response mismatch tx seq 0x%x rx "
|
||||
"seq 0x%x\n", seqno, mcdi->seqno);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MC response mismatch tx seq 0x%x rx "
|
||||
"seq 0x%x\n", seqno, mcdi->seqno);
|
||||
} else {
|
||||
mcdi->resprc = errno;
|
||||
mcdi->resplen = datalen;
|
||||
@@ -352,8 +354,9 @@ int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd,
|
||||
++mcdi->credits;
|
||||
spin_unlock_bh(&mcdi->iface_lock);
|
||||
|
||||
EFX_ERR(efx, "MC command 0x%x inlen %d mode %d timed out\n",
|
||||
cmd, (int)inlen, mcdi->mode);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MC command 0x%x inlen %d mode %d timed out\n",
|
||||
cmd, (int)inlen, mcdi->mode);
|
||||
} else {
|
||||
size_t resplen;
|
||||
|
||||
@@ -374,11 +377,13 @@ int efx_mcdi_rpc(struct efx_nic *efx, unsigned cmd,
|
||||
} else if (cmd == MC_CMD_REBOOT && rc == -EIO)
|
||||
; /* Don't reset if MC_CMD_REBOOT returns EIO */
|
||||
else if (rc == -EIO || rc == -EINTR) {
|
||||
EFX_ERR(efx, "MC fatal error %d\n", -rc);
|
||||
netif_err(efx, hw, efx->net_dev, "MC fatal error %d\n",
|
||||
-rc);
|
||||
efx_schedule_reset(efx, RESET_TYPE_MC_FAILURE);
|
||||
} else
|
||||
EFX_ERR(efx, "MC command 0x%x inlen %d failed rc=%d\n",
|
||||
cmd, (int)inlen, -rc);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MC command 0x%x inlen %d failed rc=%d\n",
|
||||
cmd, (int)inlen, -rc);
|
||||
}
|
||||
|
||||
efx_mcdi_release(mcdi);
|
||||
@@ -534,8 +539,9 @@ static void efx_mcdi_sensor_event(struct efx_nic *efx, efx_qword_t *ev)
|
||||
EFX_BUG_ON_PARANOID(state >= ARRAY_SIZE(sensor_status_names));
|
||||
state_txt = sensor_status_names[state];
|
||||
|
||||
EFX_ERR(efx, "Sensor %d (%s) reports condition '%s' for raw value %d\n",
|
||||
monitor, name, state_txt, value);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"Sensor %d (%s) reports condition '%s' for raw value %d\n",
|
||||
monitor, name, state_txt, value);
|
||||
}
|
||||
|
||||
/* Called from falcon_process_eventq for MCDI events */
|
||||
@@ -548,12 +554,13 @@ void efx_mcdi_process_event(struct efx_channel *channel,
|
||||
|
||||
switch (code) {
|
||||
case MCDI_EVENT_CODE_BADSSERT:
|
||||
EFX_ERR(efx, "MC watchdog or assertion failure at 0x%x\n", data);
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MC watchdog or assertion failure at 0x%x\n", data);
|
||||
efx_mcdi_ev_death(efx, EINTR);
|
||||
break;
|
||||
|
||||
case MCDI_EVENT_CODE_PMNOTICE:
|
||||
EFX_INFO(efx, "MCDI PM event.\n");
|
||||
netif_info(efx, wol, efx->net_dev, "MCDI PM event.\n");
|
||||
break;
|
||||
|
||||
case MCDI_EVENT_CODE_CMDDONE:
|
||||
@@ -570,10 +577,11 @@ void efx_mcdi_process_event(struct efx_channel *channel,
|
||||
efx_mcdi_sensor_event(efx, event);
|
||||
break;
|
||||
case MCDI_EVENT_CODE_SCHEDERR:
|
||||
EFX_INFO(efx, "MC Scheduler error address=0x%x\n", data);
|
||||
netif_info(efx, hw, efx->net_dev,
|
||||
"MC Scheduler error address=0x%x\n", data);
|
||||
break;
|
||||
case MCDI_EVENT_CODE_REBOOT:
|
||||
EFX_INFO(efx, "MC Reboot\n");
|
||||
netif_info(efx, hw, efx->net_dev, "MC Reboot\n");
|
||||
efx_mcdi_ev_death(efx, EIO);
|
||||
break;
|
||||
case MCDI_EVENT_CODE_MAC_STATS_DMA:
|
||||
@@ -581,7 +589,8 @@ void efx_mcdi_process_event(struct efx_channel *channel,
|
||||
break;
|
||||
|
||||
default:
|
||||
EFX_ERR(efx, "Unknown MCDI event 0x%x\n", code);
|
||||
netif_err(efx, hw, efx->net_dev, "Unknown MCDI event 0x%x\n",
|
||||
code);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -627,7 +636,7 @@ int efx_mcdi_fwver(struct efx_nic *efx, u64 *version, u32 *build)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -657,7 +666,7 @@ int efx_mcdi_drv_attach(struct efx_nic *efx, bool driver_operating,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, probe, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -695,7 +704,8 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d len=%d\n", __func__, rc, (int)outlen);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d len=%d\n",
|
||||
__func__, rc, (int)outlen);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@@ -724,7 +734,7 @@ int efx_mcdi_log_ctrl(struct efx_nic *efx, bool evq, bool uart, u32 dest_evq)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -749,8 +759,8 @@ int efx_mcdi_nvram_types(struct efx_nic *efx, u32 *nvram_types_out)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n",
|
||||
__func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
|
||||
__func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -781,7 +791,7 @@ int efx_mcdi_nvram_info(struct efx_nic *efx, unsigned int type,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -802,7 +812,7 @@ int efx_mcdi_nvram_update_start(struct efx_nic *efx, unsigned int type)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -827,7 +837,7 @@ int efx_mcdi_nvram_read(struct efx_nic *efx, unsigned int type,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -853,7 +863,7 @@ int efx_mcdi_nvram_write(struct efx_nic *efx, unsigned int type,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -877,7 +887,7 @@ int efx_mcdi_nvram_erase(struct efx_nic *efx, unsigned int type,
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -898,7 +908,7 @@ int efx_mcdi_nvram_update_finish(struct efx_nic *efx, unsigned int type)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -948,9 +958,10 @@ int efx_mcdi_nvram_test_all(struct efx_nic *efx)
|
||||
return 0;
|
||||
|
||||
fail2:
|
||||
EFX_ERR(efx, "%s: failed type=%u\n", __func__, type);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed type=%u\n",
|
||||
__func__, type);
|
||||
fail1:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -994,14 +1005,15 @@ static int efx_mcdi_read_assertion(struct efx_nic *efx)
|
||||
: (flags == MC_CMD_GET_ASSERTS_FLAGS_WDOG_FIRED)
|
||||
? "watchdog reset"
|
||||
: "unknown assertion";
|
||||
EFX_ERR(efx, "MCPU %s at PC = 0x%.8x in thread 0x%.8x\n", reason,
|
||||
MCDI_DWORD(outbuf, GET_ASSERTS_OUT_SAVED_PC_OFFS),
|
||||
MCDI_DWORD(outbuf, GET_ASSERTS_OUT_THREAD_OFFS));
|
||||
netif_err(efx, hw, efx->net_dev,
|
||||
"MCPU %s at PC = 0x%.8x in thread 0x%.8x\n", reason,
|
||||
MCDI_DWORD(outbuf, GET_ASSERTS_OUT_SAVED_PC_OFFS),
|
||||
MCDI_DWORD(outbuf, GET_ASSERTS_OUT_THREAD_OFFS));
|
||||
|
||||
/* Print out the registers */
|
||||
ofst = MC_CMD_GET_ASSERTS_OUT_GP_REGS_OFFS_OFST;
|
||||
for (index = 1; index < 32; index++) {
|
||||
EFX_ERR(efx, "R%.2d (?): 0x%.8x\n", index,
|
||||
netif_err(efx, hw, efx->net_dev, "R%.2d (?): 0x%.8x\n", index,
|
||||
MCDI_DWORD2(outbuf, ofst));
|
||||
ofst += sizeof(efx_dword_t);
|
||||
}
|
||||
@@ -1050,14 +1062,16 @@ void efx_mcdi_set_id_led(struct efx_nic *efx, enum efx_led_mode mode)
|
||||
rc = efx_mcdi_rpc(efx, MC_CMD_SET_ID_LED, inbuf, sizeof(inbuf),
|
||||
NULL, 0, NULL);
|
||||
if (rc)
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
|
||||
__func__, rc);
|
||||
}
|
||||
|
||||
int efx_mcdi_reset_port(struct efx_nic *efx)
|
||||
{
|
||||
int rc = efx_mcdi_rpc(efx, MC_CMD_PORT_RESET, NULL, 0, NULL, 0, NULL);
|
||||
if (rc)
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n",
|
||||
__func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1075,7 +1089,7 @@ int efx_mcdi_reset_mc(struct efx_nic *efx)
|
||||
return 0;
|
||||
if (rc == 0)
|
||||
rc = -EIO;
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1108,7 +1122,7 @@ int efx_mcdi_wol_filter_set(struct efx_nic *efx, u32 type,
|
||||
|
||||
fail:
|
||||
*id_out = -1;
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
|
||||
}
|
||||
@@ -1143,7 +1157,7 @@ int efx_mcdi_wol_filter_get_magic(struct efx_nic *efx, int *id_out)
|
||||
|
||||
fail:
|
||||
*id_out = -1;
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1163,7 +1177,7 @@ int efx_mcdi_wol_filter_remove(struct efx_nic *efx, int id)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -1179,7 +1193,7 @@ int efx_mcdi_wol_filter_reset(struct efx_nic *efx)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
EFX_ERR(efx, "%s: failed rc=%d\n", __func__, rc);
|
||||
netif_err(efx, hw, efx->net_dev, "%s: failed rc=%d\n", __func__, rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user