Messages in this thread |  | | Date | Sat, 5 Apr 2008 18:55:01 +0200 | From | Pierre Ossman <> | Subject | Re: pci: add to global list before sysfs? |
| |
On Sat, 5 Apr 2008 08:53:23 -0700 Greg KH <gregkh@suse.de> wrote:
> On Sat, Apr 05, 2008 at 11:57:27AM +0200, Pierre Ossman wrote: > > > > Yes. Things work fine when the driver is loaded after the entire PCI > > bus has been scanned, but not when new cards are hotplugged with the > > driver already present. I'd like the behaviour to be the same in both > > cases. > > Why not just create a thread in your driver, or timer, and sleep until > you see the other devices? If after a certian time you never do, then > bail out. > > That should work properly for you for both cases (startup and loading > later.) >
I'm not sure how that could be done in a clean way. Right now I have the following:
sd_dev = NULL; while ((sd_dev = pci_get_device(PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB38X_SD, sd_dev)) != NULL) { if ((PCI_SLOT(chip->pdev->devfn) == PCI_SLOT(sd_dev->devfn)) && (chip->pdev->bus == sd_dev->bus)) break; }
if (sd_dev) { pci_dev_put(sd_dev); dev_info(&chip->pdev->dev, "Refusing to bind to " "secondary interface.\n"); return -ENODEV; }
If I do this threaded, I'd have to return success to the driver core and then act like a possum later. Doable, but not very clean. It could be solved if it was possible to sleep in probe functions, but from what I can tell that will stop the probing of subsequent devices.
Also, the timeout would introduce an inherent race. Which means either putting a high timeout to make the race insignificant, or a low timeout so users don't have to wait for their device to actually become usable.
Is it possible to write some routines that can walk the PCI device tree without having any pci_dev structures to hang on to? To solve my basic problem I just need to know how the tree looks like, not actually poke any of the other devices.
Rgds -- -- Pierre Ossman
Linux kernel, MMC maintainer http://www.kernel.org PulseAudio, core developer http://pulseaudio.org rdesktop, core developer http://www.rdesktop.org
|  |