On Tue, Jun 16, 2009 at 10:27:33AM -0700, Sean Hefty wrote:
> >+
> >+    w->member->multicast.rec.qkey = cpu_to_be32(0xc2c);
> 
> How can a user control this?  An app needs the same qkey for unicast traffic.

In RDMAoE, the qkey has a fixed well-known value, which will be
returned both by multicast and path queries.


> 
> >+    atomic_inc(&w->member->refcount);
> 
> This needs to be moved below...
I don't follow you - please explain.

> >+static struct ib_sa_multicast *
> >+eth_join_multicast(struct ib_sa_client *client,
> >+               struct ib_device *device, u8 port_num,
> >+               struct ib_sa_mcmember_rec *rec,
> >+               ib_sa_comp_mask comp_mask, gfp_t gfp_mask,
> >+               int (*callback)(int status,
> >+                               struct ib_sa_multicast *multicast),
> >+               void *context)
> >+{
> >+    struct mcast_device *dev;
> >+    struct eth_work *w;
> >+    struct mcast_member *member;
> >+    int err;
> >+
> >+    dev = ib_get_client_data(device, &mcast_client);
> >+    if (!dev)
> >+            return ERR_PTR(-ENODEV);
> >+
> >+    member = kzalloc(sizeof *member, gfp_mask);
> >+    if (!member)
> >+            return ERR_PTR(-ENOMEM);
> >+
> >+    w = kzalloc(sizeof *w, gfp_mask);
> >+    if (!w) {
> >+            err = -ENOMEM;
> >+            goto out1;
> >+    }
> >+    w->member = member;
> >+    w->device = device;
> >+    w->port_num = port_num;
> >+
> >+    member->multicast.context = context;
> >+    member->multicast.callback = callback;
> >+    member->client = client;
> >+    member->multicast.rec.mgid = rec->mgid;
> >+    init_completion(&member->comp);
> >+    atomic_set(&member->refcount, 1);
> >+
> >+    ib_sa_client_get(client);
> >+    INIT_WORK(&w->work, eth_mcast_work_handler);
> >+    queue_work(mcast_wq, &w->work);
> >+
> >+    return &member->multicast;
> 
> The user could leave/destroy the multicast join request before the queued work
> item runs.  We need to hold an additional reference on the member until the 
> work
> item completes.
Yes, thanks for catching this. I'll fix and resend.

> 
> There's substantial differences in functionality between an IB multicast group
> and the Ethernet group.  I would rather see the differences hidden by the
> rdma_cm, than the IB SA module.
> 

This is a question of transparency. The motivation is to enable
non-cma apps that use the ib_sa_join_multicast() API to work without
changes.

> >diff --git a/drivers/infiniband/core/sa_query.c
> >b/drivers/infiniband/core/sa_query.c
> >index 1865049..7bf9b5c 100644
> >--- a/drivers/infiniband/core/sa_query.c
> >+++ b/drivers/infiniband/core/sa_query.c
> >@@ -45,6 +45,7 @@
> 
> There's not a userspace interface into the sa_query module.  How will those 
> apps
> work, or apps that send MADs on QPs other than QP1?

Currently, these apps won't work. Sending MADs directly on QPs other
than QP1 will not work.
However, we expect that a userpsace interface to the sa_query module
will be implemented in the future, which will forward queries to
the kernel module.
Naturally, most kernel ULPs and user-level apps will use these
standard interfaces instead of implementing MAD queries themselves.
_______________________________________________
ewg mailing list
ewg@lists.openfabrics.org
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ewg

Reply via email to