• A
    net: Rewrite netif_set_xps_queues to address several issues · 01c5f864
    Alexander Duyck 提交于
    This change is meant to address several issues I found within the
    netif_set_xps_queues function.
    
    If the allocation of one of the maps to be assigned to new_dev_maps failed
    we could end up with the device map in an inconsistent state since we had
    already worked through a number of CPUs and removed or added the queue.  To
    address that I split the process into several steps.  The first of which is
    just the allocation of updated maps for CPUs that will need larger maps to
    store the queue.  By doing this we can fail gracefully without actually
    altering the contents of the current device map.
    
    The second issue I found was the fact that we were always allocating a new
    device map even if we were not adding any queues.  I have updated the code
    so that we only allocate a new device map if we are adding queues,
    otherwise if we are not adding any queues to CPUs we just skip to the
    removal process.
    
    The last change I made was to reuse the code from remove_xps_queue to remove
    the queue from the CPU.  By making this change we can be consistent in how
    we go about adding and removing the queues from the CPUs.
    Signed-off-by: NAlexander Duyck <alexander.h.duyck@intel.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    01c5f864
dev.c 177.3 KB