From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753558AbdK2Mw6 (ORCPT ); Wed, 29 Nov 2017 07:52:58 -0500 Received: from mail-db5eur01on0056.outbound.protection.outlook.com ([104.47.2.56]:20011 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752607AbdK2Msx (ORCPT ); Wed, 29 Nov 2017 07:48:53 -0500 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: [RESEND PATCH v2 00/14] tee: optee: add dynamic shared memory support Date: Wed, 29 Nov 2017 14:48:24 +0200 Message-Id: <1511959718-5421-1-git-send-email-volodymyr_babchuk@epam.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> References: <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [85.223.209.56] X-ClientProxiedBy: VI1PR0102CA0002.eurprd01.prod.exchangelabs.com (2603:10a6:802::15) To DB5PR03MB1768.eurprd03.prod.outlook.com (2a01:111:e400:c580::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 493f2267-4855-4236-4acd-08d5372789a9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603199);SRVR:DB5PR03MB1768; X-Microsoft-Exchange-Diagnostics: 1;DB5PR03MB1768;3:Gck3aK7ZkWuSnSgslOigYDVwx/sdp1mlXd6omNUCBus6O6YjhGv/JNdWewUy/zSXVVwYfEUi9ifZ29hXongXBfjF/16NNjN9hCo9D0Hxyi0Ty1tei6+mY9w94EFKAMuHXt3SFpCoIpaM9ld9Vm0F4ijSq5rSopSCQlSFfPWOmLDgj/6rUk2/9gmcZxf6+xvQiJnre5PtYHixMP+DYNL5eUswo1cqhALQPwBq5CHTEJPlct6tvmckdSN01VAZtVHQ;25:5wsDbTsBLWcSIpa1+U7rdjBws5nlYDvTHgpOb6RuyZrTD7xpPK5kBrO+T42hozYm5Qd4hnPKAFx0MRCSAMVgS8kio0APT0Z15Lvadm6k4pIO8zxqmvlX/S6u/Mb7mPrie08g1m19GOlutli9q6iQLl4ENgnVBfa/CUshkn3Xo6QhNN4IvQGa5F7oL8HPcTwcCieZHO4TY8PS2deJ7TqhBbJ1PnlCGbpKRdugdF4Y9iFdEywNt9nAlOxvscuQAOdAuMzH4rbuXi0AVQzdLDJ6oJHWP+e1wn0wDsasOLPSoRFdsI+EiAZxnuzD0jZ0VYIf43xSqRVdLHCXtbPCR/fp7g==;31:o3OWoZ1flMZQFc7GExhoId0HQevpRCvOnrm3B8dg+xEUXEg2RunWCpTB1DwFY93u6MCFG6OxhpHP19+sUpWWeJxaAd0U5WJ1bsvBtLjbNsj4h5VPiR5FHrevW9SjHq8UTBmIfRfWk77CfWfhpZ9HbH+mzht6h4In829zXQVitMP5T8FXr4jEDLJdcpJBhhDEJF0MoI1Zdl98Pum6gZJCoRuKRgLCwBHP7Sd7KUSoNv0= X-MS-TrafficTypeDiagnostic: DB5PR03MB1768: X-Microsoft-Exchange-Diagnostics: 1;DB5PR03MB1768;20:IOPiqNm+N0jxv47tjkYzP7K30+Uug3LfAluto8awPBEIMtAijIxEVG2h8eA+25D2gHjIih1KsbaHAzttjlULS2Rt+Hl2suBaFZBFw0vMkthfDYrtmaIYXyqQH6dbCMPndbuv+txAsmTJf0noP8sZSaHmVTnY79W+uYnlAj6Nt2mrTFQOiEW/z03asfEUgobfn+jjhMpnZCyzN6DhomQSnmfFlLsinDblcoYfwhQT5cxFf5dElCMMQI6RYAQUjsZ1fEi5V53HK1/ftDYFc5gObm0U/hRjL38RIT5p1wXV48HpKZHKa3kcJj7l4v6OmEukOHonsXXLHPinwyk/4m+/z+qcJBEtoK5mT9CMqenRzB748ttz/WgidYygkuomsFa6Bb5g9fvWMOrTdbw05RBtsxHeDZEr9thdLb8Ro0cZftGgy4eQadlgsmQlHJXHiESu53/n+n96QLZCwqkNZD/8KhrBtTWqt0l2xb9wWuCx4v+61QsvQOqtKJ8+tr3iyqIq;4:6k0Ui2He2i+1MooJejI20pc5xsD3uetocj25lBCBMHs2J1RU1eA769WNMcOK2xUPeDoI52rv9kyA4GXVM3o9qCSF7DH7Frs97WofYRD2boEa846yTZ77dkDcOqX9Gqo0ba7kXITmx2mk3g9HqiUEc5j9tK6W5S4L5k9gqGm8tcJJPUr3D28DStyr+vDEuCnpcfe1t+o3Iof/kfJsySWzfCS1cwajMNkPxd37B9JQ+/HOXrMgoWbbUwicPkpPP7jBsoJR7bM47+UdbjmCGe5WZqki3XtkSYajSsJVhwnmYJHwjbUWsha2hMtds/4J/iqCJUzN8+MJgaSqU6ajM2zedw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917)(278428928389397); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(3231022)(3002001)(10201501046)(6041248)(20161123564025)(20161123558100)(20161123555025)(20161123560025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:DB5PR03MB1768;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:DB5PR03MB1768; X-Forefront-PRVS: 05066DEDBB X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(366004)(376002)(346002)(53754006)(189002)(199003)(966005)(86362001)(101416001)(76176999)(122856001)(50986999)(105586002)(6116002)(68736007)(97736004)(106356001)(305945005)(4326008)(5660300001)(53936002)(66066001)(2906002)(3846002)(189998001)(47776003)(7736002)(6306002)(16586007)(50226002)(2950100002)(8936002)(6666003)(316002)(8676002)(6916009)(80792005)(33646002)(81156014)(81166006)(72206003)(39060400002)(42186006)(107886003)(50466002)(48376002)(55236003)(51416003)(52116002)(36756003)(478600001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR03MB1768;H:EPUAKYIW2556.kyiv.epam.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB5PR03MB1768;23:4w2eoL1y+RoFWK+Ptt8OH5GjRkoKryh5zfEkvzIC1?= =?us-ascii?Q?wwsVTnGryK/6owz6ilq6o4MNLGP0FUz0PWlaH5M9Nn8PhSJyBO2XsanvFM0c?= =?us-ascii?Q?0kC9SJROM0KWjXXXMahPJ3pQ/VRsA9xhrC1omMvNQPq+2NazAxYj1mOmrjP2?= =?us-ascii?Q?sHo4oRvVs6vLaVgdBzOURURL9y/NGJP/Q500vOkDXIvFYRzrMNMIFVL49ZRP?= =?us-ascii?Q?Rj6Ee8YqiDYoKpCwpCq4Inhe+aVmy6J8cbX0q5EMFLwyD2kNj12gJqQIp5nG?= =?us-ascii?Q?P4KGZMuVhtMVYW4sQ3z8QtcUp2Uadb4FHnKWq15G11G++SSceJSKr8mUbgD3?= =?us-ascii?Q?T7ab4ICXATqkF0+LYL4iAUGch+ggbmQwGnHBlYYqRLsIeRoN5LrcQPetVaSC?= =?us-ascii?Q?L9KKjIvtuTOatCUUOQSTsBdIdD4YxmO/hOGSwm88+e3+9xG7AtN72yz2vEkc?= =?us-ascii?Q?cBFjyYBtFQbUvJcIA6HYzVprBwJ04EDIQL0w3et4Bq/URzT9rR+IjVDN+Lvf?= =?us-ascii?Q?wgzdbSqqC2zU2ni0Mm0Rh9EXmR8tHu2QUKftmf9kaGoamwEBpOR01SwqRz10?= =?us-ascii?Q?oCjIssdeEcvNXsL785apVTUgM3eIYoIbE/PlrtpU0MP53XVRoRSA8K/cB5dd?= =?us-ascii?Q?4Wvcr72fAucq6w5LxH7rZIevu+3st2PW/OKO2sgbBN4eMLbaG6UIuL8Of8yk?= =?us-ascii?Q?TqpjXyBN9v0uh8PxJcnPKKZfLp38LwlKIIvVNECQI3nZHhYXLEJbG1d3OEpI?= =?us-ascii?Q?quK3ycCHC/7yUoNIdLtXZKaNaNKYWTDRRHhX5JosChYY1j4BH6Wzcm/fBDfC?= =?us-ascii?Q?20Z+Zz7gDzA26WUEU8BH8+CmYgXlKkeEsHBg1gLY8MfNZ4k7svHc9anpRflt?= =?us-ascii?Q?7sJXrhMkEYDqEOl54cf2xvSjPozAwOyIknen3opNWrpZorG83Yensu1/2cAh?= =?us-ascii?Q?U3u1g5zT0Ech9D7xos90+tTWx3fvtHNFWluFebDICSa4Q3XCYZr8qN+8Cg1T?= =?us-ascii?Q?FAcaGgDfl+eGuAMnePbKsplvfMDWRIfJpFsWHxgNvFWE/1ust31hHkUnrDTX?= =?us-ascii?Q?eVeZ+jtgjhuQIZ++kp4SjvWYDZwXsKMw/2W1iuKTvC/tOG96c7kLqHxXEf/f?= =?us-ascii?Q?RHt8+a0YH+BCtJvi8QqdUI30q9t8+ds6/zr5VxLOIJlBTUSZLDPw86SZerPU?= =?us-ascii?Q?93OcizllRj986mvs3rTj5+ZeNhjxLvkkD5TrzRTi2Yl6Au2GeJZjzedLw=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB5PR03MB1768;6:fS+WK2s2qF7jQnVGOTnJK1VyInCkCYXFEnd94qekH86t6gtqMCnl5EDn6VpU2HQhIttB63HBdKqgJ5XrpUCypXSXgYp+H0UrLgs7fkSoWaaT2R3ACJ8TlCwUE0yq9s/0wHOJypDoL9gkvPUAWuH4vxS6Bg9Xu7hBHHHXReSL4YZo7iEqQ1fwU1PXjZ/CoMsJDdDalwKELXIoBSpcc3yAty8tX8wZdMjhrv/CBbBD91EZyNQyHBKo8X0dA4X1yLExxTWbAXyQpA93v403SrZnxj/w+qGXPe6iJY8ja3Pun96KR14V3ZAaUbzNjVyQ76s4hOMQu0DpfWTO5qH8uJG6Ehj7HXLzrBU2KdbmUqDFA2A=;5:Mq8ZkAdfQSA/xL0qE/3X48kmt07olzm0afZjHy11rrLSESbIP3dWxxSaGRijkPvkqaPfaBN7RFPMHQvr6/enSqd7rwT8h1l9AyQlqnQvw0fT4mmjjxkCaAnO+P6e7sI3KRzKBpyxHwR1oa/TqJGP4mtyHpEF2H21hFSdHLug88M=;24:XFkd6hiqe/sr7n+Y+5AzeT7nvRTlzl7+oeOzgvff3Nbyc3DQYePnz3kVLKApiTEKIb4iEFFKWPY4MPUDYO/j7BEV51c2LbGHtzHdP1R/MXA=;7:lZCFOOpNH25XblVW//GMyaT5KSzo4041CrM82P6ZVCjhX/VoDENub3iusmza1cfHLkRC2Bf1KtA3Q0jxnP6/NDfdX2i349IIA38TeFCn1VwtZuGP4mlKDmvrmKmJcGnlisXvSh6aftDy+f+nBIDHo7tfSmEpjHga6UJ1rF11s3Sz3Qrzhh0AfsEWEu2qZJpe3MHt8UPFoxFHOfxAeEpYJpuhWSpI4/I5iTsMPjOd9GyaD5bZZvruWR6efzO8Wltu SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: epam.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Nov 2017 12:48:48.9056 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 493f2267-4855-4236-4acd-08d5372789a9 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: b41b72d0-4e9f-4c26-8a69-f949f367c91d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR03MB1768 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Volodymyr Babchuk Hello all, This is resend of OP-TEE dynamic SHM series. No changes from last time. Correct version is used in the subject. --- 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 From mboxrd@z Thu Jan 1 00:00:00 1970 From: volodymyr_babchuk@epam.com (Volodymyr Babchuk) Date: Wed, 29 Nov 2017 14:48:24 +0200 Subject: [RESEND PATCH v2 00/14] tee: optee: add dynamic shared memory support In-Reply-To: <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> References: <1507923164-12796-1-git-send-email-volodymyr_babchuk@epam.com> Message-ID: <1511959718-5421-1-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 Hello all, This is resend of OP-TEE dynamic SHM series. No changes from last time. Correct version is used in the subject. --- 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