• Sara Sharon's avatar
    iwlwifi: pcie: New RBD allocation model · 5f175703
    Sara Sharon authored
    As a preperation for multiple RX queues change the RBD
    allocation model.
    
    The new model includes a background allocator. The allocator is
    called by the interrupt handler when there are two released
    buffers by the queue, and the allocator starts allocating eight
    pages per request.
    When the queue has released 8 pages it tries claiming the
    request. If the pages are not ready - it keeps claiming.
    This new model should make sure that RBDs are always available
    across the multiple queues.
    
    The RBDs are transferred between the allocator and the queue.
    The queue moves the free RBDs upon freeing them to the allocator.
    The allocator moves them back to the queue's possession when the
    request is claimed.
    The allocator has an initial pool to make sure there are always RBDs
    available for the request completion.
    Release of the buffers at exit is done per pools - the allocator
    frees its own initial pool and the queue frees its own pool.
    
    Existing code refactor -
    -Queue's initial pool is the size of the queue only as the allocation
    of the new buffers no longer uses this pool.
    -Removal of replenish background work, and replenish calls in the
    interrupt handler and restock().
    -The replenish() and the rxq used_list are used only during
    initialization.
    -Moved page allocation to a new function for code reuse.
    
    New code -
    Allocator code - new structure and functions.
    Interrupt handler uses the allocator functions for replenishing buffers.
    Reuse of the restock() method.
    Signed-off-by: default avatarSara Sharon <sara.sharon@intel.com>
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    5f175703
internal.h 17.1 KB