sfc: replace asynchronous filter operations
Instead of having an efx->type->filter_rfs_insert() method, just use workitems with a worker function that calls efx->type->filter_insert(). The only user of this is efx_filter_rfs(), which now queues a call to efx_filter_rfs_work(). Similarly, efx_filter_rfs_expire() is now a worker function called on a new channel->filter_work work_struct, so the method efx->type->filter_rfs_expire_one() is no longer called in atomic context. We also add a new mutex efx->rps_mutex to protect the RPS state (efx-> rps_expire_channel, efx->rps_expire_index, and channel->rps_flow_id) so that the taking of efx->filter_lock can be moved to efx->type->filter_rfs_expire_one(). Thus, all filter table functions are now called in a sleepable context, allowing them to use sleeping locks in a future patch. Signed-off-by:Edward Cree <ecree@solarflare.com> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- drivers/net/ethernet/sfc/ef10.c 14 additions, 147 deletionsdrivers/net/ethernet/sfc/ef10.c
- drivers/net/ethernet/sfc/efx.c 14 additions, 1 deletiondrivers/net/ethernet/sfc/efx.c
- drivers/net/ethernet/sfc/efx.h 5 additions, 2 deletionsdrivers/net/ethernet/sfc/efx.h
- drivers/net/ethernet/sfc/farch.c 7 additions, 10 deletionsdrivers/net/ethernet/sfc/farch.c
- drivers/net/ethernet/sfc/net_driver.h 4 additions, 6 deletionsdrivers/net/ethernet/sfc/net_driver.h
- drivers/net/ethernet/sfc/nic.h 0 additions, 2 deletionsdrivers/net/ethernet/sfc/nic.h
- drivers/net/ethernet/sfc/rx.c 80 additions, 39 deletionsdrivers/net/ethernet/sfc/rx.c
- drivers/net/ethernet/sfc/siena.c 0 additions, 1 deletiondrivers/net/ethernet/sfc/siena.c
Loading
Please register or sign in to comment