We need to use a per device event handler, rather than a single, global handler that gets reinitialized when a new device is added to the system.
Signed-off-by: Sean Hefty <[EMAIL PROTECTED]> --- diff --git a/drivers/infiniband/core/multicast.c b/drivers/infiniband/core/multicast.c index fde977e..039f1eb 100644 --- a/drivers/infiniband/core/multicast.c +++ b/drivers/infiniband/core/multicast.c @@ -51,7 +51,6 @@ static struct ib_client mcast_client = { }; static struct ib_sa_client sa_client; -static struct ib_event_handler event_handler; static struct workqueue_struct *mcast_wq; static union ib_gid mgid0; @@ -68,6 +67,7 @@ struct mcast_port { struct mcast_device { struct ib_device *device; + struct ib_event_handler event_handler; int start_port; int end_port; struct mcast_port port[0]; @@ -742,9 +742,7 @@ static void mcast_event_handler(struct ib_event_handler *handler, { struct mcast_device *dev; - dev = ib_get_client_data(event->device, &mcast_client); - if (!dev) - return; + dev = container_of(handler, struct mcast_device, event_handler); switch (event->event) { case IB_EVENT_PORT_ERR: @@ -793,8 +791,8 @@ static void mcast_add_one(struct ib_device *device) dev->device = device; ib_set_client_data(device, &mcast_client, dev); - INIT_IB_EVENT_HANDLER(&event_handler, device, mcast_event_handler); - ib_register_event_handler(&event_handler); + INIT_IB_EVENT_HANDLER(&dev->event_handler, device, mcast_event_handler); + ib_register_event_handler(&dev->event_handler); } static void mcast_remove_one(struct ib_device *device) @@ -807,7 +805,7 @@ static void mcast_remove_one(struct ib_device *device) if (!dev) return; - ib_unregister_event_handler(&event_handler); + ib_unregister_event_handler(&dev->event_handler); flush_workqueue(mcast_wq); for (i = 0; i <= dev->end_port - dev->start_port; i++) { _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general