From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:48983) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rdi5K-0000zH-Dc for qemu-devel@nongnu.org; Thu, 22 Dec 2011 07:49:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rdi5E-0005Tk-G8 for qemu-devel@nongnu.org; Thu, 22 Dec 2011 07:49:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:25960) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rdi5E-0005Tc-3h for qemu-devel@nongnu.org; Thu, 22 Dec 2011 07:49:16 -0500 Message-ID: <4EF32746.3090706@redhat.com> Date: Thu, 22 Dec 2011 14:49:10 +0200 From: Avi Kivity MIME-Version: 1.0 References: <1324304024-11220-1-git-send-email-avi@redhat.com> <1324304024-11220-21-git-send-email-avi@redhat.com> <20111222124848.GA25538@redhat.com> In-Reply-To: <20111222124848.GA25538@redhat.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 20/23] vhost: avoid cpu_get_physical_page_desc() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "Michael S. Tsirkin" Cc: xen-devel@lists.xensource.com, qemu-devel@nongnu.org, kvm@vger.kernel.org, Stefano Stabellini On 12/22/2011 02:48 PM, Michael S. Tsirkin wrote: > On Mon, Dec 19, 2011 at 04:13:41PM +0200, Avi Kivity wrote: > > @@ -871,7 +899,10 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev) > > hdev->vqs + i, > > i); > > } > > - vhost_sync_dirty_bitmap(hdev, 0, (target_phys_addr_t)~0x0ull); > > + for (i = 0; i < hdev->n_mem_sections; ++i) { > > + vhost_sync_dirty_bitmap(hdev, &hdev->mem_sections[i], > > + 0, (target_phys_addr_t)~0x0ull); > > + } > > r = vdev->binding->set_guest_notifiers(vdev->binding_opaque, false); > > if (r < 0) { > > fprintf(stderr, "vhost guest notifier cleanup failed: %d\n", r); > > diff --git a/hw/vhost.h b/hw/vhost.h > > index d1824ec..80e64df 100644 > > --- a/hw/vhost.h > > +++ b/hw/vhost.h > > @@ -30,6 +30,8 @@ struct vhost_dev { > > MemoryListener memory_listener; > > int control; > > struct vhost_memory *mem; > > + int n_mem_sections; > > + MemoryRegionSection *mem_sections; > > struct vhost_virtqueue *vqs; > > int nvqs; > > unsigned long long features; > > This adds need to track all sections which is unfortunate. > Couldn't the memory API get an extension e.g. to scan them all? I thought about it, it makes sense. We even have memory_region_find() which can be used to implement it, just need a FOR_EACH wrapper. -- error compiling committee.c: too many arguments to function