]> git.baikalelectronics.ru Git - kernel.git/commit
sfc: limit ARFS workitems in flight per channel
authorEdward Cree <ecree@solarflare.com>
Fri, 13 Apr 2018 18:18:09 +0000 (19:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 14 Apr 2018 19:39:53 +0000 (15:39 -0400)
commit2ecfd5361b040c1af9d480b410c12dc3e55a5651
treeb44c9774d72109d8c8ec693b9e55dd6144eb6cc0
parent1f8038850ab86ed2bdaaaf7bd4f4624fda601139
sfc: limit ARFS workitems in flight per channel

A misconfigured system (e.g. with all interrupts affinitised to all CPUs)
 may produce a storm of ARFS steering events.  With the existing sfc ARFS
 implementation, that could create a backlog of workitems that grinds the
 system to a halt.  To prevent this, limit the number of workitems that
 may be in flight for a given SFC device to 8 (EFX_RPS_MAX_IN_FLIGHT), and
 return EBUSY from our ndo_rx_flow_steer method if the limit is reached.
Given this limit, also store the workitems in an array of slots within the
 struct efx_nic, rather than dynamically allocating for each request.
The limit should not negatively impact performance, because it is only
 likely to be hit in cases where ARFS will be ineffective anyway.

Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/net_driver.h
drivers/net/ethernet/sfc/rx.c