From patchwork Mon Aug 14 16:10:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Santosh Shukla X-Patchwork-Id: 27586 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 990C9910D; Mon, 14 Aug 2017 18:12:48 +0200 (CEST) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0056.outbound.protection.outlook.com [104.47.32.56]) by dpdk.org (Postfix) with ESMTP id 34FF9910D for ; Mon, 14 Aug 2017 18:12:47 +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=Bj+u5ShroNl8tN0MOYoTrKeZ5SO9mf4O1AAKi17VIDg=; b=fRCxPCzNaM72mnd2TjAb8AHWdkXSCkFNEMOCNhlE7wG1kHRRVqG5pb+q9XAPMCvownvAP1g6M9jWhr0FuApH5gXGDqzmU4WMVggmTgzetWhH/dwLCJJ44D69/SjHFs9OMMgpnWO4FeuiLpjobbT9IuvJqjDz44ibyzZ1K04QnvQ= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (14.140.2.178) by CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1341.21; Mon, 14 Aug 2017 16:12:39 +0000 From: Santosh Shukla To: dev@dpdk.org Cc: olivier.matz@6wind.com, thomas@monjalon.net, jerin.jacob@caviumnetworks.com, hemant.agrawal@nxp.com, maxime.coquelin@redhat.com, sergio.gonzalez.monroy@intel.com, bruce.richardson@intel.com, shreyansh.jain@nxp.com, gaetan.rivet@6wind.com, anatoly.burakov@intel.com, stephen@networkplumber.org, Santosh Shukla Date: Mon, 14 Aug 2017 21:40:53 +0530 Message-Id: <20170814161059.6684-7-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170814161059.6684-1-santosh.shukla@caviumnetworks.com> References: <20170724084004.25542-1-santosh.shukla@caviumnetworks.com> <20170814161059.6684-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [14.140.2.178] X-ClientProxiedBy: PN1PR01CA0087.INDPRD01.PROD.OUTLOOK.COM (10.174.144.155) To CY4PR07MB3093.namprd07.prod.outlook.com (10.172.115.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aaa2fb50-b3a7-4ec7-1230-08d4e32f4cec X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:CY4PR07MB3093; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 3:CRrDI77EAIZfvq84t23AKiX2Jv3k60FGQ5sYDQpXLiYs/BhfcCwVG+iG9puycT3Bicz2SBOcV3U70SEnojc69nr9G/HxucIesZPQB2G3IjDeKA46W5+ebaBEyjbK3xg6+vW3IVPXC+TladPOv5yix+VCkI7fXM00yj0dklbeBV9yzOsGWwtRLWYNAjlP6ILrPwzDnhCd7ZWQDf5Yk2abAcTHnwKcE/aE/Mhx7mNj0XfU1TGPqFuqaG7SsF2Awm+m; 25:OWeoV+JrNzpgCfDp8Q99eMoWxwJTflKwuejocTA7291jxODgp8jbJ4QGMBkb+xaQkRrzrqFDWffmnrSskEt5jH2bOSbsfnvAKI8XkxzloayDAizXvZQsJlfDKri695E796gIt2aEHZeEft12+kk+znmmm/UezvbCx96Qp4QQfWLbHw9QFgm0EGcxJyprXrWLqSvRUJ7oLULLCbMV8X3XusAvhHaYu8dsCvVsCg0pazkpWcH/7xUmIYdYJNKb5+erUA9ESHMaHPtAQjYYE6R/ySFTs4eO9MkPzUa/FlVqmsknwtlzruP7CH13/5Qg0taExeJvqOVDo0vlKorpCKq/Bg==; 31:gOSAobOy9NwGx8nB6G+Ltkwztug84EYEGCn4aF0XFBNBZ/0XUeK9LRsYwUgI1Rrs3ujvinx44E0ZHaNvgoEMwADaFlWw3Jl/RGQfef6mT0xHIwc77G57f4ZITS9LVoTtdu+4Muog/E58ytdku2IFUQbm0XEMuiHc3T+9F/7wjq7UGrcjiYvJdhDf6Ec4Sb5GXHbWInPeULpW2vtJW1NMwkXtciDeL5JgHBHRvHeji4E= X-MS-TrafficTypeDiagnostic: CY4PR07MB3093: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 20:Er8i7lRubtfrQShgnxmdZ0f6jr2WCYosP3zS+PWsgWkgukGyzDy8h22Yiq+79Z2jpdbGUpXen3Qz6pVA+ZGnk8L6SlOuU2x0RXzfI9Fe5mGq5N8Rr5h61X04b4Yk9ni/nolvmrzFVg1cvySx6Regh5nOIGC8AhrtUIBpnCqPnCV8bmabNep1cM/ubxA4CUP3xXNEf13W1Fe0Ok91PSRcf99QTQGdz1ITKVszRY3xBTo+Wlhv3X8fBnaC46ksNMXpvA1mHxZq5UQJgiV44+t7MF6/8QxRZuj6gA75N1KkZD2jHk/9rloGVxaS10HKToKZLcXy6zlCsUfJyGsE/D0H3BHWAMKNJI87CgDLqs1+q7YWcQmi2KD4XH5rQwYIj6Wxsc2SGwpms0/Y59DdRASG4gAHd3rLJFMCvK500uQYR4GtZuC7BbVM1OxeMymGZkzQ4G77KPWb6h+o8u9XCAdw+EApums4nJK9vcfjzb+OMVioehneLcpNPjtzdN8Wnv4dqkBTHVD4M5DBIT9qQVDx16y+ajiyCn4gl9lY+IzynenYV+Neau034p/XhKWwq1P6hfqXCuTrsr06IrororPhjH4g/sUtuqPSHUjHAeFmX1c=; 4:bCP812I2+8rkhPAmB1F5BSNL0ugwPqu9KZayk8rT6wfEt9u8M7YvkXOnFb5RJie0iCuLrGYPHJcGx4SmcK6Tf7QKhx2YZXiuTlILjWizIxIilGCcRYdlEkPgV19n0ARU/XRgRbpImlMle3BLti2FxKLdlF5Fzv+rpXnOSGurt8oUNvGcPtqeEGQpXY6F6tAi9ju6AyJXChHz0uYXNyczq/oNDMU0P6R0oW/dtWaSITjsXwx6bgdop8RoK4ul59b0hDvf0i3QlpmXt4bvccexoTe1NmN29gBKi7LnR9RR5ZE= X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(100000703101)(100105400095)(3002001)(10201501046)(6041248)(20161123562025)(20161123560025)(20161123558100)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY4PR07MB3093; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY4PR07MB3093; X-Forefront-PRVS: 039975700A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6069001)(6009001)(189002)(199003)(76176999)(101416001)(1076002)(50986999)(8656003)(6116002)(66066001)(72206003)(7350300001)(5009440100003)(3846002)(107886003)(47776003)(110136004)(2361001)(8676002)(42186005)(6486002)(50466002)(48376002)(105586002)(106356001)(189998001)(4326008)(6506006)(5660300001)(2351001)(25786009)(6512007)(81156014)(478600001)(36756003)(33646002)(7416002)(5003940100001)(7736002)(305945005)(68736007)(97736004)(5890100001)(6666003)(50226002)(6916009)(42882006)(575784001)(2906002)(2950100002)(81166006)(53936002)(110426004); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3093; 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; CY4PR07MB3093; 23:tK2tuXNOoZhBZx65l3YYQI8gWQO5K0I0xlLJHsec6?= i6rPgZyOSnoR3pX8TPyHQKvhwsm+MuGZlCOMnmr06Pq+BXUvvEWpT92IROThST9OBe8nIG/WhJGs+SjyObAtsADVTnjtjFkfuqhO8vWhupXCPGGdgwX3cK8kU/i+QBs9SMkDD4t2wBQjXQ2jtXKNhGUdHTuvso6mupHVIrRk3F4EiOjarckQujrs2E0cf7Fk/kEUcfkRIP+Yf2XqxHvbtGvKyE/nFVF6XJooUWDvM/9xxRwFZ0MZFPL8OP6AoC5BGuGQracFiL12Uva4wMcsXtt20V2nvwDI2doTGH+oOOjOxB+Iv/XECFqfptgixm1HAeKM5By5UZ0aFXJHG2GqopFoRFtbrG/tk+S7EzNdfvOWzYQnsPHYKVuLeKLwHKmUcGZT+jGuLZpsY8wgYJpyv7Z1sVcYLKAqkfHIB6ITuL78nx9JIqpZzkc6G/q/H6QG/B7izNqC/IY+PiiN3PodCiMnQN0g6fIYgbKaZSvevYD8K5iTBdbdC9VW7mRScZe1FhTFtiMFgeXgoWguPpZzFGZ37+4SZhJRxceLGd4x8bJvJn9vyl6pI7DcF2kAPWF4Pxrk5AskfEFBsZ5i5Br7IJTha3YPq3R5szdRVHfMa48EdEydc1lMgi6L6Klt+8u0DxeCA38gJbGNwSlz/4G9R5lf8TzjzRnnRQUOcKksQQQK3xYTh5V9+nGlKmR1FoHwPTJ0anHO+0uHTJx7B44WAZh93d5GaVffaA03xFTpfh+i2/0owy4M6dA+SaaW2Ez8ZtFSsAkqZlJjBIUr0sxMkZTm17BYKjXEnBGxNvdNwhVX28tpneXYYRFhk5+emohT1/6gb1BmFjkiXXX2qPKyLHUIiIZpyqeIJLbuQAfaMYL6UTDFp2yxYJEtD3AeG3dCm2aykBIk1YnMojzM/zqheDKhTonjIYYRfKCwhdGITz96oDYwcPFk95yi9nqFdgUzIUC4uC2SdEJoAkc97TypXivTaZ+nsUqFrkQvrH6zq6jGpTpApR9U0avnk4QnNjfGxc1546mJ0as4rlpMT3sSG/koe9kl2ecRMI3RkGNs0jDYOqtXeNT+6ksNQWf392/Y03S7vWvS9rXqh7Tz1ezVY9aO0SxSdNc6ZK9z0CPB4zXQpTk9ao0xqaZY2T+gMB6vnGoQH2JeCoEpkfIcTq6yJSou1qjHVyl5wj7cNXVz5tgXDfkRQGGm/oH2ERdLf4xNJILHMUYawlor2W2MhtA9f4DIVLvZS/qxtFlhiIQ7Bk4Ti4rwI/fLRoS73dAXalfQGyinxO3AdiDzK5wSJURKbvk X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3093; 6:WY3ai5qQ6zKuMoaH1bwgIsCb4nR6B9Q7pGCmWSuatQeIlZQ2VDhtf+WaCTA0TXDs6MA+mUCuOdSbCkd+LlRTRvMbCxZiEwMq9yzcDpicss0njNmMzSKQB9YV1vNUp/HHMXvM2MQLaOc5cxfe8B8f0TFig3rdkGDei9K06jAlLo/YO3Jyp0KJ7l+NZUgqYrm3oemASid2y4XAJNRKuME0+BETRprTKzKzfPOSgtCkZtFplkDjsJ1baZFrKjWsBfBG7D6PYhjSFP3pL4T+iPTB3IjWlrIelDhPsFylnVGdIfs/I7YyhENZh8FV1K1IiKaQ2YdREO/NnLm33wnhMnv70Q==; 5:MefJRzA4fwNRMndFA78VeAqRXxflHDFZIt7GApGbhIUDT7KmkOoEjiZubJAYmm6o1mz4AKsSp69EyVobu19aExA+oicV4OixCOBW5SSzllfYgi+/Q854FTZKAPe4KpGm5sesKA4vyz7m39qd2BjuRg==; 24:oZZsXN2rm2OaCxwAp76bOFlWGEw7kkzRBSoV07fc4DlSROVn6NhjnniOlDGKpLggU1P1mIK7womAXqh2wMZ+CwKUr3Kvn3peSoNgyZY/fwg=; 7:jp1+yd7RUydD1s6CXy20J+lBsxxR+nV9tB41pc5YW6ql+zXCmb/lIxzWHW9PeZk3IZ73bzXUwNVLYUaC5PhlHi8Kh4cNanYeLjJa9abYF4qwMNKZTWt8n4AChZRtJfOZTG+cl3KYEPO+QgFaIXI4fcWotUfggkxHqzXlieBdXXi2qHtAWl+zBbhuyOdEtYHz2IXOE/PkNNeEfkCgJx+023Eqnc0y0UxjL+wzFz72Nsc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2017 16:12:39.7089 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3093 Subject: [dpdk-dev] [PATCH v6 06/12] 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 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 --- 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 1fdcfb460..9942f47aa 100644 --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map @@ -243,5 +243,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 40420ded3..f35031746 100644 --- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map +++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map @@ -248,5 +248,6 @@ DPDK_17.11 { rte_pci_match; rte_pci_get_iommu_class; + rte_bus_get_iommu_class; } DPDK_17.08;