[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Making global variables of if.c MPSAFE
On Fri, Aug 1, 2014 at 2:24 PM, Dennis Ferguson
> On 31 Jul, 2014, at 18:35 , Ryota Ozaki <ozaki-r%netbsd.org@localhost> wrote:
>> On Wed, Jul 30, 2014 at 11:47 AM, Ryota Ozaki <ozaki-r%netbsd.org@localhost>
>>> We may be able to use pserialize(9) instead of rwlock(9)
>>> for lockless read accesses. Can we simply replace rwlock
>>> with pserialize?
>> Self-answer: no
>> pserialize(9) requires that we don't block (sleep) in
>> a critical section while rwlock(9) allows to do so.
>> And there is another undocumented constraint of pserialize,
>> IIUC. It requires lockless operations on data shared
>> between readers and a writer. (Correct me if I'm wrong.)
>> In the case of ifnet_list, both requirements are not
>> satisfied as it is. Adapting ifnet_list is not so easy
>> task, and so I think using rwlock(9) is reasonable
>> at this point.
> ?? I'm confused. Which data shared between readers and writers
> are you trying to protect, and were is it stored? ifnet_list is
> the head of a linked list. About the only thing a reader can do
> with a linked list is walk it, and about the only thing a writer
> can do to a list is add something to it or delete something from
> it. I can't think of anything that would block any of those
> operations. How would a sleep happen?
> Or is it the case that what you are trying to do is keep anyone
> from modifying anything in a struct ifnet while someone else
> is reading it? If this is the problem you are trying to address
> then I guess you would have to protect all struct ifnet readers,
> not just those who found the ifnet structure from via the ifnet_list.
> Readers mostly find ifnet structures via the pointers to them
> stored in packet mbufs and in routes.
> I thought I understood what it is you wanted to accomplish, but
> I think I was mistaken.
I'm sorry for confusing you. That's just an explanation why
rwlock(9) cannot be simply replaced with pserialize(9).
I don't think using rwlock protects all ifnet data; it can
protect only ifnet_list itself.
> Dennis Ferguson
Main Index |
Thread Index |