Enhanced mode for IPoIB driver
cover Enhanced mode for IPoIB driver
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line. I hope that it doesn't really matter and it won't stop you from merging it.
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
Leon
---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of the prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.
The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndo start_xmit has only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we are rdma_netdev after all)
The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.
Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
Erez
Erez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacks
Leon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
drivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------ drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)
--
2.12.0
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404191732.31895-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
PATCH 1/6 IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Add RDMA netdev interface to ib device structure allowing RDMA netdev devices to be allocated by ib clients.
The idea is to allow to providers to optimize IPoIB data path. New struct that includes functions and data member is exposed. It exposes set of callback functions for handling data path flows in IPoIB driver.
Each provider can support these set of functions in order to optimize its specific data path, and let IPoIB to leverage its data path.
There is an assumption, that providers should give the full set of functions and not only part of them, in order to work properly.
--- include/rdma/ib_verbs.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+)
include/rdma/ib_verbs.h +41 -0
@@ -55,6 +55,7 @@#include <net/ip.h> #include <linux/string.h> #include <linux/slab.h> +#include <linux/netdevice.h> #include <linux/if_link.h> #include <linux/atomic.h>
@@ -1862,7 +1863,38 @@ struct ib_port_immutable {u32 max_mad_size; }; +/* rdma netdev type - specifies protocol type */ +enum rdma_netdev_t { +RDMA_NETDEV_IPOIB , +}; + +/* +* struct rdma_netdev - rdma netdev +* For cases where netstack interfacing is required. +*/ +struct rdma_netdev { +void *clnt_priv; + +/* control functions */ +void (*set_id)(struct net_device *netdev,int id); +/* send packet */ +int (*send)(struct net_device *dev,struct sk_buff *skb, +struct ib_ah *address,u32 dqpn); +/* multicast */ +int (*attach_mcast)(struct net_device *dev,struct ib_device *hca, +union ib_gid *gid,u16 mlid, +int set_qkey,u32 qkey); +int (*detach_mcast)(struct net_device *dev,struct ib_device *hca, +union ib_gid *gid,u16 mlid); + +/* rdma-netdev private members */ +struct ib_device *hca; +}; +struct ib_device { +/* Do not access @dma_device directly from ULP nor from HW drivers. */ +struct device *dma_device; +char name[IB_DEVICE_NAME_MAX ];struct list_head event_handler_list;
@@ -2112,6 +2144,15 @@ struct ib_device {struct ib_rwq_ind_table_init_attr *init_attr, struct ib_udata *udata);int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *wq_ind_table); +/* rdma netdev operations */ +struct net_device *(*alloc_rdma_netdev)( +struct ib_device *device, +u8 port_num, +enum rdma_netdev_t type, +const char *name, +unsigned char name_assign_type, +void (*setup)(struct net_device *)); +void (*free_rdma_netdev)(struct net_device *netdev);struct module *owner;struct device dev;
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404191732.31895-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
include/rdma/ib_verbs.h struct ib_port_immutable { · line 1897
Quoted 4 lines · Leon Romanovsky
struct
ib_device{include/rdma/ib_verbs.h +3
-0+/* Do not access @dma_device directly from ULP nor from HW drivers. */ +struct device *dma_device; +
Why is this hunk in this patch? I thought Bart was taking care of this topic?
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404193730.GA10780-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Re: [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 8 lines · Jason Gunthorpe
include/rdma/ib_verbs.h struct ib_port_immutable { · line 1897
Quoted 4 lines · Leon Romanovsky
struct
ib_device{include/rdma/ib_verbs.h +3
-0+/* Do not access @dma_device directly from ULP nor from HW drivers. */ +struct device *dma_device; +Why is this hunk in this patch? I thought Bart was taking care of this topic?
That hunk is already upstream. See also commit 0957c29f78af.
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
In reply to a message not in the archiveQuoted 8 lines · Jason Gunthorpe
include/rdma/ib_verbs.h struct ib_port_immutable { · line 1897
Quoted 4 lines · Leon Romanovsky
struct
ib_device{include/rdma/ib_verbs.h +3
-0+/* Do not access @dma_device directly from ULP nor from HW drivers. */ +struct device *dma_device; +Why is this hunk in this patch? I thought Bart was taking care of this topic?
This patch set is based on -rc3, Bart's commit is available in -rc4. ➜ linux-rdma git:(topic/ipoib-accel) git describe 0957c29f78af v4.11-rc3-10-g0957c29f78af
Quoted 2 lines
Jason
PATCH 2/6 IB/IPoIB: Separate control and data related initializations
In reply to a message not in the archiveFrom: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/[email protected]>
This patch prepares init and teardown flows so we can call them through ipoib_options function pointers.
It arranges that area of code as the following:
* All operations which deal with the resource allocation/deletion are performed in one place.
* All operations that are control oriented, meaning that they are not connected to a specific hardware, are performed in a separate place.
The operations for allocation of hardware resources are now in the function ipoib_dev_init_default, and the deletion of all the resources are in ipoib_dev_uninit_default
The only exception is the creation of the PD object, which is used both for resource allocation (create QP etc.) and for control flows like creating AH.
It also does:
* Move creation of rx_ring and tx_ring to be in the resources allocation area.
* Move the function ipoib_ib_dev_open that does the open device to the control area instead of the dev_init which creates resources.
--- drivers/infiniband/ulp/ipoib/ipoib.h | 5 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 38 +++------- drivers/infiniband/ulp/ipoib/ipoib_main.c | 116 ++++++++++++++++++++++++----- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 40 +--------- 4 files changed, 109 insertions(+), 90 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib.h +2 -3
@@ -491,14 +491,13 @@ void ipoib_mark_paths_invalid(struct net_device *dev);void ipoib_flush_paths (struct net_device *dev);int ipoib_check_sm_sendonly_fullmember_support (struct ipoib_dev_priv *priv);struct ipoib_dev_priv *ipoib_intf_alloc (const char *format); - -int ipoib_ib_dev_init (struct net_device *dev,struct ib_device *ca,int port); +void ipoib_ib_tx_timer_func (unsigned long ctx);void ipoib_ib_dev_flush_light (struct work_struct *work);void ipoib_ib_dev_flush_normal (struct work_struct *work);void ipoib_ib_dev_flush_heavy (struct work_struct *work);void ipoib_pkey_event (struct work_struct *work);void ipoib_ib_dev_cleanup (struct net_device *dev); - +void ipoib_dev_uninit_default (struct net_device *dev);int ipoib_ib_dev_open (struct net_device *dev);void ipoib_ib_dev_up (struct net_device *dev);void ipoib_ib_dev_down (struct net_device *dev);
drivers/infiniband/ulp/ipoib/ipoib_ib.c +9 -29
@@ -692,7 +692,7 @@ static void ipoib_stop_ah(struct net_device *dev)ipoib_flush_ah (dev); } -static void ipoib_ib_tx_timer_func (unsigned long ctx) +void ipoib_ib_tx_timer_func (unsigned long ctx) {drain_tx_cq ((struct net_device *)ctx); }
@@ -913,32 +913,6 @@ void ipoib_ib_dev_stop(struct net_device *dev)ib_req_notify_cq (priv->recv_cq,IB_CQ_NEXT_COMP ); } -int ipoib_ib_dev_init (struct net_device *dev,struct ib_device *ca,int port) -{ -struct ipoib_dev_priv *priv =netdev_priv (dev); - - priv->ca = ca; - priv->port = port; - priv->qp =NULL ; - -if (ipoib_transport_dev_init (dev, ca)) { -printk (KERN_WARNING "%s: ipoib_transport_dev_init failed\n" , ca->name); -return -ENODEV ; - } - -setup_timer (&priv->poll_timer, ipoib_ib_tx_timer_func, - (unsigned long ) dev); - -if (dev->flags &IFF_UP ) { -if (ipoib_ib_dev_open (dev)) { -ipoib_transport_dev_cleanup (dev); -return -ENODEV ; - } - } - -return 0 ; -} -/* * Takes whatever value which is in pkey index 0 and updates priv->pkey * returns 0 if the pkey value was changed.
@@ -1236,7 +1210,13 @@ void ipoib_ib_dev_cleanup(struct net_device *dev)*/ ipoib_stop_ah (dev); -ipoib_transport_dev_cleanup (dev); -} +clear_bit (IPOIB_PKEY_ASSIGNED , &priv->flags); + +ipoib_dev_uninit_default (dev); +if (priv->pd) { +ib_dealloc_pd (priv->pd); + priv->pd =NULL ; + } +}
drivers/infiniband/ulp/ipoib/ipoib_main.c +97 -19
153 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_verbs.c +1 -39
@@ -147,22 +147,6 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)int ret, size;int i; - priv->pd =ib_alloc_pd (priv->ca,0 ); -if (IS_ERR (priv->pd)) { -printk (KERN_WARNING "%s: failed to allocate PD\n" , ca->name); -return -ENODEV ; - } - -/* -* the various IPoIB tasks assume they will never race against -* themselves, so always use a single thread workqueue -*/ - priv->wq =alloc_ordered_workqueue ("ipoib_wq" ,WQ_MEM_RECLAIM ); -if (!priv->wq) { -printk (KERN_WARNING "ipoib: failed to allocate device WQ\n" ); - goto out_free_pd; - } - size = ipoib_recvq_size +1 ; ret =ipoib_cm_dev_init (dev);if (!ret) {
@@ -173,7 +157,7 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca) size += ipoib_recvq_size * ipoib_max_conn_qp; }else if (ret != -ENOSYS ) - goto out_free_wq; +return -ENODEV ; cq_attr.cqe = size; priv->recv_cq = ib_create_cq(priv->ca, ipoib_ib_completion, NULL,
@@ -212,10 +196,6 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca) goto out_free_send_cq; } - priv->dev->dev_addr[1 ] = (priv->qp->qp_num >>16 ) &0xff ; - priv->dev->dev_addr[2 ] = (priv->qp->qp_num >>8 ) &0xff ; - priv->dev->dev_addr[3 ] = (priv->qp->qp_num ) &0xff ; -for (i =0 ; i <MAX_SKB_FRAGS +1 ; ++i) priv->tx_sge[i].lkey = priv->pd->local_dma_lkey;
@@ -247,13 +227,6 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca) out_cm_dev_cleanup:ipoib_cm_dev_cleanup (dev); -out_free_wq: -destroy_workqueue (priv->wq); - priv->wq =NULL ; - -out_free_pd: -ib_dealloc_pd (priv->pd); -return -ENODEV ; }
@@ -266,7 +239,6 @@ void ipoib_transport_dev_cleanup(struct net_device *dev)ipoib_warn (priv,"ib_qp_destroy failed\n" ); priv->qp =NULL ; -clear_bit (IPOIB_PKEY_ASSIGNED , &priv->flags); }if (ib_destroy_cq (priv->send_cq))
@@ -274,16 +246,6 @@ void ipoib_transport_dev_cleanup(struct net_device *dev)if (ib_destroy_cq (priv->recv_cq))ipoib_warn (priv,"ib_cq_destroy (recv) failed\n" ); - -ipoib_cm_dev_cleanup (dev); - -if (priv->wq) { -flush_workqueue (priv->wq); -destroy_workqueue (priv->wq); - priv->wq =NULL ; - } - -ib_dealloc_pd (priv->pd); } void ipoib_event(struct ib_event_handler *handler,
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 3/6 IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo
In reply to a message not in the archiveFrom: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/[email protected]>
This patch is preparing the netdev part at the IPoIB driver to be able to use the ipoib_options.
It deals with the two flows from the .ndo: ipoib_open and ipoib_stop.
The code is rearranged as follows:
* All operations which deal with the hardware resources, (for example change QP state, post-receive etc.) are performed in one place.
* All operations that are control oriented (like restart multicast task, start the reap_ah etc.) are performed in separate place.
The functions that deal with the hardware resources now located at __ipoib_ib_dev_open for the ipoib_open flow and __ipoib_ib_dev_stop for ipoib_stop.
--- drivers/infiniband/ulp/ipoib/ipoib.h | 2 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 228 +++++++++++++++++------------- drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 +- 3 files changed, 129 insertions(+), 103 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib.h +1 -1
@@ -501,7 +501,7 @@ void ipoib_dev_uninit_default(struct net_device *dev);int ipoib_ib_dev_open (struct net_device *dev);void ipoib_ib_dev_up (struct net_device *dev);void ipoib_ib_dev_down (struct net_device *dev); -void ipoib_ib_dev_stop (struct net_device *dev); +int ipoib_ib_dev_stop_default (struct net_device *dev);void ipoib_pkey_dev_check_presence (struct net_device *dev);int ipoib_dev_init (struct net_device *dev,struct ib_device *ca,int port);
drivers/infiniband/ulp/ipoib/ipoib_ib.c +127 -101
267 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_main.c +1 -1
@@ -166,7 +166,7 @@ static int ipoib_stop(struct net_device *dev)netif_stop_queue (dev);ipoib_ib_dev_down (dev); -ipoib_ib_dev_stop (dev); +ipoib_ib_dev_stop_default (dev);if (!test_bit (IPOIB_FLAG_SUBINTERFACE , &priv->flags)) {struct ipoib_dev_priv *cpriv;
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 4/6 IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions
In reply to a message not in the archiveFrom: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/[email protected]>
Change of function parameter name from qpn to be dqpn.
--- drivers/infiniband/ulp/ipoib/ipoib.h | 2 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib.h +1 -1
@@ -483,7 +483,7 @@ int ipoib_add_pkey_attr(struct net_device *dev);int ipoib_add_umcast_attr (struct net_device *dev);void ipoib_send (struct net_device *dev,struct sk_buff *skb, -struct ipoib_ah *address,u32 qpn); +struct ipoib_ah *address,u32 dqpn);void ipoib_reap_ah (struct work_struct *work);struct ipoib_path *__path_find (struct net_device *dev,void *gid);
drivers/infiniband/ulp/ipoib/ipoib_ib.c +4 -4
@@ -513,7 +513,7 @@ void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr)static inline int post_send (struct ipoib_dev_priv *priv,unsigned int wr_id, -struct ib_ah *address,u32 qpn, +struct ib_ah *address,u32 dqpn,struct ipoib_tx_buf *tx_req,void *head,int hlen) {
@@ -523,7 +523,7 @@ static inline int post_send(struct ipoib_dev_priv *priv,ipoib_build_sge (priv, tx_req); priv->tx_wr.wr.wr_id = wr_id; - priv->tx_wr.remote_qpn = qpn; + priv->tx_wr.remote_qpn = dqpn; priv->tx_wr.ah = address;if (head) {
@@ -538,7 +538,7 @@ static inline int post_send(struct ipoib_dev_priv *priv, }void ipoib_send (struct net_device *dev,struct sk_buff *skb, -struct ipoib_ah *address,u32 qpn) +struct ipoib_ah *address,u32 dqpn) {struct ipoib_dev_priv *priv =netdev_priv (dev);struct ipoib_tx_buf *tx_req;
@@ -620,7 +620,7 @@ void ipoib_send(struct net_device *dev, struct sk_buff *skb,skb_dst_drop (skb); rc =post_send (priv, priv->tx_head & (ipoib_sendq_size -1 ), - address->ah, qpn, tx_req, phead, hlen); + address->ah, dqpn, tx_req, phead, hlen);if (unlikely (rc)) {ipoib_warn (priv,"post_send failed, error %d\n" , rc); ++dev->stats.tx_errors;
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404191732.31895-5-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
kbuild test robot
build botRe: [PATCH rdma-next 4/6] IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions
reproduce:
Hi Erez,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.11-rc5 next-20170404]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Leon-Romanovsky/Enhanced-mode-for-IPoIB-driver/20170405-063335 base: https://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git master config: i386-allmodconfig (attached as .config) compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901 reproduce: # save the attached .config to linux build tree make ARCH=i386
All errors (new ones prefixed by >>):
In file included from drivers/infiniband/ulp/ipoib/ipoib_ib.c:44:0:
drivers/infiniband/ulp/ipoib/ipoib_ib.c: In function 'ipoib_send':
>> drivers/infiniband/ulp/ipoib/ipoib_ib.c:590:29: error: 'qpn' undeclared (first use in this function)
skb->len, address, qpn);
^
drivers/infiniband/ulp/ipoib/ipoib.h:780:79: note: in definition of macro 'ipoib_printk'
printk(level "%s: " format, ((struct ipoib_dev_priv *) priv)->dev->name , ## arg)
^~~
drivers/infiniband/ulp/ipoib/ipoib_ib.c:589:2: note: in expansion of macro 'ipoib_dbg_data'
ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n",
^~~~~~~~~~~~~~
drivers/infiniband/ulp/ipoib/ipoib_ib.c:590:29: note: each undeclared identifier is reported only once for each function it appears in
skb->len, address, qpn);
^
drivers/infiniband/ulp/ipoib/ipoib.h:780:79: note: in definition of macro 'ipoib_printk'
printk(level "%s: " format, ((struct ipoib_dev_priv *) priv)->dev->name , ## arg)
^~~
drivers/infiniband/ulp/ipoib/ipoib_ib.c:589:2: note: in expansion of macro 'ipoib_dbg_data'
ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n",
^~~~~~~~~~~~~~vim +/qpn +590 drivers/infiniband/ulp/ipoib/ipoib_ib.c
78a50a5e Hans Westgaard Ry 2016-03-02 584 dev_kfree_skb_any(skb); 78a50a5e Hans Westgaard Ry 2016-03-02 585 return; 78a50a5e Hans Westgaard Ry 2016-03-02 586 } 78a50a5e Hans Westgaard Ry 2016-03-02 587 } ^1da177e Linus Torvalds 2005-04-16 588 ^1da177e Linus Torvalds 2005-04-16 589 ipoib_dbg_data(priv, "sending packet, length=%d address=%p qpn=0x%06x\n", ^1da177e Linus Torvalds 2005-04-16 @590 skb->len, address, qpn); ^1da177e Linus Torvalds 2005-04-16 591 ^1da177e Linus Torvalds 2005-04-16 592 /* ^1da177e Linus Torvalds 2005-04-16 593 * We put the skb into the tx_ring _before_ we call post_send()
:::::: The code at line 590 was first introduced by commit :::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <[email protected]> :::::: CC: Linus Torvalds <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
A message that is not in the archive (sent off-list or not yet received): 201704050840.SLVNyMTT%[email protected]
Re: [PATCH rdma-next 4/6] IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions
Quoted 5 lines · kbuild test robot
Hi Erez,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.11-rc5 next-20170404]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
It should be applied to v4.11-rc3 and not to -rc5.
Thanks
A message that is not in the archive (sent off-list or not yet received): 20170405103838.GE20443-U/[email protected]
Re: [PATCH rdma-next 4/6] IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions
Quoted 8 lines · Leon Romanovsky
Quoted 5 lines · kbuild test robot
Hi Erez,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.11-rc5 next-20170404]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]It should be applied to v4.11-rc3 and not to -rc5.
Hello Leon,
Will it be possible for Doug to apply this series to his tree without rebasing this patch series on rc5 instead of rc3?
Thanks,
Bart.--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH rdma-next 4/6] IB/IPoIB: Rename qpn to be dqpn in ipoib_send and post_send functions
Quoted 8 lines · Bart Van Assche
Quoted 7 lines · Leon Romanovsky
Quoted 5 lines · kbuild test robot
Hi Erez,
[auto build test ERROR on rdma/master]
[also build test ERROR on v4.11-rc5 next-20170404]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
Quoted 6 lines
Quoted 1 line
It should be applied to v4.11-rc3 and not to -rc5.
Hello Leon,
Will it be possible for Doug to apply this series to his tree without rebasing this patch series on rc5 instead of rc3?
Yes, I tried it now and it worked in both directions without conflicts. I merged these patches into rc5 and rc5 into them.
However, I asked from Doug explicitly during the OFA on which rc should I base my submissions and he asked to submit based on rc3, so I did.
Thanks
Quoted 4 lines
Thanks,
Bart.
PATCH 5/6 IB/IPoIB: Formatting before adding accelerator to driver
In reply to a message not in the archiveFrom: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/[email protected]>
Make ipoib_priv point to netdev_priv where the code calls netdev_priv.
--- drivers/infiniband/ulp/ipoib/ipoib.h | 11 +++-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++++++++++++------------- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +-- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 42 ++++++++-------- drivers/infiniband/ulp/ipoib/ipoib_main.c | 68 +++++++++++++------------- drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 18 +++---- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 10 ++-- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 4 +- 10 files changed, 118 insertions(+), 115 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib.h +7 -4
@@ -153,6 +153,9 @@ static inline void skb_add_pseudo_hdr(struct sk_buff *skb)skb_pull (skb,IPOIB_HARD_LEN ); } +/* Keep the refactoring compile able */ +#define ipoib_priv netdev_priv +/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */ struct ipoib_mcast {struct ib_sa_mcmember_rec mcmember;
@@ -606,14 +609,14 @@ extern int ipoib_max_conn_qp;static inline int ipoib_cm_admin_enabled (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);return IPOIB_CM_SUPPORTED (dev->dev_addr) &&test_bit (IPOIB_FLAG_ADMIN_CM , &priv->flags); }static inline int ipoib_cm_enabled (struct net_device *dev,u8 *hwaddr) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);return IPOIB_CM_SUPPORTED (hwaddr) &&test_bit (IPOIB_FLAG_ADMIN_CM , &priv->flags); }
@@ -636,13 +639,13 @@ static inline void ipoib_cm_set(struct ipoib_neigh *neigh, struct ipoib_cm_tx *tstatic inline int ipoib_cm_has_srq (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);return !!priv->cm.srq; }static inline unsigned int ipoib_cm_max_mtu (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);return priv->cm.max_cm_mtu; }
drivers/infiniband/ulp/ipoib/ipoib_cm.c +33 -33
264 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c +3 -3
@@ -60,7 +60,7 @@ static const struct ipoib_stats ipoib_gstrings_stats[] = {static void ipoib_get_drvinfo (struct net_device *netdev,struct ethtool_drvinfo *drvinfo) { -struct ipoib_dev_priv *priv =netdev_priv (netdev); +struct ipoib_dev_priv *priv =ipoib_priv (netdev);ib_get_device_fw_str (priv->ca, drvinfo->fw_version,sizeof (drvinfo->fw_version));
@@ -77,7 +77,7 @@ static void ipoib_get_drvinfo(struct net_device *netdev,static int ipoib_get_coalesce (struct net_device *dev,struct ethtool_coalesce *coal) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev); coal->rx_coalesce_usecs = priv->ethtool.coalesce_usecs; coal->rx_max_coalesced_frames = priv->ethtool.max_coalesced_frames;
@@ -88,7 +88,7 @@ static int ipoib_get_coalesce(struct net_device *dev,static int ipoib_set_coalesce (struct net_device *dev,struct ethtool_coalesce *coal) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);int ret;/*
drivers/infiniband/ulp/ipoib/ipoib_fs.c +2 -2
@@ -261,7 +261,7 @@ static const struct file_operations ipoib_path_fops = {void ipoib_create_debug_files (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);char name[IFNAMSIZ +sizeof "_path" ];snprintf (name,sizeof name,"%s_mcg" , dev->name);
@@ -279,7 +279,7 @@ void ipoib_create_debug_files(struct net_device *dev)void ipoib_delete_debug_files (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);debugfs_remove (priv->mcg_dentry);debugfs_remove (priv->path_dentry);
drivers/infiniband/ulp/ipoib/ipoib_ib.c +21 -21
168 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_main.c +34 -34
272 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_multicast.c +9 -9
@@ -114,7 +114,7 @@ static void ipoib_mcast_free(struct ipoib_mcast *mcast)struct net_device *dev = mcast->dev;int tx_dropped =0 ; -ipoib_dbg_mcast (netdev_priv (dev),"deleting multicast group %pI6\n" , +ipoib_dbg_mcast (ipoib_priv (dev),"deleting multicast group %pI6\n" , mcast->mcmember.mgid.raw);/* remove all neigh connected to this mcast */
@@ -158,7 +158,7 @@ static struct ipoib_mcast *ipoib_mcast_alloc(struct net_device *dev,static struct ipoib_mcast *__ipoib_mcast_find (struct net_device *dev,void *mgid) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);struct rb_node *n = priv->multicast_tree.rb_node;while (n) {
@@ -182,7 +182,7 @@ static struct ipoib_mcast *__ipoib_mcast_find(struct net_device *dev, void *mgidstatic int __ipoib_mcast_add (struct net_device *dev,struct ipoib_mcast *mcast) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);struct rb_node **n = &priv->multicast_tree.rb_node, *pn =NULL ;while (*n) {
@@ -375,7 +375,7 @@ static int ipoib_mcast_join_complete(int status, {struct ipoib_mcast *mcast = multicast->context;struct net_device *dev = mcast->dev; -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev); ipoib_dbg_mcast(priv, "%sjoin completion for %pI6 (status %d)\n", test_bit(IPOIB_MCAST_FLAG_SENDONLY, &mcast->flags) ?
@@ -477,7 +477,7 @@ static int ipoib_mcast_join_complete(int status,*/ static int ipoib_mcast_join (struct net_device *dev,struct ipoib_mcast *mcast) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);struct ib_sa_multicast *multicast;struct ib_sa_mcmember_rec rec = { .join_state =1
@@ -678,7 +678,7 @@ void ipoib_mcast_join_task(struct work_struct *work)void ipoib_mcast_start_thread (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);unsigned long flags;ipoib_dbg_mcast (priv,"starting multicast thread\n" );
@@ -690,7 +690,7 @@ void ipoib_mcast_start_thread(struct net_device *dev)int ipoib_mcast_stop_thread (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);unsigned long flags;ipoib_dbg_mcast (priv,"stopping multicast thread\n" );
@@ -837,7 +837,7 @@ void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb)void ipoib_mcast_dev_flush (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);LIST_HEAD (remove_list);struct ipoib_mcast *mcast, *tmcast;unsigned long flags;
@@ -1029,7 +1029,7 @@ struct ipoib_mcast_iter *ipoib_mcast_iter_init(struct net_device *dev)int ipoib_mcast_iter_next (struct ipoib_mcast_iter *iter) { -struct ipoib_dev_priv *priv =netdev_priv (iter->dev); +struct ipoib_dev_priv *priv =ipoib_priv (iter->dev);struct rb_node *n;struct ipoib_mcast *mcast;int ret =1 ;
drivers/infiniband/ulp/ipoib/ipoib_netlink.c +5 -5
@@ -44,7 +44,7 @@ static const struct nla_policy ipoib_policy[IFLA_IPOIB_MAX + 1] = {static int ipoib_fill_info (struct sk_buff *skb,const struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);u16 val;if (nla_put_u16 (skb,IFLA_IPOIB_PKEY , priv->pkey))
@@ -107,7 +107,7 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,if (!pdev || pdev->type !=ARPHRD_INFINIBAND )return -ENODEV ; - ppriv =netdev_priv (pdev); + ppriv =ipoib_priv (pdev);if (test_bit (IPOIB_FLAG_SUBINTERFACE , &ppriv->flags)) {ipoib_warn (ppriv,"child creation disallowed for child devices\n" );
@@ -129,7 +129,7 @@ static int ipoib_new_child_link(struct net *src_net, struct net_device *dev,*/ child_pkey |=0x8000 ; - err =__ipoib_vlan_add (ppriv,netdev_priv (dev), child_pkey,IPOIB_RTNL_CHILD ); + err =__ipoib_vlan_add (ppriv,ipoib_priv (dev), child_pkey,IPOIB_RTNL_CHILD );if (!err && data) err =ipoib_changelink (dev, tb, data);
@@ -140,8 +140,8 @@ static void ipoib_unregister_child_dev(struct net_device *dev, struct list_head {struct ipoib_dev_priv *priv, *ppriv; - priv =netdev_priv (dev); - ppriv =netdev_priv (priv->parent); + priv =ipoib_priv (dev); + ppriv =ipoib_priv (priv->parent);down_write (&ppriv->vlan_rwsem);unregister_netdevice_queue (dev, head);
drivers/infiniband/ulp/ipoib/ipoib_verbs.c +2 -2
@@ -130,7 +130,7 @@ int ipoib_init_qp(struct net_device *dev)int ipoib_transport_dev_init (struct net_device *dev,struct ib_device *ca) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);struct ib_qp_init_attr init_attr = { .cap = { .max_send_wr = ipoib_sendq_size,
@@ -232,7 +232,7 @@ int ipoib_transport_dev_init(struct net_device *dev, struct ib_device *ca)void ipoib_transport_dev_cleanup (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);if (priv->qp) {if (ib_destroy_qp (priv->qp))
drivers/infiniband/ulp/ipoib/ipoib_vlan.c +2 -2
@@ -44,7 +44,7 @@ static ssize_t show_parent(struct device *d, struct device_attribute *attr, char *buf) {struct net_device *dev =to_net_dev (d); -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);return sprintf (buf,"%s\n" , priv->parent->name); }
@@ -183,7 +183,7 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)if (!capable (CAP_NET_ADMIN ))return -EPERM ; - ppriv =netdev_priv (pdev); + ppriv =ipoib_priv (pdev);if (test_bit (IPOIB_FLAG_GOING_DOWN , &ppriv->flags))return -EPERM ;
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH 6/6 IB/IPoIB: Support acceleration options callbacks
In reply to a message not in the archiveFrom: Erez Shitrit <erezsh-VPRAkNaXOzVWk0Htik3J/[email protected]>
IPoIB driver now uses the new set of callback functions.
If the hardware provider supports the new ipoib_options implementation, the driver uses the callbacks in its data path flows, otherwise it uses the driver default implementation for all data flows in its code.
The default implementation wasn't change and it is exactly as it was before introduction of acceleration support.
--- drivers/infiniband/ulp/ipoib/ipoib.h | 28 +++-- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 57 +++++---- drivers/infiniband/ulp/ipoib/ipoib_main.c | 154 ++++++++++++++++++------- drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 21 ++-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 2 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 20 +++- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 5 +- 7 files changed, 198 insertions(+), 89 deletions(-)
drivers/infiniband/ulp/ipoib/ipoib.h +18 -10
@@ -52,7 +52,6 @@#include <rdma/ib_pack.h> #include <rdma/ib_sa.h> #include <linux/sched.h> -/* constants */ enum ipoib_flush_level {
@@ -153,8 +152,12 @@ static inline void skb_add_pseudo_hdr(struct sk_buff *skb)skb_pull (skb,IPOIB_HARD_LEN ); } -/* Keep the refactoring compile able */ -#define ipoib_priv netdev_priv +static inline void *ipoib_priv (const struct net_device *dev) +{ +struct rdma_netdev *rn =netdev_priv (dev); + +return rn->clnt_priv; +}/* Used for all multicast joins (broadcast, IPv4 mcast and IPv6 mcast) */ struct ipoib_mcast {
@@ -407,6 +410,7 @@ struct ipoib_dev_priv {struct timer_list poll_timer;unsigned max_send_sge;bool sm_fullmember_sendonly_support; +const struct net_device_ops *rn_ops; };struct ipoib_ah {
@@ -485,23 +489,25 @@ int ipoib_open(struct net_device *dev);int ipoib_add_pkey_attr (struct net_device *dev);int ipoib_add_umcast_attr (struct net_device *dev); -void ipoib_send (struct net_device *dev,struct sk_buff *skb, -struct ipoib_ah *address,u32 dqpn); +int ipoib_send (struct net_device *dev,struct sk_buff *skb, +struct ib_ah *address,u32 dqpn);void ipoib_reap_ah (struct work_struct *work);struct ipoib_path *__path_find (struct net_device *dev,void *gid);void ipoib_mark_paths_invalid (struct net_device *dev);void ipoib_flush_paths (struct net_device *dev);int ipoib_check_sm_sendonly_fullmember_support (struct ipoib_dev_priv *priv); -struct ipoib_dev_priv *ipoib_intf_alloc (const char *format); +struct ipoib_dev_priv *ipoib_intf_alloc (struct ib_device *hca,u8 port, +const char *format);void ipoib_ib_tx_timer_func (unsigned long ctx);void ipoib_ib_dev_flush_light (struct work_struct *work);void ipoib_ib_dev_flush_normal (struct work_struct *work);void ipoib_ib_dev_flush_heavy (struct work_struct *work);void ipoib_pkey_event (struct work_struct *work);void ipoib_ib_dev_cleanup (struct net_device *dev); -void ipoib_dev_uninit_default (struct net_device *dev); +int ipoib_ib_dev_open_default (struct net_device *dev);int ipoib_ib_dev_open (struct net_device *dev); +int ipoib_ib_dev_stop (struct net_device *dev);void ipoib_ib_dev_up (struct net_device *dev);void ipoib_ib_dev_down (struct net_device *dev);int ipoib_ib_dev_stop_default (struct net_device *dev);
@@ -564,8 +570,10 @@ void ipoib_path_iter_read(struct ipoib_path_iter *iter, struct ipoib_path *path);#endif -int ipoib_mcast_attach (struct net_device *dev,u16 mlid, -union ib_gid *mgid,int set_qkey); +int ipoib_mcast_attach (struct net_device *dev,struct ib_device *hca, +union ib_gid *mgid,u16 mlid,int set_qkey,u32 qkey); +int ipoib_mcast_detach (struct net_device *dev,struct ib_device *hca, +union ib_gid *mgid,u16 mlid);void ipoib_mcast_remove_list (struct list_head *remove_list);void ipoib_check_and_add_mcast_sendonly (struct ipoib_dev_priv *priv,u8 *mgid,struct list_head *remove_list);
@@ -589,7 +597,7 @@ void __exit ipoib_netlink_fini(void);void ipoib_set_umcast (struct net_device *ndev,int umcast_val);int ipoib_set_mode (struct net_device *dev,const char *buf); -void ipoib_setup (struct net_device *dev); +void ipoib_setup_common (struct net_device *dev);void ipoib_pkey_open (struct ipoib_dev_priv *priv);void ipoib_drain_cq (struct net_device *dev);
drivers/infiniband/ulp/ipoib/ipoib_ib.c +32 -25
166 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_main.c +115 -39
289 lines not on this page · raw message
drivers/infiniband/ulp/ipoib/ipoib_multicast.c +13 -8
@@ -212,7 +212,8 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast, struct ib_sa_mcmember_rec *mcmember) {struct net_device *dev = mcast->dev; -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev); +struct rdma_netdev *rn =netdev_priv (dev);struct ipoib_ah *ah;int ret;int set_qkey =0 ;
@@ -260,8 +261,9 @@ static int ipoib_mcast_join_finish(struct ipoib_mcast *mcast,return 0 ; } - ret =ipoib_mcast_attach (dev,be16_to_cpu (mcast->mcmember.mlid), - &mcast->mcmember.mgid, set_qkey); + ret = rn->attach_mcast (dev, priv->ca, &mcast->mcmember.mgid, +be16_to_cpu (mcast->mcmember.mlid), + set_qkey, priv->qkey);if (ret <0 ) {ipoib_warn (priv,"couldn't attach QP to multicast group %pI6\n" , mcast->mcmember.mgid.raw);
@@ -706,7 +708,8 @@ int ipoib_mcast_stop_thread(struct net_device *dev)static int ipoib_mcast_leave (struct net_device *dev,struct ipoib_mcast *mcast) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev); +struct rdma_netdev *rn =netdev_priv (dev);int ret =0 ;if (test_and_clear_bit (IPOIB_MCAST_FLAG_BUSY , &mcast->flags))
@@ -720,8 +723,8 @@ static int ipoib_mcast_leave(struct net_device *dev, struct ipoib_mcast *mcast) mcast->mcmember.mgid.raw);/* Remove ourselves from the multicast group */ - ret =ib_detach_mcast (priv->qp, &mcast->mcmember.mgid, -be16_to_cpu (mcast->mcmember.mlid)); + ret = rn->detach_mcast (dev, priv->ca, &mcast->mcmember.mgid, +be16_to_cpu (mcast->mcmember.mlid));if (ret)ipoib_warn (priv,"ib_detach_mcast failed (result = %d)\n" , ret); }else if (!test_bit (IPOIB_MCAST_FLAG_SENDONLY , &mcast->flags))
@@ -762,7 +765,8 @@ void ipoib_mcast_remove_list(struct list_head *remove_list)void ipoib_mcast_send (struct net_device *dev,u8 *daddr,struct sk_buff *skb) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev); +struct rdma_netdev *rn =netdev_priv (dev);struct ipoib_mcast *mcast;unsigned long flags;void *mgid = daddr +4 ;
@@ -825,7 +829,8 @@ void ipoib_mcast_send(struct net_device *dev, u8 *daddr, struct sk_buff *skb) } }spin_unlock_irqrestore (&priv->lock, flags); -ipoib_send (dev, skb, mcast->ah,IB_MULTICAST_QPN ); + mcast->ah->last_send = rn->send (dev, skb, mcast->ah->ah, +IB_MULTICAST_QPN );if (neigh)ipoib_neigh_put (neigh);return ;
drivers/infiniband/ulp/ipoib/ipoib_netlink.c +1 -1
@@ -161,7 +161,7 @@ static struct rtnl_link_ops ipoib_link_ops __read_mostly = { .maxtype = IFLA_IPOIB_MAX, .policy = ipoib_policy, .priv_size = sizeof(struct ipoib_dev_priv), - .setup = ipoib_setup, + .setup = ipoib_setup_common, .newlink = ipoib_new_child_link, .changelink = ipoib_changelink, .dellink = ipoib_unregister_child_dev,
drivers/infiniband/ulp/ipoib/ipoib_verbs.c +16 -4
@@ -35,9 +35,10 @@#include "ipoib.h" -int ipoib_mcast_attach (struct net_device *dev,u16 mlid,union ib_gid *mgid,int set_qkey) +int ipoib_mcast_attach (struct net_device *dev,struct ib_device *hca, +union ib_gid *mgid,u16 mlid,int set_qkey,u32 qkey) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);struct ib_qp_attr *qp_attr =NULL ;int ret;u16 pkey_index;
@@ -56,7 +57,7 @@ int ipoib_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid, int goto out;/* set correct QKey for QP */ - qp_attr->qkey = priv->qkey; + qp_attr->qkey = qkey; ret =ib_modify_qp (priv->qp, qp_attr,IB_QP_QKEY );if (ret) {ipoib_warn (priv,"failed to modify QP, ret = %d\n" , ret);
@@ -74,9 +75,20 @@ int ipoib_mcast_attach(struct net_device *dev, u16 mlid, union ib_gid *mgid, intreturn ret; } +int ipoib_mcast_detach (struct net_device *dev,struct ib_device *hca, +union ib_gid *mgid,u16 mlid) +{ +struct ipoib_dev_priv *priv =ipoib_priv (dev); +int ret; + + ret =ib_detach_mcast (priv->qp, mgid, mlid); + +return ret; +} +int ipoib_init_qp (struct net_device *dev) { -struct ipoib_dev_priv *priv =netdev_priv (dev); +struct ipoib_dev_priv *priv =ipoib_priv (dev);int ret;struct ib_qp_attr qp_attr;int attr_mask;
drivers/infiniband/ulp/ipoib/ipoib_vlan.c +3 -2
@@ -128,14 +128,15 @@ int ipoib_vlan_add(struct net_device *pdev, unsigned short pkey)if (!capable (CAP_NET_ADMIN ))return -EPERM ; - ppriv =netdev_priv (pdev); + ppriv =ipoib_priv (pdev);if (test_bit (IPOIB_FLAG_GOING_DOWN , &ppriv->flags))return -EPERM ;snprintf (intf_name,sizeof intf_name,"%s.%04x" , ppriv->dev->name, pkey); - priv =ipoib_intf_alloc (intf_name); + + priv =ipoib_intf_alloc (ppriv->ca, ppriv->port, intf_name);if (!priv)return -ENOMEM ;
Signature · 6 lines
2.12.0 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404191732.31895-7-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
drivers/infiniband/ulp/ipoib/ipoib.h static inline void skb_add_pseudo_hdr(struct sk_buff *skb) · line 160
Quoted 8 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib.h +6
-2-/* Keep the refactoring compile able */ -#define ipoib_priv netdev_priv +static inline void *ipoib_priv (const struct net_device *dev) +{ +struct rdma_netdev *rn =netdev_priv (dev); + +return rn->clnt_priv; +}
This should return struct ipoib_dev_priv *
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1994
Quoted 5 lines
static
ssize_tshow_pkey(struct device *dev,drivers/infiniband/ulp/ipoib/ipoib_main.c +1
-1struct device_attribute *attr, char *buf) { - struct ipoib_dev_priv *priv = netdev_priv(to_net_dev(dev)); + struct ipoib_dev_priv *priv = ipoib_priv(to_net_dev(dev));
Several of these seem to be in the wrong patch
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404194234.GB10780-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
Quoted 11 lines · Jason Gunthorpe
drivers/infiniband/ulp/ipoib/ipoib.h static inline void skb_add_pseudo_hdr(struct sk_buff *skb) · line 160
Quoted 8 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib.h +6
-2-/* Keep the refactoring compile able */ -#define ipoib_priv netdev_priv +static inline void *ipoib_priv (const struct net_device *dev) +{ +struct rdma_netdev *rn =netdev_priv (dev); + +return rn->clnt_priv; +}This should return struct
ipoib_dev_priv*
You are right, this is the whole purpose of ipoib_priv().
Quoted 10 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1994
Quoted 6 lines
static
ssize_tshow_pkey(struct device *dev,drivers/infiniband/ulp/ipoib/ipoib_main.c +1
-1struct device_attribute *attr, char *buf) { - struct ipoib_dev_priv *priv = netdev_priv(to_net_dev(dev)); + struct ipoib_dev_priv *priv = ipoib_priv(to_net_dev(dev));Several of these seem to be in the wrong patch
Jason
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
In reply to a message not in the archiveQuoted 11 lines · Jason Gunthorpe
drivers/infiniband/ulp/ipoib/ipoib.h static inline void skb_add_pseudo_hdr(struct sk_buff *skb) · line 160
Quoted 8 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib.h +6
-2-/* Keep the refactoring compile able */ -#define ipoib_priv netdev_priv +static inline void *ipoib_priv (const struct net_device *dev) +{ +struct rdma_netdev *rn =netdev_priv (dev); + +return rn->clnt_priv; +}This should return struct
ipoib_dev_priv*
agree. will fix.
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1994
Quoted 6 lines
static
ssize_tshow_pkey(struct device *dev,
structdevice_attribute*attr, char *buf)
{drivers/infiniband/ulp/ipoib/ipoib_main.c +1
-1-struct ipoib_dev_priv *priv =netdev_priv (to_net_dev (dev)); +struct ipoib_dev_priv *priv =ipoib_priv (to_net_dev (dev));
Quoted 7 lines
Several of these seem to be in the wrong patch
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
In reply to a message not in the archiveQuoted 12 lines · Jason Gunthorpe
drivers/infiniband/ulp/ipoib/ipoib.h static inline void skb_add_pseudo_hdr(struct sk_buff *skb) · line 160
Quoted 8 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib.h +6
-2-/* Keep the refactoring compile able */ -#define ipoib_priv netdev_priv +static inline void *ipoib_priv (const struct net_device *dev) +{ +struct rdma_netdev *rn =netdev_priv (dev); + +return rn->clnt_priv; +}This should return struct
ipoib_dev_priv*
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1994
Quoted 5 lines
static
ssize_tshow_pkey(struct device *dev,
structdevice_attribute*attr, char *buf)
{drivers/infiniband/ulp/ipoib/ipoib_main.c +1
-1-struct ipoib_dev_priv *priv =netdev_priv (to_net_dev (dev)); +struct ipoib_dev_priv *priv =ipoib_priv (to_net_dev (dev));Several of these seem to be in the wrong patch
will fix that.
thanks !
Quoted 6 lines
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
In reply to a message not in the archiveQuoted 12 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib_main.c +7
-2+static struct net_device *ipoib_create_netdev_default (struct ib_device *hca, +const char *name, +unsigned char name_assign_type, +void (*setup)(struct net_device *)) {struct net_device *dev; +struct rdma_netdev *rn; - dev =alloc_netdev ((int )sizeof (struct ipoib_dev_priv ), name, -NET_NAME_UNKNOWN , ipoib_setup); + dev = alloc_netdev((int)sizeof(struct rdma_netdev), + name,
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1930
Quoted 10 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c +6
-1+ name_assign_type, setup);if (!dev)return NULL ; -return netdev_priv (dev); + rn =netdev_priv (dev); + + rn->send = ipoib_send; + rn->attach_mcast = ipoib_mcast_attach; + rn->detach_mcast = ipoib_mcast_detach;
This should really set rn->hca as well, don't forget the kref
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404194615.GA14681-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Re: [PATCH rdma-next 6/6] IB/IPoIB: Support acceleration options callbacks
Quoted 18 lines · Jason Gunthorpe
Quoted 16 lines · Leon Romanovsky
drivers/infiniband/ulp/ipoib/ipoib_main.c +8
-2+static struct net_device *ipoib_create_netdev_default (struct ib_device *hca, +const char *name, +unsigned char name_assign_type, +void (*setup)(struct net_device *)) {struct net_device *dev; +struct rdma_netdev *rn; - dev =alloc_netdev ((int )sizeof (struct ipoib_dev_priv ), name, -NET_NAME_UNKNOWN , ipoib_setup); + dev =alloc_netdev ((int )sizeof (struct rdma_netdev ), + name, + name_assign_type, setup);if (!dev)return NULL ;
Quoted 8 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c void ipoib_setup(struct net_device *dev) · line 1930
Quoted 6 lines
drivers/infiniband/ulp/ipoib/ipoib_main.c +5
-1-return netdev_priv (dev); + rn =netdev_priv (dev); + + rn->send = ipoib_send; + rn->attach_mcast = ipoib_mcast_attach; + rn->detach_mcast = ipoib_mcast_detach;This should really set
rn->hcaas well, don't forget the kref
ok, will add.
thanks.
Quoted 6 lines
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 7 lines · Leon Romanovsky
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line. I hope that it doesn't really matter and it won't stop you from merging it.
Per-your request, I based this patch set on v4.11-rc3.
I didn't dig into the details of the ipoib part, but I think the core change and the overall look is now what I would expect. modulo the little comments
It would still have been nicer to isolate the 'default' implementation so those functions did not touch ipoib_priv, but that is also something that could be done in a followup..
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404194750.GC10780-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Quoted 15 lines · Jason Gunthorpe
Quoted 7 lines · Leon Romanovsky
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line. I hope that it doesn't really matter and it won't stop you from merging it.
Per-your request, I based this patch set on v4.11-rc3.
Quoted 7 lines
I didn't dig into the details of the ipoib part, but I think the core change and the overall look is now what I would expect. modulo the little comments
It would still have been nicer to isolate the 'default' implementation so those functions did not touch
ipoib_priv, but that is also something that could be done in a followup..
Thanks, Jason
Quoted 2 lines
Jason
A message that is not in the archive (sent off-list or not yet received): 20170404195720.GA20443-U/[email protected]
Quoted 5 lines · Leon Romanovsky
Quoted 3 lines
It would still have been nicer to isolate the 'default' implementation so those functions did not touch
ipoib_priv, but that is also something that could be done in a followup..Thanks, Jason
I think before merging it would also be good to see the benchmark numbers - we all assume this is making things a lot faster..
Does it now exceed RC performance?
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404201408.GA16818-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Quoted 11 lines · Jason Gunthorpe
Quoted 5 lines · Leon Romanovsky
Quoted 3 lines
It would still have been nicer to isolate the 'default' implementation so those functions did not touch
ipoib_priv, but that is also something that could be done in a followup..Thanks, Jason
I think before merging it would also be good to see the benchmark numbers - we all assume this is making things a lot faster..
Does it now exceed RC performance?
In our tests, prior to submission, It achieved almost line rate (~93-95Gb/sec) with 4 streams. Erez is supposed to continue his work and optimize it more till full line rate.
Thanks
Quoted 2 lines
Jason
Quoted 5 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
Quoted 8 lines
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.
I'm confused by how you expect Niranjana's patch to be merged in this situation?
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And
[PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Ira
Quoted 89 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of the prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structsdrivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------ drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)
Quoted 7 lines
--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at
http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 2807E5FD2F6FDA4886F6618EAC48510E67C8CAA0-8k97q/[email protected]
Quoted 14 lines · Ira
Quoted 5 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
Quoted 8 lines
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.
Quoted 7 lines
I'm confused by how you expect Niranjana's patch to be merged in this situation?
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And
[PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Ira,
The IPoIB and HFI-VNIC are independent series, so topics should be self-contained. If the merge conflict worries you, Niranjana or me could easily base our patch sets on another topic, but we need to know the acceptance (yes/no) and order between them.
Thanks
Quoted 103 lines
Ira
Quoted 89 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of the prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structsdrivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------ drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)Quoted 7 lines
--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at
http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170404200335.GB20443-U/[email protected]
Quoted 26 lines · Ira
Quoted 7 lines
Quoted 7 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB
support.
Quoted 8 lines
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.I'm confused by how you expect Niranjana's patch to be merged in this
situation?
Quoted 6 lines
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 6 lines
Ira,
The IPoIB and HFI-VNIC are independent series, so topics should be self- contained. If the merge conflict worries you, Niranjana or me could easily base our patch sets on another topic, but we need to know the acceptance (yes/no) and order between them.
I guess my expectation was that upon your agreement of this new interface, Doug would accept Niranjanas change and you could build on top of that rather than just taking part of Niranjanas patch and expecting Doug to see there are common hunks. Perhaps I'm missing something and git is smart enough to deal with it?
Does this mean you have reviewed and are comfortable with Niranjanas new rdma_netdev changes? If so it seems Doug could accept them.
Ira
Quoted 83 lines
Thanks
Quoted 20 lines
Ira
Quoted 17 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of
the
Quoted 59 lines
Quoted 59 lines
prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 25 lines
Quoted 6 lines
Quoted 6 lines
drivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------
Quoted 18 lines
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)Quoted 7 lines
--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe
linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma"
in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 2807E5FD2F6FDA4886F6618EAC48510E67C8DAB7-8k97q/[email protected]
Quoted 26 lines · Ira
Quoted 26 lines · Ira
Quoted 7 lines
Quoted 7 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB
support.
Quoted 8 lines
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.I'm confused by how you expect Niranjana's patch to be merged in this
situation?
Quoted 6 lines
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 8 lines
Quoted 6 lines
Ira,
The IPoIB and HFI-VNIC are independent series, so topics should be self- contained. If the merge conflict worries you, Niranjana or me could easily base our patch sets on another topic, but we need to know the acceptance (yes/no) and order between them.
I guess my expectation was that upon your agreement of this new interface, Doug would accept Niranjanas change and you could build on top of that rather than just taking part of Niranjanas patch and expecting Doug to see there are common hunks. Perhaps I'm missing something and git is smart enough to deal with it?
It is not related to smart git. Parallel submissions should be independent, this is the why I'm submitting all our topics based on one common ground (usually -rcX), despite the fact that sometimes there is merge conflict between them.
As long Doug works in this mode, we are obligated to continue.
Quoted 2 lines
Does this mean you have reviewed and are comfortable with Niranjanas new
rdma_netdevchanges? If so it seems Doug could accept them.
We already discussed it in email and privately, I'm agree with you that IPoIB and HFI-VNIC are better to be separated, due to conceptually difference and future code maintenance. The proposed rdma_netdev suits well both patch sets, so I'm very comfortable with them.
However, I'm not comfortable with ULP location, for the code which is not interoperable between different systems (nodes). After OFA, I realized that it wouldn't work in Susan's LANL mixed cluster, which is pretty awful for the common ULP.
The code itself needs proprietary software (ethernet manager) to be operable and it placed in ULP based on some promise that future drivers will be added to hfi family. Right now, it is not the case.
You asked, I answered :)
Quoted 115 lines
Ira
Quoted 83 lines
Thanks
Quoted 20 lines
Ira
Quoted 17 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of
the
Quoted 59 lines
Quoted 59 lines
prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structsQuoted 25 lines
Quoted 6 lines
Quoted 6 lines
drivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------
Quoted 18 lines
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)Quoted 7 lines
--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe
linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma"
in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170406052820.GB2269-U/[email protected]
Quoted 40 lines · Leon Romanovsky
Quoted 26 lines · Ira
Quoted 26 lines · Ira
Quoted 7 lines
Quoted 7 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB
support.
Quoted 8 lines
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.I'm confused by how you expect Niranjana's patch to be merged in this
situation?
Quoted 6 lines
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 8 lines
Quoted 6 lines
Ira,
The IPoIB and HFI-VNIC are independent series, so topics should be self- contained. If the merge conflict worries you, Niranjana or me could easily base our patch sets on another topic, but we need to know the acceptance (yes/no) and order between them.
I guess my expectation was that upon your agreement of this new interface, Doug would accept Niranjanas change and you could build on top of that rather than just taking part of Niranjanas patch and expecting Doug to see there are common hunks. Perhaps I'm missing something and git is smart enough to deal with it?
It is not related to smart git. Parallel submissions should be independent, this is the why I'm submitting all our topics based on one common ground (usually -rcX), despite the fact that sometimes there is merge conflict between them.
Quoted 9 lines
As long Doug works in this mode, we are obligated to continue.
Quoted 2 lines
Does this mean you have reviewed and are comfortable with Niranjanas new
rdma_netdevchanges? If so it seems Doug could accept them.We already discussed it in email and privately, I'm agree with you that IPoIB and HFI-VNIC are better to be separated, due to conceptually difference and future code maintenance. The proposed
rdma_netdevsuits well both patch sets, so I'm very comfortable with them.
Thanks.
Quoted 10 lines
However, I'm not comfortable with ULP location, for the code which is not interoperable between different systems (nodes). After OFA, I realized that it wouldn't work in Susan's LANL mixed cluster, which is pretty awful for the common ULP.
The code itself needs proprietary software (ethernet manager) to be operable and it placed in ULP based on some promise that future drivers will be added to hfi family. Right now, it is not the case.
You asked, I answered :)
These have been already discussed out before.
That is not what Ira is asking at all.
We have been patiently waiting for a month and a half to ensure this IPoIB patches can fit will with the rdma netdev interface as Jason and Doug wanted.
Now that IPoIB is comfortable with the rdma netdev interface, I think OPA VNIC patch can move forward.
Niranjana
Quoted 107 lines
Quoted 107 lines
Ira
Quoted 104 lines
Thanks
Quoted 20 lines
Ira
Quoted 17 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of
the
Quoted 59 lines
Quoted 59 lines
prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structsQuoted 6 lines
Quoted 6 lines
drivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------
Quoted 14 lines
Quoted 14 lines
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe
linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 8 lines
Quoted 8 lines
Quoted 4 lines
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma"
in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170406151014.GA173962-wPcXA7LoDC+1XWohqUldA0EOCMrvLtNR@public.gmane.org
Quoted 64 lines · Niranjana
Quoted 40 lines · Leon Romanovsky
Quoted 26 lines · Ira
Quoted 26 lines · Ira
Quoted 7 lines
Quoted 7 lines
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB
support.
Quoted 8 lines
Quoted 6 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line.
I hope that it doesn't really matter and it won't stop you from merging it.I'm confused by how you expect Niranjana's patch to be merged in this
situation?
Quoted 6 lines
Doug, will you take care of the conflict between these 2 submitted patches?
[PATCH 02/11] IB/opa-vnic: Virtual Network Interface Controller (VNIC) interface And [PATCH rdma-next 1/6] IB/IPoIB: Introduce RDMA netdev interface and IPoIB structs
Quoted 8 lines
Quoted 6 lines
Ira,
The IPoIB and HFI-VNIC are independent series, so topics should be self- contained. If the merge conflict worries you, Niranjana or me could easily base our patch sets on another topic, but we need to know the acceptance (yes/no) and order between them.
I guess my expectation was that upon your agreement of this new interface, Doug would accept Niranjanas change and you could build on top of that rather than just taking part of Niranjanas patch and expecting Doug to see there are common hunks. Perhaps I'm missing something and git is smart enough to deal with it?
It is not related to smart git. Parallel submissions should be independent, this is the why I'm submitting all our topics based on one common ground (usually -rcX), despite the fact that sometimes there is merge conflict between them.
Quoted 9 lines
As long Doug works in this mode, we are obligated to continue.
Quoted 2 lines
Does this mean you have reviewed and are comfortable with Niranjanas new
rdma_netdevchanges? If so it seems Doug could accept them.We already discussed it in email and privately, I'm agree with you that IPoIB and HFI-VNIC are better to be separated, due to conceptually difference and future code maintenance. The proposed
rdma_netdevsuits well both patch sets, so I'm very comfortable with them.Thanks.
Quoted 10 lines
However, I'm not comfortable with ULP location, for the code which is not interoperable between different systems (nodes). After OFA, I realized that it wouldn't work in Susan's LANL mixed cluster, which is pretty awful for the common ULP.
The code itself needs proprietary software (ethernet manager) to be operable and it placed in ULP based on some promise that future drivers will be added to hfi family. Right now, it is not the case.
You asked, I answered :)
Quoted 8 lines
These have been already discussed out before.
That is not what Ira is asking at all.
We have been patiently waiting for a month and a half to ensure this IPoIB patches can fit will with the rdma netdev interface as Jason and Doug wanted.Now that IPoIB is comfortable with the rdma netdev interface, I think OPA VNIC patch can move forward.
Sure, you can and I have no plans to stop it. It works for you, your customers and future devices are coming.
I just want to be sure that once any vendor in this susbsystem will use the same magic sentence "it gives best performance for our hardware and future devices will come". There will be no questions about interoperability between various devices, no more questions about standards, no more requests to implement for other drivers (hardware and software).
Or we are requiring it from everyone, or we are not requiring it from anyone.
Thanks
Quoted 120 lines
Niranjana
Quoted 115 lines
Quoted 115 lines
Ira
Quoted 83 lines
Thanks
Quoted 20 lines
Ira
Quoted 17 lines
Per-your request, I based this patch set on v4.11-rc3.
Thanks,
LeonCC Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>CC Alex Vesker <valex-VPRAkNaXOzVWk0Htik3J/[email protected]>---
The rest comes from Erez:
The IPoIB protocol encapsulates IP packets over Infiniband datagrams. As a direct RDMA Upper Layer Protocol (ULP), IPoIB cannot support HW features that are specific to the IP protocol stack.
Nevertheless, RDMA interfaces have been extended to support some of
the
Quoted 59 lines
Quoted 59 lines
prominent IP offload features, such as TCP/UDP checksum and TSO. This provided reasonable performance gain for IPoIB but is still insufficient to cope with the increasing network bandwidth demand.
However, New features are exisiting in common network interfaces that are very hard to implement in IPoIB interfaces while it uses the RDMA layer, examples include TSS and RSS, tunneling offloads, and XDP. Rather than continuously porting IP network interface developments into the RDMA stack, we propose adding an abstract network data-path interfaces to RDMA devices.
In order to present a consistent interface to users, the IPoIB ULP continues to represent the network device to the IP stack. The common code also manages the IPoIB control plane, such as resolving path queries and registering to multicast groups.
Data path operations are forwarded to devices that implement the new API, or fallback to the standard implementation otherwise. Using the forgoing approach, we show how IPoIB closes the performance gap compared to state-of-the-art Ethernet network interfaces.The implementation idea is to use the api of alloc_rdma_netdev/free_rdma_netdev to expose a struct that has data members and set of functions that are used for IB network interfaces, like attach/detach multicast to qp, and send IB packet.
The functions are specific for IB operations and are not part of the common api the the netdev struct exposes via the ndo functions.
1. multicast handling - attach/detach
2. send operation - the ndostart_xmithas only 2 parameters and the IB send needs the destination qp and the ah object, there were few options to handle it via the netdev ndo, but they don't make more sense than using a specific send function (we arerdma_netdevafter all)The IPoIB code will be adapted to enable the option of accelerating the network interface, but the code will work as before if the HW below doesn't support the acceleration.
That means that in the default mode of ipoib I tried to keep it as much as it was before, not to force it to adopt the new api, where there is no code sharing between the ipoib and the vnic/hfi.
The default code uses the controll and the data, the accelerator uses only the control flows andstructors.
The changes of the default ipoib can be made on top of that series.Each HW vendor can supply the acceleration for the IPoIB or to leave IPoIB to work as before.
Thanks,
ErezErez Shitrit (5):
IB/IPoIB: Separate control and data related initializations IB/IPoIB: Separate control from HW operation on ipoib_open/stop ndo IB/IPoIB: Rename qpn to be dqpn inipoib_sendandpost_sendfunctions IB/IPoIB: Formatting before adding accelerator to driver IB/IPoIB: Support acceleration options callbacksLeon Romanovsky (1):
IB/IPoIB: Introduce RDMA netdev interface and IPoIB structsQuoted 25 lines
Quoted 6 lines
Quoted 6 lines
drivers/infiniband/ulp/ipoib/ipoib.h | 40 +-- drivers/infiniband/ulp/ipoib/ipoib_cm.c | 66 ++--- drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 6 +- drivers/infiniband/ulp/ipoib/ipoib_fs.c | 4 +- drivers/infiniband/ulp/ipoib/ipoib_ib.c | 339 +++++++++++++------------ drivers/infiniband/ulp/ipoib/ipoib_main.c | 312 +++++++++++++++++------
Quoted 18 lines
Quoted 7 lines
drivers/infiniband/ulp/ipoib/ipoib_multicast.c | 39 +-- drivers/infiniband/ulp/ipoib/ipoib_netlink.c | 12 +- drivers/infiniband/ulp/ipoib/ipoib_verbs.c | 64 ++--- drivers/infiniband/ulp/ipoib/ipoib_vlan.c | 9 +- include/rdma/ib_verbs.h | 41 +++ 11 files changed, 565 insertions(+), 367 deletions(-)Quoted 7 lines
--
2.12.0--
To unsubscribe from this list: send the line "unsubscribe
linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma"
in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170410080228.GP2269-U/[email protected]
Quoted 6 lines · Leon Romanovsky
I just want to be sure that once any vendor in this susbsystem will use the same magic sentence "it gives best performance for our hardware and future devices will come". There will be no questions about interoperability between various devices, no more questions about standards, no more requests to implement for other drivers (hardware and software).
Don't be absurd..
I repeatedly chewed out intel for having their driver act like a subsystem in of itself, keeping user-facing code that is not linked to hardware out of driver is the right thing to do.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 20170410154039.GA7056-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org
Quoted 9 lines · Jason Gunthorpe
Quoted 6 lines · Leon Romanovsky
I just want to be sure that once any vendor in this susbsystem will use the same magic sentence "it gives best performance for our hardware and future devices will come". There will be no questions about interoperability between various devices, no more questions about standards, no more requests to implement for other drivers (hardware and software).
Quoted 5 lines
Don't be absurd..
I repeatedly chewed out intel for having their driver act like a subsystem in of itself, keeping user-facing code that is not linked to hardware out of driver is the right thing to do.
Jason,
Yes, you did, however for many reasons hfi ended to be subsystem on its own, and now we are moving this subsystem one layer up. I really failed to understand your point of view, why hfi-vnic is not linked to specific hardware.
Thanks
Quoted 2 lines
Jason
A message that is not in the archive (sent off-list or not yet received): 20170412052223.GQ2269-U/[email protected]
Quoted 4 lines · Leon Romanovsky
Yes, you did, however for many reasons hfi ended to be subsystem on its own, and now we are moving this subsystem one layer up. I really failed to understand your point of view, why hfi-vnic is not linked to specific hardware.
Well, the ULP part is clearly not hardware specific, it uses generic interfaces like mad and rdma netdev (eg the same generic interfaces as ipoib) - that was part of the transformation since the first series was presented.
We have been treating OPA as a top level protocol on par with rocee,ib,iwarp - so an OPA specific ULP that only uses core interfaces seems reasonable.
It has changed alot since the first series, it is no longer tightly linked to hfi1. But it does use OPA specific MADs and requires the driver implement the opa_vnic rdma_netdev API.
It very clearly has nothing to do with hfi1, other than hfi1 is the only driver implementing OPA.
I think there is a path to make this work on IB if someone cared to do it, but I think it is unreasonable to demand Intel do that work.
Jason
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Quoted 11 lines · Leon Romanovsky
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line. I hope that it doesn't really matter and it won't stop you from merging it.
I think that it does indeed matter. The patch was authored by Niranjana it should reflect as such. Why not take Niranjana's patch(s), the fact that you folded them in seems to mean you at least agree with the patch.
-Denny
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 456a1a5f-26a4-13a6-744c-02679e0fc90b-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Quoted 8 lines · Dennis Dalessandro
Quoted 7 lines · Leon Romanovsky
Hi Doug,
This patchset mostly comes from Erez with one exception in the first patch.
That patch origins from two different commits, first from Niranjana who added RDMA netdev interface and second from Erez who added IPoIB support.
Quoted 8 lines
Quoted 4 lines
During the preparation to submission, I squashed their commits into one and refactored code to allow submission as a standalone topic without creating dependecies between different submissions. This caused to change in author line. I hope that it doesn't really matter and it won't stop you from merging it.
I think that it does indeed matter. The patch was authored by Niranjana it should reflect as such. Why not take Niranjana's patch(s), the fact that you folded them in seems to mean you at least agree with the patch.
Sure, I agree, but I was supposed to remove all VNIC code from that patch, which is unrelated to IPoIB.
If Niranjana feels comfortable to be authored on IPoIB code, the following code will do the trick.
git commit --amend --author "Niranjana Vishwanathapura <niranjana.vishwanathapura-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>"
Thanks
Quoted 2 lines
-Denny