From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752853AbdJMTc7 (ORCPT ); Fri, 13 Oct 2017 15:32:59 -0400 Received: from mail-eopbgr00050.outbound.protection.outlook.com ([40.107.0.50]:16519 "EHLO EUR02-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751057AbdJMTc5 (ORCPT ); Fri, 13 Oct 2017 15:32:57 -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 , volodymyr_babchuk@epam.com Subject: [PATCH v1 00/14] tee: optee: add dynamic shared memory support Date: Fri, 13 Oct 2017 22:32:30 +0300 Message-Id: <1507923164-12796-1-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.52] X-ClientProxiedBy: DB6PR07CA0197.eurprd07.prod.outlook.com (2603:10a6:6:42::27) To VI1PR0301MB2142.eurprd03.prod.outlook.com (2603:10a6:800:26::15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 372add4d-44a8-4688-4a60-08d512713319 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:VI1PR0301MB2142; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2142;3:SHQJBiQ87Sgl6Lu3gfY7JhDzvb3SLrAGyZUppa1li5aiMiFYTBu9kZjXDH0SNzY7lPz+0WXDosucOZT+zYQEz5cUyA1fPUGy+12/A1BsbEkV4hztpE2JMjLyYJ5BGga37PgmJZWFX3sHFsWheAEX3t7TOZFp1Y9Go0az5m8IHLdGhygpGDUMv6dAKT8pBBisLUvLsahZXOiNANqbenIhgTHXAGz0BUgYU31l4inNUA6Kkh1zM+IdkO4Tu5IRyO0E;25:5lF3B1yDUN7LitlZUhMz7f76VJa9pnR5O0Z0L3/g2aTelxvKPcGNitDsFLsBb2Nff8E313M1PVgA7atyIgT110E49E6Segrxu+p+nYUA+rysopdCCuUZm3YysL2R+r2iiExmz9lS0Yx1POQGP2OChdaJpwCaIOcK3iQAqI2sZEswRXtpIjTUIoDoLUXsX9FlTRLePdk3RAKN8T+8ddTmiGMPEjVzA38ogZpCMD0GznY+jCEazh8Xt/WlvfTNMqfL4dTJT68dDyYQpoE/xzDU9wzWRpCEIK+8uDuMnoiSvfzBF7hfD9iSd3m7AsY/KNW27jXFxdEMWefrHmwtZ3Vclg==;31:JJJ4hSKrCKU3gS9poD9+BNZ7LTxxGb6GnNH8KOZVikfe35bFEGNhBWRRQgRPF9gmd9aOMtgFkYu71S3mq8LrBjAr4H5OZYL07TGzkW0YNb65aaHuw9Y5HOEmS6EUTn1BRuuR2BSJpVoz/t82kTHuSelQr2V2u8/Rx9Q5HsdA+OH4d6i0Es26EsRt7eXqZjgoEHuZ1C7laEQahmv2e9+mcLJZin+1ck/oZmAgrCrkIxY= X-MS-TrafficTypeDiagnostic: VI1PR0301MB2142: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2142;20:Udk9nR2G48J8DcfAWUsgjt2sI/yg0Ke/i/PXu2q34rsxxTfl9ts3On6whTtu2FqUbMFiOCv8f5e1u1PCozN1g9G6QAm6fpXsi9YEa6JBI2fY0NJzUAh7byWAFX2zVWUkxfZp8YAd8V3WmyrhZNQqxsGuR3gc1KANuMJhFWAL0HF87rXCgl/c58ZJMSGSll1t7NcIX7p0If09NEHuAVWLOBMuKbp7FbZOAXsL9hnGnAO61DeN2QxhYvDtlu/SloYzMzUXyosywOW5yhnRyVOJc3I4Byuc9/IO3oJBetaPhK4cKP+83kiEn7Emfu/wWvSWNnDx6rjWxclZOrkSqRb9xiYDGfPBP1siaNEDCGsbdWjgL9mhNK7IpABcXRY1TX0BKoe9l6ywJUyWwIWbqYPMeJIjzJoHPG7OIo8bXb/GdF+g0+DoSwWi3KUuRRe9it9FTp5qFa3WboDwSIG/uJFyuzX8vmXgbYlvB0JclhM+KpyUVymQ+k8B1gnPqWPXwFjU;4:UmBxgbFfgWTaYiKXTJGLTGCOVCldZGVDeaO+/THZgMh18WiH6F41WDW2sBYMa4/3qrCqzjtqbQ/7kHVpvoC7muIvbJaa6wzDnuc3iGYybbneFzyNxlR1hA726M1pUaQ7ZL7QUt05FC6Jl2iIh45bCw+R5J2QpLpGNi8F6XmfkZvtMb4wq2KtlrTf0cQHByZjyCue9axipHnaFQQM9Smjnae8XY4dhNzVnWN4GJX7WJx3a6TFnMux2DsuUefQ9EXiHUqrR6LmrEOFnZky1F/p+yz7Oueqmupv7xxB3YZeTXH7yBC7iuQiknzubFqB0N5pKmxxMzBJtaSRMKlbuGyT5A== X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(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)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123560025)(20161123558100)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0301MB2142;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0301MB2142; X-Forefront-PRVS: 04599F3534 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(376002)(189002)(199003)(106356001)(50226002)(3846002)(7736002)(50986999)(966005)(101416001)(305945005)(33646002)(36756003)(6116002)(76176999)(80792005)(5660300001)(72206003)(478600001)(16586007)(97736004)(42186006)(316002)(39060400002)(107886003)(68736007)(6306002)(48376002)(4326008)(105586002)(50466002)(122856001)(189998001)(86362001)(2906002)(8676002)(81156014)(47776003)(81166006)(8936002)(5003940100001)(6916009)(2950100002)(6666003)(66066001)(53936002);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR0301MB2142;H:EPUAKYIW2556.kyiv.epam.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;VI1PR0301MB2142;23:X4n2hGj6bkbUfAXzZFp0XDSpdEp8g3FmfgUciN6?= =?us-ascii?Q?Q3Q6xJUOxwz29HkzweB0izgENo1ONwBgI6NUy6Lfwf7iRxNyV/T/mURteaSR?= =?us-ascii?Q?bHQs1Vq1DKerH3LayaffmZPBHTVt54v+pjzia8JW76A1xaHrz0u5FXZDY8s2?= =?us-ascii?Q?kkrqY7mAmJQSgl2xmRKGk3LeFwmvR8XDNOVdxZjfyoW+AvBaYEcOXGFm2UYu?= =?us-ascii?Q?9H170h/idODRKwVo5HYaWA5WxC+YEl9xaFah7iZSbkIajZOBgSnj3Uc4nxYA?= =?us-ascii?Q?IZr1++RSBy5EqDadkbnWV60froYZn3gTAEmcyzUe2jjwDJHRK06+3ig1tH1F?= =?us-ascii?Q?tG9oT2mt3TNybx0x4/nMoVDK2iGAB+Uka/WfkZqXmL6BlGoCa2HidxawVxk0?= =?us-ascii?Q?TZ8WXQNAZh3f8oMIhD5/V5P2ANWgw7T2eGjeF4X3ZdqbhbNUYS1+rH9eh4fw?= =?us-ascii?Q?D/3WfVywylgUDtiIj4NsLDsvwBAFaHGoEHRGuzY/Lk6xJwf6+gLLhQY/cNcX?= =?us-ascii?Q?8bbF1bSWagzpuWnjz4KFjyYpQqvkgsapvAHzVKCXmfUu3ZUlhKaVlt6iYLsd?= =?us-ascii?Q?uEsfNxE4bD4n2NUFIy3x6psaEWRrXHwmf7EEWafa/qN22qZqirtUZIu9o1Hw?= =?us-ascii?Q?mBMjsfVJM914QoOCxjgAjNOTofqwmQHMqgx3ss+ytcOqoGDDETZUGxsp85vz?= =?us-ascii?Q?3Ksc/SaEC28mfdDfIBgl7QZQyofa3/j9eNwjo8Z22vptc9LjimwQpcOIVX+K?= =?us-ascii?Q?xrauS823J+k366kHoIdEb0T3fJCI50iCWb9xqzoBqCIbf5u0V5FIiGx57CQi?= =?us-ascii?Q?KgP9lQfhQspJ/WDeOis5JqH7YPd8ufNVS4vaqR+HNlvQskEBCm0rFW5TeNVw?= =?us-ascii?Q?kmetaBhOievTmxsSdpKKXAVGh0eierUNyLJ8Z79OIkdzr4YmAsVofsdQcEo1?= =?us-ascii?Q?66SH/YmHmAw8tW3M9vlh0g1/P1WLWDHrLnbc0WGptp9obGi5PT5JtAPGySTt?= =?us-ascii?Q?GmXyVdSapbFkeCB4p/6WMNMb5VT5KOo/UVC2Ph9wFY4QD4p55O2fM9xGwbTj?= =?us-ascii?Q?eYm1R2h+S8GMi4zwCgX7yH2A/a/RuPeMRjRta4YRdvNTbXU9az7oM+m2Kqfy?= =?us-ascii?Q?Ts1pDoI5mVANpryDycw0wDatR8BQZKDmp?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0301MB2142;6:oQ3/KijLAz2VQwKw/tYqK3jSDXPz38Dysc+3rKMl1+lcl2WY94H9iFf3PqdOFJgIeglptNEcBOiEmZtm+cIzfQ5bCea7gejYGHKItttHP8X6yJAnzworqKHu8RJqr5KGLWZz0dva4MMS7pwSOwF/cgedFZ7O+a4kIFlk20WFGmZvk+rhytgDDm31C5p8IEN2aQpnMyaj43VxTZIlbJrt7oCS0pPBWadVHwg4lWeZ8B1asizz0OK6ukZbzcBUShWLezaJxrSoiiXuS/8aUBgPdaRmy004FPLxOKi6ElpHkYgOlpIufFkpVnw8X12r7XyQ5UI0CdqKXfV0zjAxNoZ+OQ==;5:l3wEsKaSici4gKMb+6SpczyvykUWnpNcE8xxrz6t+g0FMCREg+pIZUvVtM0Lu0vC/VgMxCcV7tz2NzYjmmbIb6TUoDThAm9cVtDehY9roXIs8V1msVD2m541lVXIPZRNxZ6nAWbIWS5MR+S51h3MoA==;24:VsL8JwNuDCJl/UMi5he27mOCZeHDOlMG/Kny9b0r/Qak9YS/unQNNFvGDLmog/lRUyNvivFZH57zTLMmWiVVN667ZwMtdNkz0fSGhED1NRs=;7:bAvtuh69JRick7nFo77TF1hyEZwjweMMXXpFlIJNbGKZYSPsdNQmLcd680a3NrKlzyEuuZvRdaAfKYyI2RSrwn8vSzcvw0icrxhy92IKFTn/+xd6I1fKQ/E7mdnfvM3hviDPYKlz/Ga95YVQnuBW41XeI5xbeSQdWdyWqoDFibXe7QKH1uxnwvIJIX7Z+NQKa+knchcucbxzjdEqXgdJiqEWCTVlS3e/B0opzNQ0F0Y= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Oct 2017 19:32:53.2568 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0301MB2142 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Volodymyr Babchuk Changes from v1: * Added support for 16K and 64K pages. * Elaborated commit messages * More minor changes are described in corresponding patches. While this patches are necessary for use OP-TEE in virualized environment, they are not sufficient. Stuart Yoder was right, when proposed to make static SHM optional. But that would be a breaking change, because this will render unusable older client libraries and supplicants. Also, as Mark Rutland pointed, OP-TEE virtualization will need support from hypervisor side. Anyways, those patches allowed me to call OP-TEE from XEN's Dom0 without remapping static SHM region into Dom0 userspace. Also, this patches allow me to share quite big buffers (I tried to use three 2M buffers at a time). This is imposible with static SHM, because static SHM on most platforms is only 2M. Thanks to Yury Norov and Mark Rutland for reviewing this patch series. --- v1 cover letter: 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_get_id() drivers/tee/optee/Makefile | 1 + drivers/tee/optee/call.c | 179 +++++++++++++++++++++++++++++- drivers/tee/optee/core.c | 152 +++++++++++++++++++------ drivers/tee/optee/optee_msg.h | 38 ++++++- drivers/tee/optee/optee_private.h | 27 ++++- drivers/tee/optee/optee_smc.h | 7 ++ drivers/tee/optee/rpc.c | 77 +++++++++++-- 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 | 227 +++++++++++++++++++++++++++++++------- drivers/tee/tee_shm_pool.c | 165 ++++++++++++++++----------- include/linux/tee_drv.h | 183 +++++++++++++++++++++++++++++- include/uapi/linux/tee.h | 30 +++++ 15 files changed, 1104 insertions(+), 221 deletions(-) create mode 100644 drivers/tee/optee/shm_pool.c create mode 100644 drivers/tee/optee/shm_pool.h -- 2.7.4