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)];
+