lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <1283598071.3402.21.camel@edumazet-laptop> Date: Sat, 04 Sep 2010 13:01:11 +0200 From: Eric Dumazet <eric.dumazet@...il.com> To: Changli Gao <xiaosuo@...il.com> Cc: "David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org Subject: Re: [PATCH] net: rps: add the shortcut for one rps_cpus Le samedi 04 septembre 2010 à 17:12 +0800, Changli Gao a écrit : > When there is only one rps_cpus, skb_get_rxhash() can be eliminated. > > Signed-off-by: Changli Gao <xiaosuo@...il.com> > --- > net/core/dev.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > diff --git a/net/core/dev.c b/net/core/dev.c > index d8c43e7..2bf740c 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -2345,7 +2345,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, > struct rps_dev_flow **rflowp) > { > struct netdev_rx_queue *rxqueue; > - struct rps_map *map; > + struct rps_map *map = NULL; > struct rps_dev_flow_table *flow_table; > struct rps_sock_flow_table *sock_flow_table; > int cpu = -1; > @@ -2363,8 +2363,17 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, > } else > rxqueue = dev->_rx; > > - if (!rxqueue->rps_map && !rxqueue->rps_flow_table) > + if (rxqueue->rps_map) { > + map = rcu_dereference(rxqueue->rps_map); > + if (map && map->len == 1) { > + tcpu = map->cpus[0]; > + if (cpu_online(tcpu)) > + cpu = tcpu; > + goto done; > + } > + } else if (!rxqueue->rps_flow_table) { > goto done; > + } > > skb_reset_network_header(skb); > if (!skb_get_rxhash(skb)) > @@ -2409,7 +2418,6 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb, > } > } > > - map = rcu_dereference(rxqueue->rps_map); > if (map) { > tcpu = map->cpus[((u64) skb->rxhash * map->len) >> 32]; > > -- You are 'optimizing' a very unusual case and slow down 99% of normal uses. Normal way to handle this, is to use irq affinity and deliver interrupts directly to the target cpu. -- 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