On Wed, Mar 13, 2013 at 6:12 PM, Peter Hurley <peter@xxxxxxxxxxxxxxxxxx> wrote: > On Wed, 2013-03-13 at 04:36 -0700, Michel Lespinasse wrote: >> Have you considered building your ldlock based on lib/rwsem-spinlock.c >> instead ? i.e. having an internal spinlock to protect the ldisc >> reference count and the reader and writer queues. This would seem much >> simpler get right. The downside would be that a spinlock would be >> taken for a short time whenever an ldisc reference is taken or >> released. I don't expect that the internal spinlock would get >> significant contention ? > > That would have been too easy :) > > TBH, I hadn't considered it until I was most the way through a working > atomic version. I had already split the reader/writer wait lists. And > figured out how to always use the wait bias for every waiting reader and > writer -- rather than the rwsem way of testing for an empty list -- > which made the timeout handling easier. > > At the time, the only thing that I was still struggling with was > recursion, and the spinlock flavor wasn't going to fix that. So I just > kept with the atomic flavor. Its not too late to run away from it and preserve your sanity (as well as that of the next person working on the tty layer :) I think I know that rwsem code pretty well by now and I still get surprised here and there, as in our other discussion... Seriously, things will be easier if you can use an internal spinlock. -- Michel "Walken" Lespinasse A program is never fully debugged until the last user dies. -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html