Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp41352pxj; Thu, 10 Jun 2021 14:12:43 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzZiIAPoH+90Lb1J5EiQMK/JOT2XNdxOOnX43TNhHVZTGh9qxURkejk9YaM/RHf3uAuJ0ww X-Received: by 2002:a17:906:7842:: with SMTP id p2mr418508ejm.487.1623359563423; Thu, 10 Jun 2021 14:12:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623359563; cv=none; d=google.com; s=arc-20160816; b=yY9YoKnEAsaiM+M1ix3trAFLBx0dlATCVX3UaaoNJPMwHOi9uLjMSWLGYHEX1CqYl8 Nl6es17XPwKElYw9LYYfy5h4A0Jny7Z2iKpx6LUK2WfND4yFtsS9qQQOum2Mi80jt2s4 HHoqRYUyDbS6gnO0jbxYFnFTwLc2wBMfFeZs9la6/7+mMVe0woLrXVmA9GWWyr186ONV prIgg3M36it52PxlAlIXtxIjrE4+h8vr8/JZWFZAJOrpzY/c3fzCKy0g+pcLHDTCGiJK sUlv4ro1Eq4GUrcD9pkVj0K4f+p2Kru2NlNKO1ElffqFNbavrNyEpiSPslEwP6ZoLSRB bcTw== 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:dkim-filter; bh=4Jxdj0Zq13CZ4E4lDiPPY/DfcrbN7WU2k1uwV++9ObE=; b=cnRhmVqwPtb/csp/r5ZiDjQ3cvL7N/mHiFxuJ8T3LzyOQKFZGlcy4Sz2o0go0hmew2 hPbPAEujQEko5TgPCaXvsIOeIS0vBKoPXijFmyRbfXu3Mhk59C0H14LNUolUpUUP9CwL oc36O7X9TbmGlRW7DVcmfz2+otpcYORw4wUHHhRg1XeBNi6dhZ7HoPLrwfOorEEt4oKb 43uT4BzJyDsVGl2BLR5Qzo2+A8o5jcDKNgvJgXN+4XUHv4G8C4woRDrOHQeYdzBGSAyd kKB3oyhTzdXV5X/7dQUuePDUN9qaix53EZk7Ksrhqic8c9smBM8LAwpSdiILYIir4sHk yM1A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b="J7/+oUCk"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f22si3099440ejb.54.2021.06.10.14.12.19; Thu, 10 Jun 2021 14:12:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b="J7/+oUCk"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231267AbhFJVMB (ORCPT + 99 others); Thu, 10 Jun 2021 17:12:01 -0400 Received: from linux.microsoft.com ([13.77.154.182]:60544 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231181AbhFJVLt (ORCPT ); Thu, 10 Jun 2021 17:11:49 -0400 Received: from sequoia.work.tihix.com (162-237-133-238.lightspeed.rcsntx.sbcglobal.net [162.237.133.238]) by linux.microsoft.com (Postfix) with ESMTPSA id C9EC220B7178; Thu, 10 Jun 2021 14:09:51 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C9EC220B7178 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1623359392; bh=4Jxdj0Zq13CZ4E4lDiPPY/DfcrbN7WU2k1uwV++9ObE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J7/+oUCk0b9gyw2nfSAh+jHP4B/+PV4qGqWJqoyrVvloc6PePZLypoD876sAPJzvr R0rtWgpjUwhMl65bAontHl5jq5FSx501Ug6LwRE6ES9PaoCkNhoyh4ZMapyxIHbCSs ffGTjznLJ/Xu7W0sZ5pj7/Ft7WmrIVX3uJRWSmqU= From: Tyler Hicks To: Jens Wiklander , Allen Pais , Sumit Garg , Peter Huewe , Jarkko Sakkinen , Jason Gunthorpe , Vikas Gupta Cc: Thirupathaiah Annapureddy , Pavel Tatashin , =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= , op-tee@lists.trustedfirmware.org, linux-integrity@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com, linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 6/8] tee: Support kernel shm registration without dma-buf backing Date: Thu, 10 Jun 2021 16:09:11 -0500 Message-Id: <20210610210913.536081-7-tyhicks@linux.microsoft.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210610210913.536081-1-tyhicks@linux.microsoft.com> References: <20210610210913.536081-1-tyhicks@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Uncouple the registration of kernel shared memory buffers from the TEE_SHM_DMA_BUF flag. Drivers may wish to allocate multi-page contiguous shared memory regions but do not need them to be backed by a dma-buf when the memory region is only used by the driver. If the TEE implementation does not require shared memory to be registered, clear the flag prior to calling the corresponding pool alloc function. Update the OP-TEE driver to respect TEE_SHM_REGISTER, rather than TEE_SHM_DMA_BUF, when deciding whether to (un)register on alloc/free operations. The AMD-TEE driver continues to ignore the TEE_SHM_REGISTER flag. Allow callers of tee_shm_alloc_kernel_buf() to allocate and register a shared memory region without the backing of dma-buf. Signed-off-by: Tyler Hicks --- drivers/tee/optee/shm_pool.c | 5 ++--- drivers/tee/tee_shm.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/tee/optee/shm_pool.c b/drivers/tee/optee/shm_pool.c index da06ce9b9313..6054343a29fb 100644 --- a/drivers/tee/optee/shm_pool.c +++ b/drivers/tee/optee/shm_pool.c @@ -27,7 +27,7 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, shm->paddr = page_to_phys(page); shm->size = PAGE_SIZE << order; - if (shm->flags & TEE_SHM_DMA_BUF) { + if (shm->flags & TEE_SHM_REGISTER) { unsigned int nr_pages = 1 << order, i; struct page **pages; @@ -42,7 +42,6 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, page++; } - shm->flags |= TEE_SHM_REGISTER; rc = optee_shm_register(shm->ctx, shm, pages, nr_pages, (unsigned long)shm->kaddr); kfree(pages); @@ -60,7 +59,7 @@ static int pool_op_alloc(struct tee_shm_pool_mgr *poolm, static void pool_op_free(struct tee_shm_pool_mgr *poolm, struct tee_shm *shm) { - if (shm->flags & TEE_SHM_DMA_BUF) + if (shm->flags & TEE_SHM_REGISTER) optee_shm_unregister(shm->ctx, shm); free_pages((unsigned long)shm->kaddr, get_order(shm->size)); diff --git a/drivers/tee/tee_shm.c b/drivers/tee/tee_shm.c index c65e44707cd6..26a76f817c57 100644 --- a/drivers/tee/tee_shm.c +++ b/drivers/tee/tee_shm.c @@ -117,7 +117,7 @@ struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags) return ERR_PTR(-EINVAL); } - if ((flags & ~(TEE_SHM_MAPPED | TEE_SHM_DMA_BUF))) { + if ((flags & ~(TEE_SHM_MAPPED | TEE_SHM_DMA_BUF | TEE_SHM_REGISTER))) { dev_err(teedev->dev.parent, "invalid shm flags 0x%x", flags); return ERR_PTR(-EINVAL); } @@ -137,6 +137,15 @@ struct tee_shm *tee_shm_alloc(struct tee_context *ctx, size_t size, u32 flags) goto err_dev_put; } + if (!teedev->desc->ops->shm_register || + !teedev->desc->ops->shm_unregister) { + /* registration is not required by the TEE implementation */ + flags &= ~TEE_SHM_REGISTER; + } else if (flags & TEE_SHM_DMA_BUF) { + /* all dma-buf backed shm allocations are registered */ + flags |= TEE_SHM_REGISTER; + } + shm->flags = flags | TEE_SHM_POOL; shm->ctx = ctx; if (flags & TEE_SHM_DMA_BUF) @@ -207,7 +216,7 @@ EXPORT_SYMBOL_GPL(tee_shm_alloc); */ struct tee_shm *tee_shm_alloc_kernel_buf(struct tee_context *ctx, size_t size) { - return tee_shm_alloc(ctx, size, TEE_SHM_MAPPED | TEE_SHM_DMA_BUF); + return tee_shm_alloc(ctx, size, TEE_SHM_MAPPED | TEE_SHM_REGISTER); } EXPORT_SYMBOL_GPL(tee_shm_alloc_kernel_buf); -- 2.25.1