From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50079) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Wnpi5-0004sZ-Fm for qemu-devel@nongnu.org; Fri, 23 May 2014 09:41:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WnphX-0007QU-4R for qemu-devel@nongnu.org; Fri, 23 May 2014 09:40:33 -0400 Message-ID: <537F4FAC.7030305@suse.de> Date: Fri, 23 May 2014 15:39:56 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1400757570-1983-1-git-send-email-aik@ozlabs.ru> <1400757570-1983-9-git-send-email-aik@ozlabs.ru> In-Reply-To: <1400757570-1983-9-git-send-email-aik@ozlabs.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 8/9] spapr_iommu: Introduce page_shift in sPAPRTCETable List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy , qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org On 22.05.14 13:19, Alexey Kardashevskiy wrote: > At the moment only 4K pages are supported by sPAPRTCETable. Since sPAPR > spec allows other page sizes and we are going to implement them, we need > page size to be configrable. > > This adds @page_shift into sPAPRTCETable and replaces SPAPR_TCE_PAGE_SHIFT > with it whereever it is possible. > > This removes SPAPR_TCE_PAGE_MASK as it is no longer used. > > Signed-off-by: Alexey Kardashevskiy > --- > Changes: > v2: > * target_ulong for "mask" replaced with hwaddr > * added page_mask and page_size local variables where possible > --- > hw/ppc/spapr_iommu.c | 66 +++++++++++++++++++++++++++++++------------------- > hw/ppc/spapr_pci.c | 1 + > hw/ppc/spapr_vio.c | 1 + > include/hw/ppc/spapr.h | 3 ++- > 4 files changed, 45 insertions(+), 26 deletions(-) > > diff --git a/hw/ppc/spapr_iommu.c b/hw/ppc/spapr_iommu.c > index 99d1d6e..65f9a89 100644 > --- a/hw/ppc/spapr_iommu.c > +++ b/hw/ppc/spapr_iommu.c > @@ -70,12 +70,14 @@ static IOMMUTLBEntry spapr_tce_translate_iommu(MemoryRegion *iommu, hwaddr addr) > > if (tcet->bypass) { > ret.perm = IOMMU_RW; > - } else if ((addr >> SPAPR_TCE_PAGE_SHIFT) < tcet->nb_table) { > + } else if ((addr >> tcet->page_shift) < tcet->nb_table) { > /* Check if we are in bound */ > - tce = tcet->table[addr >> SPAPR_TCE_PAGE_SHIFT]; > - ret.iova = addr & ~SPAPR_TCE_PAGE_MASK; > - ret.translated_addr = tce & ~SPAPR_TCE_PAGE_MASK; > - ret.addr_mask = SPAPR_TCE_PAGE_MASK; > + hwaddr page_mask = ~((1 << tcet->page_shift) - 1); 1ULL > + > + tce = tcet->table[addr >> tcet->page_shift]; > + ret.iova = addr & page_mask; > + ret.translated_addr = tce & page_mask; > + ret.addr_mask = ~page_mask; > ret.perm = tce; > } > trace_spapr_iommu_xlate(tcet->liobn, addr, ret.iova, ret.perm, > @@ -113,7 +115,7 @@ static int spapr_tce_table_realize(DeviceState *dev) > if (kvm_enabled()) { > tcet->table = kvmppc_create_spapr_tce(tcet->liobn, > tcet->nb_table << > - SPAPR_TCE_PAGE_SHIFT, > + tcet->page_shift, > &tcet->fd); > } > > @@ -133,6 +135,7 @@ static int spapr_tce_table_realize(DeviceState *dev) > } > > sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn, > + uint32_t page_shift, > uint32_t nb_table) > { > sPAPRTCETable *tcet; > @@ -149,6 +152,7 @@ sPAPRTCETable *spapr_tce_new_table(DeviceState *owner, uint32_t liobn, > > tcet = SPAPR_TCE_TABLE(object_new(TYPE_SPAPR_TCE_TABLE)); > tcet->liobn = liobn; > + tcet->page_shift = page_shift; > tcet->nb_table = nb_table; > > object_property_add_child(OBJECT(owner), "tce-table", OBJECT(tcet), NULL); > @@ -194,19 +198,20 @@ static target_ulong put_tce_emu(sPAPRTCETable *tcet, target_ulong ioba, > target_ulong tce) > { > IOMMUTLBEntry entry; > + hwaddr page_mask = ~((1 << tcet->page_shift) - 1); ... Alex