From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54929) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cw62H-0002EO-13 for qemu-devel@nongnu.org; Thu, 06 Apr 2017 07:57:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cw62G-0006Cu-67 for qemu-devel@nongnu.org; Thu, 06 Apr 2017 07:57:09 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39620) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1cw62G-0006Ca-0A for qemu-devel@nongnu.org; Thu, 06 Apr 2017 07:57:08 -0400 Date: Thu, 6 Apr 2017 14:57:00 +0300 From: "Michael S. Tsirkin" Message-ID: <20170406145654-mutt-send-email-mst@kernel.org> References: <1491462524-1617-1-git-send-email-peterx@redhat.com> <1491462524-1617-6-git-send-email-peterx@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1491462524-1617-6-git-send-email-peterx@redhat.com> Subject: Re: [Qemu-devel] [PATCH v8 5/9] memory: add MemoryRegionIOMMUOps.replay() callback List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Xu Cc: qemu-devel@nongnu.org, tianyu.lan@intel.com, kevin.tian@intel.com, Marcel Apfelbaum , jan.kiszka@siemens.com, jasowang@redhat.com, David Gibson , alex.williamson@redhat.com, bd.aviv@gmail.com On Thu, Apr 06, 2017 at 03:08:40PM +0800, Peter Xu wrote: > Originally we have one memory_region_iommu_replay() function, which is > the default behavior to replay the translations of the whole IOMMU > region. However, on some platform like x86, we may want our own replay > logic for IOMMU regions. This patch add one more hook for IOMMUOps for > the callback, and it'll override the default if set. > > Reviewed-by: David Gibson > Signed-off-by: Peter Xu Reviewed-by: Michael S. Tsirkin > --- > include/exec/memory.h | 2 ++ > memory.c | 6 ++++++ > 2 files changed, 8 insertions(+) > > diff --git a/include/exec/memory.h b/include/exec/memory.h > index 055b3a8..c0280b7 100644 > --- a/include/exec/memory.h > +++ b/include/exec/memory.h > @@ -191,6 +191,8 @@ struct MemoryRegionIOMMUOps { > void (*notify_flag_changed)(MemoryRegion *iommu, > IOMMUNotifierFlag old_flags, > IOMMUNotifierFlag new_flags); > + /* Set this up to provide customized IOMMU replay function */ > + void (*replay)(MemoryRegion *iommu, IOMMUNotifier *notifier); > }; > > typedef struct CoalescedMemoryRange CoalescedMemoryRange; > diff --git a/memory.c b/memory.c > index ded4bf1..b782d5b 100644 > --- a/memory.c > +++ b/memory.c > @@ -1626,6 +1626,12 @@ void memory_region_iommu_replay(MemoryRegion *mr, IOMMUNotifier *n, > hwaddr addr, granularity; > IOMMUTLBEntry iotlb; > > + /* If the IOMMU has its own replay callback, override */ > + if (mr->iommu_ops->replay) { > + mr->iommu_ops->replay(mr, n); > + return; > + } > + > granularity = memory_region_iommu_get_min_page_size(mr); > > for (addr = 0; addr < memory_region_size(mr); addr += granularity) { > -- > 2.7.4