Revert module ref counting patch for CMA.

Index: linux-2.6.16/drivers/infiniband/core/cma.c
===================================================================
--- linux-2.6.16/drivers/infiniband/core/cma.c  (revision 6333)
+++ linux-2.6.16/drivers/infiniband/core/cma.c  (revision 6332)
@@ -96,7 +96,6 @@
  */
 struct rdma_id_private {
        struct rdma_cm_id       id;
-       struct module           *owner;
 
        struct list_head        list;
        struct list_head        listen_list;
@@ -280,9 +279,8 @@
                wake_up(&id_priv->wait_remove);
 }
 
-struct rdma_cm_id* __rdma_create_id(rdma_cm_event_handler event_handler,
-                                   void *context, enum rdma_port_space ps,
-                                   struct module *owner)
+struct rdma_cm_id* rdma_create_id(rdma_cm_event_handler event_handler,
+                                 void *context, enum rdma_port_space ps)
 {
        struct rdma_id_private *id_priv;
 
@@ -293,7 +291,6 @@
        id_priv->state = CMA_IDLE;
        id_priv->id.context = context;
        id_priv->id.event_handler = event_handler;
-       id_priv->owner = owner;
        id_priv->id.ps = ps;
        spin_lock_init(&id_priv->lock);
        init_waitqueue_head(&id_priv->wait);
@@ -305,7 +302,7 @@
 
        return &id_priv->id;
 }
-EXPORT_SYMBOL(__rdma_create_id);
+EXPORT_SYMBOL(rdma_create_id);
 
 static int cma_init_ib_qp(struct rdma_id_private *id_priv, struct ib_qp *qp)
 {
@@ -545,18 +542,6 @@
        }
 }
 
-static int invoke_event_handler(struct rdma_id_private *id_priv,
-                               struct rdma_cm_event *event)
-{
-       int ret;
-
-       BUG_ON(!try_module_get(id_priv->owner));
-       ret = id_priv->id.event_handler(&id_priv->id, event);
-       module_put(id_priv->owner);
-
-       return ret;
-}
-
 static int cma_notify_user(struct rdma_id_private *id_priv,
                           enum rdma_cm_event_type type, int status,
                           void *data, u8 data_len)
@@ -568,7 +553,7 @@
        event.private_data = data;
        event.private_data_len = data_len;
 
-       return invoke_event_handler(id_priv, &event);
+       return id_priv->id.event_handler(&id_priv->id, &event);
 }
 
 static void cma_cancel_route(struct rdma_id_private *id_priv)
@@ -785,7 +770,7 @@
        return ret;
 }
 
-static struct rdma_id_private* cma_new_id(struct rdma_id_private *listen_id,
+static struct rdma_id_private* cma_new_id(struct rdma_cm_id *listen_id,
                                          struct ib_cm_event *ib_event)
 {
        struct rdma_id_private *id_priv;
@@ -795,8 +780,8 @@
        __u16 port;
        u8 ip_ver;
 
-       id = __rdma_create_id(listen_id->id.event_handler, 
listen_id->id.context,
-                             listen_id->id.ps, listen_id->owner);
+       id = rdma_create_id(listen_id->event_handler, listen_id->context,
+                           listen_id->ps);
        if (IS_ERR(id))
                return NULL;
 
@@ -806,11 +791,11 @@
        if (!rt->path_rec)
                goto err;
 
-       if (cma_get_net_info(ib_event->private_data, listen_id->id.ps,
+       if (cma_get_net_info(ib_event->private_data, listen_id->ps,
                             &ip_ver, &port, &src, &dst))
                goto err;
 
-       cma_save_net_info(&id->route.addr, &listen_id->id.route.addr,
+       cma_save_net_info(&id->route.addr, &listen_id->route.addr,
                          ip_ver, port, src, dst);
        rt->path_rec[0] = *ib_event->param.req_rcvd.primary_path;
        if (rt->num_paths == 2)
@@ -841,7 +826,7 @@
                goto out;
        }
 
-       conn_id = cma_new_id(listen_id, ib_event);
+       conn_id = cma_new_id(&listen_id->id, ib_event);
        if (!conn_id) {
                ret = -ENOMEM;
                goto out;
@@ -958,13 +943,11 @@
 static int cma_listen_handler(struct rdma_cm_id *id,
                              struct rdma_cm_event *event)
 {
-       struct rdma_id_private *listen_id = id->context;
-       struct rdma_id_private *id_priv;
+       struct rdma_id_private *id_priv = id->context;
 
-       id_priv = container_of(id, struct rdma_id_private, id);
-       id->context = listen_id->id.context;
-       id->event_handler = listen_id->id.event_handler;
-       return invoke_event_handler(id_priv, event);
+       id->context = id_priv->id.context;
+       id->event_handler = id_priv->id.event_handler;
+       return id_priv->id.event_handler(id, event);
 }
 
 static void cma_listen_on_dev(struct rdma_id_private *id_priv,
@@ -974,8 +957,7 @@
        struct rdma_cm_id *id;
        int ret;
 
-       id = __rdma_create_id(cma_listen_handler, id_priv, id_priv->id.ps,
-                             id_priv->owner);
+       id = rdma_create_id(cma_listen_handler, id_priv, id_priv->id.ps);
        if (IS_ERR(id))
                return;
 
@@ -1098,7 +1080,7 @@
        if (!cma_comp_exch(id_priv, work->old_state, work->new_state))
                goto out;
 
-       if (invoke_event_handler(id_priv, &work->event)) {
+       if (id_priv->id.event_handler(&id_priv->id, &work->event)) {
                cma_exch(id_priv, CMA_DESTROYING);
                destroy = 1;
        }
Index: linux-2.6.16/drivers/infiniband/include/rdma/rdma_cm.h
===================================================================
--- linux-2.6.16/drivers/infiniband/include/rdma/rdma_cm.h      (revision 6333)
+++ linux-2.6.16/drivers/infiniband/include/rdma/rdma_cm.h      (revision 6332)
@@ -106,10 +106,6 @@
        u8                       port_num;
 };
 
-struct rdma_cm_id *__rdma_create_id(rdma_cm_event_handler event_handler,
-                                   void *context, enum rdma_port_space ps,
-                                   struct module *owner);
-
 /**
  * rdma_create_id - Create an RDMA identifier.
  *
@@ -118,12 +114,8 @@
  * @context: User specified context associated with the id.
  * @ps: RDMA port space.
  */
-static inline struct rdma_cm_id *
-rdma_create_id(rdma_cm_event_handler event_handler,
-              void *context, enum rdma_port_space ps)
-{
-       return __rdma_create_id(event_handler, context, ps, THIS_MODULE);
-}
+struct rdma_cm_id *rdma_create_id(rdma_cm_event_handler event_handler,
+                                 void *context, enum rdma_port_space ps);
 
 void rdma_destroy_id(struct rdma_cm_id *id);
 


-- 
MST
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to