SHA256
1
0
forked from pool/dpdk
dpdk/0020-i40e-base-fix-missing-check-for-stopped-admin-queue.patch
Nirmoy Das d761fec5f6 Accepting request 399089 from home:ndas:branches:network
- Applied all the fixes recommended by upstream for 
  v2.2 stable release(bsc#981996).
	[+0008-app-testpmd-handle-SIGINT-and-SIGTERM.patch,
	+0009-bonding-copy-entire-config-structure-in-mode-4.patch,
	+0010-bonding-fix-active-slaves-with-no-primary.patch,
	+0011-bonding-do-not-ignore-multicast-in-mode-4.patch,
	+0012-bonding-do-not-activate-slave-twice.patch,
	+0013-bonding-fix-crash-when-no-slave-device.patch,
	+0014-bonding-fix-detach-of-bonded-device.patch,
	+0015-bonding-fix-detach-of-slave-devices.patch,
	+0016-eal-linux-support-built-in-kernel-modules.patch,
	+0017-examples-l3fwd-handle-SIGINT-and-SIGTERM.patch,
	+0018-fm10k-fix-VLAN-flag-in-scattered-Rx.patch,
	+0019-i40e-base-fix-driver-load-failure.patch,
	+0020-i40e-base-fix-missing-check-for-stopped-admin-queue.patch,
	+0021-i40e-fix-inverted-check-for-no-refcount.patch,
	+0022-i40e-fix-overflow.patch,
	+0023-i40e-fix-VLAN-filtering.patch,
	+0024-mempool-fix-leak-when-creation-fails.patch,
	+0025-pcap-fix-captured-frame-length.patch,
	+0026-port-fix-crash-for-ethdev-writer-nodrop.patch,
	+0027-port-fix-crash-for-ring-writer-nodrop.patch,
	+0028-tools-fix-unbinding-failure-handling.patch,
	+0029-tools-support-Python-3-in-bind-script.patch,
	+0030-tools-support-binding-to-built-in-kernel-modules.patch,
	+0031-vhost-fix-leak-of-fds-and-mmaps.patch,
	+0032-virtio-fix-crash-in-statistics-functions.patch,
	+0033-virtio-fix-descriptors-pointing-to-the-same-buffer.patch,
	+0034-virtio-fix-restart.patch]

OBS-URL: https://build.opensuse.org/request/show/399089
OBS-URL: https://build.opensuse.org/package/show/network/dpdk?expand=0&rev=3
2016-05-31 11:30:42 +00:00

50 lines
1.7 KiB
Diff

From 9f44dd3d8ad447c7f797a9564d30a15e5ab7f72b Mon Sep 17 00:00:00 2001
From: Helin Zhang <helin.zhang@intel.com>
Date: Tue, 8 Mar 2016 16:14:14 +0800
Subject: [PATCH] i40e/base: fix missing check for stopped admin queue
It's possible that while waiting for the spinlock, another
entity (that owns the spinlock) has shut down the admin queue.
If it then attempts to use the queue, it will panic.
It adds a check for this condition on the receive side. This
matches an existing check on the send queue side.
Fixes: 8db9e2a1b232 ("i40e: base driver")
Signed-off-by: Helin Zhang <helin.zhang@intel.com>
Acked-by: Jingjing Wu <jingjing.wu@intel.com>
Acked-by: Remy Horton <remy.horton@intel.com>
---
drivers/net/i40e/base/i40e_adminq.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/net/i40e/base/i40e_adminq.c b/drivers/net/i40e/base/i40e_adminq.c
index 998582c..e1a162e 100644
--- a/drivers/net/i40e/base/i40e_adminq.c
+++ b/drivers/net/i40e/base/i40e_adminq.c
@@ -1035,6 +1035,13 @@ enum i40e_status_code i40e_clean_arq_element(struct i40e_hw *hw,
/* take the lock before we start messing with the ring */
i40e_acquire_spinlock(&hw->aq.arq_spinlock);
+ if (hw->aq.arq.count == 0) {
+ i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE,
+ "AQRX: Admin queue not initialized.\n");
+ ret_code = I40E_ERR_QUEUE_EMPTY;
+ goto clean_arq_element_err;
+ }
+
/* set next_to_use to head */
#ifdef PF_DRIVER
#ifdef INTEGRATED_VF
@@ -1113,6 +1120,7 @@ clean_arq_element_out:
/* Set pending if needed, unlock and return */
if (pending != NULL)
*pending = (ntc > ntu ? hw->aq.arq.count : 0) + (ntu - ntc);
+clean_arq_element_err:
i40e_release_spinlock(&hw->aq.arq_spinlock);
#ifdef PF_DRIVER
--
2.6.2