Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752163AbbBDGoa (ORCPT ); Wed, 4 Feb 2015 01:44:30 -0500 Received: from ozlabs.org ([103.22.144.67]:36195 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751255AbbBDGo2 (ORCPT ); Wed, 4 Feb 2015 01:44:28 -0500 Date: Wed, 4 Feb 2015 17:08:22 +1100 From: Paul Mackerras To: Alexey Kardashevskiy Cc: linuxppc-dev@lists.ozlabs.org, Benjamin Herrenschmidt , Michael Ellerman , Gavin Shan , Alex Williamson , Alexander Graf , Alexander Gordeev , linux-kernel@vger.kernel.org Subject: Re: [PATCH v3 12/24] powerpc/iommu/powernv: Release replaced TCE Message-ID: <20150204060822.GA8644@iris.ozlabs.ibm.com> References: <1422523325-1389-1-git-send-email-aik@ozlabs.ru> <1422523325-1389-13-git-send-email-aik@ozlabs.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1422523325-1389-13-git-send-email-aik@ozlabs.ru> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1798 Lines: 42 On Thu, Jan 29, 2015 at 08:21:53PM +1100, Alexey Kardashevskiy wrote: > At the moment writing new TCE value to the IOMMU table fails with EBUSY > if there is a valid entry already. However PAPR specification allows > the guest to write new TCE value without clearing it first. > > Another problem this patch is addressing is the use of pool locks for > external IOMMU users such as VFIO. The pool locks are to protect > DMA page allocator rather than entries and since the host kernel does > not control what pages are in use, there is no point in pool locks and > exchange()+put_page(oldtce) is sufficient to avoid possible races. > > This adds an exchange() callback to iommu_table_ops which does the same > thing as set() plus it returns replaced TCE(s) so the caller can release > the pages afterwards. > > This implements exchange() for IODA2 only. This adds a requirement > for a platform to have exchange() implemented so from now on IODA2 is > the only supported PHB for VFIO-SPAPR. > > This replaces iommu_tce_build() and iommu_clear_tce() with > a single iommu_tce_xchg(). [snip] > @@ -294,8 +303,9 @@ static long tce_iommu_build(struct tce_container *container, > > hva = (unsigned long) page_address(page) + > (tce & IOMMU_PAGE_MASK(tbl) & ~PAGE_MASK); > + oldtce = 0; > > - ret = iommu_tce_build(tbl, entry + 1, hva, direction); > + ret = iommu_tce_xchg(tbl, entry + i, hva, &oldtce, direction); Is the change from entry + 1 to entry + i here an actual bug fix? If so please mention it in the patch description. Paul. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/