From patchwork Fri Jun 29 10:27:39 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hari Vyas X-Patchwork-Id: 936768 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="aNYuylT7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41HCXC5qD9z9s01 for ; Fri, 29 Jun 2018 20:27:55 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932468AbeF2K1y (ORCPT ); Fri, 29 Jun 2018 06:27:54 -0400 Received: from mail-qt0-f195.google.com ([209.85.216.195]:37138 "EHLO mail-qt0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932895AbeF2K1w (ORCPT ); Fri, 29 Jun 2018 06:27:52 -0400 Received: by mail-qt0-f195.google.com with SMTP id a18-v6so7342153qtj.4 for ; Fri, 29 Jun 2018 03:27:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=kVqdMM+AUYlJy+HdI+kdOpni/fhhk3Y2iz80MK6uu4o=; b=aNYuylT73SL3TP0yEcUYATnh3zs7j2hAy61wEweIoUUovGILTu0iIUs+DCyoBF8Av0 2ReOTYG0BvVDMA0jLTgU9mAbvuAXQRtcJBkPF4U67fPeEMu/MPlbDhPmo50ymIDB0nDM qasBxeqnOgKbyaleyUWyN0pSTzeljvniuvOkY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=kVqdMM+AUYlJy+HdI+kdOpni/fhhk3Y2iz80MK6uu4o=; b=mSZ7zKwd80gtt24XAXbWiiWfmJeYx75a3DG9xqiOtXcV5Fbfu2tZ/FuzvVj/E16ZUd YiUHe/aA0pwm2p1ha8rJxdDJX0yTAxZvr+ffsFajIxsCDD634JRhr6ThsZ3rmXzgBlMs 9iuDy0d9J2PpVrHbLXGRyFUzksJPU343QiPSruRZErzl0AIBvvTgG08AW71cSK4iliYW RS/6CGnFU06/qNDGq8wF++7nYDiTRGpK1m3Uhe3iaygNZQ2u+ZAzMoIZkBVzyAUnfpIt CX2E97gHStnjUjQ8p5sqlLbDfGCiy+BzZGlJamLZBsnCV36PXuRTzO/QlZUsukKoF31c /p/Q== X-Gm-Message-State: APt69E0co5b98oN4w9VsZz7Fbgaj22T5+qN1i7rLp+3HuZhoJWZPlK4u 7nRPRMjZo3RxEpm0HE4JtdWEjw== X-Google-Smtp-Source: AAOMgpdOPP4XH0eYdhdI/lBTQoHH17hvEE/DBx72l9+SouXCPkXFuHDtqv7DfFtvwGW7uDTo6/6/NA== X-Received: by 2002:ac8:87a:: with SMTP id x55-v6mr12635899qth.303.1530268071780; Fri, 29 Jun 2018 03:27:51 -0700 (PDT) Received: from hariv-server.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v88-v6sm2188365qkv.63.2018.06.29.03.27.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jun 2018 03:27:51 -0700 (PDT) From: Hari Vyas To: bhelgaas@google.com, benh@kernel.crashing.org Cc: linux-pci@vger.kernel.org, ray.jui@broadcom.com, Hari Vyas Subject: [PATCH v2 1/3] PCI: Data corruption happening due to race condition Date: Fri, 29 Jun 2018 15:57:39 +0530 Message-Id: <1530268061-17324-2-git-send-email-hari.vyas@broadcom.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> References: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org When a pci device is detected, a variable is_added is set to 1 in pci device structure and proc, sys entries are created. When a pci device is removed, first is_added is checked for one and then device is detached with clearing of proc and sys entries and at end, is_added is set to 0. is_added and is_busmaster are bit fields in pci_dev structure sharing same memory location. A strange issue was observed with multiple times removal and rescan of a pcie nvme device using sysfs commands where is_added flag was observed as zero instead of one while removing device and proc,sys entries are not cleared. This causes issue in later device addition with warning message "proc_dir_entry" already registered. Debugging revealed a race condition between pcie core driver enabling is_added bit(pci_bus_add_device()) and nvme driver reset work-queue enabling is_busmaster bit (by pci_set_master()). As both fields are not handled in atomic manner and that clears is_added bit. Fix moves device addition is_added bit to separate private flag variable and use different atomic functions to set, clear and retrieve device addition state. As is_added shares different memory location so race condition is avoided. Signed-off-by: Hari Vyas --- drivers/pci/bus.c | 6 +++--- drivers/pci/pci.c | 1 + drivers/pci/pci.h | 18 ++++++++++++++++++ drivers/pci/probe.c | 4 ++-- drivers/pci/remove.c | 5 +++-- include/linux/pci.h | 1 - 6 files changed, 27 insertions(+), 8 deletions(-) diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 35b7fc8..8674019 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c @@ -330,7 +330,7 @@ void pci_bus_add_device(struct pci_dev *dev) return; } - dev->is_added = 1; + pci_dev_set_added(dev, NULL); } EXPORT_SYMBOL_GPL(pci_bus_add_device); @@ -347,14 +347,14 @@ void pci_bus_add_devices(const struct pci_bus *bus) list_for_each_entry(dev, &bus->devices, bus_list) { /* Skip already-added devices */ - if (dev->is_added) + if (pci_dev_is_added(dev)) continue; pci_bus_add_device(dev); } list_for_each_entry(dev, &bus->devices, bus_list) { /* Skip if device attach failed */ - if (!dev->is_added) + if (!pci_dev_is_added(dev)) continue; child = dev->subordinate; if (child) diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c index 97acba7..baefd55 100644 --- a/drivers/pci/pci.c +++ b/drivers/pci/pci.c @@ -3675,6 +3675,7 @@ static void __pci_set_master(struct pci_dev *dev, bool enable) enable ? "enabling" : "disabling"); pci_write_config_word(dev, PCI_COMMAND, cmd); } + dev->is_busmaster = enable; } diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h index c358e7a0..c924a4c 100644 --- a/drivers/pci/pci.h +++ b/drivers/pci/pci.h @@ -288,6 +288,7 @@ struct pci_sriov { /* pci_dev priv_flags */ #define PCI_DEV_DISCONNECTED 0 +#define PCI_DEV_ADDED 1 static inline int pci_dev_set_disconnected(struct pci_dev *dev, void *unused) { @@ -300,6 +301,23 @@ static inline bool pci_dev_is_disconnected(const struct pci_dev *dev) return test_bit(PCI_DEV_DISCONNECTED, &dev->priv_flags); } +static inline int pci_dev_set_added(struct pci_dev *dev, void *unused) +{ + set_bit(PCI_DEV_ADDED, &dev->priv_flags); + return 0; +} + +static inline int pci_dev_clear_added(struct pci_dev *dev, void *unused) +{ + clear_bit(PCI_DEV_ADDED, &dev->priv_flags); + return 0; +} + +static inline bool pci_dev_is_added(const struct pci_dev *dev) +{ + return test_bit(PCI_DEV_ADDED, &dev->priv_flags); +} + #ifdef CONFIG_PCI_ATS void pci_restore_ats_state(struct pci_dev *dev); #else diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index ac876e3..611adcd 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -2433,13 +2433,13 @@ int pci_scan_slot(struct pci_bus *bus, int devfn) dev = pci_scan_single_device(bus, devfn); if (!dev) return 0; - if (!dev->is_added) + if (!pci_dev_is_added(dev)) nr++; for (fn = next_fn(bus, dev, 0); fn > 0; fn = next_fn(bus, dev, fn)) { dev = pci_scan_single_device(bus, devfn + fn); if (dev) { - if (!dev->is_added) + if (!pci_dev_is_added(dev)) nr++; dev->multifunction = 1; } diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c index 6f072ea..a272cdc 100644 --- a/drivers/pci/remove.c +++ b/drivers/pci/remove.c @@ -19,11 +19,12 @@ static void pci_stop_dev(struct pci_dev *dev) { pci_pme_active(dev, false); - if (dev->is_added) { + if (pci_dev_is_added(dev)) { device_release_driver(&dev->dev); pci_proc_detach_device(dev); pci_remove_sysfs_dev_files(dev); - dev->is_added = 0; + + pci_dev_clear_added(dev, NULL); } if (dev->bus->self) diff --git a/include/linux/pci.h b/include/linux/pci.h index 340029b..506125b 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -368,7 +368,6 @@ struct pci_dev { unsigned int transparent:1; /* Subtractive decode bridge */ unsigned int multifunction:1; /* Multi-function device */ - unsigned int is_added:1; unsigned int is_busmaster:1; /* Is busmaster */ unsigned int no_msi:1; /* May not use MSI */ unsigned int no_64bit_msi:1; /* May only use 32-bit MSIs */ From patchwork Fri Jun 29 10:27:40 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hari Vyas X-Patchwork-Id: 936769 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="CsweVeRI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41HCXD6WLFz9s01 for ; Fri, 29 Jun 2018 20:27:56 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935358AbeF2K14 (ORCPT ); Fri, 29 Jun 2018 06:27:56 -0400 Received: from mail-qk0-f193.google.com ([209.85.220.193]:41993 "EHLO mail-qk0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935356AbeF2K1z (ORCPT ); Fri, 29 Jun 2018 06:27:55 -0400 Received: by mail-qk0-f193.google.com with SMTP id u62-v6so4616392qkf.9 for ; Fri, 29 Jun 2018 03:27:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=opLaatnGT1h8QJWeFj/cCU/v/CyE5akP05a79RBaB1g=; b=CsweVeRIxZQL/PjJeyo8mtHgA8RHKXgdBzbD/AC4jiO4kE0TUrZYENmsqPJ87ycuBJ 42Z5OhgHan7NpdbLoN6+GfYxnl0GRLszV4YrY0HToWnwdXGk2EqS8ceXjzMMtL+FxUGM QFio5PxytUCR8e3VETvkJMvAwB6u+q3mLV/14= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=opLaatnGT1h8QJWeFj/cCU/v/CyE5akP05a79RBaB1g=; b=faOsu92KRQzm7RCu6Fex9gpcVnK67AKRJsvDIYmrGUZJxSre/PGLQHGibZksoNv79a MAWzhHvGnyJg3Xy4QpgjUygdSZbComau+chNYwvMXKKYKjUsk7J8tZWTbFWr0v3qQUrT dHzcVPb7oFhjNhDStHrtjPnOGCbsl/DoPEVoQL4nGzIVMpnKER8wHotp2cy9XHvklSeM q2sGZPeXF6iEHs96KUSY7qYLQg2Unbqxs5DIWBcZ5CuCWgXhNOfD4P/R7A7vb5szD6ce AyXplO8tnnejwzvW/Gvjv9F5efBjmuzgAFNB35gpqptb4uv1Ld4VkE6RmW5vz9aPl1kP lEQQ== X-Gm-Message-State: APt69E1rwn4BmA93Q2emIY96T8ypmxOaYS0pvH62UA7/tLRMZwfej7gD AeuGpkD3eBjSyZfPQW9CkXWJ/g== X-Google-Smtp-Source: AAOMgpfXlOYaGQ4UVK92vgmv3jWKKHzUQg1lz5jmwMU549zKxBdeLX8YD6cHkafEkmEju8R3wfovBg== X-Received: by 2002:a37:1f53:: with SMTP id f80-v6mr11744487qkf.1.1530268074474; Fri, 29 Jun 2018 03:27:54 -0700 (PDT) Received: from hariv-server.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v88-v6sm2188365qkv.63.2018.06.29.03.27.52 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jun 2018 03:27:54 -0700 (PDT) From: Hari Vyas To: bhelgaas@google.com, benh@kernel.crashing.org Cc: linux-pci@vger.kernel.org, ray.jui@broadcom.com, Hari Vyas Subject: [PATCH v2 2/3] PCI: use new pci function to get device addition state Date: Fri, 29 Jun 2018 15:57:40 +0530 Message-Id: <1530268061-17324-3-git-send-email-hari.vyas@broadcom.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> References: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Due to one race condition happening while updating pci device addition and master status bits in a particular scenario, device addition state is moved to a independent private flag variable. This change uses newly proposed pci_dev_is_added() function to retrieve device addition state. Signed-off-by: Hari Vyas --- arch/powerpc/kernel/pci-common.c | 4 +++- arch/powerpc/platforms/powernv/pci-ioda.c | 3 ++- arch/powerpc/platforms/pseries/setup.c | 3 ++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c index fe9733f..471aac3 100644 --- a/arch/powerpc/kernel/pci-common.c +++ b/arch/powerpc/kernel/pci-common.c @@ -42,6 +42,8 @@ #include #include +#include "../../../drivers/pci/pci.h" + /* hose_spinlock protects accesses to the the phb_bitmap. */ static DEFINE_SPINLOCK(hose_spinlock); LIST_HEAD(hose_list); @@ -1014,7 +1016,7 @@ void pcibios_setup_bus_devices(struct pci_bus *bus) /* Cardbus can call us to add new devices to a bus, so ignore * those who are already fully discovered */ - if (dev->is_added) + if (pci_dev_is_added(dev)) continue; pcibios_setup_device(dev); diff --git a/arch/powerpc/platforms/powernv/pci-ioda.c b/arch/powerpc/platforms/powernv/pci-ioda.c index 5bd0eb6..70b2e1e 100644 --- a/arch/powerpc/platforms/powernv/pci-ioda.c +++ b/arch/powerpc/platforms/powernv/pci-ioda.c @@ -46,6 +46,7 @@ #include "powernv.h" #include "pci.h" +#include "../../../../drivers/pci/pci.h" #define PNV_IODA1_M64_NUM 16 /* Number of M64 BARs */ #define PNV_IODA1_M64_SEGS 8 /* Segments per M64 BAR */ @@ -3138,7 +3139,7 @@ static void pnv_pci_ioda_fixup_iov_resources(struct pci_dev *pdev) struct pci_dn *pdn; int mul, total_vfs; - if (!pdev->is_physfn || pdev->is_added) + if (!pdev->is_physfn || pci_dev_is_added(pdev)) return; pdn = pci_get_pdn(pdev); diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 139f0af..8a4868a 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -71,6 +71,7 @@ #include #include "pseries.h" +#include "../../../../drivers/pci/pci.h" int CMO_PrPSP = -1; int CMO_SecPSP = -1; @@ -664,7 +665,7 @@ static void pseries_pci_fixup_iov_resources(struct pci_dev *pdev) const int *indexes; struct device_node *dn = pci_device_to_OF_node(pdev); - if (!pdev->is_physfn || pdev->is_added) + if (!pdev->is_physfn || pci_dev_is_added(pdev)) return; /*Firmware must support open sriov otherwise dont configure*/ indexes = of_get_property(dn, "ibm,open-sriov-vf-bar-info", NULL); From patchwork Fri Jun 29 10:27:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hari Vyas X-Patchwork-Id: 936770 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-pci-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=broadcom.com header.i=@broadcom.com header.b="A56pQ2hI"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 41HCXH11fnz9s01 for ; Fri, 29 Jun 2018 20:27:59 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935356AbeF2K16 (ORCPT ); Fri, 29 Jun 2018 06:27:58 -0400 Received: from mail-qk0-f194.google.com ([209.85.220.194]:33578 "EHLO mail-qk0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935366AbeF2K15 (ORCPT ); Fri, 29 Jun 2018 06:27:57 -0400 Received: by mail-qk0-f194.google.com with SMTP id c131-v6so4626877qkb.0 for ; Fri, 29 Jun 2018 03:27:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1n0pMQR9w+VvZgccx2Glo1E0o0Y9+3x5GDDVsIPvpQY=; b=A56pQ2hIfeXWrEJRqEHhudxNelNwfYtWpqWYx1LB5L9PKnu9Yuz/W27Cjq3lawHmeK zBmI0PxnY1V2quwYy8Kh1XSXHWNZYaWKynK27vm+4Zbkmi48jZhZCQSpRLHoUaqgCgEg 0pgWujqFhGkfsfo2Yb9EjDcgegeheTZFObTxM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1n0pMQR9w+VvZgccx2Glo1E0o0Y9+3x5GDDVsIPvpQY=; b=hWzFl6y4njXSNwuB0+BgoIwz3lrPVEXkzVpBXuc0owqpQ2bhLkX5s9uWtP7lu1dc9p fGIVNXuSoirZanWhLqHxBwZW1xxclmuUgIk0eqZ2nWVkUnPYNj6gTWfvCR2LSCtkIvFh 8HzKD0Kod1K1tbmCty0hXbYMzIZlXIOfHXK1B1HgigOTPU5LJwSnNHSumd6MTPTio3UG 9ZM06NDyZfo2Z0RQhui8r3/KC0oXK00j8bE/s3B+bzLOuYerbwUM05QisAgo/d1ovjEj jgm7X5mX8uarMP9QqGKhTwG0AT/78jGfFkzQRyxH2WXihx5r92qRcXlvmW2rXyhfgTpz DS7w== X-Gm-Message-State: APt69E2ZbSlk2YgdSOysn44nSQJBwLoTQfwoh/yBK6rPAcHdpCbNmrrq AjXvS6ZvQ49HX2yQxEcG0Vg5Jw== X-Google-Smtp-Source: AAOMgpewy3Nh8aI5dqmgiQQMM/iRXfAFUsDVYH8QuUBRSzJFemaawMOLhLdxk9+nqapDwx7u2Ng/JA== X-Received: by 2002:a37:3609:: with SMTP id d9-v6mr11787492qka.419.1530268077120; Fri, 29 Jun 2018 03:27:57 -0700 (PDT) Received: from hariv-server.dhcp.broadcom.net ([192.19.234.250]) by smtp.gmail.com with ESMTPSA id v88-v6sm2188365qkv.63.2018.06.29.03.27.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 29 Jun 2018 03:27:56 -0700 (PDT) From: Hari Vyas To: bhelgaas@google.com, benh@kernel.crashing.org Cc: linux-pci@vger.kernel.org, ray.jui@broadcom.com, Hari Vyas Subject: [PATCH v2 3/3] PCI: Hotplug: use new pci function to get device addition state Date: Fri, 29 Jun 2018 15:57:41 +0530 Message-Id: <1530268061-17324-4-git-send-email-hari.vyas@broadcom.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> References: <1530268061-17324-1-git-send-email-hari.vyas@broadcom.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org Due to one race condition happening while updating pci device addition and master status bits in a particular scenario, device addition state is moved to a independent private flag variable. This change uses newly proposed pci_dev_is_added() function to retrieve device addition state. Signed-off-by: Hari Vyas --- drivers/pci/hotplug/acpiphp_glue.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index 3a17b29..ef0b1b6 100644 --- a/drivers/pci/hotplug/acpiphp_glue.c +++ b/drivers/pci/hotplug/acpiphp_glue.c @@ -509,7 +509,7 @@ static void enable_slot(struct acpiphp_slot *slot) list_for_each_entry(dev, &bus->devices, bus_list) { /* Assume that newly added devices are powered on already. */ - if (!dev->is_added) + if (!pci_dev_is_added(dev)) dev->current_state = PCI_D0; }