--- /dev/null
+From fdd3d631cddad20ad9d3e1eb7dbf26825a8a121f Mon Sep 17 00:00:00 2001
+From: Krishna Kumar <krkumar2@in.ibm.com>
+Date: Wed, 3 Feb 2010 13:13:10 +0000
+Subject: ixgbe: Fix return of invalid txq
+
+From: Krishna Kumar <krkumar2@in.ibm.com>
+
+commit fdd3d631cddad20ad9d3e1eb7dbf26825a8a121f upstream.
+
+a developer had complained of getting lots of warnings:
+
+"eth16 selects TX queue 98, but real number of TX queues is 64"
+
+http://www.mail-archive.com/e1000-devel@lists.sourceforge.net/msg02200.html
+
+As there was no follow up on that bug, I am submitting this
+patch assuming that the other return points will not return
+invalid txq's, and also that this fixes the bug (not tested).
+
+Signed-off-by: Krishna Kumar <krkumar2@in.ibm.com>
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
+Acked-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
+
+
+---
+ drivers/net/ixgbe/ixgbe_main.c | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/ixgbe/ixgbe_main.c
++++ b/drivers/net/ixgbe/ixgbe_main.c
+@@ -5241,9 +5241,13 @@ static int ixgbe_maybe_stop_tx(struct ne
+ static u16 ixgbe_select_queue(struct net_device *dev, struct sk_buff *skb)
+ {
+ struct ixgbe_adapter *adapter = netdev_priv(dev);
++ int txq = smp_processor_id();
+
+- if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE)
+- return smp_processor_id();
++ if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) {
++ while (unlikely(txq >= dev->real_num_tx_queues))
++ txq -= dev->real_num_tx_queues;
++ return txq;
++ }
+
+ if (adapter->flags & IXGBE_FLAG_DCB_ENABLED)
+ return (skb->vlan_tci & IXGBE_TX_FLAGS_VLAN_PRIO_MASK) >> 13;