[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <49BADE87.40407@cosmosbay.com>
Date: Fri, 13 Mar 2009 23:30:31 +0100
From: Eric Dumazet <dada1@...mosbay.com>
To: David Miller <davem@...emloft.net>
CC: kchang@...enacr.com, netdev@...r.kernel.org,
cl@...ux-foundation.org, bmb@...enacr.com
Subject: Re: Multicast packet loss
David Miller a écrit :
> From: Eric Dumazet <dada1@...mosbay.com>
> Date: Mon, 09 Mar 2009 07:36:57 +0100
>
>> I chose cmpxchg() because I needed some form of exclusion here.
>> I first added a spinlock inside "struct softirq_del" then I realize
>> I could use cmpxchg() instead and keep the structure small. As the
>> synchronization is only needed at queueing time, we could pass
>> the address of a spinlock XXX to sofirq_del() call.
>
> I don't understand why you need the mutual exclusion in the
> first place. The function pointer always has the same value.
> And this locking isn't protecting the list insertion either,
> as that isn't even necessary.
>
> It just looks like plain overhead to me.
I was lazy to check all callers (all protocols) had a lock on sock,
and prefered safety.
I was fooled by the read_lock(), and though several cpus could call
this function in //
>
>> Also, when an event was queued for later invocation, I also needed to keep
>> a reference on "struct socket" to make sure it doesnt disappear before
>> the invocation. Not all sockets are RCU guarded (we added RCU only for
>> some protocols (TCP, UDP ...). So I found keeping a read_lock
>> on callback was the easyest thing to do. I now realize we might
>> overflow preempt_count, so special care is needed.
>
> You're using this in UDP so... make the rule that you can't use
> this with a non-RCU-quiescent protocol.
UDP/TCP only ? I though many other protocols (not all using RCU) were
using sock_def_readable() too...
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists