• Sukadev Bhattiprolu's avatar
    ibmvnic: Reuse rx pools when possible · 489de956
    Sukadev Bhattiprolu authored
    Rather than releasing the rx pools on and reallocating them on every
    reset, reuse the rx pools unless the pool parameters (number of pools,
    size of each pool or size of each buffer in a pool) have changed.
    
    If the pool parameters changed, then release the old pools (if any)
    and allocate new ones.
    
    Specifically release rx pools, if:
    	- adapter is removed,
    	- pool parameters change during reset,
    	- we encounter an error when opening the adapter in response
    	  to a user request (in ibmvnic_open()).
    
    and don't release them:
    	- in __ibmvnic_close() or
    	- on errors in __ibmvnic_open()
    
    in the hope that we can reuse them on the next reset.
    
    With these, reset_rx_pools() can be dropped because its optimzation is
    now included in init_rx_pools() itself.
    
    cleanup_rx_pools() releases all the skbs associated with the pool and
    is called from ibmvnic_cleanup(), which is called on every reset. Since
    we want to reuse skbs across resets, move cleanup_rx_pools() out of
    ibmvnic_cleanup() and call it only when user closes the adapter.
    
    Add two new adapter fields, ->prev_rx_buf_sz, ->prev_rx_pool_size to
    keep track of the previous values and use them to decide whether to
    reuse or realloc the pools.
    Reviewed-by: default avatarRick Lindsley <ricklind@linux.vnet.ibm.com>
    Reviewed-by: default avatarDany Madden <drt@linux.ibm.com>
    Signed-off-by: default avatarSukadev Bhattiprolu <sukadev@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    489de956
ibmvnic.c 161 KB