| 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. |
| |