From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Bjorn Helgaas <helgaas@kernel.org>, linux-pci@vger.kernel.org
Cc: Hari Vyas <hari.vyas@broadcom.com>,
Ray Jui <ray.jui@broadcom.com>,
Srinath Mannam <srinath.mannam@broadcom.com>,
Guenter Roeck <linux@roeck-us.net>, Jens Axboe <axboe@kernel.dk>,
Lukas Wunner <lukas@wunner.de>,
Konstantin Khlebnikov <khlebnikov@yandex-team.ru>,
Marta Rybczynska <mrybczyn@kalray.eu>,
Pierre-Yves Kerbrat <pkerbrat@kalray.eu>,
linux-kernel@vger.kernel.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>
Subject: [RFC PATCH 3/6] pci: Remove priv_flags and use dev->error_state for "disconnected" status
Date: Fri, 17 Aug 2018 14:48:59 +1000 [thread overview]
Message-ID: <20180817044902.31420-4-benh@kernel.crashing.org> (raw)
In-Reply-To: <20180817044902.31420-1-benh@kernel.crashing.org>
This already represents whether a device is accessible or not,
creating a new flag isn't particularly helpful.
dev->error_state being an int, assigning it doesn't require
an atomic operation per-se. The existing atomic bitop only
protects the field, not anything else anyway.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
drivers/pci/access.c | 12 ++++++------
drivers/pci/msi.c | 4 ++--
drivers/pci/pci.c | 2 +-
drivers/pci/pci.h | 11 ++---------
include/linux/pci.h | 2 --
5 files changed, 11 insertions(+), 20 deletions(-)
diff --git a/drivers/pci/access.c b/drivers/pci/access.c
index a3ad2fe185b9..ad97a3544636 100644
--- a/drivers/pci/access.c
+++ b/drivers/pci/access.c
@@ -535,7 +535,7 @@ EXPORT_SYMBOL(pcie_capability_clear_and_set_dword);
int pci_read_config_byte(const struct pci_dev *dev, int where, u8 *val)
{
- if (pci_dev_is_disconnected(dev)) {
+ if (pci_channel_offline(dev)) {
*val = ~0;
return PCIBIOS_DEVICE_NOT_FOUND;
}
@@ -545,7 +545,7 @@ EXPORT_SYMBOL(pci_read_config_byte);
int pci_read_config_word(const struct pci_dev *dev, int where, u16 *val)
{
- if (pci_dev_is_disconnected(dev)) {
+ if (pci_channel_offline(dev)) {
*val = ~0;
return PCIBIOS_DEVICE_NOT_FOUND;
}
@@ -556,7 +556,7 @@ EXPORT_SYMBOL(pci_read_config_word);
int pci_read_config_dword(const struct pci_dev *dev, int where,
u32 *val)
{
- if (pci_dev_is_disconnected(dev)) {
+ if (pci_channel_offline(dev)) {
*val = ~0;
return PCIBIOS_DEVICE_NOT_FOUND;
}
@@ -566,7 +566,7 @@ EXPORT_SYMBOL(pci_read_config_dword);
int pci_write_config_byte(const struct pci_dev *dev, int where, u8 val)
{
- if (pci_dev_is_disconnected(dev))
+ if (pci_channel_offline(dev))
return PCIBIOS_DEVICE_NOT_FOUND;
return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val);
}
@@ -574,7 +574,7 @@ EXPORT_SYMBOL(pci_write_config_byte);
int pci_write_config_word(const struct pci_dev *dev, int where, u16 val)
{
- if (pci_dev_is_disconnected(dev))
+ if (pci_channel_offline(dev))
return PCIBIOS_DEVICE_NOT_FOUND;
return pci_bus_write_config_word(dev->bus, dev->devfn, where, val);
}
@@ -583,7 +583,7 @@ EXPORT_SYMBOL(pci_write_config_word);
int pci_write_config_dword(const struct pci_dev *dev, int where,
u32 val)
{
- if (pci_dev_is_disconnected(dev))
+ if (pci_channel_offline(dev))
return PCIBIOS_DEVICE_NOT_FOUND;
return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
}
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index f2ef896464b3..2f872db40042 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -298,7 +298,7 @@ void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg)
{
struct pci_dev *dev = msi_desc_to_pci_dev(entry);
- if (dev->current_state != PCI_D0 || pci_dev_is_disconnected(dev)) {
+ if (dev->current_state != PCI_D0 || pci_channel_offline(dev)) {
/* Don't touch the hardware now */
} else if (entry->msi_attrib.is_msix) {
void __iomem *base = pci_msix_desc_addr(entry);
@@ -975,7 +975,7 @@ static void pci_msix_shutdown(struct pci_dev *dev)
if (!pci_msi_enable || !dev || !dev->msix_enabled)
return;
- if (pci_dev_is_disconnected(dev)) {
+ if (pci_channel_offline(dev)) {
dev->msix_enabled = 0;
return;
}
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 29ff9619b5fa..62591c153999 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -5713,7 +5713,7 @@ bool pci_device_is_present(struct pci_dev *pdev)
{
u32 v;
- if (pci_dev_is_disconnected(pdev))
+ if (pci_channel_offline(pdev))
return false;
return pci_bus_read_dev_vendor_id(pdev->bus, pdev->devfn, &v, 0);
}
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 473aa10a5dbf..f7704333e6a1 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -293,18 +293,11 @@ struct pci_sriov {
bool drivers_autoprobe; /* Auto probing of VFs by driver */
};
-/* pci_dev priv_flags */
-#define PCI_DEV_DISCONNECTED 0
-
static inline int pci_dev_set_disconnected(struct pci_dev *dev, void *unused)
{
- set_bit(PCI_DEV_DISCONNECTED, &dev->priv_flags);
- return 0;
-}
+ dev->error_state = pci_channel_io_perm_failure;
-static inline bool pci_dev_is_disconnected(const struct pci_dev *dev)
-{
- return test_bit(PCI_DEV_DISCONNECTED, &dev->priv_flags);
+ return 0;
}
#ifdef CONFIG_PCIEAER
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 9799109c5e25..f58bda204f09 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -443,8 +443,6 @@ struct pci_dev {
phys_addr_t rom; /* Physical address if not from BAR */
size_t romlen; /* Length if not from BAR */
char *driver_override; /* Driver name to force a match */
-
- unsigned long priv_flags; /* Private flags for the PCI driver */
};
static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
--
2.17.1
next prev parent reply other threads:[~2018-08-17 4:48 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-17 4:48 [RFC PATCH 0/6] pci: Rework is_added race fix and address bridge enable races Benjamin Herrenschmidt
2018-08-17 4:48 ` [RFC PATCH 1/6] Revert "PCI: Fix is_added/is_busmaster race condition" Benjamin Herrenschmidt
2018-08-17 4:57 ` Benjamin Herrenschmidt
2018-08-17 15:44 ` Bjorn Helgaas
2018-08-18 3:24 ` Benjamin Herrenschmidt
2018-08-19 2:24 ` Bjorn Helgaas
2018-08-20 2:10 ` Benjamin Herrenschmidt
2018-08-20 6:25 ` Hari Vyas
2018-08-20 11:09 ` Benjamin Herrenschmidt
2018-08-20 11:43 ` Hari Vyas
2018-08-20 7:17 ` Lukas Wunner
2018-08-20 11:12 ` Benjamin Herrenschmidt
2018-08-17 4:48 ` [RFC PATCH 2/6] pci: Set pci_dev->is_added before calling device_add Benjamin Herrenschmidt
2018-08-17 4:57 ` Benjamin Herrenschmidt
2018-08-17 16:25 ` Bjorn Helgaas
2018-08-17 18:15 ` Lukas Wunner
2018-08-18 3:41 ` Benjamin Herrenschmidt
2018-08-18 3:28 ` Benjamin Herrenschmidt
2018-08-17 4:48 ` Benjamin Herrenschmidt [this message]
2018-08-17 5:13 ` [RFC PATCH v2 3/6] pci: Remove priv_flags and use dev->error_state for "disconnected" status Benjamin Herrenschmidt
2018-08-17 4:49 ` [RFC PATCH 4/6] pci: Add a mutex to pci_dev to protect device state Benjamin Herrenschmidt
2018-08-17 4:49 ` [RFC PATCH 5/6] pci: Protect the enable/disable state of pci_dev using the state mutex Benjamin Herrenschmidt
2018-08-17 8:09 ` Marta Rybczynska
2018-08-17 8:30 ` Benjamin Herrenschmidt
2018-08-17 9:00 ` Hari Vyas
2018-08-17 9:39 ` Benjamin Herrenschmidt
2018-08-17 10:10 ` Hari Vyas
2018-08-17 10:24 ` Benjamin Herrenschmidt
2018-08-17 4:49 ` [RFC PATCH 6/6] pci: Protect is_busmaster using the state lock Benjamin Herrenschmidt
2018-08-17 5:03 ` [RFC PATCH 0/6] pci: Rework is_added race fix and address bridge enable races Benjamin Herrenschmidt
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=20180817044902.31420-4-benh@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=axboe@kernel.dk \
--cc=hari.vyas@broadcom.com \
--cc=helgaas@kernel.org \
--cc=khlebnikov@yandex-team.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=lukas@wunner.de \
--cc=mrybczyn@kalray.eu \
--cc=pkerbrat@kalray.eu \
--cc=ray.jui@broadcom.com \
--cc=srinath.mannam@broadcom.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.