From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:57110) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rwff0-0000Gq-EE for qemu-devel@nongnu.org; Sun, 12 Feb 2012 15:04:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rwfez-00076x-Al for qemu-devel@nongnu.org; Sun, 12 Feb 2012 15:04:34 -0500 Received: from mail-tul01m020-f173.google.com ([209.85.214.173]:38511) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rwfez-00076t-6R for qemu-devel@nongnu.org; Sun, 12 Feb 2012 15:04:33 -0500 Received: by obbup16 with SMTP id up16so7312411obb.4 for ; Sun, 12 Feb 2012 12:04:32 -0800 (PST) Message-ID: <4F381B4D.2000108@codemonkey.ws> Date: Sun, 12 Feb 2012 14:04:29 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <20120212170743.GA3375@redhat.com> <20120212173140.GB3375@redhat.com> <4F37F910.5030400@codemonkey.ws> <20120212175659.GA4199@redhat.com> In-Reply-To: <20120212175659.GA4199@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] weird qdev error List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: qemu-devel@nongnu.org On 02/12/2012 11:57 AM, Michael S. Tsirkin wrote: > On Sun, Feb 12, 2012 at 11:38:24AM -0600, Anthony Liguori wrote: >> From: Anthony Liguori >> Date: Sun, 12 Feb 2012 11:36:24 -0600 >> Subject: [PATCH] device_add: don't add a /peripheral link until init is complete >> >> Otherwise we end up with a dangling reference which causes qdev_free() to fail. >> >> Reported-by: Michael Tsirkin >> Signed-off-by: Anthony Liguori > > This handles the option parsing but what about hotplug > failures (when bus->hotplug returns an error)? Sorry, I don't follow. The assert you reported was that object_free() noted a reference count of !0 which indicates something else was holding the reference to the object. In this case, it was the child link in /peripheral. By delaying creating the link in /peripheral, we eliminate the problem completely. BTW, the explicit calls to do_pci_unregister are redundant. finalize() will be called during cleanup which means exit() will be invoked (which already calls do_pci_unregister). I'm not sure why this isn't failing more aggressively but it looks clearly wrong to me. Regards, Anthony Liguori