From patchwork Wed Nov 8 10:27:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Wiklander X-Patchwork-Id: 162925 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:aa0b:0:b0:403:3b70:6f57 with SMTP id k11csp818363vqo; Wed, 8 Nov 2023 02:28:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IHj45yG7eMk0LOKX0OhNK2I4+lhZCrz/XjChC9AnjyN4VyE+Ld782475O2HWjCNBMuOjb/Z X-Received: by 2002:a17:90b:3810:b0:27f:fcc8:9196 with SMTP id mq16-20020a17090b381000b0027ffcc89196mr1360614pjb.32.1699439292556; Wed, 08 Nov 2023 02:28:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699439292; cv=none; d=google.com; s=arc-20160816; b=TUkt0/IVY13cHigvEsoMNbNMnA6I5EMVlby9WK2I0O8zX3V3UBmW4tpjnd2GHBF5nv xSPuO8XzgQ96Npbz/OvIr4SBCf8zZ+nGnKYRr0XnC9Y58vmdJr7xVg0w9+MA1pG4t/6b cMspOKV3q4KFTAZdLcQ/gkKVsOye99eda1rmYaetQfAuyBBVuUVbm+brxa4iJrWHxdwm mZsz47HwE570nmpfQEa4uaSXLdqrCevbHvNA6RoTNHYQgGmsKUtj/o31PVWyCMkZCHil pRlqwY9UxemsY2D0BhMrBt5Ewm+jGaD+fjKF5EPVbpov9JSX5HQogy5Mh7kjFUsnS+P0 3XEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=iUHjwT95/qhV7lZuHewMUZiNJ+XtLQuRnKayggvsNMI=; fh=SSmA14+Y2ZA2PO07peKpbI6W7vxD8MB28Dbup/soyB4=; b=aKryPL3qbunsO1vJC13IgKQrGp3NuJJtE6A4fWQXKBOsJVrIAjK53+NvniJzKQM+OC +XqALELU30iucZxSB0IWN+CYO0i/bwDe3n7a/VN6RWJvED/dzSzjBZ6/8aHf9elR3h2e Mp2QGw0CjvhdJM9zG6CyYwHC/Mv0Xug47mLssJoMbM99DmHStfeXIb4MAAiHmT8f8t6V J6CHqhQCuDB5dqUpr6AGWT0xfK6pAyqMkHBtBZQy8UxkVbL9L3gcSgpZ7e7+bxaOKR9R N/3tJGD4VrNB3L9thtMXwwbUDlHcVOI/ro7sbIFE5MJOaiMfLoPWbZ31UdVasNtESjJ0 thtQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HVngrb0r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id gb22-20020a17090b061600b0028103a8ad9csi1862505pjb.68.2023.11.08.02.28.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 02:28:12 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HVngrb0r; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id C5AC58328296; Wed, 8 Nov 2023 02:28:11 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344212AbjKHK2F (ORCPT + 32 others); Wed, 8 Nov 2023 05:28:05 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39540 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344118AbjKHK2D (ORCPT ); Wed, 8 Nov 2023 05:28:03 -0500 Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B9421BDD for ; Wed, 8 Nov 2023 02:28:01 -0800 (PST) Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-9dd6dc9c00cso755611866b.3 for ; Wed, 08 Nov 2023 02:28:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1699439279; x=1700044079; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=iUHjwT95/qhV7lZuHewMUZiNJ+XtLQuRnKayggvsNMI=; b=HVngrb0rLgPRcAaPvm/qEi4yeSABChXGbViaMn2t4BZ/SulPzMiAeY5aVI/qCKc//6 zakk+H1z7fySiQbnZ7dRjVMab/ohGoYyGyKh7RVRSUweMmpzfHuT6p4kG9Sr1yCdbbML Rsxdxbc2mrBJ8ntD/bPfaVVfII/M4RdUglUb8zNw6S+bQroIyN7duoDJ35QE/8MQrEou OlU0NvNhQrABQsMLTfr7R7bAV+u3XC2KVQvIhmTeLiTldLqDh6J0uPB1zBiFDeWjvsQI TZcWSbnVwCMoPIewokB1petar86niMXNAPGvzGUEpjjGhG0T1PDDqtJiBWMN639jRO2M Mkbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699439279; x=1700044079; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iUHjwT95/qhV7lZuHewMUZiNJ+XtLQuRnKayggvsNMI=; b=JwkjJQf1bHULGOgOIGBZEUn29a+y1J2215gGzffAAiOPDOTrl1FamZxG+rVOkLPeD1 i2mcytdFO/PXA18bTPCtoSN1nvUiYvFSaMU8beqvSeeeFjZSHz34bDBr1JxeIYRQdp+W kEjguDHQHF+A1vgnrjZu5B9uAZcWaxFX+Lq8cGfzpuqKxajNqFpDEl9v2XW/ewbK5iE2 u4Xu4cygETKgQ4dEPACUd3lPFlpTbe7/T0IPc4DxuGsCHu60nUqM96+M4//xHs3RFGYp RtEvKIqYdRqeFwx0Wm5JyfYXNHhEi6sdwHdu6CGv9cBcEX4foe1P9zQKeXEBZl4Rp/Zd 4t4Q== X-Gm-Message-State: AOJu0Yy4hWf/okuHgR82Wpga7vNzY9mqUT/3on0PZQjQ1cNlyej68w/f +0oIFomm2WV2polePdpE+rPFV7LCs4fyOC1tBng= X-Received: by 2002:a17:906:ee81:b0:9c7:5db4:c943 with SMTP id wt1-20020a170906ee8100b009c75db4c943mr979029ejb.40.1699439279411; Wed, 08 Nov 2023 02:27:59 -0800 (PST) Received: from rayden.urgonet (h-217-31-164-171.A175.priv.bahnhof.se. [217.31.164.171]) by smtp.gmail.com with ESMTPSA id bn22-20020a170906c0d600b009c3827134e5sm803257ejb.117.2023.11.08.02.27.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 02:27:58 -0800 (PST) From: Jens Wiklander To: linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org Cc: Sumit Garg , Jerome Forissier , Shyam Saini , Jens Wiklander Subject: [PATCH v2 1/2] optee: add page list to kernel private shared memory Date: Wed, 8 Nov 2023 11:27:54 +0100 Message-Id: <20231108102755.93079-2-jens.wiklander@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231108102755.93079-1-jens.wiklander@linaro.org> References: <20231108102755.93079-1-jens.wiklander@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Wed, 08 Nov 2023 02:28:11 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781991255945628957 X-GMAIL-MSGID: 1781991255945628957 Until now has kernel private shared memory allocated as dynamic shared memory (not from the static shared memory pool) been returned without a list of physical pages on allocations via RPC. To support allocations larger than one page add a list of physical pages for all allocations larger than one page. Signed-off-by: Jens Wiklander --- drivers/tee/optee/core.c | 40 +++++++++++++++++++++++++-------- drivers/tee/optee/smc_abi.c | 45 +++++++++++++++++-------------------- 2 files changed, 52 insertions(+), 33 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index 2a258bd3b6b5..a425eca0173d 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -27,6 +27,7 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, unsigned long start)) { unsigned int order = get_order(size); + unsigned int nr_pages = 1 << order; struct page *page; int rc = 0; @@ -39,12 +40,24 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, return -ENOMEM; shm->kaddr = page_address(page); - shm->paddr = page_to_phys(page); shm->size = PAGE_SIZE << order; - if (shm_register) { - unsigned int nr_pages = 1 << order, i; + /* + * If memory is registered immediately use a temporary page list + * and free it directly after the registration is completed. + * + * Else, if we have allocated more than one page store a page + * list in the struct tee_shm. + * + * Else, store the physical address of the single page that was + * allocated. + * + * optee_pool_op_free_helper() is responsible for freeing the + * resourses allocated in this function. + */ + if (shm_register || nr_pages > 1) { struct page **pages; + unsigned int i; pages = kcalloc(nr_pages, sizeof(*pages), GFP_KERNEL); if (!pages) { @@ -55,17 +68,24 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, for (i = 0; i < nr_pages; i++) pages[i] = page + i; - rc = shm_register(shm->ctx, shm, pages, nr_pages, - (unsigned long)shm->kaddr); - kfree(pages); - if (rc) - goto err; + if (shm_register) { + rc = shm_register(shm->ctx, shm, pages, nr_pages, + (unsigned long)shm->kaddr); + kfree(pages); + if (rc) + goto err; + } else { + shm->pages = pages; + shm->num_pages = nr_pages; + } + } else { + shm->paddr = page_to_phys(page); } return 0; - err: free_pages((unsigned long)shm->kaddr, order); + shm->kaddr = NULL; return rc; } @@ -77,6 +97,8 @@ void optee_pool_op_free_helper(struct tee_shm_pool *pool, struct tee_shm *shm, shm_unregister(shm->ctx, shm); free_pages((unsigned long)shm->kaddr, get_order(shm->size)); shm->kaddr = NULL; + kfree(shm->pages); + shm->pages = NULL; } static void optee_bus_scan(struct work_struct *work) diff --git a/drivers/tee/optee/smc_abi.c b/drivers/tee/optee/smc_abi.c index d5b28fd35d66..b69410c7cc0a 100644 --- a/drivers/tee/optee/smc_abi.c +++ b/drivers/tee/optee/smc_abi.c @@ -678,10 +678,11 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx, struct optee_msg_arg *arg, struct optee_call_ctx *call_ctx) { - phys_addr_t pa; struct tee_shm *shm; size_t sz; size_t n; + struct page **pages; + size_t page_count; arg->ret_origin = TEEC_ORIGIN_COMMS; @@ -716,32 +717,23 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx, return; } - if (tee_shm_get_pa(shm, 0, &pa)) { - arg->ret = TEEC_ERROR_BAD_PARAMETERS; - goto bad; - } - - sz = tee_shm_get_size(shm); - - if (tee_shm_is_dynamic(shm)) { - struct page **pages; + /* + * If there are pages it's dynamically allocated shared memory (not + * from the reserved shared memory pool) and needs to be + * registered. + */ + pages = tee_shm_get_pages(shm, &page_count); + if (pages) { u64 *pages_list; - size_t page_num; - - pages = tee_shm_get_pages(shm, &page_num); - if (!pages || !page_num) { - arg->ret = TEEC_ERROR_OUT_OF_MEMORY; - goto bad; - } - pages_list = optee_allocate_pages_list(page_num); + pages_list = optee_allocate_pages_list(page_count); if (!pages_list) { arg->ret = TEEC_ERROR_OUT_OF_MEMORY; goto bad; } call_ctx->pages_list = pages_list; - call_ctx->num_entries = page_num; + call_ctx->num_entries = page_count; arg->params[0].attr = OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT | OPTEE_MSG_ATTR_NONCONTIG; @@ -752,17 +744,22 @@ static void handle_rpc_func_cmd_shm_alloc(struct tee_context *ctx, arg->params[0].u.tmem.buf_ptr = virt_to_phys(pages_list) | (tee_shm_get_page_offset(shm) & (OPTEE_MSG_NONCONTIG_PAGE_SIZE - 1)); - arg->params[0].u.tmem.size = tee_shm_get_size(shm); - arg->params[0].u.tmem.shm_ref = (unsigned long)shm; - optee_fill_pages_list(pages_list, pages, page_num, + optee_fill_pages_list(pages_list, pages, page_count, tee_shm_get_page_offset(shm)); } else { + phys_addr_t pa; + + if (tee_shm_get_pa(shm, 0, &pa)) { + arg->ret = TEEC_ERROR_BAD_PARAMETERS; + goto bad; + } + arg->params[0].attr = OPTEE_MSG_ATTR_TYPE_TMEM_OUTPUT; arg->params[0].u.tmem.buf_ptr = pa; - arg->params[0].u.tmem.size = sz; - arg->params[0].u.tmem.shm_ref = (unsigned long)shm; } + arg->params[0].u.tmem.size = tee_shm_get_size(shm); + arg->params[0].u.tmem.shm_ref = (unsigned long)shm; arg->ret = TEEC_SUCCESS; return; From patchwork Wed Nov 8 10:27:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jens Wiklander X-Patchwork-Id: 162926 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:aa0b:0:b0:403:3b70:6f57 with SMTP id k11csp818540vqo; Wed, 8 Nov 2023 02:28:45 -0800 (PST) X-Google-Smtp-Source: AGHT+IGyWLRxnpclULhFD4hE2X9Ez3+UVEXCfya6De/RKbK0B2J1COph++YYnqoEIzhbXeD67BqI X-Received: by 2002:a05:6a00:15c3:b0:6be:59f:5172 with SMTP id o3-20020a056a0015c300b006be059f5172mr1592796pfu.19.1699439325080; Wed, 08 Nov 2023 02:28:45 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1699439325; cv=none; d=google.com; s=arc-20160816; b=maIKPHYcH9OnpCwHwU45YKvT9OE18sP7j3AlZMoO8DUASBR8hLelwb82TBIzs2Rie7 vJYjjosIJ7RVVUo47X8lTjK8sTmZUcuGJvc5krpC/IO1YgPwmrLtc8tBf4qJoYsrurSp COFe4+/+gkBbxxkdznM0Z6rdFgw5dJGu7daH4zkRcQmCjnC7aCkWny4JMykTTG014vDP z5JA9IPHAksT8cPUMMNlYxLdnm+9a9KXjvVPMXT0GFGwSgqmvN8Oj9zSt6Qphjp7H+L0 gHSsT3D9zsiqfrjHHEO3a8V4eYKgvSYMxiMWt2Ahi/Dc34ebUbWJm/we8z4J2dJpG+13 K2EQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=NzMT8h5BYxkotAzYPp9Npys6bmDV+d4FCgdKvO3GgjE=; fh=SSmA14+Y2ZA2PO07peKpbI6W7vxD8MB28Dbup/soyB4=; b=m1iHpLNd7ORjXqnGb4x5nZA6ZgZN/2G4l0IQEIGH84VglwB6LV+Cq+mmI+vXfWYxgI RPH9E75AhGKzGy6QR5euCC/mzDMsvp5yWjg7xEx1BC52wqa9HaAw2cOsPAhc32NP7vxw IvmTdqg+Mj+q0p5nWqB6DbxS4cDvJsQcePSschKV7ku+gsoMwKH5ZhRYXo5SNTiNlqTK xDLJdLnxkZYN/OCzkfJ1ja3pgsS3G4KLc18lqfJozFyq5Jll7sxSTkOVd4XXyMB4eabE 9ncfUaX6E03vZ9S0DGDmII8Xfz7l2y3F8C7FrrtIp4vyXIW4KNdzJTDjR2IcxRlCpTRH tgFA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cYmFxkft; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id bm9-20020a656e89000000b0058afac51c12si5104524pgb.545.2023.11.08.02.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 02:28:45 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=cYmFxkft; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id D8E5780F61B4; Wed, 8 Nov 2023 02:28:42 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344254AbjKHK2H (ORCPT + 32 others); Wed, 8 Nov 2023 05:28:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39570 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344181AbjKHK2E (ORCPT ); Wed, 8 Nov 2023 05:28:04 -0500 Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F50C1BDA for ; Wed, 8 Nov 2023 02:28:02 -0800 (PST) Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-9df8d0c556eso524845166b.2 for ; Wed, 08 Nov 2023 02:28:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1699439280; x=1700044080; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NzMT8h5BYxkotAzYPp9Npys6bmDV+d4FCgdKvO3GgjE=; b=cYmFxkftgJPpWiKhboH1C4EqeUolJw1Ui4+eAslWs2Hutmja8/xffMcEab6lGBspRq rFh3SjX30ztOWwtLurX7kSNfzROKhPubx9GogRTdrNVOuLMJBeiDPqgVLVQBo5iZiucX PJYBlYP9Kea/+dPROgCIBpx1fVp39Tg3JwLHbKRoFfOn9Nfoj5JAf/q8ppd8HYBoAqy/ 4F4sjDXPG0h+RwfNVFdnvS9BBw7mtrNdPxXyWhUoa8j1/MaTnY5Yf5A2keV6GC0m7Hh+ rcxxlbwCMki8cdyCq9ohFSiv4RopuYYS5ALd8VPsa1CJPktJZiWjiYOznB9Kh7wNQ15Z ow2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699439280; x=1700044080; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NzMT8h5BYxkotAzYPp9Npys6bmDV+d4FCgdKvO3GgjE=; b=YSYv0TsAGyDEIjvc8n36GlH3cd55z2NWhf5WmLQlUE9Qf+5RWogUkaFh/fNjNeK7nR x99AFUY9PlHo6QlFEh0qgXpoM6CviXUb1xutMXj9LCKj0Su9IygaEeMxJtXZPmvpCahx EejO++ckv4fU4Mr3804+zHt6oeU7+Xs4peW3VZcDXPurb3fBUQk9Nk9nYn9sJBNFKesz ggdY6sx9WtEJZl6xwywYOqs35E0kIySLiolpmwrF0OmQ7Qeyc/d+9uG3pTUzRiRNdGwp pGpfiVGuQK72yEhI6R9rfFV9Pyx647l6NciDCzNEWw5ygwop8RORk719mHJdFw6jYcht mgEA== X-Gm-Message-State: AOJu0Yy6zMjSfgOUAeBvAAq6wO3sb+8kJBPkWJAWjY8Q/N0iGQ8bYq0R xS/jFaCfIU6vXiPeLyLMZk25mQVMjiv6VS4BUpQ= X-Received: by 2002:a17:907:804:b0:9ae:4776:5a3a with SMTP id wv4-20020a170907080400b009ae47765a3amr976552ejb.39.1699439280538; Wed, 08 Nov 2023 02:28:00 -0800 (PST) Received: from rayden.urgonet (h-217-31-164-171.A175.priv.bahnhof.se. [217.31.164.171]) by smtp.gmail.com with ESMTPSA id bn22-20020a170906c0d600b009c3827134e5sm803257ejb.117.2023.11.08.02.27.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Nov 2023 02:27:59 -0800 (PST) From: Jens Wiklander To: linux-kernel@vger.kernel.org, op-tee@lists.trustedfirmware.org Cc: Sumit Garg , Jerome Forissier , Shyam Saini , Jens Wiklander Subject: [PATCH v2 2/2] optee: allocate shared memory with alloc_pages_exact() Date: Wed, 8 Nov 2023 11:27:55 +0100 Message-Id: <20231108102755.93079-3-jens.wiklander@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231108102755.93079-1-jens.wiklander@linaro.org> References: <20231108102755.93079-1-jens.wiklander@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Wed, 08 Nov 2023 02:28:42 -0800 (PST) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1781991289339975068 X-GMAIL-MSGID: 1781991289339975068 Allocate memory to share with the secure using alloc_pages_exact() instead of alloc_pages() for more efficient memory usage. Signed-off-by: Jens Wiklander --- drivers/tee/optee/core.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index a425eca0173d..6303085a1b49 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -26,21 +26,19 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, size_t num_pages, unsigned long start)) { - unsigned int order = get_order(size); - unsigned int nr_pages = 1 << order; - struct page *page; + size_t nr_pages = roundup(size, PAGE_SIZE) / PAGE_SIZE; int rc = 0; /* * Ignore alignment since this is already going to be page aligned * and there's no need for any larger alignment. */ - page = alloc_pages(GFP_KERNEL | __GFP_ZERO, order); - if (!page) + shm->kaddr = alloc_pages_exact(nr_pages * PAGE_SIZE, + GFP_KERNEL | __GFP_ZERO); + if (!shm->kaddr) return -ENOMEM; - shm->kaddr = page_address(page); - shm->size = PAGE_SIZE << order; + shm->size = nr_pages * PAGE_SIZE; /* * If memory is registered immediately use a temporary page list @@ -66,7 +64,8 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, } for (i = 0; i < nr_pages; i++) - pages[i] = page + i; + pages[i] = virt_to_page((u8 *)shm->kaddr + + i * PAGE_SIZE); if (shm_register) { rc = shm_register(shm->ctx, shm, pages, nr_pages, @@ -79,12 +78,12 @@ int optee_pool_op_alloc_helper(struct tee_shm_pool *pool, struct tee_shm *shm, shm->num_pages = nr_pages; } } else { - shm->paddr = page_to_phys(page); + shm->paddr = virt_to_phys(shm->kaddr); } return 0; err: - free_pages((unsigned long)shm->kaddr, order); + free_pages_exact(shm->kaddr, shm->size); shm->kaddr = NULL; return rc; } @@ -95,7 +94,7 @@ void optee_pool_op_free_helper(struct tee_shm_pool *pool, struct tee_shm *shm, { if (shm_unregister) shm_unregister(shm->ctx, shm); - free_pages((unsigned long)shm->kaddr, get_order(shm->size)); + free_pages_exact(shm->kaddr, shm->size); shm->kaddr = NULL; kfree(shm->pages); shm->pages = NULL;