From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965562AbXCLLOI (ORCPT ); Mon, 12 Mar 2007 07:14:08 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S965587AbXCLLOI (ORCPT ); Mon, 12 Mar 2007 07:14:08 -0400 Received: from mx2.suse.de ([195.135.220.15]:39766 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965571AbXCLLOG (ORCPT ); Mon, 12 Mar 2007 07:14:06 -0400 Date: Mon, 12 Mar 2007 12:14:05 +0100 Message-ID: From: Takashi Iwai To: Dave Jones Cc: Linux Kernel Subject: Re: 2.6.21-rc3 snd-usb-audio lockdep report. In-Reply-To: <20070310053133.GA6466@redhat.com> References: <20070310053133.GA6466@redhat.com> User-Agent: Wanderlust/2.12.0 (Your Wildest Dreams) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 MULE XEmacs/21.5 (beta27) (fiddleheads) (+CVS-20060704) (i386-suse-linux) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org At Sat, 10 Mar 2007 00:31:33 -0500, Dave Jones wrote: > > ============================================= > [ INFO: possible recursive locking detected ] > 2.6.20-1.2962.fc7 #1 > --------------------------------------------- > rosegardenseque/5229 is trying to acquire lock: > (&grp->list_mutex){----}, at: [] snd_seq_deliver_event+0x93/0x173 [snd_seq] > > but task is already holding lock: > (&grp->list_mutex){----}, at: [] snd_seq_deliver_event+0x93/0x173 [snd_seq] > > other info that might help us debug this: > 1 lock held by rosegardenseque/5229: > #0: (&grp->list_mutex){----}, at: [] snd_seq_deliver_event+0x93/0x173 [snd_seq] Hm, these are read-only so they should never conflict. Is there a better workaround than *_non_owner()? Takashi diff -r a8aa25c670eb sound/core/seq/seq_clientmgr.c --- a/sound/core/seq/seq_clientmgr.c Mon Mar 12 11:39:01 2007 +0100 +++ b/sound/core/seq/seq_clientmgr.c Mon Mar 12 12:12:44 2007 +0100 @@ -672,7 +672,7 @@ static int deliver_to_subscribers(struct if (atomic) read_lock(&grp->list_lock); else - down_read(&grp->list_mutex); + down_read_non_owner(&grp->list_mutex); list_for_each_entry(subs, &grp->list_head, src_list) { event->dest = subs->info.dest; if (subs->info.flags & SNDRV_SEQ_PORT_SUBS_TIMESTAMP) @@ -690,7 +690,7 @@ static int deliver_to_subscribers(struct if (atomic) read_unlock(&grp->list_lock); else - up_read(&grp->list_mutex); + up_read_non_owner(&grp->list_mutex); *event = event_saved; /* restore */ snd_seq_port_unlock(src_port); return (err < 0) ? err : num_ev;