On Tue, Jan 27, 2009 at 8:28 AM, Steve Wise <[email protected]> wrote: > Oliver Neukum wrote: >> >> Am Tuesday 27 January 2009 14:34:19 schrieb Evgeniy Polyakov: >> >>> >>> On Mon, Jan 26, 2009 at 06:17:43PM -0800, Andy Grover >>> ([email protected]) wrote: >>> >>>> >>>> +static inline int rds_conn_is_sending(struct rds_connection *conn) >>>> +{ >>>> + int ret = 0; >>>> + >>>> + if (!mutex_trylock(&conn->c_send_lock)) >>>> + ret = 1; >>>> + else >>>> + mutex_unlock(&conn->c_send_lock); >>>> + >>>> + return ret; >>>> +} >>>> + >>>> >>> >>> This one is eventually invoked under the spin_lock with turned off irqs, >>> which may freeze the machine: >>> rds_for_each_conn_info() -> spin_lock_irqsave(global lock) -> >>> rds_conn_info_visitor() -> rds_conn_info_set() -> rds_conn_is_sending() >>> -> boom. >>> >> >> Why? This is _trylock. It won't block. >> >> > > mutex_trylock() uses spin_lock_mutex() which has this in the debug version: > > DEBUG_LOCKS_WARN_ON(in_interrupt());
What's the best way to fix this? This is all so rds-info can print out a nice list of connections, and if they're sending or not. I don't see an easy way to fix this. A _trylock-like function that didn't grab it would be nice? I can always just not report this particular bit of info, that actually might be easiest. Regards -- Andy _______________________________________________ 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
