From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ua0-f177.google.com (mail-ua0-f177.google.com [209.85.217.177]) by dpdk.org (Postfix) with ESMTP id 9377D2C72 for ; Fri, 21 Apr 2017 11:23:25 +0200 (CEST) Received: by mail-ua0-f177.google.com with SMTP id h2so77945733uaa.1 for ; Fri, 21 Apr 2017 02:23:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=t8wd6EQa0XjEMy0NEqDEW2eQQnVUVIzNxnfEB11Xlx0=; b=KmXboSaTIkGnd6r6MVG/VYaM4xyAwPSYGgOEw6JgFY5K31YTUcxjNdddZED063sC6T dIH5blhOoeutb09e13SwYARx1QtcNS61HqRiu56CBLPBk1i9qryB44b+iStQsNj+NEQw BQjFfB7ntpQhcdwAt76vdb9HafevEGcFXtMsZzbbJHw1cvskNzMUvM6xUckvd4DZTrwq I5QjxzLOgsb+Qd/vckx16bWqFNz/kghdyfDWbxj3J6x7X/AIExNMwoRi8SOFPKaGUMoY 09hHqT9ehZJH8mhxMfctQ4KgFBJ19XnFC+U0rkKi5PBIQ7MCHcFUqktP67xp8WqLi87q EQYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=t8wd6EQa0XjEMy0NEqDEW2eQQnVUVIzNxnfEB11Xlx0=; b=BhVYg8cV5VPKuzGF2Rabz6dhp3t1XET1niFbFi3OvkSI8+dnbTophxhEyuZzhXjuDp PTLX9r2py5tKC0+Q80uxyLf6NBgoo4o01/9hU1fTM2sJ7cIFZhjYtu5nkJts66Jyd83K 8XsbT3jfGcaxdqHYtNfEHfhStkANs0IRcnhoGaWjsoWqbODlwaeN25mj3rAu0922vX/e uqXeOfdJr6uFQochUU0/mNPEzn+I4eh1GmPTOukJXP2AYJfICa3NlQNwZItaUI8q1ijI 285cLMEB8n/nCioPHUgYDWaB8rxobNfyq4s9dyu8nY9dMAnUeNb+gCBXAUtyG4YliWpm LZ9g== X-Gm-Message-State: AN3rC/4aF2YhgYoIfh+9pf5totwWWnmMLZ25oRxvhVIvjIxVVcMphTex +JowuQFhXihBU5SAHM3nwOlk5eufORTS X-Received: by 10.176.74.80 with SMTP id r16mr4788807uae.39.1492766604917; Fri, 21 Apr 2017 02:23:24 -0700 (PDT) MIME-Version: 1.0 Received: by 10.103.14.69 with HTTP; Fri, 21 Apr 2017 02:23:24 -0700 (PDT) In-Reply-To: References: <1491321976-27290-1-git-send-email-arybchenko@solarflare.com> From: Alejandro Lucero Date: Fri, 21 Apr 2017 11:23:24 +0200 Message-ID: To: gowrishankar muthukrishnan Cc: dev , Anatoly Burakov , Andrew Rybchenko , Alexey Kardashevskiy , Thomas Monjalon Content-Type: text/plain; charset=UTF-8 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH] vfio: set IOMMU type for the container once 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: Fri, 21 Apr 2017 09:23:26 -0000 The patch is OK for me. I have run tests with that change with no problems. But I can just run tests with devices where each one got its own IOMMU group, so my ack is just for that case (although theoretically this patch fixes the other case). I'm looking at doing some changes to the kernel for being able to have an scenario with several devices sharing same IOMMU group just for the shake of testing. By other hand, vfio hotplug has a problem when there are several devices in same IOMMU group being plugged and unplugged. I have a patch ready for fixing this issue which I will send soon. On Fri, Apr 21, 2017 at 11:12 AM, gowrishankar muthukrishnan < gowrishankar.m@linux.vnet.ibm.com> wrote: > Could this patch be reviewed and merged for 17.05 rc3 ?. It solved > regression with i40e pmd > bring up in one of our ppc64le server models through vfio-pci pci module. > > Thanks Alexey pointing out this in one of your patches. > > Regards, > Gowrishankar > > > On Tuesday 04 April 2017 09:36 PM, Andrew Rybchenko wrote: > >> If more than one used PCI device belongs to one IOMMU group, >> it is still one IOMMU group and the container IOMMU type >> should be set only once. >> >> Fixes: 94c0776b1bad ("vfio: support hotplug") >> >> Signed-off-by: Andrew Rybchenko >> --- >> My testing of the patch is limitted to my configuration with 2 PCI >> functions which belong to one IOMMU group. >> >> lib/librte_eal/linuxapp/eal/eal_vfio.c | 54 >> ++++++++++++++++++---------------- >> 1 file changed, 29 insertions(+), 25 deletions(-) >> >> diff --git a/lib/librte_eal/linuxapp/eal/eal_vfio.c >> b/lib/librte_eal/linuxapp/eal/eal_vfio.c >> index 6e2e84c..dd59c1c 100644 >> --- a/lib/librte_eal/linuxapp/eal/eal_vfio.c >> +++ b/lib/librte_eal/linuxapp/eal/eal_vfio.c >> @@ -298,33 +298,37 @@ vfio_setup_device(const char *sysfs_base, const >> char *dev_addr, >> clear_group(vfio_group_fd); >> return -1; >> } >> - } >> >> - /* >> - * pick an IOMMU type and set up DMA mappings for container >> - * >> - * needs to be done only once, only when first group is assigned >> to >> - * a container and only in primary process. Note this can happen >> several >> - * times with the hotplug functionality. >> - */ >> - if (internal_config.process_type == RTE_PROC_PRIMARY && >> - vfio_cfg.vfio_active_groups == 1) { >> - /* select an IOMMU type which we will be using */ >> - const struct vfio_iommu_type *t = >> + /* >> + * pick an IOMMU type and set up DMA mappings for >> container >> + * >> + * needs to be done only once, only when first group is >> + * assigned to a container and only in primary process. >> + * Note this can happen several times with the hotplug >> + * functionality. >> + */ >> + if (internal_config.process_type == RTE_PROC_PRIMARY && >> + vfio_cfg.vfio_active_groups == 1) { >> + /* select an IOMMU type which we will be using */ >> + const struct vfio_iommu_type *t = >> vfio_set_iommu_type(vfio_cfg.v >> fio_container_fd); >> - if (!t) { >> - RTE_LOG(ERR, EAL, " %s failed to select IOMMU >> type\n", dev_addr); >> - close(vfio_group_fd); >> - clear_group(vfio_group_fd); >> - return -1; >> - } >> - ret = t->dma_map_func(vfio_cfg.vfio_container_fd); >> - if (ret) { >> - RTE_LOG(ERR, EAL, " %s DMA remapping failed, " >> - "error %i (%s)\n", dev_addr, >> errno, strerror(errno)); >> - close(vfio_group_fd); >> - clear_group(vfio_group_fd); >> - return -1; >> + if (!t) { >> + RTE_LOG(ERR, EAL, >> + " %s failed to select IOMMU >> type\n", >> + dev_addr); >> + close(vfio_group_fd); >> + clear_group(vfio_group_fd); >> + return -1; >> + } >> + ret = t->dma_map_func(vfio_cfg.vfio_ >> container_fd); >> + if (ret) { >> + RTE_LOG(ERR, EAL, >> + " %s DMA remapping failed, error >> %i (%s)\n", >> + dev_addr, errno, strerror(errno)); >> + close(vfio_group_fd); >> + clear_group(vfio_group_fd); >> + return -1; >> + } >> } >> } >> >> >