linux_dsm_epyc7002/drivers/infiniband/hw/cxgb4
Steve Wise b33bd0cbfa RDMA/cxgb4: Endpoint timeout fixes
1) timedout endpoint processing can be starved. If there are continual
   CPL messages flowing into the driver, the endpoint timeout
   processing can be starved.  This condition exposed the other bugs
   below.

Solution: In process_work(), call process_timedout_eps() after each CPL
is processed.

2) Connection events can be processed even though the endpoint is on
   the timeout list.  If the endpoint is scheduled for timeout
   processing, then we must ignore MPA Start Requests and Replies.

Solution: Change stop_ep_timer() to return 1 if the ep has already been
queued for timeout processing.  All the callers of stop_ep_timer() need
to check this and act accordingly.  There are just a few cases where
the caller needs to do something different if stop_ep_timer() returns 1:

1) in process_mpa_reply(), ignore the reply and  process_timeout()
   will abort the connection.

2) in process_mpa_request, ignore the request and process_timeout()
   will abort the connection.

It is ok for callers of stop_ep_timer() to abort the connection since
that will leave the state in ABORTING or DEAD, and process_timeout()
now ignores timeouts when the ep is in these states.

3) Double insertion on the timeout list.  Since the endpoint timers
   are used for connection setup and teardown, we need to guard
   against the possibility that an endpoint is already on the timeout
   list.  This is a rare condition and only seen under heavy load and
   in the presense of the above 2 bugs.

Solution: In ep_timeout(), don't queue the endpoint if it is already on
the queue.

Signed-off-by: Steve Wise <swise@opengridcomputing.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
2014-04-11 11:36:07 -07:00
..
cm.c RDMA/cxgb4: Endpoint timeout fixes 2014-04-11 11:36:07 -07:00
cq.c RDMA/cxgb4: Ignore read reponse type 1 CQEs 2014-03-24 10:07:35 -07:00
device.c RDMA/cxgb4: Use the BAR2/WC path for kernel QPs and T5 devices 2014-04-11 11:36:01 -07:00
ev.c RDMA/cxgb4: Handle newer firmware changes 2013-08-13 11:55:44 -07:00
id_table.c drivers/infiniband/hw: rename random32() to prandom_u32() 2013-05-07 18:38:27 -07:00
iw_cxgb4.h RDMA/cxgb4: Use the BAR2/WC path for kernel QPs and T5 devices 2014-04-11 11:36:01 -07:00
Kconfig RDMA/cxgb4: Add support for active and passive open connection with IPv6 address 2013-08-13 11:55:06 -07:00
Makefile RDMA/cxgb4: Remove kfifo usage 2012-05-18 13:22:36 -07:00
mem.c Merge branches 'core', 'cxgb4', 'ip-roce', 'iser', 'misc', 'mlx4', 'nes', 'ocrdma', 'qib', 'sgwrapper', 'srp' and 'usnic' into for-next 2014-04-03 08:30:17 -07:00
provider.c RDMA/cxgb4: set error code on kmalloc() failure 2014-03-28 14:55:21 -04:00
qp.c RDMA/cxgb4: Use the BAR2/WC path for kernel QPs and T5 devices 2014-04-11 11:36:01 -07:00
resource.c RDMA/cxgb4: Remove kfifo usage 2012-05-18 13:22:36 -07:00
t4.h RDMA/cxgb4: Use the BAR2/WC path for kernel QPs and T5 devices 2014-04-11 11:36:01 -07:00
t4fw_ri_api.h RDMA/cxgb4: Add module option to tweak delayed ack 2010-07-21 10:53:52 -07:00
user.h cxgb4/iw_cxgb4: Doorbell Drop Avoidance Bug Fixes 2014-03-14 22:44:11 -04:00