From: Alexander Duyck <alexander.h.duyck@intel.com>
To: bhelgaas@google.com, yinghai@kernel.org
Cc: guz.fnst@cn.fujitsu.com, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH] pci: Avoid reentrant calls to work_on_cpu
Date: Tue, 14 May 2013 15:26:53 -0700 [thread overview]
Message-ID: <20130514221748.6180.30597.stgit@ahduyck-cp1.jf.intel.com> (raw)
This change is meant to fix a deadlock seen when pci_enable_sriov was
called from within a driver's probe routine. The issue was that
work_on_cpu calls flush_work which attempts to flush a work queue for a
cpu that we are currently working in. In order to avoid the reentrant
path we just skip the call to work_on_cpu in the case that the device
node matches our current node.
Reported-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
---
This patch is meant to address the issue pointed out in an earlier patch
sent by Yinghai Lu titled:
[PATCH 6/7] PCI: Make sure VF's driver get attached after PF's
drivers/pci/pci-driver.c | 14 +++++++++-----
1 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c
index 79277fb..caeb1c0 100644
--- a/drivers/pci/pci-driver.c
+++ b/drivers/pci/pci-driver.c
@@ -277,12 +277,16 @@ static int pci_call_probe(struct pci_driver *drv, struct pci_dev *dev,
int error, node;
struct drv_dev_and_id ddi = { drv, dev, id };
- /* Execute driver initialization on node where the device's
- bus is attached to. This way the driver likely allocates
- its local memory on the right node without any need to
- change it. */
+ /*
+ * Execute driver initialization on the node where the device's
+ * bus is attached. This way the driver likely allocates
+ * its local memory on the right node without any need to
+ * change it. If the node is the current node just call
+ * local_pci_probe and avoid the possibility of reentrant
+ * calls to work_on_cpu.
+ */
node = dev_to_node(&dev->dev);
- if (node >= 0) {
+ if ((node >= 0) && (node != numa_node_id())) {
int cpu;
get_online_cpus();
next reply other threads:[~2013-05-14 22:29 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-14 22:26 Alexander Duyck [this message]
2013-05-15 0:32 ` Or Gerlitz
2013-05-15 1:58 ` Alexander Duyck
2013-05-15 2:50 ` Yinghai Lu
2013-06-12 17:58 ` Alexander Duyck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130514221748.6180.30597.stgit@ahduyck-cp1.jf.intel.com \
--to=alexander.h.duyck@intel.com \
--cc=bhelgaas@google.com \
--cc=guz.fnst@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®