Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751880AbdI1SE3 (ORCPT ); Thu, 28 Sep 2017 14:04:29 -0400 Received: from mail-db5eur01on0055.outbound.protection.outlook.com ([104.47.2.55]:15904 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751813AbdI1SE1 (ORCPT ); Thu, 28 Sep 2017 14:04:27 -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 00/14] tee: optee: add dynamic shared memory support Date: Thu, 28 Sep 2017 21:03:57 +0300 Message-Id: <1506621851-6929-1-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [85.223.209.59] X-ClientProxiedBy: HE1PR0401CA0070.eurprd04.prod.outlook.com (2603:10a6:3:19::38) To AM4PR0301MB2130.eurprd03.prod.outlook.com (2603:10a6:200:4d::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8662ae8d-73b2-486d-6d9c-08d5069b59f7 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:AM4PR0301MB2130; X-Microsoft-Exchange-Diagnostics: 1;AM4PR0301MB2130;3:yyjf2OnRMYs5YL08V2nW3kBkRQfDvL87MfPfz+ljqa5iGsBF9iAT8bSU6vwt8w/5j1RCsh/auKq/zFASvzxwzVE/BRoS9ukB9Uo7b5j6y4Zq9mhN2KzoN67THFY0AL+Im+T2KXKSRVmCbsJPuy/r8z/4we5+Vkp3VZT15K3OQoIDjNiCV5LlXhjObaYQMSfhyMGnNYwA4HZNm4x3kUU2M7vHofgKDyl88jivtE+dMaBLbb4b7/OhZWJhsJG6XGQn;25:jy55GuCJSiYDqr0fpXuWQd4S3mID/2HhQC6teLRpnw0eIYCU4CeOc8R12v5ugOaVUN32sjkF9irtg0FlbZE0WGfHtCceLWc7RmvXcDi7ReBzkj5aKoRBjE7MOtJdh3x4dcS9q9utH8xUn+mxGOJZOqx2CsBWfuArchX7xrNIfxdoLVPUzylu3e2CcZ9TL4QmLQC1uJ+retkoM5EPaz/OzRhT8zNZz3At7/9QDXM9UpxgxhD83mYvLxEiSX0NJVhJsANE8z7EMOqG3OrEkDZVzKINnDeGCbhWpaTOVkDfWiAspcW25yTvvdRUyVdRbhMXgDEXMBM34SNPi/YS7HD5CA==;31:k/y4kleopLhgK2+TJ3lluxqbwKvEwR7ulsv8krDllvOV77Yp4kz98s2voDffKYOEdxRk0+idaYa5P7DmTW77PdLYBJBEckQuvaHcm8FPD4aCeReW0D/b7sIZqmDjcfKxSAeNtav0oyOXtDZn9+2mtOWsYzN437Y9vnuMz2ePNTVG0vIRHsKsIyCwxLQ9g/lWoiHMjd6dq6GOw9KZaEHCA/cQgpB7gYY+PTKvoE/0Klk= X-MS-TrafficTypeDiagnostic: AM4PR0301MB2130: X-Microsoft-Exchange-Diagnostics: 1;AM4PR0301MB2130;20:x/5u+jbxEZCLom1ayJ6E8DuDAqelrj03wVexbhNv4DOQE5H0VAh7ZLI5AYPrnlScOGlwnXhH+/TOLMuZkCzCYs2GG8T48g66m6/Xlk2CGRg3UGPBm5OCMAmGT38IxEkrh6cPD0EfToNtEm+J9XA+m+SfWS1LcWJgLnvaZiNUotaTQRxEXz2qg9vSl2tMKfQen0xYxyALqD+er7UmGpAXOhvA9yHl5uek/qKnQ8TUv0HWTLhGpdPbTOLKshWMG3UtYVzNyoWz+f02VeCd7HfiFtidqum69b7pX7pT1cGQOxbq+Vox7cUsDGiS33bCfYyiGrjTOgnjK+PE3hvHWbvpQD/ZntggtbH+ZH5U2X1XiiN5kcEHC5CsvwjhFoRXiw8VHEQ+h8lxqsyTJzFJDA+5qJAyQzK4fUTIWF0kSnjQGPbn63OqD/gscI0fT/mDUSq5OUEmubE+dDOUW6Anw9tyJDRXWQIIftcHySJ4QYbKYUIPhr0lnIK0+ad/jFf8VbUe;4:7+088mNMNMeg6jrPH01VeXsEDQ803EzUXDlxIkk5X+Hy4rCMx1xPCkvtt7RH5e6z7+nE0QtjXeStEL73vsGWuWI4J6jh80T3vh6RAFNdd+Jid6qYCl/1OHpGSWCK7MnYWSv6vBuXCRI7ufzjSnueFDmz7FwoMF71QNzqFLEa29uLRW5qkH3j/e5ySUj9NOIZ16UJ2Vo3WM+KZkCcMSwYmbLYQeta0KmJHIPYlof1ORia++LsCC7O5adnsQ2gA8UFng3ib+yvpnrnBoRUTjrhvJGHp/ljlEOvKVZoXvQBXW0= X-Exchange-Antispam-Report-Test: UriScan:(278428928389397); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(10201501046)(3002001)(93006095)(93001095)(6041248)(20161123564025)(20161123558100)(20161123560025)(20161123555025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:AM4PR0301MB2130;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:AM4PR0301MB2130; X-Forefront-PRVS: 0444EB1997 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(199003)(189002)(53936002)(5003940100001)(6306002)(6666003)(189998001)(86362001)(101416001)(39060400002)(50226002)(33646002)(105586002)(3846002)(6916009)(4326008)(68736007)(36756003)(6116002)(5660300001)(305945005)(8936002)(8676002)(81156014)(81166006)(122856001)(7736002)(47776003)(48376002)(106356001)(50466002)(2906002)(66066001)(97736004)(50986999)(316002)(42186006)(16586007)(966005)(80792005)(478600001)(72206003);DIR:OUT;SFP:1101;SCL:1;SRVR:AM4PR0301MB2130;H:EPUAKYIW2556.kyiv.epam.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;AM4PR0301MB2130;23:0WBDJc9x7LgtI3Ltvo+h+3JeobUiTMmViVm6RyP?= =?us-ascii?Q?zgsa29tmbXi/l4P7rDfPfbavrmSsQkq4V8f/V2gKXC/F8O1rl6/VTw6Kocf5?= =?us-ascii?Q?f5JbGBCHYFC0i1CLBqbAwEdGlkxLi7WigT6FQ5Pu7K0t2/J6DSvcX53FADme?= =?us-ascii?Q?tqkH0J6NoOltPehU5abjacCRhjtiI3LAhHbMnewrCh061qhE8rBXf8JP05Zx?= =?us-ascii?Q?9FKQnyvMFZ3YA8Og8K12W9fV4YtC2ZVdjmdCtKtJ09LW24aXRWYlANaEAiAG?= =?us-ascii?Q?Ik1z9pDbQQLf5PWh30rVtvirMoqd6MfwSvDs5e3Lrkvc+qtyT7ZxaXcatWnt?= =?us-ascii?Q?8ZaYIdwYcvdRxyoPXgJp0jsJ5x37YMkxFxPB1CE4BL9sPC+aiil/lPfG7R9A?= =?us-ascii?Q?ppK/cyfuVx/KiN7o+/px8qGpoXxesagTOk7+CBBiQSQCnpSzazDoNPR28/sO?= =?us-ascii?Q?Uwb0UnvsEkRqPUicVGuvswdjEaJa5tAneAOUnFN1l1ImddlxTgydtmsTOed5?= =?us-ascii?Q?f3VIiNL6izFrEPGJ0jKcACZt9/CDu+AliyBgKE5lHLtozjuCr+6/5FK0Qo5U?= =?us-ascii?Q?Gtjjpr/sd7YH1rMfhZEXMpCvHU9q8o88R4DQF8UE5QuG1vdBEVk9DjXWLQ3/?= =?us-ascii?Q?sdmIGFGGqDnssEU9rI2N2UQqpjDPfVcwNO/bkH5dTYai7cXAahw+ColIMLzO?= =?us-ascii?Q?8r6WizzAbrYmd+hZ3pAkxE1WgJr9z6DqWtjZzwdpbp4/fqUrUcRhwyw2XkBd?= =?us-ascii?Q?RBA4oyryKpqsqHrvsyyu0AAYdzzFCxd9EbHM4ybSk69kPOeNxMrGCKgOD9P3?= =?us-ascii?Q?xyF2zfjI5WoRoby5drMSDTy+AZvYX7VqKb9JB+UtMMsGVS5HxFL535BW/w0n?= =?us-ascii?Q?U2guT0tRaRtGspw0JuQ4AAkW0Nk4AktHfnYXO3/N+izkHX4pGL5lAsA8kkMq?= =?us-ascii?Q?QAOIIVLinmjjSL4nl+PcNUsC1LjkzMcxXpPH54lgDDLJKL6TTWfEOKR82Oph?= =?us-ascii?Q?UuR774lNOVjCto2YAa5h/f09apKZsTjCe6HRlCkDtuNZ192xOF/6wqWqEOOi?= =?us-ascii?Q?gUnUG0+V5dFCai/LOD2Tzih7TBO/O?= X-Microsoft-Exchange-Diagnostics: 1;AM4PR0301MB2130;6:/juNgnCc8x8z+s2HfkUY0R3GSX3lDk8AhWO9vbMY1nrechxtKNs8odwc9311Pz5SHG+oEGY3AxUa/s4MpN2BGbH3Z8+yyv35Wv6kKIxhzX0lMnOR0LNf8zWOJGamEFCR+zoF25od9yjX+hmtxdZBvs1lwxwFCCsaYcAnY0thsUsbdxwiku35S5VeXMhyt4h4enfgWdEv8j9A2qn5wGbrRZ9lX+PXlssLPjZfnZ37HUlvqHEg4TdBLwrDu8x9kn6ffhoozQx74n4Q8utbk7yCZoPXnw7/BStgQWyE9SOIud50EFuV05lz5iLNLi6KwKN8FONnomaij/4WHt3GG+Y7fA==;5:aUuDUtpnFuJeHirF/ihCuRqP6jvZPI//hfImW45B5cwLr5A28v33DBhcUuDip4HZT7369LtbgP4lwOg4IcJH5DlWnzz9/7Ax0pRdLo3By8zfZGQMq6RZ1MLCMc2+dGniXx8Oepr+Gxm+epUPnvm0zg==;24:TdEpqUILWMiZKrBYIz5oQojolvApqNwl1mPgGwk6ahcnBOxwDZINDc7QuBsUhW/gmh5LQdh3ScPg3mg1dFCtj05qd7nZfFfZU5LhZl9Hlls=;7:iMwmPsNp3XZQgvJQSn7PgsVrx6i1iin8OL1m1siXJZbfW2/2rUqkDBqvct4gPcJASMzb3qpZG38hIwJdoQim68d9/ad6xZgHelUNphW4MI02ff9CYz/17cU2W7vf8Jeu5LMeqRfLyGWDaKe/x9v90gvxzth5+DkfLrP6HuY+PKnxI5NlkObWMjgh7iUsienfEQhdXk9mfTw+PtWY7BKOBRIgAHX0hw9EwzO0vA1+R6k= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Sep 2017 18:04:23.5003 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0301MB2130 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3006 Lines: 67 From: Volodymyr Babchuk This patch series enables dynamic shared memory support in the TEE subsystem as a whole and in OP-TEE in particular. Global Platform TEE specification [1] allows client applications to register part of own memory as a shared buffer between application and TEE. This allows fast zero-copy communication between TEE and REE. But current implementation of TEE in Linux does not support this feature. Also, current implementation of OP-TEE transport uses fixed size pre-shared buffer for all communications with OP-TEE OS. This is okay in the most use cases. But this prevents use of OP-TEE in virtualized environments, because: a) We can't share the same buffer between different virtual machines b) Physically contiguous memory as seen by VM can be non-contiguous in reality (and as seen by OP-TEE OS) due to second stage of MMU translation. c) Size of this pre-shared buffer is limited. So, first part of this patch series adds generic register/unregister interface to tee subsystem. Next patches add necessary features into OP-TEE driver, so it can use not only static pre-shared buffer, but whole RAM to communicate with OP-TEE OS. [1] https://www.globalplatform.org/specificationsdevice.asp Jens Wiklander (2): tee: flexible shared memory pool creation tee: add register user memory Volodymyr Babchuk (12): tee: shm: add accessors for buffer size and page offset tee: shm: add page accessor functions tee: optee: Update protocol definitions tee: optee: add page list manipulation functions tee: optee: add shared buffer registration functions tee: optee: add registered shared parameters handling tee: optee: add registered buffers handling into RPC calls tee: optee: store OP-TEE capabilities in private data tee: optee: add optee-specific shared pool implementation tee: optee: enable dynamic SHM support tee: use reference counting for tee_context tee: shm: inline tee_shm getter functions drivers/tee/optee/Makefile | 1 + drivers/tee/optee/call.c | 131 +++++++++++++++++++++- drivers/tee/optee/core.c | 160 +++++++++++++++++++++------ drivers/tee/optee/optee_msg.h | 38 ++++++- drivers/tee/optee/optee_private.h | 26 ++++- drivers/tee/optee/optee_smc.h | 7 ++ drivers/tee/optee/rpc.c | 72 ++++++++++-- drivers/tee/optee/shm_pool.c | 75 +++++++++++++ drivers/tee/optee/shm_pool.h | 23 ++++ drivers/tee/tee_core.c | 81 ++++++++++++-- drivers/tee/tee_private.h | 60 +--------- drivers/tee/tee_shm.c | 226 +++++++++++++++++++++++++++++++------- drivers/tee/tee_shm_pool.c | 165 +++++++++++++++++----------- include/linux/tee_drv.h | 184 ++++++++++++++++++++++++++++++- include/uapi/linux/tee.h | 30 +++++ 15 files changed, 1058 insertions(+), 221 deletions(-) create mode 100644 drivers/tee/optee/shm_pool.c create mode 100644 drivers/tee/optee/shm_pool.h -- 2.7.4