Thread (45 messages) 45 messages, 10 authors, 2013-05-23

Re: [PATCH v3 net-next 1/4] net: implement support for low latency socket polling

flat view

From: Eric Dumazet <hidden>
Date: 2013-05-21 13:28:50
Also in: lkml

On Tue, 2013-05-21 at 10:28 +0300, Eliezer Tamir wrote:
On 20/05/2013 18:29, Eric Dumazet wrote:
quoted
On Mon, 2013-05-20 at 13:16 +0300, Eliezer Tamir wrote:
---
quoted
quoted
+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?

quoted
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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help