From: Martin Mares <mj@ucw.cz>
To: linux-hotplug@vger.kernel.org
Subject: Re: [PATCH] PCI device list locking
Date: Sun, 10 Mar 2002 12:07:15 +0000 [thread overview]
Message-ID: <marc-linux-hotplug-101576344519407@msgid-missing> (raw)
In-Reply-To: <marc-linux-hotplug-101528672932410@msgid-missing>
Hello!
When I was actively maintaining the PCI subsystem, I was becoming increasingly
unhappy about the lack of locking, but I was unable to find any simple
strategy which wouldn't require rewriting of many drivers.
Lots of drivers still use the old probing interface (pci_find_*). Possible
solutions: either add locking around probing loop in all drivers or (maybe
better) convert all drivers to the new interface and drop the old one
completely.
> Unless I missed something even a semaphore might deadlock then:
>
> think of a pci driver for bridge-type device which has devices already
> attached when probed - for example cardbus (or hotplug) controller with
> device on the downside. If the devices are found during probe(), the
> driver might want to just add them in one go.
Device addition is not a hard problem, it just suffices to define the locking
rules a bit better to avoid deadlock. Removal is much worse -- you need to
ensure not only nobody is working with the list, but also that nobody is
using the pci_dev being removed.
Maybe we could do it this way: (assuming all drivers use the new interface)
o Introduce a global semaphore guarding all PCI lists (the global
device list and all per-bus linkages). Add pci_{un,}lock_lists().
[Using any r/w-thing is probably pointless as both reads and writes
to the list are very rare.]
o Make pci_for_each_dev call pci_{un,}lock_lists().
o Define that for calling pci_{insert,remove}_device() the lists
must be locked by the caller.
o Define that if you want to access any pci_dev, you must either have
the lists locked or be the owner of the device (pci_dev->driver).
o Define that when you are walking the list by pci_for_each_dev(),
you can remove any device except the current one.
Unless I've missed anything, these rules seem to cover all the cases
needed including probe/remove functions adding/removing devices on the
downside of a bridge.
Have a nice fortnight
--
Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
For every complex problem, there's a solution that is simple, neat and wrong.
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel
prev parent reply other threads:[~2002-03-10 12:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-03-04 23:54 [PATCH] PCI device list locking john stultz
2002-03-05 0:17 ` Greg KH
2002-03-05 1:05 ` john stultz
2002-03-05 1:12 ` Craig Christophel
2002-03-05 1:47 ` john stultz
2002-03-06 1:31 ` Martin Diehl
2002-03-10 12:07 ` Martin Mares [this message]
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=marc-linux-hotplug-101576344519407@msgid-missing \
--to=mj@ucw.cz \
--cc=linux-hotplug@vger.kernel.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 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.