From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752504AbdI1SF7 (ORCPT ); Thu, 28 Sep 2017 14:05:59 -0400 Received: from mail-ve1eur01on0080.outbound.protection.outlook.com ([104.47.1.80]:63060 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752467AbdI1SFx (ORCPT ); Thu, 28 Sep 2017 14:05:53 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Volodymyr_Babchuk@epam.com; From: Volodymyr Babchuk To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, tee-dev@lists.linaro.org, Jens Wiklander Cc: Volodymyr Babchuk Subject: [PATCH v1 12/14] tee: optee: enable dynamic SHM support Date: Thu, 28 Sep 2017 21:04:09 +0300 Message-Id: <1506621851-6929-13-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> References: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [85.223.209.59] X-ClientProxiedBy: VI1PR0101CA0084.eurprd01.prod.exchangelabs.com (2603:10a6:800:1f::52) To VI1PR0301MB2141.eurprd03.prod.outlook.com (2603:10a6:800:26::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 013b4f4b-1d59-490d-8f5a-08d5069b8d4b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:VI1PR0301MB2141; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2141;3:ETrAyztglKl2hChdf+9HzGkbJmV2evZNK0xa+nE/6w/GZbjFdzNyjb/0WPhMRA89bEnlqWIbG4AGaw/uWGX50T1Gq49TFJzLrRgrRPbkBofUaw3DVj87Z2+XsW32fPUdL5Dox2IhvEPIXOdNADoXzDaMWPDiGSUIxxVRsmvPRMnrPL+em3Fj/qPSc7/7tJs72ZJY0IAVGXjZ+HrJ2GaASAokz083kGaWpHMFPFYa5hf4vKeKr7ngq7v2wIB2tENJ;25:YwF3kPoX++g/IJacl4uCjITvA7vLsB9O5Vwz20XmxSH4xX0jkm+TnxmkmCrSH4wmv5/dHn5gtlsM163glZYogO5Jxmsu9EG2gBGEtHtwUDNgFgARUSKs19QzB0R1MYzJI+dJkd9EU0TajTFKDBDQ5tlu0TvfOLtjgaoBCqzXtpwO5Ti7zIHWypa+K/8YBAB+vrf0MY8MtlL+19jq8HuVDzFKJZW3Ge61BHgEFJgOwq8BctkGIWuDdtiSI6Wg+8S0HfNMHa00IyekN/Q2de0Wb/0O9IgRoPbiip0KKgOpYne20gmdsKiJFV9nJ+mPO1eCqH5oz1kGD1AaC8oMQTY7ww==;31:Y9zazQpqNcou0nViPTmSTyKumWBBE+yje5g46Sxh9/lJdJiVmqXhjPnS2cuR7Wo/fwBtWxx5C1Flh7JFIbOne4OqzQxDxBa0ypQ67lR7gI+Zo25WgFWPGKGCKm0fvqKIrWjUYqBf/t1u43y14YpDYyWt+SKiyb4vK9nePoc0zVvZix2qb3rO3XInQP+9pD7ay43S237wQBgUKKGBleAY7ZDF6Ihs26ZTWI+YxCsXuBg= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2141: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2141;20:MeUF8W78HTa8Ldg4PlaYKbD7lG7PBhiBG1awLnhL09thXuUUIQVU3wkIiQdaH4bUSIYWyx4JeSRGvGLEIb2Ybium+c9FhDh0u4MUHU6kaO4Pkgkrcb/iaMCQHGW9Q3OGkGXItUp4qMl2WtNVdnirmeciMVroP5E2TKjKGz2cdezp7vIYOJkFL1JR+nuTAmUnzWoz9QQfouA/rrIxDFUEPDJdR3x+vhB+mgLXq03j7nIqb6GkQhuA8iUTZAUxu6V770cXlALRkqIDLvKu2WYE4XVoHT3Mj7aga/WFSACJMLPiE+ku6TveXE/1hcUkB/T+IZPzvdKCH7hCO1T1mMk2Xe++tyd4JCYH+t8W5fdt9KkQmO4IjsDpic02Qjf9yNhihNlVoYkNwjyK2fV8YyeNS1S0KZtNiHb0iQS3fvpi7S1p0RRxICO51vIMDnnFTtX9s/BSb4bGsTky14LY+JNyfZQIXWbRs4cd7PPjJiijOGsCq4WFeoOtqdxo4eAAvfrF;4:ju6A3M6UFR8AyJWEmsMaZXvclNVUUnOL7YHkNMzl2mOaplbEVmhpdCWVoWx7NtdMKTe2JSQLhxz12BUcpjF4CICZ40brPJlCogGqjfVNrkIHPFNv0Jz7U31c7u1YtL42P5U2cLa/5dRfq/pPFy5QOIVoao3nBnqyKo0+Dnq7HIRseHxPNu+0jxENbkqSQke3Yq1XmRqQYR/Qt70Y3c8fBJEYhgJov9Qbea5abfsDqwXzWHM8loQtVOwz3f+R6S+z X-Exchange-Antispam-Report-Test: UriScan:; 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)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123555025)(20161123560025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123562025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0301MB2141;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0301MB2141; X-Forefront-PRVS: 0444EB1997 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(199003)(189002)(16586007)(42186006)(97736004)(80792005)(316002)(2906002)(122856001)(81166006)(81156014)(76176999)(50986999)(6916009)(8676002)(5003940100001)(8936002)(39060400002)(50466002)(48376002)(4326008)(5660300001)(2950100002)(86362001)(72206003)(478600001)(33646002)(106356001)(50226002)(105586002)(305945005)(7736002)(66066001)(47776003)(68736007)(189998001)(6666003)(6116002)(3846002)(36756003)(101416001)(53936002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0301MB2141;H:EPUAKYIW2556.kyiv.epam.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0301MB2141;23:Lb/AgoAwxgTlfLeqy8an/t5dijDFxuOLA+hGXSS?= =?us-ascii?Q?jDHtK8hlaGgRMuuZR9BN3EPJ8q90UXx6DQiFy3j/8U9khmPYSOzfoljXmGIZ?= =?us-ascii?Q?d6ji3qRuN4HHV7ZjnwtgHpEc+uzDIhNLo9hR+CCxl7H5+5LgNZSVP04qCTzo?= =?us-ascii?Q?fb1p866HBIAW3X+AQ2905EbdpQA9ig+zc/gyOzEUf+xuWgCWsLPjGRM82Rua?= =?us-ascii?Q?I9C4GkjDze4r6eNKo8yURCYGabzzKAX92IYN9+Lt4NaqklCCjnEG01QZoxOV?= =?us-ascii?Q?jU9TvQX3/ToD2ZGdYcuJBeNEiMixDLFg73+7mZS7JpkZz+5526KNpLgQK/jt?= =?us-ascii?Q?a3EqRJXL6JJjiRWHGoC3I2cS0zmjVL2zCBveqIKSOAZEq68IiZ1J53SAtXw4?= =?us-ascii?Q?R/KrnAiTdhjiNq2XZOYFo0ceqfxAF0cLSDJNYryG2+4w/3rrJtulSt6h3KTX?= =?us-ascii?Q?dfMgz2G2D4dvmkwbUrregwlE2KL3bzMxLnWGL59fZjHRcR6VCr1M2mKgi/NJ?= =?us-ascii?Q?HAa/jdAVVZm8ZFMk52dkwLu2bK81RSCbIv3qdQXVqkQX5D5fG0bPxbSgNkVg?= =?us-ascii?Q?t5l0TQTGN8DscGT5wjervCOO9/KJs7UDmv67pkXvLeIdubAd6QJ3DK0unsDc?= =?us-ascii?Q?h3WWmJCUBb2FwqrZywR0E99rlBrJXGb+y/V4LsCevHhZ63DbqfKR1i45s6Ok?= =?us-ascii?Q?vOz0mZumlLlNrLOY6ePG1Odx2K9zmR0d0kS6F1LM0zwh23e2vqZ3HLXXeH8+?= =?us-ascii?Q?cNCl3yNPPE1FjWLKIc5rWPofiIqMiN5UDdWG+zjJDZyVsXkU0L+VO880Yuim?= =?us-ascii?Q?EQ0y8mA3lnue8y60vXFy6OcDPQ1b28hN3um5ZMAdlibfUGulAgTJRfqtoLhH?= =?us-ascii?Q?z50W7iiIDpPHdglr+tMKT+wNt2E5cqmaKIRrZ+rZ5pRxVZ6JaUgcrqScoxB/?= =?us-ascii?Q?deoOLzWOoGN7ml9DglfKqlRqmL5iSqX5jyOLL91rqB0A16NLOD+UCqbtcteU?= =?us-ascii?Q?oE4jD1DOK5NUgwQL3aGcK55qnXR+SkiS0AgrgweCDGO2bv+/YZj2ryBJ5PN5?= =?us-ascii?Q?Sqqrjh+8DXpGftTG4y1mbSTm+cp5K?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2141;6:PSLCxB5s1LYSEIeRHK4W5lRUssvRGogCYUPp7E72nDk1zHKQWW1XegaAywKamJn3b/saPjUPc5zCbr9zyfo2AtAtKZW+199IgSpnYJxJ/hWkiFU79Eae9Qaha/SO6eLxUdAWmCf7LflSkBVtZwur7eV+sSCQbkvB96ETBm9U3Inay9qbPulnbAHFwFXv9S5nji6EkgiFfqnxFjxWx+MfMM4wW2bugjatn25TXkKgbBpSOo2zsg5hyddt7ZdxtxyurM5wXwQ8ufFnfAm74KUBs4lmgRtESIqpBjj7SMSBQ7t4rluQ9jrn8YttLoUUcKq7yulWGXTF7IWJo2dbKVfQuw==;5:UXCEu/iYM39zHpReg4LLuhOwbJZdgo+nsl1bCdNKsLGsdsduNUc2jkthnF/zWbWlKHubYHcLPmXN39LW+T1PXKhfvpuK0XvGGDMwF6le/quNwMXrYLJQHKQmyEgO/0bXbhOH5VEmli65k3WbhaPhqg==;24:1r1x8I53jOG1CxFiJQDAF9zm+2A2lIGWbAQngjl7gR1zut83i/cWHgOV2LVVSjZxgDxa37VU9loO/HNXle4KLWfrhsDwcLXnYu1hf2iaIH8=;7:tgGW5T9WeYq9dLmrodagEOh/ML83WaoncoeADTkdfh17lHyS5vy3S+9zHW2wZgTU94i8WfvyC5bD9EcxNtCNH9r/n5UlPoZqG3VrdibHhiGtCV4TDyfC0bPbcPHTvNvYUIbF30EGrkEsBTJIsT7YXUd6vbeIHC3shFMrD+aqEsfVIrPHqWZaAVZsLuCpt5T3zFiftkj9rz80Yy6Fj8tbZqToJ0mVaz+CSn/KtQDF0W4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2017 18:05:49.9905 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0301MB2141 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Volodymyr Babchuk Previous patches added various features that are needed for dynamic SHM. Dynamic SHM allows Normal World to share any buffers with OP-TEE. While original design suggested to use pre-allocated region (usually of 1M to 2M of size), this new approach allows to use all non-secure RAM for command buffers, RPC allocations and TA parameters. This patch checks capability OPTEE_SMC_SEC_CAP_DYNAMIC_SHM. If it was set by OP-TEE, then kernel part of OP-TEE will use kernel page allocator to allocate command buffers. Also it will set TEE_GEN_CAP_REG_MEM capability to tell userspace that it supports shared memory registration. Signed-off-by: Volodymyr Babchuk --- drivers/tee/optee/core.c | 69 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 8e012ea..e8fd9af 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -28,6 +28,7 @@ #include #include "optee_private.h" #include "optee_smc.h" +#include "shm_pool.h" #define DRIVER_NAME "optee" @@ -227,6 +228,10 @@ static void optee_get_version(struct tee_device *teedev, .impl_caps = TEE_OPTEE_CAP_TZ, .gen_caps = TEE_GEN_CAP_GP, }; + struct optee *optee = tee_get_drvdata(teedev); + + if (optee->sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) + v.gen_caps |= TEE_GEN_CAP_REG_MEM; *vers = v; } @@ -405,21 +410,22 @@ static bool optee_msg_exchange_capabilities(optee_invoke_fn *invoke_fn, } static struct tee_shm_pool * -optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm) +optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm, + u32 sec_caps) { union { struct arm_smccc_res smccc; struct optee_smc_get_shm_config_result result; } res; - struct tee_shm_pool *pool; unsigned long vaddr; phys_addr_t paddr; size_t size; phys_addr_t begin; phys_addr_t end; void *va; - struct tee_shm_pool_mem_info priv_info; - struct tee_shm_pool_mem_info dmabuf_info; + struct tee_shm_pool_mgr *priv_mgr; + struct tee_shm_pool_mgr *dmabuf_mgr; + void *rc; invoke_fn(OPTEE_SMC_GET_SHM_CONFIG, 0, 0, 0, 0, 0, 0, 0, &res.smccc); if (res.result.status != OPTEE_SMC_RETURN_OK) { @@ -449,22 +455,49 @@ optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm) } vaddr = (unsigned long)va; - priv_info.vaddr = vaddr; - priv_info.paddr = paddr; - priv_info.size = OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.vaddr = vaddr + OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.paddr = paddr + OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.size = size - OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - - pool = tee_shm_pool_alloc_res_mem(&priv_info, &dmabuf_info); - if (IS_ERR(pool)) { - memunmap(va); - goto out; + /* + * If OP-TEE can work with unregistered SHM, we will use own pool + * for private shm + */ + if (sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) { + rc = optee_shm_pool_alloc_pages(); + if (IS_ERR(rc)) + goto err_memunmap; + priv_mgr = rc; + } else { + const size_t sz = OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; + + rc = tee_shm_pool_mgr_alloc_res_mem(vaddr, paddr, sz, + 3 /* 8 bytes aligned */); + if (IS_ERR(rc)) + goto err_memunmap; + priv_mgr = rc; + + vaddr += sz; + paddr += sz; + size -= sz; } + rc = tee_shm_pool_mgr_alloc_res_mem(vaddr, paddr, size, PAGE_SHIFT); + if (IS_ERR(rc)) + goto err_free_priv_mgr; + dmabuf_mgr = rc; + + rc = tee_shm_pool_alloc(priv_mgr, dmabuf_mgr); + if (IS_ERR(rc)) + goto err_free_dmabuf_mgr; + *memremaped_shm = va; -out: - return pool; + + return rc; + +err_free_dmabuf_mgr: + tee_shm_pool_mgr_destroy(dmabuf_mgr); +err_free_priv_mgr: + tee_shm_pool_mgr_destroy(priv_mgr); +err_memunmap: + memunmap(va); + return rc; } /* Simple wrapper functions to be able to use a function pointer */ @@ -542,7 +575,7 @@ static struct optee *optee_probe(struct device_node *np) if (!(sec_caps & OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM)) return ERR_PTR(-EINVAL); - pool = optee_config_shm_memremap(invoke_fn, &memremaped_shm); + pool = optee_config_shm_memremap(invoke_fn, &memremaped_shm, sec_caps); if (IS_ERR(pool)) return (void *)pool; -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: volodymyr_babchuk@epam.com (Volodymyr Babchuk) Date: Thu, 28 Sep 2017 21:04:09 +0300 Subject: [PATCH v1 12/14] tee: optee: enable dynamic SHM support In-Reply-To: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> References: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> Message-ID: <1506621851-6929-13-git-send-email-volodymyr_babchuk@epam.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org From: Volodymyr Babchuk Previous patches added various features that are needed for dynamic SHM. Dynamic SHM allows Normal World to share any buffers with OP-TEE. While original design suggested to use pre-allocated region (usually of 1M to 2M of size), this new approach allows to use all non-secure RAM for command buffers, RPC allocations and TA parameters. This patch checks capability OPTEE_SMC_SEC_CAP_DYNAMIC_SHM. If it was set by OP-TEE, then kernel part of OP-TEE will use kernel page allocator to allocate command buffers. Also it will set TEE_GEN_CAP_REG_MEM capability to tell userspace that it supports shared memory registration. Signed-off-by: Volodymyr Babchuk --- drivers/tee/optee/core.c | 69 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 18 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 8e012ea..e8fd9af 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -28,6 +28,7 @@ #include #include "optee_private.h" #include "optee_smc.h" +#include "shm_pool.h" #define DRIVER_NAME "optee" @@ -227,6 +228,10 @@ static void optee_get_version(struct tee_device *teedev, .impl_caps = TEE_OPTEE_CAP_TZ, .gen_caps = TEE_GEN_CAP_GP, }; + struct optee *optee = tee_get_drvdata(teedev); + + if (optee->sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) + v.gen_caps |= TEE_GEN_CAP_REG_MEM; *vers = v; } @@ -405,21 +410,22 @@ static bool optee_msg_exchange_capabilities(optee_invoke_fn *invoke_fn, } static struct tee_shm_pool * -optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm) +optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm, + u32 sec_caps) { union { struct arm_smccc_res smccc; struct optee_smc_get_shm_config_result result; } res; - struct tee_shm_pool *pool; unsigned long vaddr; phys_addr_t paddr; size_t size; phys_addr_t begin; phys_addr_t end; void *va; - struct tee_shm_pool_mem_info priv_info; - struct tee_shm_pool_mem_info dmabuf_info; + struct tee_shm_pool_mgr *priv_mgr; + struct tee_shm_pool_mgr *dmabuf_mgr; + void *rc; invoke_fn(OPTEE_SMC_GET_SHM_CONFIG, 0, 0, 0, 0, 0, 0, 0, &res.smccc); if (res.result.status != OPTEE_SMC_RETURN_OK) { @@ -449,22 +455,49 @@ optee_config_shm_memremap(optee_invoke_fn *invoke_fn, void **memremaped_shm) } vaddr = (unsigned long)va; - priv_info.vaddr = vaddr; - priv_info.paddr = paddr; - priv_info.size = OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.vaddr = vaddr + OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.paddr = paddr + OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - dmabuf_info.size = size - OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; - - pool = tee_shm_pool_alloc_res_mem(&priv_info, &dmabuf_info); - if (IS_ERR(pool)) { - memunmap(va); - goto out; + /* + * If OP-TEE can work with unregistered SHM, we will use own pool + * for private shm + */ + if (sec_caps & OPTEE_SMC_SEC_CAP_DYNAMIC_SHM) { + rc = optee_shm_pool_alloc_pages(); + if (IS_ERR(rc)) + goto err_memunmap; + priv_mgr = rc; + } else { + const size_t sz = OPTEE_SHM_NUM_PRIV_PAGES * PAGE_SIZE; + + rc = tee_shm_pool_mgr_alloc_res_mem(vaddr, paddr, sz, + 3 /* 8 bytes aligned */); + if (IS_ERR(rc)) + goto err_memunmap; + priv_mgr = rc; + + vaddr += sz; + paddr += sz; + size -= sz; } + rc = tee_shm_pool_mgr_alloc_res_mem(vaddr, paddr, size, PAGE_SHIFT); + if (IS_ERR(rc)) + goto err_free_priv_mgr; + dmabuf_mgr = rc; + + rc = tee_shm_pool_alloc(priv_mgr, dmabuf_mgr); + if (IS_ERR(rc)) + goto err_free_dmabuf_mgr; + *memremaped_shm = va; -out: - return pool; + + return rc; + +err_free_dmabuf_mgr: + tee_shm_pool_mgr_destroy(dmabuf_mgr); +err_free_priv_mgr: + tee_shm_pool_mgr_destroy(priv_mgr); +err_memunmap: + memunmap(va); + return rc; } /* Simple wrapper functions to be able to use a function pointer */ @@ -542,7 +575,7 @@ static struct optee *optee_probe(struct device_node *np) if (!(sec_caps & OPTEE_SMC_SEC_CAP_HAVE_RESERVED_SHM)) return ERR_PTR(-EINVAL); - pool = optee_config_shm_memremap(invoke_fn, &memremaped_shm); + pool = optee_config_shm_memremap(invoke_fn, &memremaped_shm, sec_caps); if (IS_ERR(pool)) return (void *)pool; -- 2.7.4