On Sat, 8 Aug 2009, Ming Lei wrote: > > The ordering requirement is: Don't try to acquire a device's lock if > > you already hold the lock for a non-ancestor device. More generally > > (if more obscurely): If you already hold device A's lock, then don't > > try to acquire the lock for device B unless you already hold the lock > > for A & B's most recent common ancestor. > > > > It seems that the following case is very common, and A and B have no > common ancestor, but we can hold device A and B's lock at the same > time, can't we? > > Thanks. > > device A comes in one bus: > device_add() > ->bus_attach_device() > ->device_attach():drivers/base/dd.c /*holding device A's lock*/ > ->...drv->probe() /*sleep here some time*/ So right now thread 1 is sleeping. > then device B comes in another bus: So all this must happen in a different thread, thread 2: > device_add() > ->bus_attach_device() > ->device_attach():drivers/base/dd.c /*holding device B's lock*/ > ->...drv->probe() /*sleep here some time*/ At this point, thread 1 holds A's lock and thread 2 holds B's lock. Neither thread holds both locks. Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html