From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id EE459A3168 for ; Wed, 16 Oct 2019 16:42:46 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3DD181E933; Wed, 16 Oct 2019 16:42:46 +0200 (CEST) Received: from mail-io1-f66.google.com (mail-io1-f66.google.com [209.85.166.66]) by dpdk.org (Postfix) with ESMTP id 7F24A1E8AB for ; Wed, 16 Oct 2019 16:42:44 +0200 (CEST) Received: by mail-io1-f66.google.com with SMTP id h144so54064346iof.7 for ; Wed, 16 Oct 2019 07:42:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=O5XZq+IvdR63QRXZ3ZaajEGI+9BCQtAGaRnmOJ2w3M0=; b=EzuLRTBf/EZv7AEneKhB6EBklkW2iIBa3uS6mYmsRd8/kLf+RL4tizZnCdflyFS9N0 oJlTx6RiiO9B8BkTzfbgdyhS+fbkQze52vZwwbNyoWKMlsKZx1WBItWV0smdOMiDIQGG vVFWxMxw2InZmfhy96ubeB7xbmPKm0fpwAnHnds3tjqgdNL5z3f2yhq9MIzTc/JUd8a7 03fupdK2B1sMIfr4W4FAAJllCXNFME8BF8LJrjY1ow7xufJO8bGDYkPL9GROI7aryvjs vSZ3/GECxzNwFV6VYPah9rFSslp38+zzdk5UVjDN51p0FmkMV3LVe+XTYmyPNjompOlM HJLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=O5XZq+IvdR63QRXZ3ZaajEGI+9BCQtAGaRnmOJ2w3M0=; b=GaDpv0x0GbamOrnXOKBh+81vcM55Dmc3KDStwR7sNARagc9jvOyOokTTK/cjxAwgHc vWIUtcJsMDNJUf5J2dDzYUvNrWB5uRH8JePrT++Hv43ZVT6aP4LD/f3LVGoqU+s7TpLw bpDeLBQzL4YPjYRmcS/R7t3+wOPVghuGL4+dpU8ChTaRk8sBI26BCbv4Bub9HsqRFHMv ynKLwSgU+gT3qCwEjpkCKNtpyQxFiFv/gZ05l2dKrID9tRISwC8iT14/hgPp/7QbZlMV pTRYXg/3NGvj3g7ukmrafbYvhMolp9Z9bCnUHxvXuDXC10FgiqF9jfpvNqi6iwpvRA/8 S3Gg== X-Gm-Message-State: APjAAAXNHB4KmMeamtsZsi+HhzAy0OFd7/2hbn4YJ7v/hVQI7gZz5B3+ LdapD8mM6qo+z9SZvs4DNmwVONv9nTGej8U19RU= X-Google-Smtp-Source: APXvYqyg5PWEVNAW9zO6RwwlTbl0YS1HYguiJBDgbT49mUDaMiG5LazieBD7hJ+pBUYHBiWJJgOxQ2Z0o9Ngy3Sq/F0= X-Received: by 2002:a6b:6508:: with SMTP id z8mr20541830iob.271.1571236963572; Wed, 16 Oct 2019 07:42:43 -0700 (PDT) MIME-Version: 1.0 References: <20191016142901.31059-1-vattunuru@marvell.com> In-Reply-To: <20191016142901.31059-1-vattunuru@marvell.com> From: Jerin Jacob Date: Wed, 16 Oct 2019 20:12:32 +0530 Message-ID: To: Vamsi Attunuru Cc: dpdk-dev , Jerin Jacob , Ferruh Yigit , Stephen Hemminger , Thomas Monjalon Content-Type: text/plain; charset="UTF-8" Subject: Re: [dpdk-dev] [PATCH v1 1/1] bus/vdev: add get iommu class callback 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On Wed, Oct 16, 2019 at 7:59 PM wrote: > > From: Vamsi Attunuru > > When DPDK application is run with vdevs, EAL decides > the iommu mode and accordingly application runs in > either of the modes. > > For KNI kind of functionality with vdevs, since there > is no backed device structure in kernel, iommu_mode = PA > needs to be enforced during eal init. > > Patch adds get_iommu_class callback in vdev bus driver > and returns iommu mode as PA when vdevs are used for > kni functionality, callback returns iommu mode as DC > in normal cases. > > Signed-off-by: Vamsi Attunuru > --- > > Below support fixes the following patchset(add iova=va mode support in KNI) > which is currently failing to create KNI devices when vdevs are passed. > http://patches.dpdk.org/patch/57720/ > > drivers/bus/vdev/vdev.c | 15 +++++++++++++++ > lib/librte_eal/common/eal_private.h | 14 -------------- > lib/librte_eal/common/include/rte_eal.h | 14 ++++++++++++++ > 3 files changed, 29 insertions(+), 14 deletions(-) > > diff --git a/drivers/bus/vdev/vdev.c b/drivers/bus/vdev/vdev.c > index a89ea23..ab07738 100644 > --- a/drivers/bus/vdev/vdev.c > +++ b/drivers/bus/vdev/vdev.c > @@ -546,6 +546,20 @@ vdev_unplug(struct rte_device *dev) > return rte_vdev_uninit(dev->name); > } > > +static enum rte_iova_mode > +rte_vdev_get_iommu_class(void) > +{ > + struct rte_devargs *devargs = NULL; > + > + if (rte_eal_check_module("rte_kni") == 1) { > + RTE_EAL_DEVARGS_FOREACH("vdev", devargs) { > + return RTE_IOVA_PA; > + } > + } > + > + return RTE_IOVA_DC; > +} This will fix KNI + vdev issue. # Move the check under #ifdef RTE_LIBRTE_KNI # Please add a comment in the code such as "vdev based KNI needs IOVA as PA to work" > static struct rte_bus rte_vdev_bus = { > .scan = vdev_scan, > .probe = vdev_probe, > @@ -554,6 +568,7 @@ static struct rte_bus rte_vdev_bus = { > .unplug = vdev_unplug, > .parse = vdev_parse, > .dev_iterate = rte_vdev_dev_iterate, > + .get_iommu_class = rte_vdev_get_iommu_class, > }; > > RTE_REGISTER_BUS(vdev, rte_vdev_bus); > diff --git a/lib/librte_eal/common/eal_private.h b/lib/librte_eal/common/eal_private.h > index 798ede5..4207bdb 100644 > --- a/lib/librte_eal/common/eal_private.h > +++ b/lib/librte_eal/common/eal_private.h > @@ -133,20 +133,6 @@ int rte_eal_intr_init(void); > int rte_eal_alarm_init(void); > > /** > - * Function is to check if the kernel module(like, vfio, vfio_iommu_type1, > - * etc.) loaded. > - * > - * @param module_name > - * The module's name which need to be checked > - * > - * @return > - * -1 means some error happens(NULL pointer or open failure) > - * 0 means the module not loaded > - * 1 means the module loaded > - */ > -int rte_eal_check_module(const char *module_name); > - > -/** > * Get virtual area of specified size from the OS. > * > * This function is private to the EAL. > diff --git a/lib/librte_eal/common/include/rte_eal.h b/lib/librte_eal/common/include/rte_eal.h > index b7cf912..4ea98e6 100644 > --- a/lib/librte_eal/common/include/rte_eal.h > +++ b/lib/librte_eal/common/include/rte_eal.h > @@ -531,6 +531,20 @@ rte_eal_mbuf_user_pool_ops(void); > const char * > rte_eal_get_runtime_dir(void); > > +/** > + * Function is to check if the kernel module(like, vfio, vfio_iommu_type1, > + * etc.) loaded. > + * > + * @param module_name > + * The module's name which need to be checked > + * > + * @return > + * -1 means some error happens(NULL pointer or open failure) > + * 0 means the module not loaded > + * 1 means the module loaded > + */ > +int rte_eal_check_module(const char *module_name); Please move, promoting rte_eal_check_module() as public API in a different patch. And update 1) lib/librte_eal/rte_eal_version.map 2) Add FreeBSD support as well, it can return always zero > + > #ifdef __cplusplus > } > #endif > -- > 2.8.4 >