Libor Michalek wrote:
  Assume that the userspace 'struct ib_cm_event' contains the cm_id as
well as a new 'u64 context' which is inherited from the cm_id, and is
set at the time of the cm_id creation. This is what I'm assuming that
Arlin would like to see.

  In the case of two threads accessing the CM at once there's a race
condition if you are going to use the 'context' variable as a pointer
to memory:

Thread 1                              Thread 2
------------------------------------- -----------------------------------
cm_object = malloc(sizeof(*cm_object)
ib_cm_create_id(&cm_object->cm_id,
                (u64)cm_object)

                                      ib_cm_event_get(&event)
ib_cm_destroy_id(cm_object->cm_id)
free(cm_object);
                                      process_event((void *)event->context);

I see. This appears to come from a difference between the event reporting model used by the kernel CM versus the usermode CM (callback versus calldown). Maybe there's a way to assist the user here. Can we report a destruction event, or require a second call to indicate that an event has been processed? In the latter case, destruction could block while the event is being processed. Not sure if either of these would help if the user processed events using multiple threads, but I think with additional serialization in the CM it might be able to work.

- Sean
_______________________________________________
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

Reply via email to