From: Greg KH <greg@kroah.com>
To: linux-kernel@vger.kernel.org, pcihpd-discuss@lists.sourceforge.net
Subject: Re: [PATCH] PCI hotplug changes for 2.5.63
Date: Mon, 24 Feb 2003 17:16 -0800 [thread overview]
Message-ID: <10461357803594@kroah.com> (raw)
In-Reply-To: <1046135779999@kroah.com>
ChangeSet 1.1022.1.12, 2003/02/24 16:32:16-08:00, greg@kroah.com
[PATCH] IBM PCI Hotplug: convert driver to use pci_bus_remove_device()
Also cleaned up a lot of unnecessary bus walking on device startup
and shutdown.
diff -Nru a/drivers/hotplug/ibmphp_core.c b/drivers/hotplug/ibmphp_core.c
--- a/drivers/hotplug/ibmphp_core.c Mon Feb 24 17:15:15 2003
+++ b/drivers/hotplug/ibmphp_core.c Mon Feb 24 17:15:15 2003
@@ -781,141 +781,23 @@
debug ("%s -- exit\n", __FUNCTION__);
}
-static int ibm_unconfigure_visit_pci_dev_phase2 (struct pci_dev_wrapped *wrapped_dev, struct pci_bus_wrapped *wrapped_bus)
-{
- struct pci_dev *dev = wrapped_dev->dev;
- struct pci_func *temp_func;
- int i = 0;
-
- do {
- temp_func = ibm_slot_find (dev->bus->number, dev->devfn >> 3, i++);
- } while (temp_func && (temp_func->function != (dev->devfn & 0x07)));
-
- if (dev) {
- if (pci_remove_device_safe(dev) == 0)
- kfree (dev); /* Now, remove */
- else
- return -1;
- }
-
- if (temp_func)
- temp_func->dev = NULL;
- else
- debug ("No pci_func representation for bus, devfn = %d, %x\n", dev->bus->number, dev->devfn);
-
- return 0;
-}
-
-static int ibm_unconfigure_visit_pci_bus_phase2 (struct pci_bus_wrapped *wrapped_bus, struct pci_dev_wrapped *wrapped_dev)
-{
- struct pci_bus *bus = wrapped_bus->bus;
-
- pci_proc_detach_bus (bus);
- /* The cleanup code should live in the kernel... */
- bus->self->subordinate = NULL;
- /* unlink from parent bus */
- list_del (&bus->node);
-
- /* Now, remove */
- if (bus)
- kfree (bus);
-
- return 0;
-}
-
-static int ibm_unconfigure_visit_pci_dev_phase1 (struct pci_dev_wrapped *wrapped_dev, struct pci_bus_wrapped *wrapped_bus)
-{
- struct pci_dev *dev = wrapped_dev->dev;
-
- debug ("attempting removal of driver for device (%x, %x, %x)\n", dev->bus->number, PCI_SLOT (dev->devfn), PCI_FUNC (dev->devfn));
-
- /* Now, remove the Linux Driver Representation */
- if (dev->driver) {
- debug ("is there a driver?\n");
- if (dev->driver->remove) {
- dev->driver->remove (dev);
- debug ("driver was properly removed\n");
- }
- dev->driver = NULL;
- }
-
- return (pci_dev_driver(dev) != NULL);
-}
-
-static struct pci_visit ibm_unconfigure_functions_phase1 = {
- .post_visit_pci_dev = ibm_unconfigure_visit_pci_dev_phase1,
-};
-
-static struct pci_visit ibm_unconfigure_functions_phase2 = {
- .post_visit_pci_bus = ibm_unconfigure_visit_pci_bus_phase2,
- .post_visit_pci_dev = ibm_unconfigure_visit_pci_dev_phase2,
-};
-
static int ibm_unconfigure_device (struct pci_func *func)
{
- int rc = 0;
- struct pci_dev_wrapped wrapped_dev;
- struct pci_bus_wrapped wrapped_bus;
struct pci_dev *temp;
u8 j;
- memset (&wrapped_dev, 0, sizeof (struct pci_dev_wrapped));
- memset (&wrapped_bus, 0, sizeof (struct pci_bus_wrapped));
-
- debug ("inside ibm_unconfigure_device\n");
+ debug ("inside %s\n", __FUNCTION__);
debug ("func->device = %x, func->function = %x\n", func->device, func->function);
debug ("func->device << 3 | 0x0 = %x\n", func->device << 3 | 0x0);
for (j = 0; j < 0x08; j++) {
temp = pci_find_slot (func->busno, (func->device << 3) | j);
- if (temp) {
- wrapped_dev.dev = temp;
- wrapped_bus.bus = temp->bus;
- rc = pci_visit_dev (&ibm_unconfigure_functions_phase1, &wrapped_dev, &wrapped_bus);
- if (rc)
- break;
-
- rc = pci_visit_dev (&ibm_unconfigure_functions_phase2, &wrapped_dev, &wrapped_bus);
- if (rc)
- break;
- }
+ if (temp)
+ pci_remove_bus_device(temp);
}
- debug ("rc in ibm_unconfigure_device b4 returning is %d \n", rc);
- return rc;
-}
-
-static int configure_visit_pci_dev (struct pci_dev_wrapped *wrapped_dev, struct pci_bus_wrapped *wrapped_bus)
-{
- // struct pci_bus *bus = wrapped_bus->bus; /* We don't need this, since we don't create in the else statement */
- struct pci_dev *dev = wrapped_dev->dev;
- struct pci_func *temp_func;
- int i = 0;
-
- do {
- temp_func = ibm_slot_find (dev->bus->number, dev->devfn >> 3, i++);
- } while (temp_func && (temp_func->function != (dev->devfn & 0x07)));
-
- if (temp_func)
- temp_func->dev = dev;
- else {
- /* This should not really happen, since we create functions
- first and then call to configure */
- debug (" We shouldn't come here \n");
- }
-
- if (temp_func->dev) {
-// pci_proc_attach_device (temp_func->dev);
-// pci_announce_device_to_drivers (temp_func->dev);
- }
-
return 0;
}
-static struct pci_visit configure_functions = {
- .visit_pci_dev =configure_visit_pci_dev,
-};
-
-
/*
* The following function is to fix kernel bug regarding
* getting bus entries, here we manually add those primary
@@ -965,15 +847,9 @@
unsigned char bus;
struct pci_dev dev0;
struct pci_bus *child;
- struct pci_dev *temp;
int rc = 0;
int flag = 0; /* this is to make sure we don't double scan the bus, for bridged devices primarily */
- struct pci_dev_wrapped wrapped_dev;
- struct pci_bus_wrapped wrapped_bus;
-
- memset (&wrapped_dev, 0, sizeof (struct pci_dev_wrapped));
- memset (&wrapped_bus, 0, sizeof (struct pci_bus_wrapped));
memset (&dev0, 0, sizeof (struct pci_dev));
if (!(bus_structure_fixup (func->busno)))
@@ -1001,12 +877,6 @@
pci_do_scan_bus (child);
}
- temp = func->dev;
- if (temp) {
- wrapped_dev.dev = temp;
- wrapped_bus.bus = temp->bus;
- rc = pci_visit_dev (&configure_functions, &wrapped_dev, &wrapped_bus);
- }
return rc;
}
next prev parent reply other threads:[~2003-02-25 1:17 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-02-25 1:13 [BK PATCH] PCI hotplug changes for 2.5.63 Greg KH
2003-02-25 1:15 ` [PATCH] " Greg KH
2003-02-25 1:15 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH [this message]
2003-02-25 1:16 ` Greg KH
2003-02-25 1:16 ` Greg KH
2003-02-28 23:59 ` [BK PATCH] " Greg KH
2003-03-01 18:55 ` Linus Torvalds
2003-03-01 21:38 ` Greg KH
2003-03-01 22:00 ` Linus Torvalds
2003-03-01 22:25 ` Greg KH
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=10461357803594@kroah.com \
--to=greg@kroah.com \
--cc=linux-kernel@vger.kernel.org \
--cc=pcihpd-discuss@lists.sourceforge.net \
/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