igb: Add message when malformed packets detected by hw
This patch adds a check and prints the error cause register value when the hardware detects a malformed packet. This is a very unlikely scenario but has been seen occasionally, so printing the message to assist the user. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
caafb95d69
commit
1516f0a649
@ -355,6 +355,7 @@
|
||||
#define E1000_UTA 0x0A000 /* Unicast Table Array - RW */
|
||||
#define E1000_IOVTCL 0x05BBC /* IOV Control Register */
|
||||
#define E1000_TXSWC 0x05ACC /* Tx Switch Control */
|
||||
#define E1000_LVMMC 0x03548 /* Last VM Misbehavior cause */
|
||||
/* These act per VF so an array friendly macro is used */
|
||||
#define E1000_P2VMAILBOX(_n) (0x00C00 + (4 * (_n)))
|
||||
#define E1000_VMBMEM(_n) (0x00800 + (64 * (_n)))
|
||||
|
@ -4166,6 +4166,26 @@ static bool igb_thermal_sensor_event(struct e1000_hw *hw, u32 event)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* igb_check_lvmmc - check for malformed packets received
|
||||
* and indicated in LVMMC register
|
||||
* @adapter: pointer to adapter
|
||||
**/
|
||||
static void igb_check_lvmmc(struct igb_adapter *adapter)
|
||||
{
|
||||
struct e1000_hw *hw = &adapter->hw;
|
||||
u32 lvmmc;
|
||||
|
||||
lvmmc = rd32(E1000_LVMMC);
|
||||
if (lvmmc) {
|
||||
if (unlikely(net_ratelimit())) {
|
||||
netdev_warn(adapter->netdev,
|
||||
"malformed Tx packet detected and dropped, LVMMC:0x%08x\n",
|
||||
lvmmc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* igb_watchdog - Timer Call-back
|
||||
* @data: pointer to adapter cast into an unsigned long
|
||||
@ -4361,6 +4381,11 @@ static void igb_watchdog_task(struct work_struct *work)
|
||||
igb_spoof_check(adapter);
|
||||
igb_ptp_rx_hang(adapter);
|
||||
|
||||
/* Check LVMMC register on i350/i354 only */
|
||||
if ((adapter->hw.mac.type == e1000_i350) ||
|
||||
(adapter->hw.mac.type == e1000_i354))
|
||||
igb_check_lvmmc(adapter);
|
||||
|
||||
/* Reset the timer */
|
||||
if (!test_bit(__IGB_DOWN, &adapter->state)) {
|
||||
if (adapter->flags & IGB_FLAG_NEED_LINK_UPDATE)
|
||||
|
Loading…
Reference in New Issue
Block a user