Roland Dreier wrote: > > > spin_lock_irqsave(&port->ah_lock, flags); > > > if (port->sm_ah) > > > kref_put(&port->sm_ah->ref, free_sm_ah); > > > port->sm_ah = NULL; > > > spin_unlock_irqrestore(&port->ah_lock, flags); > > > > > What happens if this happens > > > > # | CPU-0 | CPU-1 > > | | > > 1 | if (port->sm_ah) | > > | kref_put(&port->sm_ah->ref, free_sm_ah); | > > > --+-----------------------------------------------------+----------------------- > > 2 | | alloc_mad() > > > --+-----------------------------------------------------+----------------------- > > 3 | port->sm_ah = NULL; | > > > > As I see it, process on CPU-1 gets a garbage sm_ah > > Do you agree? > > alloc_mad() must obviously take the lock when looking at port->sm_ah, > and take a reference with kref_get() before dropping the lock. > > - R. > _______________________________________________ > general mailing list > [email protected] > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general > > To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general > You're right. I just sent a V2 but it needs to be modified according to above. I'll resend soon
thanks _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
