summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
diff options
context:
space:
mode:
authorJacob Keller <jacob.e.keller@intel.com>2017-03-08 15:55:43 -0800
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2017-10-02 07:25:47 -0700
commitb52b7f7059f2df8eb3258a25bc69e12dc21ebcd7 (patch)
tree36660160891a512118a412e887b6c3d8422e2906 /drivers/net/ethernet/intel/fm10k/fm10k_iov.c
parent17a91809942ca32c70026d2d5ba3348a2c4fdf8f (diff)
downloadop-kernel-dev-b52b7f7059f2df8eb3258a25bc69e12dc21ebcd7.zip
op-kernel-dev-b52b7f7059f2df8eb3258a25bc69e12dc21ebcd7.tar.gz
fm10k: reschedule service event if we stall the PF<->SM mailbox
When we are handling PF<->VF mailbox messages, it is possible that the VF will send us so many messages that the PF<->SM FIFO will fill up. In this case, we stop the loop and wait until the service event is rescheduled. Normally this should happen due to an interrupt. But it is possible that we don't get another interrupt for a while and it isn't until the service timer actually reschedules us. Instead, simply reschedule immediately which will cause the service event to be run again as soon as we exit. This ensures that we promptly handle all of the PF<->VF messages with minimal delay, while still giving time for the SM mailbox to drain. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Krishneil Singh <krishneil.k.singh@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/fm10k/fm10k_iov.c')
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k_iov.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
index 2ec4911..d8356c4 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c
@@ -143,6 +143,10 @@ process_mbx:
if (!hw->mbx.ops.tx_ready(&hw->mbx, FM10K_VFMBX_MSG_MTU)) {
/* keep track of how many times this occurs */
interface->hw_sm_mbx_full++;
+
+ /* make sure we try again momentarily */
+ fm10k_service_event_schedule(interface);
+
break;
}
OpenPOWER on IntegriCloud