![David S. Miller](/assets/img/avatar_default.png)
Multiple TX queue support is a core networking feature. Signed-off-by: David S. Miller <davem@davemloft.net>
39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
|
|
HOWTO for multiqueue network device support
|
|
===========================================
|
|
|
|
Section 1: Base driver requirements for implementing multiqueue support
|
|
|
|
Intro: Kernel support for multiqueue devices
|
|
---------------------------------------------------------
|
|
|
|
Kernel support for multiqueue devices is always present.
|
|
|
|
Section 1: Base driver requirements for implementing multiqueue support
|
|
-----------------------------------------------------------------------
|
|
|
|
Base drivers are required to use the new alloc_etherdev_mq() or
|
|
alloc_netdev_mq() functions to allocate the subqueues for the device. The
|
|
underlying kernel API will take care of the allocation and deallocation of
|
|
the subqueue memory, as well as netdev configuration of where the queues
|
|
exist in memory.
|
|
|
|
The base driver will also need to manage the queues as it does the global
|
|
netdev->queue_lock today. Therefore base drivers should use the
|
|
netif_{start|stop|wake}_subqueue() functions to manage each queue while the
|
|
device is still operational. netdev->queue_lock is still used when the device
|
|
comes online or when it's completely shut down (unregister_netdev(), etc.).
|
|
|
|
Finally, the base driver should indicate that it is a multiqueue device. The
|
|
feature flag NETIF_F_MULTI_QUEUE should be added to the netdev->features
|
|
bitmap on device initialization. Below is an example from e1000:
|
|
|
|
#ifdef CONFIG_E1000_MQ
|
|
if ( (adapter->hw.mac.type == e1000_82571) ||
|
|
(adapter->hw.mac.type == e1000_82572) ||
|
|
(adapter->hw.mac.type == e1000_80003es2lan))
|
|
netdev->features |= NETIF_F_MULTI_QUEUE;
|
|
#endif
|
|
|
|
Author: Peter P. Waskiewicz Jr. <peter.p.waskiewicz.jr@intel.com>
|