From patchwork Fri Oct 6 11:03:41 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Santosh Shukla X-Patchwork-Id: 29800 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 19F281B2C3; Fri, 6 Oct 2017 13:04:40 +0200 (CEST) Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0070.outbound.protection.outlook.com [104.47.38.70]) by dpdk.org (Postfix) with ESMTP id 5F50B1B2B7 for ; Fri, 6 Oct 2017 13:04:38 +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=ujIrdz/mDwmECxYHR9MoJNRRvlb0HAX3vmO7JSVbUbo=; b=SqnJ4ZtZQJ4zg/mF3qj/pjVnj22ZjhngHMTHP3pTJWe5wxzjq4PkGCEIOiJsTYZIgboRJ5+U8erVBLT+Yl4eRchTbFfhliN/SkjcY7rjRC/LtiDLwMoM0UavXcTZyoJwoOuc+4QXSugbt0rXYYLFusGsUY5pehliGs+o/WeuSGU= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Santosh.Shukla@cavium.com; Received: from localhost.localdomain (111.93.218.67) by CY4PR07MB3094.namprd07.prod.outlook.com (10.172.115.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.77.7; Fri, 6 Oct 2017 11:04:31 +0000 From: Santosh Shukla To: olivier.matz@6wind.com, dev@dpdk.org Cc: 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: Fri, 6 Oct 2017 16:33:41 +0530 Message-Id: <20171006110346.13247-5-santosh.shukla@caviumnetworks.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20171006110346.13247-1-santosh.shukla@caviumnetworks.com> References: <20170920112356.17629-1-santosh.shukla@caviumnetworks.com> <20171006110346.13247-1-santosh.shukla@caviumnetworks.com> MIME-Version: 1.0 X-Originating-IP: [111.93.218.67] X-ClientProxiedBy: CY4PR1201CA0022.namprd12.prod.outlook.com (10.172.75.32) To CY4PR07MB3094.namprd07.prod.outlook.com (10.172.115.8) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 64318ce5-00f4-48a7-b73f-08d50caa083b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075); SRVR:CY4PR07MB3094; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3094; 3:555K7PHaKp5SagX+HLJecQ34W6iL4CHMA4pbQ7dlNx74R7E8bu40DUfQyDTsJ/NcfsrlmBt+TSai0SRIAHEnEm6mZb4bS7fTpFbkkPRGmjoTWMfIKCCB7Z/fQglOt/lhDnEhTRQ4tvfvLDIm4bfCPQ0zhktqj1Qs/tLKqda2cBwnN4fZJUlx+1eYzWJnaM94ocsT0+xo6j8TQe4dPQRrSavDcbKXM0IA9ovMNpSIVkbmP5Hp1y4kGQ+PqKo3nDd0; 25:f+duNwPGXGKTTu5/VG8WZAlqIj7LH3HlITHSzOHRJ0MMVD/cDNeGKhY7gfsILUd5OLpXoy4KFhmwy31OdxlZ8jbl0vVvHJViGgqlsh2kpF/KNlH+05S34wj04zsX6EPu91mEle3Essy5NfOVjPm2kFUcyVt1ifPUDpx+EfRjEDmH9Ia3VusQzq0oivz+rIVRXPA+5u0qZPK5TUNQB+V112j2+3BvoelK1Z9hEdSi1HrcaXQSq2KjoLSXAEjFqQM3Xr38qyOrd5/NztNFASKvbpbhRVBWKMR8BEnADnoqiDt/Y/k+BetNhgb1CBuiFnevK+A5FzAVuF4kiWSaicaibA==; 31:iLjShGJM47jkf2kx/Dz8uYOgoLaFLVMfywsYmjDslz0deVa2bH9C36VhkK4NYzYEqzOSYa6S4OyNfX/Us4/w9sImYc1Ao15maEepPobEm1EX1Z0h6U31HRbrMDxUiDMznYvozQXnENy7gKD7aUXlYCFul3TzmVs7UqPwJLl97fvGK4sBV/e5ohfRQfwtIZBfLsZOPujZlSIDTv9NJS8TAxEqz4WW/jwc9G88Cv7OyjU= X-MS-TrafficTypeDiagnostic: CY4PR07MB3094: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3094; 20:GfhtAa7HOJC0sQeJdFpep1P03YG4IA4nCcVX9eIWKLZDClrwv/XCklNqre7/6ol3d++me6pl3f8TKn8rVJE0t7dJmupJU0V+HN4lmgKQ6cTM4Iz7ATdpiBXYvLX43gAxEQM0CwWaMeP4PBc9zA4Pki9udhKOw8tPYmhmv/QHQ0OaVab5Xd8Z7ZjajJZGVU7wULwI9Llj7O8vdI6NpUlGT403h0ofYEN/bNIKbieOPO3w06RzzWs0hge7DCENJz0hJt2f1Cu7TPBG93KnT8QwKL9KESBQoyB6bkR0IbyyBwmE+akVAvOsA1xdI1bY+/bx5nBcgQDQWgHfXuAT2jSUw4kvmj1Tryl1NwkgnThLyOPTkI5VFlPuJCw2vwHYWLsJRFprDV8OYqMws3RGIrRt7JQpIGuaDvnhWVoilaQso7R2Qohk2QwIw3Sbw3/e1NytcctGDaCaqpvEXHqMJjzmNedZ2IL9v8Y92fSnN6y/3fS4D8Wq+Nxn4JDLpQfY9NtBOYQbl14o9jgBQaAH79TLbN+5NRoTCV+kgPPf3yHeoRTcnoclVC57OAuNozJzlfBAPDu0VeHVxZzXc9t+lAXadopIWvPnmmlZFEcBjwZndb0= 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)(3002001)(100000703101)(100105400095)(93006095)(6041248)(20161123555025)(20161123564025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CY4PR07MB3094; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CY4PR07MB3094; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3094; 4:61Gre2sASxW1mDk4KwMPPJN8sW2Cu20D/dAT3jqUlwLPj4AhmIwLZgxzdA1SfqsIfpQwTPLuajUX4BdcNZR/h3Lr1fmrxq6byx10QctcRD8KGvGYL4JyyCNZkr2EweEXg1Y6h63lbuf2BUhZfxEiZKVgwKBFcuSYDZXpMxhWelRZ7aOOjdc5WiBFuTFuoJeZ3mqsAnpnL2xAsJHgAph2Z1EJn/OfnoeX6YGWR5hhq/qw43nih5/a1wPgqhvnob98GEQOi7iiAk4Yk7TPortyjG44Z0vWMUPLthDRPhrdQgLbM1Kc0+1MxBKdj8uhUUZ1Bv9uqUnc1gRUOn1Sb08DzQ== X-Forefront-PRVS: 0452022BE1 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(6069001)(346002)(376002)(189002)(199003)(97736004)(2950100002)(5660300001)(7416002)(105586002)(6512007)(53936002)(106356001)(478600001)(6666003)(575784001)(50226002)(189998001)(8936002)(25786009)(81166006)(81156014)(8676002)(107886003)(2906002)(5003940100001)(6486002)(76176999)(305945005)(8656003)(50466002)(36756003)(4326008)(1076002)(68736007)(48376002)(7736002)(72206003)(3846002)(6506006)(316002)(33646002)(16526018)(5009440100003)(101416001)(66066001)(6116002)(47776003)(5890100001)(16586007)(50986999)(42882006); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB3094; 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; CY4PR07MB3094; 23:BxurRViAhd8WcQ9UJToXQzyMvKht+WOreDemMw2+0?= s8wDTnUbJmblF1ouEEroYu6DhziaUs2yhrDMh/QpHCplECsdsGAaN1MLkFTgUxKje4FOPC5TKpI1MoBoTE4eVgY4Q1IwivKNysr14CBK0/Lnjy+mImP6o/7qndZnHwws2EzqTXIhwj+oR1KeEBu0Eutz/HWS3fvuDGwn6HZ/JWfYMCQ5J/rBAk0CJfovgd6j8jlFrn4n6VksflAJoS/15f6nM9v9JmCFKvV/K07Wt2sxX8FeJgb7WseD043Wv3S36RHrVEABVXOv6uSPLwJnfHVeGtkgQbvoS8I6T+Xn8YnP7BsnW19sYpDQxSw0o9WQ93QbcipQuLTCFA5CwFnRGjNfMiiNkHIFtrveJAQPs17nTncOj4AOTFH1edpxYvO1TMBFqpJNOCn13WJM3QhqMoyC2ZKBMJ39Ipi9nDZ2SN1kiz370i1HixN0vxCBk1flCqw+AvADpeDL1k2wmvtYidtZs7YVill7KKOzX5TOVZwUCkHoapZjAKFBY2yJXIkmFQmnCEvSyqGKBW/mGJzDZCYPw8U/aYMzyCue7AECstsHMN2RAtdX3wrlg7g9EovsUgTe2yQFJQAdFpOeBjLxr7v/JpHybe+etlhA1eWrjVcqBkVdWX8A1MAdSQuABLbOljSscnppmIGAbVCZUyAgianESUWvI0fIiGePwLl7dsybYHgO5RIu6fM918KgwjUyyBSwaJdXPuayNb72uI+L3yHkJ9dn0M8IED91RIR1Wth9Q7IOfLEpC2rSDqhs3R5XffICf6vkvG4r7QoLJeK+20AbB2pGijPLr9UmR13QEo7K4ENSKuYPJMPM6ZfJspafTB0KY+eUBNuCzSd2j7qcA1wH0Gu1hJOJtGhiVDqXOc7SsmMMWY6l0edtUzUd387LEq+4Ib/CTLDvXA1dUvShJr5PuZG+sWOKhCpK3GceiyfeyfSl/BRko41QesjIM1zXwiEnDjJDOwYHt1Fk2GdyIdPwBWzBtePSk40huD9bBfyGkKzuarfQyZkb0TTz9W3qLxAlH9uuGJyUF8SqfcAMxficLYZbhvwhrF4KyK3zkZcLechyLm8ESQRixrpYbTd+U404NHzkXhADBFpNUAhfrk0mxQ4rLlz3e/x+yPh3gUlHrWYQhXtr+kUlNRDPLv307jB/5leSiWa556RVgFKf1fXCpedQ7KBskIRgc3PPDJh6tpTjwdKxSU0vWxopFNVBnE= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB3094; 6:A4gRSvVet4YSqJJ1zS7Wu3C58KYQTjdcHd6fEeQfl26ybltKIG7FwIqnOgIjr1BShaiqKmksyBYHMvPd6UrMyftIBpgvzCoWtQ5AwZnA5jmYsrhAkbiLMS6rkuSeLwoLKcipGctm+2WxJQCocHdMD3NPUlko0YPqmaAPx/2vhrumSRQVQNkDMIp5Wr/1yzbuvK8HhHMJAa/ZJTsVqPGhJ6umPyBTNlYBgUgiPgz64wxMkjwsCuAHNloUADbJWrD2nWsNBKl7WNg928sanMo1Ube2P8uFNFSeNcpD+h7CKjAXK7s42Wv5AWvlgJOdOmrYXwhflJAfIIIpv6c9diNpzQ==; 5:LZEijpl6MTRtLAZ6L8+4IQLYvQq/SgawATZ5KSLoDA1hUjld9iYbeQR3DNbD9YVk9qrgPwHV/iEOWNGlVcy+2VPO20Vc/gZOGGc9mPdZn6R3G4+HK08XLAcEMwf/2eqIJNeXPOthBG9VwTacQXnkhw==; 24:fqnX6dwlefXdueGI7v7/93e7yO3kbSk6mRvHNm6Qhr4vJvFVijirOF7hS/5gNZmKC6p8e+1V00SutvbMCun3O8iSWSUNxbH7xReo1Go9GK0=; 7:2bh9q0oJhxYQAlD+dHSi0ChDc+oDJoD4YLj/48b5KC93falzhEU3uMCiUFNcb9FAsEC+KdLhFU+vl5ZHW0vqOcl0JaazbIRrZOy7qfy55yGLNldLrrhtT47xCB//GXjy23kmjtrORZADkGlwDJ71AONmgsZAPTUWRLdSbcxXpFVFRco+oGbECW7Sp86eYtKTGKo3lOdlJJMkVBCNy+OYl7Cx+P+Fm6bf361DZjJ1jYY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2017 11:04:31.5210 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB3094 Subject: [dpdk-dev] [PATCH v10 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: , 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 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 e59c21659..3a5891595 100644 --- a/lib/librte_eal/common/include/rte_bus.h +++ b/lib/librte_eal/common/include/rte_bus.h @@ -183,6 +183,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. */ @@ -196,6 +210,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 */ }; /** @@ -295,6 +310,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;