From: Mitchell Blank Jr <mitch@sfgoth.com>
To: "David S. Miller" <davem@redhat.com>
Cc: chas3@users.sourceforge.net, chas@cmf.nrl.navy.mil, netdev@oss.sgi.com
Subject: Re: [RFC] add rtnl semaphore to linux-atm
Date: Thu, 2 Oct 2003 19:26:15 -0700 [thread overview]
Message-ID: <20031003022615.GA42593@gaz.sfgoth.com> (raw)
In-Reply-To: <20031001054226.126cea7b.davem@redhat.com>
David S. Miller wrote:
> Although, unless VCC connect can potentially sleep, it might
> be better to keep exporting the rwlock and take it as a reader
> instead of grabbing the rtnl semaphore.
VCC connect can definately sleep - a good example is
drirvers/usb/misc/speedtch.c but there are probably other ones.
My personal recommendations:
* There should be a per-atm-device semaphore held across calls into the
driver's ->open, ->close, ->change_qos and maybe a couple other things
to serialize those operations (for the sake of keeping the drivers
sane - there's no reason there should be multiple operations pending)
* The ATM layer shouldn't need to keep any other sorts of locks across
calls into atm_dev->open or such. To avoid race conditions the ATM
code needs to:
1. Take whatever internal spinlock it needs
2. Add the itf/vpi/vci tuple to whatever datastructure we're holding
the vcc list in - but mark it as "inactive" so we don't find it
while others are searching the list. Obviously the open will
fail if we find a matching tuple (whether or not it was active)
3. Drop the spinlock
4. Take the per-device semaphore
5. Call atmdev->open
6. Drop the per-device semaphore
7. Re-take the internal spinlock
8. If open succeeded now mark the vcc as "active". If the open failed
just delete it
9. Drop the internal spinlock
To do a close the method is similar:
1. Take the internal spinlock
2. Find the tuple, mark it as inactive
3. Drop the spinlock
4. Take the per-device semaphore
5. Call atmdev->close
6. Drop the per-device semaphore
7. Re-take the internal spinlock
8. Delete vcc from the list
9. Drop the internal spinlock
Then ->open and ->close can sleep like they need to but won't block
other accesses to the list in the mean time.
* If ATM_ITF_ANY is a pain to fix it should just be removed - it's
basically a misfeature and is probably never used by anybody. I've
already posted a patch to linux-atm-general that basically does this
(it changes "ATM_ITF_ANY" to mean "first interface we find")
-Mitch
next prev parent reply other threads:[~2003-10-03 2:26 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-10-01 11:34 [RFC] add rtnl semaphore to linux-atm chas williams
2003-10-01 12:42 ` David S. Miller
2003-10-01 13:07 ` chas williams
2003-10-01 13:14 ` David S. Miller
2003-10-03 2:26 ` Mitchell Blank Jr [this message]
2003-10-03 13:58 ` David S. Miller
2003-10-03 21:45 ` Mitchell Blank Jr
2003-10-04 5:16 ` David S. Miller
2003-10-04 5:55 ` Mitchell Blank Jr
2003-10-04 6:56 ` Mitchell Blank Jr
2003-10-04 6:59 ` Mitchell Blank Jr
2003-10-04 12:50 ` chas williams
2003-10-04 19:42 ` Mitchell Blank Jr
2003-10-05 12:52 ` chas williams
2003-10-06 9:03 ` Mitchell Blank Jr
2003-10-06 14:46 ` chas williams
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=20031003022615.GA42593@gaz.sfgoth.com \
--to=mitch@sfgoth.com \
--cc=chas3@users.sourceforge.net \
--cc=chas@cmf.nrl.navy.mil \
--cc=davem@redhat.com \
--cc=netdev@oss.sgi.com \
/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.