|
@@ -2112,14 +2112,19 @@ out:
|
|
|
|
|
|
static u32 hashrnd __read_mostly;
|
|
|
|
|
|
-u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
|
|
|
+/*
|
|
|
+ * Returns a Tx hash based on the given packet descriptor a Tx queues' number
|
|
|
+ * to be used as a distribution range.
|
|
|
+ */
|
|
|
+u16 __skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb,
|
|
|
+ unsigned int num_tx_queues)
|
|
|
{
|
|
|
u32 hash;
|
|
|
|
|
|
if (skb_rx_queue_recorded(skb)) {
|
|
|
hash = skb_get_rx_queue(skb);
|
|
|
- while (unlikely(hash >= dev->real_num_tx_queues))
|
|
|
- hash -= dev->real_num_tx_queues;
|
|
|
+ while (unlikely(hash >= num_tx_queues))
|
|
|
+ hash -= num_tx_queues;
|
|
|
return hash;
|
|
|
}
|
|
|
|
|
@@ -2129,9 +2134,9 @@ u16 skb_tx_hash(const struct net_device *dev, const struct sk_buff *skb)
|
|
|
hash = (__force u16) skb->protocol ^ skb->rxhash;
|
|
|
hash = jhash_1word(hash, hashrnd);
|
|
|
|
|
|
- return (u16) (((u64) hash * dev->real_num_tx_queues) >> 32);
|
|
|
+ return (u16) (((u64) hash * num_tx_queues) >> 32);
|
|
|
}
|
|
|
-EXPORT_SYMBOL(skb_tx_hash);
|
|
|
+EXPORT_SYMBOL(__skb_tx_hash);
|
|
|
|
|
|
static inline u16 dev_cap_txqueue(struct net_device *dev, u16 queue_index)
|
|
|
{
|