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