lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20080405185501.41ec42a7@mjolnir.drzeus.cx>
Date:	Sat, 5 Apr 2008 18:55:01 +0200
From:	Pierre Ossman <drzeus-list@...eus.cx>
To:	Greg KH <gregkh@...e.de>
Cc:	LKML <linux-kernel@...r.kernel.org>
Subject: Re: pci: add to global list before sysfs?

On Sat, 5 Apr 2008 08:53:23 -0700
Greg KH <gregkh@...e.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
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ