Hey, On Mon, Nov 02, 2009 at 04:21:23PM -0500, Alan Stern wrote: > I've been getting these warnings for a long, long time, and finally > decided to report them:
Thanks! > [ 1893.036023] other info that might help us debug this: > [ 1893.036023] 2 locks held by cardmgr/1457: Wow, cardmgr still in use... I had hoped it had already disappeared on non-embedded systems... > The cause is easy enough to track down. In pcmcia_ioctl.c, > pcmcia_adjust_resource_info() does a down_read() on > pcmcia_socket_list_rwsem. While holding the rwsem, one of the pathways > calls the s->resource_ops->add_mem method. On my system this method is > realized by adjust_memory() in rsrc_nonstatic.c, which does its own > down_read() on the same rwsem -- i.e., a recursive locking attempt. > > The reason lockdep warns about this behavior is that it can lead to > deadlock in the wrong circumstances, namely, if another thread were to > do a down_write() in between the two down_read() calls. > > Would it be correct simply to omit the down_read() in adjust_memory()? No, for there are other code paths reaching adjust_memory() not holding a (read) lock on this semaphore. As pcmcia_ioctl.c is on its way out anyways: would you mind keeping it as it is, for a down_write() call is quite unlikely during the only time cardmgr actually does this call (system startup)? Best, Dominik _______________________________________________ Linux PCMCIA reimplementation list http://lists.infradead.org/mailman/listinfo/linux-pcmcia