| From 6704a3abf4cf4181a1ee64f5db4969347b88ca1d Mon Sep 17 00:00:00 2001 |
| From: Jacob Keller <jacob.e.keller@intel.com> |
| Date: Mon, 29 Jan 2018 15:57:48 -0800 |
| Subject: ixgbe: prevent ptp_rx_hang from running when in FILTER_ALL mode |
| |
| From: Jacob Keller <jacob.e.keller@intel.com> |
| |
| commit 6704a3abf4cf4181a1ee64f5db4969347b88ca1d upstream. |
| |
| On hardware which supports timestamping all packets, the timestamps are |
| recorded in the packet buffer, and the driver no longer uses or reads |
| the registers. This makes the logic for checking and clearing Rx |
| timestamp hangs meaningless. |
| |
| If we run the ixgbe_ptp_rx_hang() function in this case, then the driver |
| will continuously spam the log output with "Clearing Rx timestamp hang". |
| These messages are spurious, and confusing to end users. |
| |
| The original code in commit a9763f3cb54c ("ixgbe: Update PTP to support |
| X550EM_x devices", 2015-12-03) did have a flag PTP_RX_TIMESTAMP_IN_REGISTER |
| which was intended to be used to avoid the Rx timestamp hang check, |
| however it did not actually check the flag before calling the function. |
| |
| Do so now in order to stop the checks and prevent the spurious log |
| messages. |
| |
| Fixes: a9763f3cb54c ("ixgbe: Update PTP to support X550EM_x devices", 2015-12-03) |
| Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> |
| Tested-by: Andrew Bowers <andrewx.bowers@intel.com> |
| Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Wen Yang <wenyang@linux.alibaba.com> |
| --- |
| drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
| +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c |
| @@ -7257,7 +7257,8 @@ static void ixgbe_service_task(struct wo |
| |
| if (test_bit(__IXGBE_PTP_RUNNING, &adapter->state)) { |
| ixgbe_ptp_overflow_check(adapter); |
| - ixgbe_ptp_rx_hang(adapter); |
| + if (adapter->flags & IXGBE_FLAG_RX_HWTSTAMP_IN_REGISTER) |
| + ixgbe_ptp_rx_hang(adapter); |
| ixgbe_ptp_tx_hang(adapter); |
| } |
| |