linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Yinghai Lu <yinghai@kernel.org>
To: Jesse Barnes <jbarnes@virtuousgeek.org>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Tony Luck <tony.luck@intel.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	Andrew Morton <akpm@linux-foundation.org>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arch@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH 19/22] PCI, sysfs: create rescan_bridge under /sys/.../pci/devices/... for pci bridges
Date: Fri, 10 Feb 2012 20:06:22 -0800	[thread overview]
Message-ID: <1328933185-15154-20-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <1328933185-15154-1-git-send-email-yinghai@kernel.org>

Current code will create rescan for every pci device under parent bus.
that is not right. the device is already there, there is no reason to rescan it.

We could have rescan for pci bridges. less confusing.

Need to move rescan attr to pci dev bridge attribute group.
And We should rescan bridge's secondary bus instead of primary bus.

-v3: Use device_type for pci dev.
-v4: Seperate pci device type change out
-v5: add rescan_bridge for bridge type, and still keep the old rescan.
	may remove the old rescan later.

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
 Documentation/ABI/testing/sysfs-bus-pci |   10 ++++++++++
 drivers/pci/pci-sysfs.c                 |   24 ++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci
index 34f5110..95f0f37 100644
--- a/Documentation/ABI/testing/sysfs-bus-pci
+++ b/Documentation/ABI/testing/sysfs-bus-pci
@@ -111,6 +111,16 @@ Description:
 		from this part of the device tree.
 		Depends on CONFIG_HOTPLUG.
 
+What:		/sys/bus/pci/devices/.../rescan_bridge
+Date:		February 2012
+Contact:	Linux PCI developers <linux-pci@vger.kernel.org>
+Description:
+		Writing a non-zero value to this attribute will
+		force a rescan of the bridge and all child buses, and
+		re-discover devices removed earlier from this part of
+		the device tree.
+		Depends on CONFIG_HOTPLUG.
+
 What:		/sys/bus/pci/devices/.../reset
 Date:		July 2009
 Contact:	Michael S. Tsirkin <mst@redhat.com>
diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c
index 124e826..68caf29 100644
--- a/drivers/pci/pci-sysfs.c
+++ b/drivers/pci/pci-sysfs.c
@@ -325,6 +325,27 @@ dev_rescan_store(struct device *dev, struct device_attribute *attr,
 	return count;
 }
 
+static ssize_t
+dev_bridge_rescan_store(struct device *dev, struct device_attribute *attr,
+		 const char *buf, size_t count)
+{
+	unsigned long val;
+	struct pci_dev *pdev = to_pci_dev(dev);
+
+	if (kstrtoul(buf, 0, &val) < 0)
+		return -EINVAL;
+
+	if (val) {
+		mutex_lock(&pci_remove_rescan_mutex);
+		pci_rescan_bus(pdev->subordinate);
+		mutex_unlock(&pci_remove_rescan_mutex);
+	}
+	return count;
+}
+
+static struct device_attribute pci_dev_bridge_rescan_attr =
+	__ATTR(rescan_bridge, (S_IWUSR|S_IWGRP), NULL, dev_bridge_rescan_store);
+
 static void remove_callback(struct device *dev)
 {
 	struct pci_dev *pdev = to_pci_dev(dev);
@@ -1337,6 +1358,9 @@ static int __init pci_sysfs_init(void)
 late_initcall(pci_sysfs_init);
 
 static struct attribute *pci_dev_bridge_attrs[] = {
+#ifdef CONFIG_HOTPLUG
+	&pci_dev_bridge_rescan_attr.attr,
+#endif
 	NULL,
 };
 
-- 
1.7.7

  parent reply	other threads:[~2012-02-11  4:06 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-11  4:06 [PATCH -v6 0/22] PCI: allocate pci bus num range for unassigned bridge busn + pci rescan cleanup Yinghai Lu
2012-02-11  4:06 ` [PATCH 01/22] PCI: Add busn_res into struct pci_bus Yinghai Lu
2012-02-11  4:06 ` [PATCH 02/22] PCI: Add busn_res operation functions Yinghai Lu
2012-02-11  4:06 ` [PATCH 03/22] PCI: Add busn_res tracking in core Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 04/22] PCI, x86: Register busn_res for root buses Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 05/22] PCI, ia64: " Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 06/22] PCI, sparc: " Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 07/22] PCI, powerpc: " Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 08/22] PCI, parisc: " Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 09/22] PCI: Add pci_bus_extend/shrink_top() Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 10/22] PCI: Probe safe range that we can use for unassigned bridge Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 11/22] PCI: Strict checking of valid range for bridge Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 12/22] PCI: Allocate bus range instead of use max blindly Yinghai Lu
2012-02-11  4:06 ` [PATCH 13/22] PCI: kill pci_fixup_parent_subordinate_busnr() Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 14/22] PCI: Seperate child bus scanning to two passes overall Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 15/22] pcmcia: remove workaround for fixing pci parent bus subordinate Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 16/22] PCI: Double checking setting for bus register and bus struct Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 17/22] PCI, pciehp: Remove not needed bus number range checking Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 18/22] PCI, sys: Use device_type and attr_groups with pci dev Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` Yinghai Lu [this message]
2012-02-11  4:06   ` [PATCH 19/22] PCI, sysfs: create rescan_bridge under /sys/.../pci/devices/... for pci bridges Yinghai Lu
2012-02-11  4:06 ` [PATCH 20/22] PCI: Add pci_bus_add_single_device() Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 21/22] PCI: make pci_rescan_bus_bridge_resize use pci_scan_bridge instead Yinghai Lu
2012-02-11  4:06   ` Yinghai Lu
2012-02-11  4:06 ` [PATCH 22/22] PCI: clean up rescan_bus_bridge_resize Yinghai Lu

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=1328933185-15154-20-git-send-email-yinghai@kernel.org \
    --to=yinghai@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=benh@kernel.crashing.org \
    --cc=bhelgaas@google.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jbarnes@virtuousgeek.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=linux@dominikbrodowski.net \
    --cc=tony.luck@intel.com \
    --cc=torvalds@linux-foundation.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;
as well as URLs for NNTP newsgroup(s).