Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754445Ab3EUN2u (ORCPT ); Tue, 21 May 2013 09:28:50 -0400 Received: from mail-pa0-f43.google.com ([209.85.220.43]:57441 "EHLO mail-pa0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753024Ab3EUN2t (ORCPT ); Tue, 21 May 2013 09:28:49 -0400 Message-ID: <1369142926.3301.213.camel@edumazet-glaptop> Subject: Re: [PATCH v3 net-next 1/4] net: implement support for low latency socket polling From: Eric Dumazet To: Eliezer Tamir Cc: Dave Miller , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Jesse Brandeburg , Don Skidmore , e1000-devel@lists.sourceforge.net, Willem de Bruijn , Andi Kleen , HPA , Eliezer Tamir Date: Tue, 21 May 2013 06:28:46 -0700 In-Reply-To: <519B2237.20204@linux.intel.com> References: <20130520101552.14133.45953.stgit@ladj378.jer.intel.com> <20130520101601.14133.874.stgit@ladj378.jer.intel.com> <1369063764.3301.182.camel@edumazet-glaptop> <519B2237.20204@linux.intel.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.2.3-0ubuntu6 Content-Transfer-Encoding: 7bit Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1756 Lines: 51 On Tue, 2013-05-21 at 10:28 +0300, Eliezer Tamir wrote: > On 20/05/2013 18:29, Eric Dumazet wrote: > > On Mon, 2013-05-20 at 13:16 +0300, Eliezer Tamir wrote: > --- > >> +static inline void skb_mark_ll(struct sk_buff *skb, struct napi_struct *napi) > >> +{ > >> + skb->dev_ref = napi; > >> +} > >> + > >> +static inline void sk_mark_ll(struct sock *sk, struct sk_buff *skb) > >> +{ > >> + sk->dev_ref = skb->dev_ref; > >> +} > > > > I do not see why it's safe to keep a pointer to a napi object without > > taking a reference, or something to prevent object being removed. > > > > Using a genid might be enough. (some counter incremented every time a > > napi is dismantled) > > I really like this approach and I tried it. > The main problem I had is that you need to increase the size of the skb > to store the generation id unless you stuff it in the flags2 bitfield. > There appear to be only 7 useful bit left there. > Is it OK to use them all up? > > > > Alternatively, use a napi_id instead of a pointer. > > I'm not sure I understand what you propose. Oh well. To get a pointer to a struct net_device, we can use ifindex, and do a rcu lookup into a hash table to get the net_device. We do not need {pointer,ifindex} but {ifindex} is enough My suggestion is to not have skb->skb_ref but skb->napi_index : Its safe to copy its value from skb->napi_index to sk->napi_index without refcounting. All NAPI need to get a unique napi_index, and be inserted in a hash table for immediate/fast lookup. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/