From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 2/5] exec.c: use refcnt to protect device during dispatching Date: Wed, 25 Jul 2012 15:27:15 +0300 Message-ID: <500FE623.8060304@redhat.com> References: <1343187070-27371-1-git-send-email-qemulist@gmail.com> <1343187070-27371-3-git-send-email-qemulist@gmail.com> <500FD13B.7040108@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, Anthony Liguori , Jan Kiszka , Marcelo Tosatti , Stefan Hajnoczi To: Liu Ping Fan Return-path: Received: from mx1.redhat.com ([209.132.183.28]:26361 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932089Ab2GYM11 (ORCPT ); Wed, 25 Jul 2012 08:27:27 -0400 In-Reply-To: <500FD13B.7040108@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On 07/25/2012 01:58 PM, Avi Kivity wrote: >> while (len > 0) { >> page = addr & TARGET_PAGE_MASK; >> l = (page + TARGET_PAGE_SIZE) - addr; >> if (l > len) >> l = len; >> + >> + qemu_rwlock_rdlock_devtree(); >> section = phys_page_find(page >> TARGET_PAGE_BITS); > > Does the devtree lock also protect the data structures accessed by > phys_page_find()? Seems wrong. The right way is to object_ref() in core_region_add() and object_unref() in core_region_del(). We're guaranteed that mr->object is alive during _add(), and DeviceClass::unmap() ensures that the extra ref doesn't block destruction. -- error compiling committee.c: too many arguments to function