mbox series

[for-next,v5,0/7] RDMA/rxe: Make multicast work

Message ID 20231205002322.10143-1-rpearsonhpe@gmail.com (mailing list archive)
Headers show
Series RDMA/rxe: Make multicast work | expand

Message

Bob Pearson Dec. 5, 2023, 12:23 a.m. UTC
After developing a test program which exercises node to node
testing of RoCE multicast it became clear that there are a
number of issues with the current rdma_rxe multicast implementation.

The issues seen include:
	- There is no support for IPV4 multicast addresses.
	- Once a multicast MAC is added it is not removed.
	- Multicast packets are sent with the wrong QP number.
	- Multicast IP addresses are not created and without
	  them no multicast packets received on the interface
	  are delivered to the rdma_rxe driver.
	- The implementation in rxe_mcast.c is potentially
	  racy if multiple simultaneous attach/detach operations
	  are issued.

This patch set fixes these issues. 
---
v5:
  Missed previous fix in error path. Add sock lock around
  ipv6_sock_mm_drop() in rxe_mcast_add6().
v4:
  Corrected a lockdep bug reported by Zhu Yanjun.
v3:
  Removed rxe_loop_and_send(). It turns out it is not needed.
  Added module parameters to set mcast limits to small values when
  driver is loaded to enable mcast limit testing.
  Rebased to current for-next branch.
v2:
  Respond to comments by Zhu.
  Added more Fixes lines.
  Added some more explanation in the commit messages.
  Fixed an error in rxe_lookup_mcg. Should have checked
	the return from rxe_get_mcg().

Bob Pearson (7):
  RDMA/rxe: Cleanup rxe_ah/av_chk_attr
  RDMA/rxe: Fix sending of mcast packets
  RDMA/rxe: Register IP mcast address
  RDMA/rxe: Let rxe_lookup_mcg use rcu_read_lock
  RDMA/rxe: Split multicast lock
  RDMA/rxe: Cleanup mcg lifetime
  RDMA/rxe: Add module parameters for mcast limits

 drivers/infiniband/sw/rxe/Makefile     |   3 +-
 drivers/infiniband/sw/rxe/rxe.c        |   8 +-
 drivers/infiniband/sw/rxe/rxe_av.c     |  50 +--
 drivers/infiniband/sw/rxe/rxe_loc.h    |   6 +-
 drivers/infiniband/sw/rxe/rxe_mcast.c  | 526 +++++++++++--------------
 drivers/infiniband/sw/rxe/rxe_net.c    |   6 +-
 drivers/infiniband/sw/rxe/rxe_net.h    |   1 +
 drivers/infiniband/sw/rxe/rxe_opcode.h |   2 +-
 drivers/infiniband/sw/rxe/rxe_param.c  |  23 ++
 drivers/infiniband/sw/rxe/rxe_param.h  |   4 +
 drivers/infiniband/sw/rxe/rxe_qp.c     |   4 +-
 drivers/infiniband/sw/rxe/rxe_recv.c   |  11 +-
 drivers/infiniband/sw/rxe/rxe_req.c    |  11 +-
 drivers/infiniband/sw/rxe/rxe_verbs.c  |   5 +-
 drivers/infiniband/sw/rxe/rxe_verbs.h  |   5 +-
 15 files changed, 305 insertions(+), 360 deletions(-)
 create mode 100644 drivers/infiniband/sw/rxe/rxe_param.c

Comments

Zhu Yanjun Dec. 5, 2023, 5:50 a.m. UTC | #1
Add  David S. Miller and  David Ahern.

They are the maintainers in netdev and very familiar with mcast.

Zhu Yanjun

在 2023/12/5 8:23, Bob Pearson 写道:
> After developing a test program which exercises node to node
> testing of RoCE multicast it became clear that there are a
> number of issues with the current rdma_rxe multicast implementation.
>
> The issues seen include:
> 	- There is no support for IPV4 multicast addresses.
> 	- Once a multicast MAC is added it is not removed.
> 	- Multicast packets are sent with the wrong QP number.
> 	- Multicast IP addresses are not created and without
> 	  them no multicast packets received on the interface
> 	  are delivered to the rdma_rxe driver.
> 	- The implementation in rxe_mcast.c is potentially
> 	  racy if multiple simultaneous attach/detach operations
> 	  are issued.
>
> This patch set fixes these issues.
> ---
> v5:
>    Missed previous fix in error path. Add sock lock around
>    ipv6_sock_mm_drop() in rxe_mcast_add6().
> v4:
>    Corrected a lockdep bug reported by Zhu Yanjun.
> v3:
>    Removed rxe_loop_and_send(). It turns out it is not needed.
>    Added module parameters to set mcast limits to small values when
>    driver is loaded to enable mcast limit testing.
>    Rebased to current for-next branch.
> v2:
>    Respond to comments by Zhu.
>    Added more Fixes lines.
>    Added some more explanation in the commit messages.
>    Fixed an error in rxe_lookup_mcg. Should have checked
> 	the return from rxe_get_mcg().
>
> Bob Pearson (7):
>    RDMA/rxe: Cleanup rxe_ah/av_chk_attr
>    RDMA/rxe: Fix sending of mcast packets
>    RDMA/rxe: Register IP mcast address
>    RDMA/rxe: Let rxe_lookup_mcg use rcu_read_lock
>    RDMA/rxe: Split multicast lock
>    RDMA/rxe: Cleanup mcg lifetime
>    RDMA/rxe: Add module parameters for mcast limits
>
>   drivers/infiniband/sw/rxe/Makefile     |   3 +-
>   drivers/infiniband/sw/rxe/rxe.c        |   8 +-
>   drivers/infiniband/sw/rxe/rxe_av.c     |  50 +--
>   drivers/infiniband/sw/rxe/rxe_loc.h    |   6 +-
>   drivers/infiniband/sw/rxe/rxe_mcast.c  | 526 +++++++++++--------------
>   drivers/infiniband/sw/rxe/rxe_net.c    |   6 +-
>   drivers/infiniband/sw/rxe/rxe_net.h    |   1 +
>   drivers/infiniband/sw/rxe/rxe_opcode.h |   2 +-
>   drivers/infiniband/sw/rxe/rxe_param.c  |  23 ++
>   drivers/infiniband/sw/rxe/rxe_param.h  |   4 +
>   drivers/infiniband/sw/rxe/rxe_qp.c     |   4 +-
>   drivers/infiniband/sw/rxe/rxe_recv.c   |  11 +-
>   drivers/infiniband/sw/rxe/rxe_req.c    |  11 +-
>   drivers/infiniband/sw/rxe/rxe_verbs.c  |   5 +-
>   drivers/infiniband/sw/rxe/rxe_verbs.h  |   5 +-
>   15 files changed, 305 insertions(+), 360 deletions(-)
>   create mode 100644 drivers/infiniband/sw/rxe/rxe_param.c
>
David Ahern Dec. 7, 2023, 4:15 p.m. UTC | #2
On 12/4/23 10:50 PM, Zhu Yanjun wrote:
> Add  David S. Miller and  David Ahern.
> 
> They are the maintainers in netdev and very familiar with mcast.
> 

I am nowhere close to being an expert on multicast, but many members of
the netdev community are. This set seems to be refactoring rxe code vs
new use of Linux networking stack. If there is something specific,
please Cc netdev on the entire patch set with a request in the cover
letter for specific reviews of individual patches.