Backport multiqueue support for kernels 2.6.23-27

The 2.6.23 kernel added some initial multiqueue support.
That release relied on the on the notion of struct
net_device_subqueue attached to the netdevice struct
as an array. The 2.6.27 renamed these to struct netdev_queue,
and enhanced MQ support by providing locks separately onto
each queue. MQ support on 2.6.27 also extended each netdev
to be able to assign a select_queue callback to be used by
core networking for prior to pushing the skb out to the device
driver so that queue selection can be dealt with and
customized internally on the driver.

For kernels 2.6.23..2.6.26 then we backport MQ support by
using the equivalent calls on the struct netdev_queue to
the struct net_device_subqueue. The performance penalty
here is just that all these queues share a common lock
so stateful operations on one queue would imply a delay
on other queues.

The select_queue callback was only added as of 2.6.27 via
commit eae792b7 so for kernels 2.6.23 up to 2.6.27 we must
ensure we do the selection of the queue once the core
networking calls mac80211's dev_hard_start_xmit()
(ndo_start_xmit() callback on newer kernels).

This patch thus only addresses the lack of select_queue on
kernels older than 2.6.27, naming differences are handled
in compat.

--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1495,6 +1495,10 @@ void ieee80211_xmit(struct ieee80211_sub
 		return;
 	}
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
+	/* Older kernels do not have the select_queue callback */
+	skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, skb));
+#endif
 	ieee80211_set_qos_hdr(sdata, skb);
 	ieee80211_tx(sdata, skb, false);
 	rcu_read_unlock();
