This implement the locking required by the PM to allow concurent subflow accessing the msk PM data in a safe way. Such data is protected via a msk-level spinlock. It relies on the Double checked locking to avoid contention in the most common scenarion (no or very little PM "actions"). Additionally changes more than a bit the PM hooks/APIs, to be hopefully simpler and avoiding duplicate code (no v4/v6 variant, work queue management done by the core PM infra). It also introduce the PM netlink - it replace the current basic ones, the related patch has been dropped locally. git tree available at: https://github.com/pabeni/mptcp/tree/mptcp_net-next_part3_6 changes from v2: - hook the new tests into the self-tests infra changes from v1: - 2 new patches: mp_join self-tests (9/9) and a specific mp_join fix (6/9) - fixed several bugs as pointed out by the above tests - added support for bind to interface changes from RFC: - cleanup uAPIs - added self-tests for the uAPIs - fixed ton of bugs - included feedback from Mat include/uapi/linux/mptcp.h | 53 + net/mptcp/Makefile | 3 net/mptcp/options.c | 60 - net/mptcp/pm.c | 353 +++------ net/mptcp/pm_netlink.c | 828 ++++++++++++++++++++++ net/mptcp/protocol.c | 14 net/mptcp/protocol.h | 113 +-- net/mptcp/subflow.c | 65 + tools/testing/selftests/net/mptcp/Makefile | 9 tools/testing/selftests/net/mptcp/mptcp_connect.c | 19 tools/testing/selftests/net/mptcp/mptcp_join.sh | 296 +++++++ tools/testing/selftests/net/mptcp/pm_netlink.sh | 123 +++ tools/testing/selftests/net/mptcp/pm_nl_ctl.c | 600 +++++++++++++++ 13 files changed, 2221 insertions(+), 315 deletions(-)