From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:60144) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXon8-0007tT-0R for qemu-devel@nongnu.org; Mon, 22 Feb 2016 06:36:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aXon4-0006s8-R9 for qemu-devel@nongnu.org; Mon, 22 Feb 2016 06:36:37 -0500 Received: from mail-pa0-x22c.google.com ([2607:f8b0:400e:c03::22c]:34968) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aXon4-0006ry-DD for qemu-devel@nongnu.org; Mon, 22 Feb 2016 06:36:34 -0500 Received: by mail-pa0-x22c.google.com with SMTP id ho8so92437876pac.2 for ; Mon, 22 Feb 2016 03:36:33 -0800 (PST) References: <1456121379-13434-1-git-send-email-aik@ozlabs.ru> <20160222062631.GH2808@voom.fritz.box> From: Alexey Kardashevskiy Message-ID: <56CAF2B3.2030502@ozlabs.ru> Date: Mon, 22 Feb 2016 22:36:19 +1100 MIME-Version: 1.0 In-Reply-To: <20160222062631.GH2808@voom.fritz.box> Content-Type: text/plain; charset=koi8-r; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH qemu] memory: Fix IOMMU replay base address List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: David Gibson Cc: qemu-devel@nongnu.org On 02/22/2016 05:26 PM, David Gibson wrote: > On Mon, Feb 22, 2016 at 05:09:39PM +1100, Alexey Kardashevskiy wrote: >> Since a788f227 "memory: Allow replay of IOMMU mapping notifications" >> when new VFIO listener is added, all existing IOMMU mappings are replayed. >> However there is a problem that the base address of an IOMMU memory region >> (IOMMU MR) is ignored which is not a problem for the existing user (which is >> pseries) with its default 32bit DMA window starting at 0 but it is if there is >> another DMA window. >> >> This adjusts the replaying address by mr->addr. > > Uh.. this doesn't look right to me. AFAICT from the existing > implementations the 'addr' parameter to the translate function is an > offset within the memory region, which would make the original version > correct. Ok, then spapr_tce_translate_iommu() needs to be fixed. Or I am missing something here? The @addr field is definitely ignored now. > >> Signed-off-by: Alexey Kardashevskiy >> --- >> memory.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/memory.c b/memory.c >> index 09041ed..377269b 100644 >> --- a/memory.c >> +++ b/memory.c >> @@ -1436,7 +1436,7 @@ void memory_region_iommu_replay(MemoryRegion *mr, Notifier *n, >> IOMMUTLBEntry iotlb; >> >> for (addr = 0; addr < memory_region_size(mr); addr += granularity) { >> - iotlb = mr->iommu_ops->translate(mr, addr, is_write); >> + iotlb = mr->iommu_ops->translate(mr, mr->addr + addr, is_write); >> if (iotlb.perm != IOMMU_NONE) { >> n->notify(n, &iotlb); >> } > -- Alexey