From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0087.outbound.protection.outlook.com [104.47.32.87]) by dpdk.org (Postfix) with ESMTP id 5F265199B0 for ; Wed, 20 Sep 2017 13:25:10 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=6XM279M+ZJbK2cx7t3O9jXR136KqCyfscUti4gF2+jE=; b=WZ+PHsExNZNZuhce7OwlMtaI66ZFYQf7V83F3RMPZ9bxyC+YjcPiCA4NuQ0PU/1akb+txD9NQVA6pFt6k4SJuAubjbn7Lf5OLa3ZXSpg1Z/iSpehqKHxrLQIzzybFwLPF/9k8Vp7NRPsW3Wu36hGUNXsbFuJX+iFYvcK4sF1g0c= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (111.93.218.67) by DM5PR07MB3098.namprd07.prod.outlook.com (10.172.85.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Wed, 20 Sep 2017 11:25:01 +0000 From: Santosh Shukla To: dev@dpdk.org Cc: olivier.matz@6wind.com, thomas@monjalon.net, jerin.jacob@caviumnetworks.com, hemant.agrawal@nxp.com, aconole@redhat.com, stephen@networkplumber.org, anatoly.burakov@intel.com, gaetan.rivet@6wind.com, shreyansh.jain@nxp.com, bruce.richardson@intel.com, sergio.gonzalez.monroy@intel.com, maxime.coquelin@redhat.com, Santosh Shukla Date: Wed, 20 Sep 2017 16:53:51 +0530 Message-Id: <20170920112356.17629-5-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20170920112356.17629-1-santosh.shukla@caviumnetworks.com> References: <20170918104234.9149-1-santosh.shukla@caviumnetworks.com> <20170920112356.17629-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: BM1PR01CA0076.INDPRD01.PROD.OUTLOOK.COM (10.174.208.144) To DM5PR07MB3098.namprd07.prod.outlook.com (10.172.85.8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 10ff269d-2e66-48ab-25af-08d5001a3fed X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR07MB3098; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3098; 3:BLN4fhgpWbiQJ7Ckcnl1B9/NN+mewLGWFGn+2+nL+PYb1oYxIM8wd/8EA/7fqkSbe09qnoVuKFSUShUYYFTsQARUE8pQvcHJqvepepqKuwMNd81qfpSvAQIw/lNqRqwjB4EhfBLqaYgmXLxpIPMyYFzscjeQit1ZSAbHyyDMBOPtbpXAFFmwHWrGNEhk4h6MjY/iJDLCsm1DkDYeaE4vNMgPsOdGO0GxtmtXN+i8htRX1gfMiVu366VrjZiCVxTm; 25:Og7ZfQYEEQTG0HeKIxG6EaID/Tvav4Slm/1wUd2D3GFlyX0NKMGlCHSg3gu43qra8/6/n6SC+L/DcOcG8ZLF0RA6h5E+vjDtiPW1f2kzUFzEeMIShQtMfsG1m1pVLVhC3PZYMaZxc+vsTAwzKx1W06sLy6NYOTIdLQWAhzqHynWOA2AJwmIT74zksVHTJW2Y75+h+s4lrvCfZmTuiguF4x3b8RQUrRdJIL/7+iE1g87mBjufQY9I+FN+sbQiq0dfVpG3ArTsGqukEFAGljMmEDaiBmLHTL7vgxNhJIX5lctsMadJWAHuDxA/+8pl5YBOsBCbKDMu9AuYey32+Ik+fw==; 31:4/R7Bmdo8iP51UwhI2YlCeyzXX/398j6wu2pGH2wo1k+8R+AaFTmTVMt2PyWPElVW9sCA+hKJ7WBsXrn0b01YH6G7Z2SshXSZ2g/RkPhdQkj+LnEUy/WjslFh52QZCCrUO/uZuS4pAoleU417qBWnA8Za8U1o8xuDn3wk/P0gisqMACi7J90mVS70OhhuMA46hXFcZgnhiIpnWJEfAQ3/vcQhVNZi9OnXlBccf9p8og= X-MS-TrafficTypeDiagnostic: DM5PR07MB3098: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3098; 20:/X8Vxko96ba9MXQZK/SaYy5DTHJghNSigxvivliM7ZCaZfPYR4FFKWSoXB6X67jo/KtzFK5G0RiHGbRsalvTnEBufsZI6cixwnFJYg9UK6QPhnkMHzQ+uI6lo/MmPlB84PXmSNwOMwGCSL2kkCj/Ke8uQmQ2G3S7fv4RL0h79SfJEuhedPFlYu4SE+lJ30f6I/6r8qanIhM0iew8H64XMFI67OGHYjO5pmfyOG4RqlZyLVNstdu8mvgXgrhwYIwWkVNqAIEI5881pDSFwPZphnBXcmVEUlAfWiZPziL2NjZJJCi2Wu2CsfgtpL9/9rRPf7JaYWSskBDnWAhuAmtCVUzX+ZPZEdwGWuWGWqYbn0HPPjPRbG7i8o01Cq/qzrcak0UgHt23nvdqg3dqxbw/HE+CZ8xZagb57pGQWXdiIN8VIQZjvWu2ZWtP9ewjP2Jl16idkMc7GbIWU7xzBd8RlDbZdUkqFOorgSuZaSTAktqC20RbmH4AVa4eiJaA93xIJI2g2bF15FFODgK82slbI8IOA3CxZplPboB4mlfjZicvMaJSBKcSn/GuP74EZ7FcVwXBO9/e8aM/hcpmEMxI7PYrfeXR8MD/8KhsBoLHrlw= X-Exchange-Antispam-Report-Test: UriScan:(185117386973197)(228905959029699); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(3002001)(6041248)(20161123564025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR07MB3098; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR07MB3098; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3098; 4:5RDM5Grm01x+FZtTEf2BlNyvbpzOKzenWNzoJspf+dloc2q/AM+rg8AQaeYRP4fFfO+aq7KOCRKkQ+RuyOEc/kVPYIh3QUebaITA0+jPFyG8XA+g0yuBfbHwkLdzjJ+nqgWOoTijBOr1o7HaFnvL93kweHKtS1K0VNBDPxuTsauaJEG5Jq7VOIgjArpZ2andHkDvRlUVhpkjIDhMR95ApcKk6EpVBMhATzYWa8uQDGh6V7SN31Sk6YJx6ZF65sDQ0f9xMAWGsduQhb81Dhr7Hk5kKgY1AzmeoPTKOiK694OOBZBwFAXHFQDCTtOHcetiogufph9tRouiRlRJE+3zQQ== X-Forefront-PRVS: 04362AC73B X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(346002)(376002)(189002)(199003)(66066001)(3846002)(106356001)(8936002)(7736002)(2361001)(33646002)(6506006)(2351001)(47776003)(25786009)(105586002)(53936002)(6116002)(316002)(36756003)(6486002)(107886003)(68736007)(5009440100003)(6666003)(101416001)(6512007)(81156014)(81166006)(97736004)(4326008)(50986999)(76176999)(16526017)(8676002)(2906002)(16586007)(5890100001)(189998001)(305945005)(478600001)(72206003)(2950100002)(5003940100001)(1076002)(48376002)(50226002)(6916009)(42882006)(50466002)(5660300001)(575784001)(8656003)(7416002); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3098; H:localhost.localdomain; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB3098; 23:JV6fjneILeyNzWAvyAAB049T1xibdTfanGDs4qjoi?= =?us-ascii?Q?rgR4I3goyIueI3K95lMyNWmt+XcedomyiWyvVCXkYsu0Cp0cI60Gflh5Dfv5?= =?us-ascii?Q?GsuZlNy27Q2PafNNV7zjUpzgkim2fpeqcfBt/70oxKN1NFmmfC2s6RNYJ7rv?= =?us-ascii?Q?NVMQkQva1t8KQmlK8ecfZ0iuV/8wU1Mj69PyXst6vpwSvWDWtXsKORYSVnfQ?= =?us-ascii?Q?46GZiZKQy/a8VrL+4j0L/4M2LH9kG8ostV4fLiPpouPz15bpqq+wzzFwXEXM?= =?us-ascii?Q?7SSiQRaaAdICJ1G3+XkD0Puf7UbAVW9CfFaHLyylxY6TcyWI3WaVYnqyQxPj?= =?us-ascii?Q?MghiNvxT09KoDAcFL6wjwh6QZrsDfOwlbenAGpOvi5dxXDdmpAotLr+soE0R?= =?us-ascii?Q?00wlX3TR4yyX3Co9cVTuasnRjIpIZHtX7AldM1BzqVtLpPuY3VYhS+DzD9jp?= =?us-ascii?Q?bbWIbbwOEHFLj0KHcBkl+td0EVfp9zdSbfv8JZG5o+sBoT/WXkl9x+m2bm1c?= =?us-ascii?Q?q2LM3IcNOKzcBymADeMEKltveSaG0/Lq15iqgsx2XMoH2E4n/au+eFUVVw6Y?= =?us-ascii?Q?FamIuI5Nn1kniJx21kE97gqjNJXyeM0fEct+wPowVOs816aJQ6gERoL7I+lK?= =?us-ascii?Q?ThVSBI7k9Be09P5w+x4/rv40ioB5kBPmDjk0G3QMtBiod7X+DH/+mkD1jKkw?= =?us-ascii?Q?DQL64SsX4v3CM7FPkCnkUdtH2G3QHQBSEX3IDCcPbAehXP+VxQ2FlQabA8a8?= =?us-ascii?Q?CKBRXTOxpfvdaZBrE0y1acJJ0H7od/XxGdIvDmffk+y7W1RIWspGgAU+Q/sd?= =?us-ascii?Q?iOv45TFGZN9Puzi8p+nH8DeAlvaO9dLipBQ3Y7XGBmE/FNVJ9O9c/f+TqGNq?= =?us-ascii?Q?aDsPovTvnIRvZhMjLylL+bIXNDrIdCAxfia3T80t8S6XNA2eApGup0vb5HnN?= =?us-ascii?Q?4AOBknQzs3Fs6/ALGNlUEhIHqmPzSEDEBdFKmf/8zPGdp5eK5k+BG1XlS7g/?= =?us-ascii?Q?9fq/FZ8d4diOIq5wVWgFat3oquGFZtjqkDoOJqei5h88wB11uDrA7zoVJV3d?= =?us-ascii?Q?GGm4tHk+07t3xI7CCAu5/34LkLAaZYhAjqpyZ0u357c3hF6/UIVjWxURmx1L?= =?us-ascii?Q?4j8PmAOHuP2aM1v+o55CUHEKmlxudEDkmT0n9rk/02hRXKAUR8InbRDKYi7u?= =?us-ascii?Q?ChfESF2LJ3VCyPhk9rJcdWP2NUiXOOa9XDpFpUmZIDeo2Iw2gLb6/MeC5z99?= =?us-ascii?Q?Pm8md5f2iS8lCErXvXBOFCJOitsz23HafOvITJJD4RfSfdWXGHQmGCFFopF3?= =?us-ascii?B?QT09?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3098; 6:AlORpCk87Rhe2QMqoFLhFQIqDGMKEtrn1u9BK68G9mHXEWt03bKVbDVg2+u1Wjk8xwtzb7j0K6wbqffGBHAFps+Gs2EYqkqIgS3iXHDnDidqCTIL20TUPQ4XACmjHI4wPe2fjj3C4hUeWjtE5Pu8WXE+mU3eN1JHwiBuCOy3B6Q5JGKxueS049nvwByHLeyCCBZ0SN30k9KoKXwtgUTUEqieYHzHtokrr2/LLDfdSqCDFtw4bnjZJbVztTXaOhS5lWDSLYkutPfYM6/sK7ZP2tVtISXK7c+t4l/JBUjpPZXNvKwY2FZbK75Cnkq16zO6QSN3MLIjW+94jcSYVL0Zsg==; 5:Q9mNUiuTjwEOgq5Ft5hqEHrymncfRaeSwpFUcTWOTn1I/JOJsQA5CJ5rTfufEOXrh7g5Q+iB/NTZ0F6smy8F7bSok0Os/2w9aLC1SDBtVgG092ne/aItA36484PQBd5kvUifF98Jq03qAPCtzVxN7g==; 24:G3JhI4TLOmC5VxzkezCu4wv/e7CJgGEP6U0D+OyLS4bae3ZT/1zFgicFZg4T/bXEUj35I7N1tuK6Nef9xJ6niPNl/S2JLEAEHcKu6npZMdA=; 7:hoV0KV2qCS+D9gyXXpr1/kK3ZG5+xULH++pDzkHeeRH+vrA/l9LoR2CeIIjC1O2p0H8QqIrLKW0tqQmLm1LV+J2u6dGFUB+MiCXOwODlsSvTsSW+bBtr1Wxlq+jmGOhvD0SEVNZ0zj1a8kvMCzENJJbXSmoUUIjC8Gx1QNXEdKVJ0WEMFkEpkoKsXZ1TZLICt8ozBKIw5mbE/LAeud8DPkVR6YGYloFjnllAPTjbk2A= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2017 11:25:01.6167 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3098 Subject: [dpdk-dev] [PATCH v9 4/9] bus: get iommu class 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: Wed, 20 Sep 2017 11:25:10 -0000 API(rte_bus_get_iommu_class) helps to automatically detect and select appropriate iova mapping scheme for iommu capable device on that bus. Algorithm for iova scheme selection for bus: 0. Iterate through bus_list. 1. Collect each bus iova mode value and update into 'mode' var. 2. Mode selection scheme is: if mode == 0 then iova mode is _pa, if mode == 1 then iova mode is _pa, if mode == 2 then iova mode is _va, if mode == 3 then iova mode ia _pa. So mode !=2 will be default iova mode (_pa). Signed-off-by: Santosh Shukla Signed-off-by: Jerin Jacob Reviewed-by: Maxime Coquelin Acked-by: Hemant Agrawal Reviewed-by: Anatoly Burakov Tested-by: Hemant Agrawal --- lib/librte_eal/bsdapp/eal/rte_eal_version.map | 1 + lib/librte_eal/common/eal_common_bus.c | 23 +++++++++++++++++++++++ lib/librte_eal/common/eal_common_pci.c | 1 + lib/librte_eal/common/include/rte_bus.h | 25 +++++++++++++++++++++++++ lib/librte_eal/linuxapp/eal/rte_eal_version.map | 1 + 5 files changed, 51 insertions(+) diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map index c6ffd9399..3466eaf20 100644 --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map @@ -244,5 +244,6 @@ DPDK_17.11 { rte_pci_match; rte_pci_get_iommu_class; + rte_bus_get_iommu_class; } DPDK_17.08; diff --git a/lib/librte_eal/common/eal_common_bus.c b/lib/librte_eal/common/eal_common_bus.c index 08bec2d93..a30a8982e 100644 --- a/lib/librte_eal/common/eal_common_bus.c +++ b/lib/librte_eal/common/eal_common_bus.c @@ -222,3 +222,26 @@ rte_bus_find_by_device_name(const char *str) c[0] = '\0'; return rte_bus_find(NULL, bus_can_parse, name); } + + +/* + * Get iommu class of devices on the bus. + */ +enum rte_iova_mode +rte_bus_get_iommu_class(void) +{ + int mode = RTE_IOVA_DC; + struct rte_bus *bus; + + TAILQ_FOREACH(bus, &rte_bus_list, next) { + + if (bus->get_iommu_class) + mode |= bus->get_iommu_class(); + } + + if (mode != RTE_IOVA_VA) { + /* Use default IOVA mode */ + mode = RTE_IOVA_PA; + } + return mode; +} diff --git a/lib/librte_eal/common/eal_common_pci.c b/lib/librte_eal/common/eal_common_pci.c index 3b7d0a0ee..0f0e4b93b 100644 --- a/lib/librte_eal/common/eal_common_pci.c +++ b/lib/librte_eal/common/eal_common_pci.c @@ -564,6 +564,7 @@ struct rte_pci_bus rte_pci_bus = { .plug = pci_plug, .unplug = pci_unplug, .parse = pci_parse, + .get_iommu_class = rte_pci_get_iommu_class, }, .device_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.device_list), .driver_list = TAILQ_HEAD_INITIALIZER(rte_pci_bus.driver_list), diff --git a/lib/librte_eal/common/include/rte_bus.h b/lib/librte_eal/common/include/rte_bus.h index 9e40687e5..70a291a4d 100644 --- a/lib/librte_eal/common/include/rte_bus.h +++ b/lib/librte_eal/common/include/rte_bus.h @@ -178,6 +178,20 @@ struct rte_bus_conf { enum rte_bus_scan_mode scan_mode; /**< Scan policy. */ }; + +/** + * Get common iommu class of the all the devices on the bus. The bus may + * check that those devices are attached to iommu driver. + * If no devices are attached to the bus. The bus may return with don't care + * (_DC) value. + * Otherwise, The bus will return appropriate _pa or _va iova mode. + * + * @return + * enum rte_iova_mode value. + */ +typedef enum rte_iova_mode (*rte_bus_get_iommu_class_t)(void); + + /** * A structure describing a generic bus. */ @@ -191,6 +205,7 @@ struct rte_bus { rte_bus_unplug_t unplug; /**< Remove single device from driver */ rte_bus_parse_t parse; /**< Parse a device name */ struct rte_bus_conf conf; /**< Bus configuration */ + rte_bus_get_iommu_class_t get_iommu_class; /**< Get iommu class */ }; /** @@ -290,6 +305,16 @@ struct rte_bus *rte_bus_find_by_device(const struct rte_device *dev); */ struct rte_bus *rte_bus_find_by_name(const char *busname); + +/** + * Get the common iommu class of devices bound on to buses available in the + * system. The default mode is PA. + * + * @return + * enum rte_iova_mode value. + */ +enum rte_iova_mode rte_bus_get_iommu_class(void); + /** * Helper for Bus registration. * The constructor has higher priority than PMD constructors. diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map index a8c8ea4f4..9115aa3e9 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -249,5 +249,6 @@ DPDK_17.11 { rte_pci_match; rte_pci_get_iommu_class; + rte_bus_get_iommu_class; } DPDK_17.08; -- 2.14.1