From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:34243) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UcMN1-0000Y8-EJ for qemu-devel@nongnu.org; Tue, 14 May 2013 17:02:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UcMMx-00045Z-O5 for qemu-devel@nongnu.org; Tue, 14 May 2013 17:02:51 -0400 Sender: Paolo Bonzini Message-ID: <5192A66F.7090405@redhat.com> Date: Tue, 14 May 2013 23:02:39 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <1368522837-20747-1-git-send-email-david@gibson.dropbear.id.au> <1368522837-20747-11-git-send-email-david@gibson.dropbear.id.au> <1368551740.5520.128.camel@ul30vt.home> In-Reply-To: <1368551740.5520.128.camel@ul30vt.home> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 10/11] memory: Add iommu map/unmap notifiers List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alex Williamson Cc: aik@ozlabs.ru, mst@redhat.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org, David Gibson Il 14/05/2013 19:15, Alex Williamson ha scritto: > On Tue, 2013-05-14 at 19:13 +1000, David Gibson wrote: >> > This patch adds a NotifierList to MemoryRegions which represent IOMMUs >> > allowing other parts of the code to register interest in mappings or >> > unmappings from the IOMMU. All IOMMU implementations will need to call >> > memory_region_notify_iommu() to inform those waiting on the notifier list, >> > whenever an IOMMU mapping is made or removed. >> > >> > Signed-off-by: David Gibson >> > --- >> > hw/ppc/spapr_iommu.c | 8 ++++++++ >> > include/exec/memory.h | 7 +++++++ >> > memory.c | 18 ++++++++++++++++++ >> > 3 files changed, 33 insertions(+) >> > >> > diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c >> > index 07a6307..6d40485 100644 >> > --- a/hw/ppc/spapr_iommu.c >> > +++ b/hw/ppc/spapr_iommu.c >> > @@ -194,6 +194,7 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, target_ulong ioba, >> > target_ulong tce) >> > { >> > sPAPRTCE *tcep; >> > + IOMMUTLBEntry entry; >> > >> > if (ioba >= tcet->window_size) { >> > hcall_dprintf("spapr_vio_put_tce on out-of-bounds IOBA 0x" >> > @@ -204,6 +205,13 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, target_ulong ioba, >> > tcep = tcet->table + (ioba >> SPAPR_TCE_PAGE_SHIFT); >> > tcep->tce = tce; >> > >> > + entry.iova = ioba & ~SPAPR_TCE_PAGE_MASK; >> > + entry.translated_addr = tce & ~SPAPR_TCE_PAGE_MASK; >> > + entry.addr_mask = SPAPR_TCE_PAGE_MASK; >> > + entry.perm[0] = !!(tce & SPAPR_TCE_RO); >> > + entry.perm[1] = !!(tce & SPAPR_TCE_WO); > I really wish these perms were addressed by #defines (ie. > perm[READ]/perm[WRITE]) or explicitly named. > I will make it a 2-bit field. Paolo