Thread (18 messages) 18 messages, 6 authors, 2011-08-17

Re: [net-next RFC PATCH 4/7] tuntap: multiqueue support

flat view

From: Jason Wang <hidden>
Date: 2011-08-14 06:05:38
Also in: kvm, lkml, qemu-devel


----- Original Message -----
Le vendredi 12 août 2011 à 09:55 +0800, Jason Wang a écrit :
quoted
+ rxq = skb_get_rxhash(skb);
+ if (rxq) {
+ tfile = rcu_dereference(tun->tfiles[rxq % numqueues]);
+ if (tfile)
+ goto out;
+ }
You can avoid an expensive divide with following trick :

u32 idx = ((u64)rxq * numqueues) >> 32;
Sure.
quoted
-static struct tun_struct *tun_get(struct file *file)
+static void tun_detach_all(struct net_device *dev)
 {
- return __tun_get(file->private_data);
+ struct tun_struct *tun = netdev_priv(dev);
+ struct tun_file *tfile, *tfile_list[MAX_TAP_QUEUES];
+ int i, j = 0;
+
+ spin_lock(&tun_lock);
+
+ for (i = 0; i < MAX_TAP_QUEUES && tun->numqueues; i++) {
+ tfile = rcu_dereference_protected(tun->tfiles[i],
+ lockdep_is_held(&tun_lock));
+ if (tfile) {
+ wake_up_all(&tfile->wq.wait);
+ tfile_list[i++] = tfile;
typo here, you want tfile_list[j++] = tfile;
Yes, thanks for catching this.
quoted
+ rcu_assign_pointer(tun->tfiles[i], NULL);
+ rcu_assign_pointer(tfile->tun, NULL);
+ --tun->numqueues;
+ }
+ }
+ BUG_ON(tun->numqueues != 0);
+ spin_unlock(&tun_lock);
+
+ synchronize_rcu();
+ for(--j; j >= 0; j--)
+ sock_put(&tfile_list[j]->sk);
 }
Could you take a look at net/packet/af_packet.c, to check how David
did
the whole fanout thing ?

__fanout_unlink()

Trick is to not leave NULL entries in the tun->tfiles[] array.

It makes things easier in hot path.
Sure I would go to take a look at this.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help