diff options
author | 2020-03-10 11:25:38 +0200 | |
---|---|---|
committer | 2020-03-17 17:05:52 -0300 | |
commit | c206f8bad15d30f1e35821c21a2fb146e4668ebf (patch) | |
tree | c4e8739ec6b8d3bb751842beabcbbecfbb2017b0 /tools/perf/scripts/python/export-to-postgresql.py | |
parent | RDMA/cm: Make it clear that there is no concurrency in cm_sidr_req_handler() (diff) | |
download | wireguard-linux-c206f8bad15d30f1e35821c21a2fb146e4668ebf.tar.xz wireguard-linux-c206f8bad15d30f1e35821c21a2fb146e4668ebf.zip |
RDMA/cm: Make it clearer how concurrency works in cm_req_handler()
ib_crate_cm_id() immediately places the id in the xarray, and publishes it
into the remote_id and remote_qpn rbtrees. This makes it visible to other
threads before it is fully set up.
It appears the thinking here was that the states IB_CM_IDLE and
IB_CM_REQ_RCVD do not allow any MAD handler or lookup in the remote_id and
remote_qpn rbtrees to advance.
However, cm_rej_handler() does take an action on IB_CM_REQ_RCVD, which is
not really expected by the design.
Make the whole thing clearer:
- Keep the new cm_id out of the xarray until it is completely set up.
This directly prevents MAD handlers and all rbtree lookups from seeing
the pointer.
- Move all the trivial setup right to the top so it is obviously done
before any concurrency begins
- Move the mutation of the cm_id_priv out of cm_match_id() and into the
caller so the state transition is obvious
- Place the manipulation of the work_list at the end, under lock, after
the cm_id is placed in the xarray. The work_count cannot change on an
ID outside the xarray.
- Add some comments
Link: https://lore.kernel.org/r/20200310092545.251365-9-leon@kernel.org
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Diffstat (limited to 'tools/perf/scripts/python/export-to-postgresql.py')
0 files changed, 0 insertions, 0 deletions