Message ID | 552BB572.4040300@profitbricks.com (mailing list archive) |
---|---|
State | Rejected |
Headers | show |
On Mon, Apr 13, 2015 at 02:24:18PM +0200, Michael Wang wrote: > > Use raw management helpers to reform IB-core sa_query. > > Cc: Steve Wise <swise@opengridcomputing.com> > Cc: Tom Talpey <tom@talpey.com> > Cc: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> > Cc: Doug Ledford <dledford@redhat.com> > Cc: Ira Weiny <ira.weiny@intel.com> > Cc: Sean Hefty <sean.hefty@intel.com> > Signed-off-by: Michael Wang <yun.wang@profitbricks.com> > --- > drivers/infiniband/core/sa_query.c | 29 ++++++++++++++++++----------- > 1 file changed, 18 insertions(+), 11 deletions(-) > > diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c > index c38f030..803ccf7 100644 > --- a/drivers/infiniband/core/sa_query.c > +++ b/drivers/infiniband/core/sa_query.c > @@ -450,7 +450,7 @@ static void ib_sa_event(struct ib_event_handler *handler, struct ib_event *event > struct ib_sa_port *port = > &sa_dev->port[event->element.port_num - sa_dev->start_port]; > > - if (rdma_port_get_link_layer(handler->device, port->port_num) != IB_LINK_LAYER_INFINIBAND) > + if (WARN_ON(!rdma_tech_ib(handler->device, port->port_num))) > return; > > spin_lock_irqsave(&port->ah_lock, flags); > @@ -540,7 +540,7 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num, > ah_attr->port_num = port_num; > ah_attr->static_rate = rec->rate; > > - force_grh = rdma_port_get_link_layer(device, port_num) == IB_LINK_LAYER_ETHERNET; > + force_grh = rdma_tech_iboe(device, port_num); > > if (rec->hop_limit > 1 || force_grh) { > ah_attr->ah_flags = IB_AH_GRH; > @@ -1153,9 +1153,7 @@ static void ib_sa_add_one(struct ib_device *device) > { > struct ib_sa_device *sa_dev; > int s, e, i; > - > - if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) > - return; > + int count = 0; Same comment here as for the user_mad.c change. Ira -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
> @@ -1153,9 +1153,7 @@ static void ib_sa_add_one(struct ib_device *device) > { > struct ib_sa_device *sa_dev; > int s, e, i; > - > - if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) > - return; > + int count = 0; > > if (device->node_type == RDMA_NODE_IB_SWITCH) > s = e = 0; > @@ -1175,7 +1173,7 @@ static void ib_sa_add_one(struct ib_device *device) > > for (i = 0; i <= e - s; ++i) { > spin_lock_init(&sa_dev->port[i].ah_lock); > - if (rdma_port_get_link_layer(device, i + 1) != > IB_LINK_LAYER_INFINIBAND) > + if (!rdma_tech_ib(device, i + 1)) Note for someone who cares. This patch didn't introduce this problem, but I think the port number should be "i + s".
On 04/13/2015 08:45 PM, Hefty, Sean wrote: >> @@ -1153,9 +1153,7 @@ static void ib_sa_add_one(struct ib_device *device) >> { >> struct ib_sa_device *sa_dev; >> int s, e, i; >> - >> - if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) >> - return; >> + int count = 0; >> >> if (device->node_type == RDMA_NODE_IB_SWITCH) >> s = e = 0; >> @@ -1175,7 +1173,7 @@ static void ib_sa_add_one(struct ib_device *device) >> >> for (i = 0; i <= e - s; ++i) { >> spin_lock_init(&sa_dev->port[i].ah_lock); >> - if (rdma_port_get_link_layer(device, i + 1) != >> IB_LINK_LAYER_INFINIBAND) >> + if (!rdma_tech_ib(device, i + 1)) > > Note for someone who cares. This patch didn't introduce this problem, but I think the port number should be "i + s". Actually I'm planning to cleanup the places play with 's' and 'e' too, for example both cache.c and device.c implemented helper start_port() end_port() with exactly the same logical, and there are also many places like here which play with port number ugly, I'd like to refine these part later if no one else interested :-P Regards, Michael Wang > -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c index c38f030..803ccf7 100644 --- a/drivers/infiniband/core/sa_query.c +++ b/drivers/infiniband/core/sa_query.c @@ -450,7 +450,7 @@ static void ib_sa_event(struct ib_event_handler *handler, struct ib_event *event struct ib_sa_port *port = &sa_dev->port[event->element.port_num - sa_dev->start_port]; - if (rdma_port_get_link_layer(handler->device, port->port_num) != IB_LINK_LAYER_INFINIBAND) + if (WARN_ON(!rdma_tech_ib(handler->device, port->port_num))) return; spin_lock_irqsave(&port->ah_lock, flags); @@ -540,7 +540,7 @@ int ib_init_ah_from_path(struct ib_device *device, u8 port_num, ah_attr->port_num = port_num; ah_attr->static_rate = rec->rate; - force_grh = rdma_port_get_link_layer(device, port_num) == IB_LINK_LAYER_ETHERNET; + force_grh = rdma_tech_iboe(device, port_num); if (rec->hop_limit > 1 || force_grh) { ah_attr->ah_flags = IB_AH_GRH; @@ -1153,9 +1153,7 @@ static void ib_sa_add_one(struct ib_device *device) { struct ib_sa_device *sa_dev; int s, e, i; - - if (rdma_node_get_transport(device->node_type) != RDMA_TRANSPORT_IB) - return; + int count = 0; if (device->node_type == RDMA_NODE_IB_SWITCH) s = e = 0; @@ -1175,7 +1173,7 @@ static void ib_sa_add_one(struct ib_device *device) for (i = 0; i <= e - s; ++i) { spin_lock_init(&sa_dev->port[i].ah_lock); - if (rdma_port_get_link_layer(device, i + 1) != IB_LINK_LAYER_INFINIBAND) + if (!rdma_tech_ib(device, i + 1)) continue; sa_dev->port[i].sm_ah = NULL; @@ -1189,6 +1187,13 @@ static void ib_sa_add_one(struct ib_device *device) goto err; INIT_WORK(&sa_dev->port[i].update_task, update_sm_ah); + + count++; + } + + if (!count) { + kfree(sa_dev); + return; } ib_set_client_data(device, &sa_client, sa_dev); @@ -1204,16 +1209,18 @@ static void ib_sa_add_one(struct ib_device *device) if (ib_register_event_handler(&sa_dev->event_handler)) goto err; - for (i = 0; i <= e - s; ++i) - if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) + for (i = 0; i <= e - s; ++i) { + if (rdma_tech_ib(device, i + 1)) update_sm_ah(&sa_dev->port[i].update_task); + } return; err: - while (--i >= 0) - if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) + while (--i >= 0) { + if (rdma_tech_ib(device, i + 1)) ib_unregister_mad_agent(sa_dev->port[i].agent); + } kfree(sa_dev); @@ -1233,7 +1240,7 @@ static void ib_sa_remove_one(struct ib_device *device) flush_workqueue(ib_wq); for (i = 0; i <= sa_dev->end_port - sa_dev->start_port; ++i) { - if (rdma_port_get_link_layer(device, i + 1) == IB_LINK_LAYER_INFINIBAND) { + if (rdma_tech_ib(device, i + 1)) { ib_unregister_mad_agent(sa_dev->port[i].agent); if (sa_dev->port[i].sm_ah) kref_put(&sa_dev->port[i].sm_ah->ref, free_sm_ah);
Use raw management helpers to reform IB-core sa_query. Cc: Steve Wise <swise@opengridcomputing.com> Cc: Tom Talpey <tom@talpey.com> Cc: Jason Gunthorpe <jgunthorpe@obsidianresearch.com> Cc: Doug Ledford <dledford@redhat.com> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Sean Hefty <sean.hefty@intel.com> Signed-off-by: Michael Wang <yun.wang@profitbricks.com> --- drivers/infiniband/core/sa_query.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-)