From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io0-f196.google.com (mail-io0-f196.google.com [209.85.223.196]) by dpdk.org (Postfix) with ESMTP id 135BB28C3 for ; Thu, 10 Aug 2017 08:03:23 +0200 (CEST) Received: by mail-io0-f196.google.com with SMTP id j32so1006982iod.3 for ; Wed, 09 Aug 2017 23:03:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ozlabs-ru.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=kCIusvT+uDVCUafQpdi2jx1LRoSIHEPbD6ZhXmxVd9g=; b=bFzyPIw8u+e7fe6ByGgn7MPLxBtkccUL2li+n48fRxt4oPLD38E5f8UlUS98mz9kV0 WvuKITDc82F6qRuBmZHqRJF5LnzhJH/uOwUlDcGgIjv+FlRfFSLndWepEyuwJ1OaCXo9 a6HoNny+8XTqUpmJRWHJiav97Ai9J6Z+hALCqCC2Y95BF7qP8ERy2+pjUn26lVHIzJly UXGy0N64/NOGmslnKMEG6i74NAsDZFKULoSHQknJWuV84XZ2/mtsfGSNjRG6+Y8XeGgX uhFVOd2p6C5jk1FJWy6Wf24rircgbaEFye4ncHWqJZtNMAtb1z89P8ogkpMo2GQuPjnw dF7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=kCIusvT+uDVCUafQpdi2jx1LRoSIHEPbD6ZhXmxVd9g=; b=TNwVVkfwk2JHAiK9u3mcvGCUgJAXSQmgnIBmtg7mOOyyC3E74SwiHs4fjLmR47WsrJ wjB2NbgWcqnj0JZYKCenjGTDJzb1rDD5dlWqPy+3BhdhfIpxIMQJ6MYUVndBIV0oyMqx cGu9ZbUGT/jVbLmCSZBZdmyWujeElcnfgFcCfeRNrkyQrT2ssQpoVR8qSChaDrD2EAwP cUzSvLy4WYTElrV7pHvvpT0RQPG3tVQNGMj0kWqyfsBQTdQGYlY5XEGAB3VeWbJ+QnRs jrvrDnozTV/AQzs+/AAvlgDFlDVFWb1WFeRdLkA95JGMWpYJKbJWOYvfRLit05gC/mj+ bkWw== X-Gm-Message-State: AIVw112oHdIrPOk88IBQkJY+lP4HAB7msNpMh1C1sY1lEzuN3wz+PNNR uFUx8IKN7JxcnVit3k0= X-Received: by 10.107.57.137 with SMTP id g131mr8524301ioa.39.1502345002618; Wed, 09 Aug 2017 23:03:22 -0700 (PDT) Received: from [10.61.2.175] ([122.99.82.10]) by smtp.googlemail.com with ESMTPSA id 80sm2866432itk.11.2017.08.09.23.03.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Aug 2017 23:03:21 -0700 (PDT) To: Jonas Pfefferle , anatoly.burakov@intel.com Cc: dev@dpdk.org References: <1502191002-13988-1-git-send-email-jpf@zurich.ibm.com> From: Alexey Kardashevskiy Message-ID: Date: Thu, 10 Aug 2017 16:03:17 +1000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <1502191002-13988-1-git-send-email-jpf@zurich.ibm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-AU Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v4] vfio: fix sPAPR IOMMU DMA window size X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Aug 2017 06:03:24 -0000 On 08/08/17 21:16, Jonas Pfefferle wrote: > DMA window size needs to be big enough to span all memory segment's > physical addresses. We do not need multiple levels of IOMMU tables > as we already span ~70TB of physical memory with 16MB hugepages. > > Signed-off-by: Jonas Pfefferle Reviewed-by: Alexey Kardashevskiy > --- > v2: > * roundup to next power 2 function without loop. > > v3: > * Replace roundup_next_pow2 with rte_align64pow2 > > v4: > * do not assume ordering of physical addresses of memsegs > > lib/librte_eal/linuxapp/eal/eal_vfio.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c b/lib/librte_eal/linuxapp/eal/eal_vfio.c > index 946df7e..7d5d61d 100644 > --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c > +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c > @@ -759,10 +759,19 @@ vfio_spapr_dma_map(int vfio_container_fd) > return -1; > } > > - /* calculate window size based on number of hugepages configured */ > - create.window_size = rte_eal_get_physmem_size(); > + /* create DMA window from 0 to max(phys_addr + len) */ > + for (i = 0; i < RTE_MAX_MEMSEG; i++) { > + if (ms[i].addr == NULL) > + break; > + > + create.window_size = RTE_MAX(create.window_size, > + ms[i].phys_addr + ms[i].len); > + } > + > + /* sPAPR requires window size to be a power of 2 */ > + create.window_size = rte_align64pow2(create.window_size); > create.page_shift = __builtin_ctzll(ms->hugepage_sz); > - create.levels = 2; > + create.levels = 1; > > ret = ioctl(vfio_container_fd, VFIO_IOMMU_SPAPR_TCE_CREATE, &create); > if (ret) { > @@ -771,6 +780,11 @@ vfio_spapr_dma_map(int vfio_container_fd) > return -1; > } > > + if (create.start_addr != 0) { > + RTE_LOG(ERR, EAL, " DMA window start address != 0\n"); > + return -1; > + } > + > /* map all DPDK segments for DMA. use 1:1 PA to IOVA mapping */ > for (i = 0; i < RTE_MAX_MEMSEG; i++) { > struct vfio_iommu_type1_dma_map dma_map; > -- Alexey