Thread (3 messages) 3 messages, 2 authors, 2007-02-28

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

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.
quoted hunk ↗ jump to hunk
+		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)];
+
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help