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