Re: [PATCH 2/2] ehea: NAPI multi queue TX/RX path for SMP
From: Patrick McHardy <hidden>
Date: 2007-02-27 16:53:32
Also in:
lkml, netdev
From: Patrick McHardy <hidden>
Date: 2007-02-27 16:53:32
Also in:
lkml, netdev
Jan-Bernd Themann wrote:
This patch provides a functionality that allows parallel
RX processing on multiple RX queues by using dummy netdevices.
+static inline int ehea_hash_skb(struct sk_buff *skb, int num_qps)
+{
+ u32 tmp;
+ if ((skb->nh.iph->protocol == IPPROTO_TCP)
+ && skb->protocol == ETH_P_IP) {skb->protocol has network byte order. The ETH_P_IP test should also logically come before checking the IP protocol.
+ tmp = (skb->h.th->source + (skb->h.th->dest << 16)) % 31;
Only locally generated packets have a valid h.th pointer.
+ tmp += skb->nh.iph->daddr % 31; + return tmp % num_qps; + } + else + return 0; +} + static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct ehea_port *port = netdev_priv(dev);@@ -1796,9 +1818,18 @@ static int ehea_start_xmit(struct sk_buf unsigned long flags; u32 lkey; int swqe_index; - struct ehea_port_res *pr = &port->port_res[0]; + struct ehea_port_res *pr; + + pr = &port->port_res[ehea_hash_skb(skb, port->num_tx_qps)]; +