Or Gerlitz wrote:
Steve Wise wrote:
The cxgb3/4 drivers do not set IFF_NOARP and rely on ND being done as
part of connection setup.  The driver will initiate ND if there isn't a
neigh entry available at the time the iwarp driver tries to send a SYN or SYN/ACK.

okay, understood, thanks for clarifying this out.

The cxgb* drivers actually reference the neigh and dst structs until the
offload connection is gone.  Also if the the offloaded connection has
problems transmitting (due to a L2 address change, for example), then
the driver will initiate ND again by calling neigh_event_send().  See
t4_l2t_send_event() in l2t.c which is called by the iwarp driver in
peer_abort() from iwch_cm.c when the HW tells us its retransmitting too much.

In the general case of rdma-cm consumer, e.g IB RC based and/or UD unicast based, we don't have such feedback mechanism from the HW. As such, I would draw the line here around adopting into the rdma-cm the behavior of referencing the neigh and dst structures until the connection is gone (could you point on the func/path in drivers/net/cxgb3/l2t.c which does this? i wasn't sure).



Actually the dst entry ref/deref is really done in iw_cxgb3. The dst/neigh entries are referenced in iwch_connect() and pass_accept_req() by calling ip_route_output() via find_route(). They are released in __free_ep() when the endpoint is finally freed after connection shutdown.


The L2T code deals with maintaining the HW L2 entries and dealing with neighbour change events from the kernel.



Steve.

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to