From nobody Thu Sep 24 20:02:36 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C90E9486400 for ; Mon, 21 Sep 2026 11:00:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988461; cv=none; b=VaxPF1yaAwoRhrOktyfoeoDFNSl27ptlaz7RpLnKcVHfX6w9C445ROBe+kmR6miO+YZdeMBL1Ag/zGYnFKhV0RGuYJ84eCuKT9VjptANkUn7lOnpTpSucasQEjZRjh3SJo61PRcv7BYrr7udm3A4KwPQ7sDrrlWOfImcfQWj+EY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988461; c=relaxed/simple; bh=oJ0zGW6aMw8rKZXNikPlWrWiaIddi7KYY011U3LJm+k=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MqNc2NZBH8M14M9xEI5NQJmMLv3CphUWZU5JOMh2iuzZE6HJEMyvQT1qaW35sEiWbl54ezAC7qv3ccqRXzx/ozY/Ik6kCZb1/cFiO6Tqm6UD6flwdJhS6L7cx8UVDVfUM5RC8cSqqqlJtPicGI7jvZCbVxvXr1e0bvGxJOUhsWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=OuI/EUTY; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="OuI/EUTY" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49ccfbe060aso21336495e9.0 for ; Mon, 21 Sep 2026 04:00:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988458; x=1790593258; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=IM/pFcIIS9AfJIvDjZJlWaiz8Fy5HD+1VXbC/YTcKBU=; b=OuI/EUTY+aI+2XjRZealZiliZT1lUZwdUyINQ5OkWNAXV1Y7brDogggcADMj2o1yKz pS/SAdObrdE+uJsgXWuNsrLAFC/ACOnCn7ZFfqBwxXci94tzsDLGqpUPAuBz7TcFe+cX 83ENq3Ksc2PrL449gtMuK/xjNIFi8kNNvYFqGeeyQFAFjqAWfAkBHy8Xl1Hfy4ZaxuHR rCb4eONiG8pa8vsMm6eOfx6XuRrClHnHffTWDJ8jWGk8DeH7FnganINqoNxbDYrkNlCQ 6HPWsthSLGpYMhv0QhbkOctj4DSaWai5uGMKpab3saur2ahCq2vHslI4e2ZUH46szD0Z +C1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988458; x=1790593258; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=IM/pFcIIS9AfJIvDjZJlWaiz8Fy5HD+1VXbC/YTcKBU=; b=FYTML4l32I4tf1AnvUeI0n6MvZpJp81KwUDfq+2FazUPAIZqQaVdDuu8F+16N8zXXg ppfBbgujZT0wwgkkBO1vAK7cKesh/3mSVuO+U+bwwnrDSDrWfdGH8c1x+hxSyydk2jbb EAbvX1yhcofXm4F4r+lRZ5jCNVrYBbKP6HmB12mgFMxWxCm6uSu9On6J5DhuqNW+N9LY D+kDhxH+oc1/4U0ZhHZu6PsRYnF3k6uFe6fZrd1x+1e9SBrT17nmZtGVAKQuvsHZgjpD Wr6xuuUSAsHxeAv3iryK99DNx0nBhYB94Ea8ad1DG/M0XR7g1UNbT24W196bSxzUSrhr 83Bg== X-Forwarded-Encrypted: i=1; AKwUvBwLLnPZYi093Eue4F7GEL8VMz5gjj/ArBdldJJ7SwwbYxT4cASa8Rx95cM9QZdlIMLuw8mmUbGb8ExpJcU=@vger.kernel.org X-Gm-Message-State: AFuF++mkC7SaW7K3Y9JAFLvsZxC0byayoHaMvqU+VOMmolWVgiBO0PGJ cDM9Bkzg5W3WLhigFMPQljrWkOGk8DrI5Xk5K8eVTq1pcRRV7ipTVx1uIqb7K7NLaS6g+ZpMfgA 3asYFQoqoK4nBnMVCmXPBeg== X-Received: from wmcn17-n2.prod.google.com ([2002:a05:600c:c0d1:20b0:49e:8399:b77d]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3b2a:b0:49e:6861:50f7 with SMTP id 5b1f17b1804b1-49fc5687df8mr141949475e9.5.1789988457579; Mon, 21 Sep 2026 04:00:57 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:43 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-2-vdonnefort@google.com> Subject: [PATCH v2 1/8] memblock: Introduce MEMBLOCK_PTEMAP From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Keeping PTE-level mappings is interesting on some architectures as it allows mapping/unmapping pages from the kernel direct map without the risk of splitting blocks which, under the break-before-make rule, may trigger page-faults the kernel can't handle. However, mapping the entire direct map at PTE-level is costly. So instead, create a new memblock flag MEMBLOCK_PTEMAP to selectively apply a PTE-level mapping. Signed-off-by: Vincent Donnefort --- include/linux/memblock.h | 18 ++++++++++++++++++ mm/memblock.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index aa845f488327..13263055996d 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -52,6 +52,7 @@ extern unsigned long long max_possible_pfn; * kernel that we know is good to use. It is the only memory that * allocations may happen from in this phase. * @MEMBLOCK_RSRV_HUGETLB: memory is reserved for hugetlb pages + * @MEMBLOCK_PTEMAP: memory region to be mapped using PTE-level mapping */ enum memblock_flags { MEMBLOCK_NONE =3D 0x0, /* No special request */ @@ -63,6 +64,7 @@ enum memblock_flags { MEMBLOCK_RSRV_KERN =3D 0x20, /* memory reserved for kernel use */ MEMBLOCK_KHO_SCRATCH =3D 0x40, /* scratch memory for kexec handover */ MEMBLOCK_RSRV_HUGETLB =3D 0x80, /* memory reserved for hugetlb pages */ + MEMBLOCK_PTEMAP =3D 0x100,/* PTE-level mapping */ }; =20 /** @@ -160,6 +162,8 @@ int memblock_reserved_mark_noinit(phys_addr_t base, phy= s_addr_t size); int memblock_reserved_mark_kern(phys_addr_t base, phys_addr_t size); int memblock_mark_kho_scratch(phys_addr_t base, phys_addr_t size); int memblock_clear_kho_scratch(phys_addr_t base, phys_addr_t size); +int memblock_mark_ptemap(phys_addr_t base, phys_addr_t size); +int memblock_clear_ptemap(phys_addr_t base, phys_addr_t size); =20 void memblock_free(void *ptr, size_t size); =20 @@ -285,8 +289,16 @@ static inline bool memblock_is_mirror(struct memblock_= region *m) return m->flags & MEMBLOCK_MIRROR; } =20 +static inline void memblock_warn_invalid_map_flags(struct memblock_region = *m) +{ + enum memblock_flags map_flags =3D MEMBLOCK_NOMAP | MEMBLOCK_PTEMAP; + + WARN_ON_ONCE((m->flags & map_flags) =3D=3D map_flags); +} + static inline bool memblock_is_nomap(struct memblock_region *m) { + memblock_warn_invalid_map_flags(m); return m->flags & MEMBLOCK_NOMAP; } =20 @@ -305,6 +317,12 @@ static inline bool memblock_is_kho_scratch(struct memb= lock_region *m) return m->flags & MEMBLOCK_KHO_SCRATCH; } =20 +static inline bool memblock_is_ptemap(struct memblock_region *m) +{ + memblock_warn_invalid_map_flags(m); + return m->flags & MEMBLOCK_PTEMAP; +} + int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, unsigned long *end_pfn); void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, diff --git a/mm/memblock.c b/mm/memblock.c index ea0de4b5f356..8a87d4d2516d 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -1204,6 +1204,35 @@ __init int memblock_clear_kho_scratch(phys_addr_t ba= se, phys_addr_t size) MEMBLOCK_KHO_SCRATCH); } =20 +/** + * memblock_mark_ptemap - Mark a memory region with flag MEMBLOCK_PTEMAP. + * @base: the base phys addr of the region + * @size: the size of the region + * + * If supported by the architecture, such region is mapped using PTE-level + * mappings in the kernel direct map. + * + * Return: 0 on success, -errno on failure. + */ +int __init_memblock memblock_mark_ptemap(phys_addr_t base, phys_addr_t siz= e) +{ + return memblock_setclr_flag(&memblock.memory, base, size, 1, + MEMBLOCK_PTEMAP); +} + +/** + * memblock_clear_ptemap - Clear flag MEMBLOCK_PTEMAP for a specified regi= on. + * @base: the base phys addr of the region + * @size: the size of the region + * + * Return: 0 on success, -errno on failure. + */ +int __init_memblock memblock_clear_ptemap(phys_addr_t base, phys_addr_t si= ze) +{ + return memblock_setclr_flag(&memblock.memory, base, size, 0, + MEMBLOCK_PTEMAP); +} + static bool should_skip_region(struct memblock_type *type, struct memblock_region *m, int nid, int flags) @@ -2880,6 +2909,7 @@ static const char * const flagname[] =3D { [ilog2(MEMBLOCK_RSRV_KERN)] =3D "RSV_KERN", [ilog2(MEMBLOCK_KHO_SCRATCH)] =3D "KHO_SCRATCH", [ilog2(MEMBLOCK_RSRV_HUGETLB)] =3D "RSV_HUGETLB", + [ilog2(MEMBLOCK_PTEMAP)] =3D "PTEMAP", }; =20 static int memblock_debug_show(struct seq_file *m, void *private) --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0475B488766 for ; Mon, 21 Sep 2026 11:01:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988464; cv=none; b=JLNF2E7PPFSc+A5zitD55TwouGQ/AL4kHAacHJF/34PDY0t8+9kfSRskCPsv3KtBoz9v79gMwvEqPwoE/XFC0skHf887NN46cAlFqe4GAy14Xx8DqI2v58tood7lPvpSZoGTYVa1Yd0vwSVeG3a0eKTKWn+GnnUlhP/UJWoKMiw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988464; c=relaxed/simple; bh=nq6c2HIL7smpOLcesIc5VsHG9EFe4PxsntTqAaTUuBA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Uxcn1JQAeuJStJMN/WnMsgprH5g6ga+lOlc29j/n+DctIC6eQNjhSZ39wRlSJCGoEU7f8K30qRIIWCLEhz92fimw+PtHfIpsNo0uur8atk/1kNxNv2qLUtg1ic7qoowBunmQli19CFlHIRplJ9pNrLCoWH9D57+BcdQatISJeQ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=jo+/E8bc; arc=none smtp.client-ip=209.85.208.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="jo+/E8bc" Received: by mail-ed1-f69.google.com with SMTP id 4fb4d7f45d1cf-6aa1c4f3001so3829127a12.1 for ; Mon, 21 Sep 2026 04:01:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988459; x=1790593259; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=U06rcgIn0LVt5Do84ZIYuayP7YCGGpRPbIbmdcyZosY=; b=jo+/E8bcBPYZBTDMteRnOWdS8I4C3eHA5hUsw+cky15J/5G7BRyTzWo/J+M80/0w1R Ir287JkavtljC0NP2nhfWflwM72QexeqJPFmldGjE/bYXMs5CNzNCKovyjazcyvkT7Cc G+ttrAPZ/uGLV6Xu3G6ZnGIE0M9sMUg5geSo5RRE6Oz8RswsZnl2Z7Qnb1fkkhBdVXX/ 3p023XKdCkkQf3+r7UtWwijOtJxDm/JGjki15glYO1ZKf4jXtRc32kFWX/19GHbnTLJY 7kN3d2oEBZlK1tpu+8NYOv4oMJeYddorgGVWcB2BSSFTGNXpu7JtgKTq/8jyisAxsUf9 9j1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988459; x=1790593259; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=U06rcgIn0LVt5Do84ZIYuayP7YCGGpRPbIbmdcyZosY=; b=wfjMowJTxKE9fg+KTP8ZDjWtJ3Hyt7UWMZO9R9dIkMB4i7xquzGcxnWk7pV1Yx+dQN zZo0jEVmcPktwQEZy8Tg8yi6ZPczjINN0pxk6x4J6cakYxulXKJdWlSLNOfSn/SJcNvI w+4lSjk6q0BbWAiV7LTPI4k7/kdrlJmba/JfzI9KyFUUo0lBx4YWNH7+dvW3pOdw385s enNpJ1SDpBIGRhD41LZMsRhwZ1Pe98NlCgWFJnINFkx4EXsY8QbVRtc2VOzYUMtDe/wA rA7Lh9qOB8aEm1jzDYgONB3/LnZXc3byBtgOppOJHUdRNF6yDQ8/xkrDLVLGthwQ6bnK yo9w== X-Forwarded-Encrypted: i=1; AKwUvByCQZkVOmg9ARQPK7q0EEtZDXvYfkNkL963N3+tZBmMuVsClBZY9RNRqZZm5udGv4uJKbdfBcslmPpd8lA=@vger.kernel.org X-Gm-Message-State: AFuF++nWIfIlavxW8b4ZoYZYkfksHsXqOwBKs+WHck351ZwKF+GbcNo8 7kGUEGzlblDRcY0sG/UjuYUQG3UPRg8f5QG2Vh24f6qzLgCdiQNjJwvNxAiESgVaRJJQSBgEyHM pJlDGYFJUutY4yBLPm6wtqg== X-Received: from edea12.prod.google.com ([2002:a05:6402:a18c:b0:6a6:1a9:f70f]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:23d5:b0:6a5:f814:2278 with SMTP id 4fb4d7f45d1cf-6aa577f5a1dmr7324139a12.2.1789988458556; Mon, 21 Sep 2026 04:00:58 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:44 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-3-vdonnefort@google.com> Subject: [PATCH v2 2/8] arm64: Introduce can_set_direct_map_range() From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For systems where can_set_direct_map() is false, it is still possible that a subregion of the direct map can be modified if it is mapped at the last-level. Add an implementation for can_set_direct_map_range(). It falls back to a page table walk to verify the mapping level if can_set_direct_map() is false. Signed-off-by: Vincent Donnefort --- arch/arm64/include/asm/set_memory.h | 3 ++ arch/arm64/mm/pageattr.c | 50 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/arch/arm64/include/asm/set_memory.h b/arch/arm64/include/asm/s= et_memory.h index 0091ba12200e..80bb94a340fd 100644 --- a/arch/arm64/include/asm/set_memory.h +++ b/arch/arm64/include/asm/set_memory.h @@ -9,6 +9,9 @@ bool can_set_direct_map(void); #define can_set_direct_map can_set_direct_map =20 +bool can_set_direct_map_range(struct page *page, unsigned long numpages); +#define can_set_direct_map_range can_set_direct_map_range + int set_memory_valid(unsigned long addr, int numpages, int enable); =20 int set_direct_map_invalid_noflush(struct page *page, unsigned int numpage= s); diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index 132938b32eb1..5fcdb292905f 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c @@ -102,6 +102,56 @@ bool can_set_direct_map(void) arm64_kfence_can_set_direct_map() || is_realm_world(); } =20 +static int can_set_direct_map_pud_entry(pud_t *pud, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + if (pud_leaf(pudp_get(pud))) + return -EINVAL; + + return 0; +} + +static int can_set_direct_map_pmd_entry(pmd_t *pmd, unsigned long addr, + unsigned long next, struct mm_walk *walk) +{ + if (pmd_leaf(pmdp_get(pmd))) + return -EINVAL; + + return 0; +} + +static int can_set_direct_map_pte_hole(unsigned long addr, unsigned long n= ext, + int depth, struct mm_walk *walk) +{ + return -EINVAL; +} + +static const struct mm_walk_ops can_set_direct_map_ops =3D { + .pud_entry =3D can_set_direct_map_pud_entry, + .pmd_entry =3D can_set_direct_map_pmd_entry, + .pte_hole =3D can_set_direct_map_pte_hole, +}; + +bool can_set_direct_map_range(struct page *page, unsigned long numpages) +{ + unsigned long addr =3D (unsigned long)page_address(page); + unsigned long end =3D addr + numpages * PAGE_SIZE; + + if (can_set_direct_map()) + return true; + + if (!numpages) + return false; + + /* + * If !can_set_direct_map() then no one can split blocks and it is safe + * to walk the page-table lockless. + */ + return !walk_kernel_page_table_range_lockless(addr, end, + &can_set_direct_map_ops, + NULL, NULL); +} + static int update_range_prot(unsigned long start, unsigned long size, pgprot_t set_mask, pgprot_t clear_mask) { --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-ej1-f72.google.com (mail-ej1-f72.google.com [209.85.218.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8529E3905EC for ; Mon, 21 Sep 2026 11:01:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988464; cv=none; b=oYv5tC8k5wGb1QKvz3SK05p371Mx8yz+7pDW7dk988og8KUkVuuqOUDM6KOx6W9af4Dv0ITh2jMWpxem75Rq/maaNqN1+Tqpp8kizByaYKAVjzpzaFvoQqdksJvi1vK20ZOflI69zZv9zapVfZuT+NzxS6vbmNV/iaNF/exKF/c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988464; c=relaxed/simple; bh=g0ILEDzn/1wNfpkkWXZLtbOtycO1ck/Djp6L7YWIBhE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=U054TMXlC+6KIlPotWi7GWni1aMzjGSj25rBYL7+zhHb43XrNXstcW9eMRt/VJ4uo4L2CHA1E+PXpV08oQCtzTtDyz0EdzDKSQGHndJsxQqhP2MaafctyAeGtY10EbqTEk6ygVJj3Np2mZCHdyyb3gYjSNSuloMk3PHc/a7+bOs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tonceGiV; arc=none smtp.client-ip=209.85.218.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tonceGiV" Received: by mail-ej1-f72.google.com with SMTP id a640c23a62f3a-c251c140b41so258991966b.3 for ; Mon, 21 Sep 2026 04:01:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988460; x=1790593260; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=g8VZDFkjWzOugDjBak5KEVL2CvMFyhCyJVy2+GxZNxI=; b=tonceGiVClfq6MVltEgM+sw5FAN15jwnd0xaABp3ozUFvSgqC2Q2kqYD4xlFrTVQvf Sj7w1P70z1emxHgK+lEERLIgtbHZZu29b+4FzX/qtGK0U84aKqWmWZdT3wFkZbnZwuRq s6+capGZp5BbjgR1ific1jR3fg/KxUyE+uENLEp0SAD9Ssn7Un8R4rCVmQN3V6EaoA0l ZXadtBpT7eb9zujRD4d/bIzn31MHiHxdMcBYqPzuegjC0XO4XTn4inGPzf7agS5EMFGV GHraWUhya9jjiAO/EP0rQ1ClNV3Xm+NreNHnEQduEhvycUVFqjFgFjTldRZJxr/RXrVL yHRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988460; x=1790593260; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=g8VZDFkjWzOugDjBak5KEVL2CvMFyhCyJVy2+GxZNxI=; b=YLCrGgSgI9gPy5EuLbnF+G1om9Q6XKNuBCt4kq4J4naM0l15wWtcGGTSpcICWm/q5p vmBdxxNkzwpWUvoAujA7dVpklZVn9/ftEcgdVX0C2hHn630aw3zbA8CwmIO0OeIoYmGG gEAqGRms+njBlG0DEF0k+9sAbcAAJEu48BztCZL/WHSikIgDO/akZIUmNMCnU5lh7Oxh Boe19SSJuhvuyKJ+27KcjTZTNs0JtaMt0kl37dPArrNY4TP6ev0WMQtkw73cCr/P/LJZ 6jJr/XG/CTxoOlZG/NmpT1gJ3y8V778fIzX+bS73TS7MCZe30gZo8wMDrOrXtlbO8QcI D+dQ== X-Forwarded-Encrypted: i=1; AKwUvByKcYg7QMIvO6uRuQeOFWrZ0tZpO0XG7Kl/cOQXbgcSIfp1FJUtulBsYAgiP4YHLcftE6tcXaH4qDqIiEk=@vger.kernel.org X-Gm-Message-State: AFuF++mBZ8rncZh0ydLAuR+1IoTaIzham8EkUW4NXUQRrZ71821z0ZHT O/HiiEQYV/kZabL+UZKwbHCs+kSDC59PD5D/gB2Tyh4fl35eQMBxiwIL1u7XMqrE7XnN1S3ePWn HRy2rHDvEwd27oov6xPgQ0Q== X-Received: from ejcew23.prod.google.com ([2002:a17:907:9517:b0:c2a:25e5:645a]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a17:907:6d17:b0:c26:1649:47a5 with SMTP id a640c23a62f3a-c2a15aeb6c4mr860923766b.27.1789988459841; Mon, 21 Sep 2026 04:00:59 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:45 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-4-vdonnefort@google.com> Subject: [PATCH v2 3/8] arm64: Introduce __set_direct_map*() From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add implementation for the unsafe functions __set_direct_map*(). They do not verify for can_set_direct_map() and expect the caller to do so beforehand. Signed-off-by: Vincent Donnefort --- arch/arm64/include/asm/set_memory.h | 4 ++++ arch/arm64/mm/pageattr.c | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/arch/arm64/include/asm/set_memory.h b/arch/arm64/include/asm/s= et_memory.h index 80bb94a340fd..5e372a02b825 100644 --- a/arch/arm64/include/asm/set_memory.h +++ b/arch/arm64/include/asm/set_memory.h @@ -16,6 +16,10 @@ int set_memory_valid(unsigned long addr, int numpages, i= nt enable); =20 int set_direct_map_invalid_noflush(struct page *page, unsigned int numpage= s); int set_direct_map_default_noflush(struct page *page, unsigned int numpage= s); +int __set_direct_map_invalid_noflush(struct page *page, unsigned int numpa= ges); +#define __set_direct_map_invalid_noflush __set_direct_map_invalid_noflush +int __set_direct_map_default_noflush(struct page *page, unsigned int numpa= ges); +#define __set_direct_map_default_noflush __set_direct_map_default_noflush bool kernel_page_present(struct page *page); =20 int set_memory_encrypted(unsigned long addr, int numpages); diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c index 5fcdb292905f..3aaba7f988ce 100644 --- a/arch/arm64/mm/pageattr.c +++ b/arch/arm64/mm/pageattr.c @@ -301,28 +301,38 @@ int set_memory_valid(unsigned long addr, int numpages= , int enable) __pgprot(PTE_PRESENT_VALID_KERNEL)); } =20 -int set_direct_map_invalid_noflush(struct page *page, unsigned int numpage= s) +int __set_direct_map_invalid_noflush(struct page *page, unsigned int numpa= ges) { pgprot_t clear_mask =3D __pgprot(PTE_PRESENT_VALID_KERNEL); pgprot_t set_mask =3D __pgprot(PTE_PRESENT_INVALID); =20 + return update_range_prot((unsigned long)page_address(page), + PAGE_SIZE * numpages, set_mask, clear_mask); +} + +int set_direct_map_invalid_noflush(struct page *page, unsigned int numpage= s) +{ if (!can_set_direct_map()) return 0; =20 + return __set_direct_map_invalid_noflush(page, numpages); +} + +int __set_direct_map_default_noflush(struct page *page, unsigned int numpa= ges) +{ + pgprot_t set_mask =3D __pgprot(PTE_PRESENT_VALID_KERNEL | PTE_WRITE); + pgprot_t clear_mask =3D __pgprot(PTE_PRESENT_INVALID | PTE_RDONLY); + return update_range_prot((unsigned long)page_address(page), PAGE_SIZE * numpages, set_mask, clear_mask); } =20 int set_direct_map_default_noflush(struct page *page, unsigned int numpage= s) { - pgprot_t set_mask =3D __pgprot(PTE_PRESENT_VALID_KERNEL | PTE_WRITE); - pgprot_t clear_mask =3D __pgprot(PTE_PRESENT_INVALID | PTE_RDONLY); - if (!can_set_direct_map()) return 0; =20 - return update_range_prot((unsigned long)page_address(page), - PAGE_SIZE * numpages, set_mask, clear_mask); + return __set_direct_map_default_noflush(page, numpages); } =20 static int __set_memory_enc_dec(unsigned long addr, --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DE51483837 for ; Mon, 21 Sep 2026 11:01:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988467; cv=none; b=b2eXRar1sJaYaQ9fMCN13V4Eje6tA0/oVnFYEV/7vJRzPcNze2T9cBU6Eia3yA676Fjb6RX9iZV3R90Ozf4kVkQeHMngnOL+NSMA+Xr1xb+yuaLH002DZ5kgpU+kh7taOxBnFZyX83CTr7tCVioOaTAakcE82ItwSbsVjnLrwu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988467; c=relaxed/simple; bh=T1lTuSns2JnhV92+IGU44xR9WvLQO0g0vxZhyWYcjGM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dTUGEWIdsRXbUXW4JQxoGS0Fj6HkgZi7xZ9OVc8OO2+fi2jU76CNJYcLhmx+V/wbOenwfcUeB7kaX3lSsf7po7zrRLOWxSKmn3/QGEEGWHqZHRx51SrlXMa8Crz6LhxL+hzUZ+H1DdlfbbUJAIgDu/zQEM4EMaVPkeS+ntGfT1Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=dJjE6jgz; arc=none smtp.client-ip=209.85.128.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="dJjE6jgz" Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-490a767b782so22849145e9.2 for ; Mon, 21 Sep 2026 04:01:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988461; x=1790593261; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=PVYg8Lj489hznrzIM+7T33EpvHOqUo3+jajnUbYBZtQ=; b=dJjE6jgzqnd5fPoiiqzlhjdQ7VXwvxynHquySkUG0sCGiw3AXmrl0qbMv3QqcC/c/L Jq3N6XcoOTjk8JCLQTjHgw5W6IzhOKbtOTBsd1XXvsffp2YXz22noWJqhYw5jXqj0QNA plS/0i1oKW1FqGZgAr8vbnwXyIEME15J59OHexYXFCXuRUwVY3klcxcLF6J0q0fr59Yg 59+SrGZz8UCg5YLjTWl2GYgulJvzEq7XXekj/5n2UzWL6nIf0dq8PXE7nI1cS/TMBnv+ K3sxTBXTE/aKyMxtJJuw4phC0ErGys0pUIx2BXusgTdo4jJFtSH4n4nA9WWjyq0kMkg5 97uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988461; x=1790593261; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PVYg8Lj489hznrzIM+7T33EpvHOqUo3+jajnUbYBZtQ=; b=zzSyssGV917OHGTaVcPgxFk0pLwcPa/1ZW3UgJaQ3ff/RlSqMgzYGMWwiVnvVG26Q3 hNiwftEj6MIyF0dHrOBvIzI2f8tYcRjftabZR6Y3g3o6jxPIHkRXer2knQsBVD7TYOE3 ac71E1G4qaW/CLbDvkktJhPTPavB8EcQJmQc+gO8vGKqYzsQSFK65aUWKxjcwyHov9Zv N6aVLkCj/QI6aA6ZaPvsirVSjv/PgnPKIN0YypZimZwOC2ZgmtGCI9Kq1du3cQjzvyf3 4LETb1BGXNkGJKFLwJ2kOP/VhzXor5ucfpG8+KKZNc0UgwlvePXXxP721szj7r0KhAG3 CM2A== X-Forwarded-Encrypted: i=1; AKwUvBxI/kPks5i1SXw9bC9anL4A57slu5E3nWsjK5sG08R93eeUHighEsMnFjIqEWXUgw2KV2ObWRV41J+e8Fs=@vger.kernel.org X-Gm-Message-State: AFuF++lyQbuacqCIsyTQNlibI4OMX0JHDim2Zj1+jglMHZ10pZhxMofI 4s3vdHhzqRwG0xD2+j7BQrFkM1+jX5dngKq9f8xti1WtnmVnHOvRdLHJrNMPxrBOmJnGwUdNHbl V34Ytt6TID+UIIfRmR7QMsw== X-Received: from wmbd4.prod.google.com ([2002:a05:600c:58c4:b0:49e:81b9:5272]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6217:b0:49e:8418:389d with SMTP id 5b1f17b1804b1-49fc571423dmr133093905e9.9.1789988461055; Mon, 21 Sep 2026 04:01:01 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:46 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-5-vdonnefort@google.com> Subject: [PATCH v2 4/8] arm64: Add support for MEMBLOCK_PTEMAP From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" With the MEMBLOCK_PTEMAP flag, force a PTE-level mapping. Signed-off-by: Vincent Donnefort --- arch/arm64/mm/mmu.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c index 79d90226fd5d..6b22b43a5f77 100644 --- a/arch/arm64/mm/mmu.c +++ b/arch/arm64/mm/mmu.c @@ -1184,9 +1184,8 @@ static void __init map_mem(void) phys_addr_t init_begin =3D __pa_symbol(__init_begin); phys_addr_t init_end =3D __pa_symbol(__init_end); phys_addr_t kernel_end =3D __pa_symbol(__bss_stop); - phys_addr_t start, end; int flags =3D NO_EXEC_MAPPINGS; - u64 i; + struct memblock_region *r; =20 /* * Setting hierarchical PXNTable attributes on table entries covering @@ -1226,9 +1225,13 @@ static void __init map_mem(void) flags); =20 /* map all the memory banks */ - for_each_mem_range(i, &start, &end) { + for_each_mem_region(r) { + phys_addr_t start, end; + + if (memblock_is_nomap(r)) + continue; /* - * for_each_mem_range may return sub-page-aligned boundaries + * for_each_mem_region may return sub-page-aligned boundaries * after memblock_mark_nomap() splits regions at byte precision. * __create_pgd_mapping_locked aligns phys down to PAGE_MASK, * which could accidentally map no-map memory on the boundary. @@ -1237,17 +1240,23 @@ static void __init map_mem(void) * regions. The cost is at most one page of unmapped gap at * each boundary. */ - start =3D PAGE_ALIGN(start); - end =3D end & PAGE_MASK; + start =3D PAGE_ALIGN(r->base); + end =3D (r->base + r->size) & PAGE_MASK; if (start >=3D end) continue; + + int rflags =3D flags; + + if (memblock_is_ptemap(r)) + rflags |=3D NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; + /* * The linear map must allow allocation tags reading/writing * if MTE is present. Otherwise, it has the same attributes as * PAGE_KERNEL. */ __map_memblock(start, end, pgprot_tagged(PAGE_KERNEL), - flags); + rflags); } } =20 --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-ej1-f71.google.com (mail-ej1-f71.google.com [209.85.218.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 28F6848E0FD for ; Mon, 21 Sep 2026 11:01:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988469; cv=none; b=VQI7X5takbo2qRmvcyNtfX2o82hLBTt9/yWkMjoFEthdLjFNSSh/49xVfsqaJ8hpgYR8RDrVTRO5lz4bmwqTCHXZCubkw2H8sORiAzIQ1G9OvEG1pdLQpDCDW8ikMc9oV0fIuPiqEUzKuNWSkJffaw5vKB7VSyOq11J+4qonuhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988469; c=relaxed/simple; bh=TPX36FUUUvbKFKPQ58T2rMiYjcSbT6IYNeh8EC+IoXs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KBLQUSr8LcI/7kB6wM176++Y53lQbMnczQbcFxoUxFqHvMGTC3LRazdyG/luP9mRMJf58f6dhegNA0W7mBrh1oOOOmwycDAWB5IYAuPJHUyA9Cd0orLyepzuj/AkA4HjlxE8Q3i+48dTnam3Ik/8lhkxcOele/HPsp6nGzpSxDk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=U7PHHPJF; arc=none smtp.client-ip=209.85.218.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="U7PHHPJF" Received: by mail-ej1-f71.google.com with SMTP id a640c23a62f3a-c294ae16922so321694566b.0 for ; Mon, 21 Sep 2026 04:01:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988463; x=1790593263; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=mS8QTe3O0YSNViqoUNLsYRtEn1B1+bnqRzNqyeLclGU=; b=U7PHHPJFYZpouYZA1GKns6vTDhk1ZS47R+swHIvUBOzEjL9r61FV7FExHn0cLsSi9L RhVcg9aQx5ZymY/6m832lrbpPPneGVHIllAE8+r5iYNFTYy5/WusyY6zSXkC+pjt09Sm 1AtlyOXL1qLT5k8uuvW+//2aMZaLHGdyHEpya0Afab7mSKZWeE+/Igzwz1sp6Dd/PthB PUbcYJ5NVk+VGE91VMm3KPhG0RVdEgFCX9hdHT1ZkxLDD+MIrDLSVZgdFwy/vH9t6WOP A9hkd5IJZk378uqTNthvEptYUjOYw5bcBjzKi3O2xR7aYG8geFIpJBhF0NcwNwh22GQY m04w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988463; x=1790593263; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=mS8QTe3O0YSNViqoUNLsYRtEn1B1+bnqRzNqyeLclGU=; b=rAZiFnoA/KwD56yv08L7EwzTGewnSezudmvdxfLD/4BIq0mx0zCbgq4YCX/PlRmyyf 9zxgVXM+qwe/9BuIQ4079z3BPTGviwv/EocxJN/qjnpXoKtPMLSCIr9v/WtcgdHE86Th BLbEGMtts/azF1aywQXXH6/gqxLY32mAQv5/2Zi+BQkqK0wU9wkYW7xnx3VcrAvJUEU+ CseGUhioa1CfdWeoqjQIkjuPPqh7cZZJRv0wjFN0BrPbHIyqremQBk/Nt4WSV5Rrzqev TFN5RQ+69SpQ2iIfTepQp+ix2TTL2OLpx/TiqCYifz3iBdYB+D7FulazjBXukJmQXPaa x1yA== X-Forwarded-Encrypted: i=1; AKwUvBxhddZcnZP3QwiNaCBUfbjYj9D8lO4MiGZOiJ4Szb2Yk7pDYazXY3kPkCKEHU+GS0J4OJFKNHzXa/HR9Qk=@vger.kernel.org X-Gm-Message-State: AFuF++nL/MNACDliVijZxXGHtFEtSloYoR67tqBsV/Za1tjffuXpklr0 0Aaim14bXoUnot5AAfzj5KL+eKiRn2IGYCubV4+bdCDIuOg6rWENl/QVzoYCwdlaOsmXCjZ3eYV keBJ/WKR0x5FO4OVJsiW9uw== X-Received: from ejbmb16.prod.google.com ([2002:a17:906:eb10:b0:c25:46b8:4594]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a17:907:94cd:b0:c29:3ea4:a219 with SMTP id a640c23a62f3a-c2a15eb3513mr916572766b.44.1789988462315; Mon, 21 Sep 2026 04:01:02 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:47 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-6-vdonnefort@google.com> Subject: [PATCH v2 5/8] firmware: arm_ffa: Introduce ffa-lend-pool From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When memory is lent to the Secure world via FF-A, fatal CPU speculative reads from Non-Secure can still occur as long as it retains a cacheable mapping to that memory. Introduce the "arm,ffa-lend-pool" reserved-memory CMA driver to unmap pages before lending (ffa_prepare_lend()) and restore them upon reclaim (ffa_lend_reclaimed()). Devices bind to the pool via the "memory-region" DT property or via ffa_lend_pool_attach(). reserved-memory { #address-cells =3D <0x2>; #size-cells =3D <0x2>; ranges; ffa_lend: ffa-lend-pool { compatible =3D "arm,ffa-lend-pool"; reusable; size =3D <0x0 0x4000000>; }; }; Signed-off-by: Vincent Donnefort --- drivers/firmware/arm_ffa/Kconfig | 5 + drivers/firmware/arm_ffa/Makefile | 1 + drivers/firmware/arm_ffa/lend_pool.c | 261 +++++++++++++++++++++++++++ include/linux/arm_ffa.h | 23 +++ 4 files changed, 290 insertions(+) create mode 100644 drivers/firmware/arm_ffa/lend_pool.c diff --git a/drivers/firmware/arm_ffa/Kconfig b/drivers/firmware/arm_ffa/Kc= onfig index 5e3ae5cf82e8..66dbf74c37c3 100644 --- a/drivers/firmware/arm_ffa/Kconfig +++ b/drivers/firmware/arm_ffa/Kconfig @@ -19,3 +19,8 @@ config ARM_FFA_SMCCC bool default ARM_FFA_TRANSPORT depends on ARM64 && HAVE_ARM_SMCCC_DISCOVERY + +config ARM_FFA_LEND_POOL + bool + default y + depends on ARM_FFA_TRANSPORT && CMA && OF_RESERVED_MEM diff --git a/drivers/firmware/arm_ffa/Makefile b/drivers/firmware/arm_ffa/M= akefile index 168990a7e792..5ea3019c407b 100644 --- a/drivers/firmware/arm_ffa/Makefile +++ b/drivers/firmware/arm_ffa/Makefile @@ -6,3 +6,4 @@ ffa-core-objs :=3D $(ffa-bus-y) ffa-module-objs :=3D $(ffa-driver-y) $(ffa-transport-y) obj-$(CONFIG_ARM_FFA_TRANSPORT) =3D ffa-core.o obj-$(CONFIG_ARM_FFA_TRANSPORT) +=3D ffa-module.o +obj-$(CONFIG_ARM_FFA_LEND_POOL) +=3D lend_pool.o diff --git a/drivers/firmware/arm_ffa/lend_pool.c b/drivers/firmware/arm_ff= a/lend_pool.c new file mode 100644 index 000000000000..e4348f5c618b --- /dev/null +++ b/drivers/firmware/arm_ffa/lend_pool.c @@ -0,0 +1,261 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Arm FF-A Reserved Memory CMA driver for Memory Lending + * + * Prevents CPU speculative reads to secure memory by unmapping it from the + * kernel direct map. This works if rodata=3Dfull or if all CPUs in the sy= stem + * support BBML3 or if a reserved-memory is declared for this driver + * "arm,ffa_lend_pool". + * + * Copyright (C) 2026 Google LLC + * Author: Vincent Donnefort + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +static DEFINE_XARRAY(ffa_lend_pool_devices); +static atomic_t ffa_lend_pool_active; + +#define FFA_LEND_POOL_DISABLED -1 + +static bool ffa_lend_pool_can_set_direct_map(struct device *dev, struct pa= ge *page, u64 nr_pages) +{ + phys_addr_t addr, base, end; + size_t size; + + if (can_set_direct_map()) + return true; + + if (!dev) + return false; + + guard(rcu)(); + + if (xa_load(&ffa_lend_pool_devices, (unsigned long)dev) !=3D dev) + return false; + + if (WARN_ON_ONCE(!dev->cma_area)) + return false; + + addr =3D page_to_phys(page); + size =3D nr_pages << PAGE_SHIFT; + base =3D cma_get_base(dev->cma_area); + end =3D base + cma_get_size(dev->cma_area); + + return addr >=3D base && (addr + size) <=3D end; +} + +/** + * ffa_prepare_lend() - Prepare a memory region to be lent in FF-A + * @dev: Device attached to the lend pool + * @page: First page of the memory region + * @nr_pages: Number of pages + * + * When memory is lent via FF-A, TrustZone transitions it to the secure st= ate. + * As long as Arm CPUs retain a valid mapping to that now-secure memory, t= hey + * can speculatively read it, which is fatal on some systems. + * + * ffa_prepare_lend() prevents this by unmapping the memory range from the + * kernel's direct map. + * + * Return: 0 on success, negative error code otherwise. + */ +int ffa_prepare_lend(struct device *dev, struct page *page, u64 nr_pages) +{ + struct page *p, *end; + unsigned long addr; + int ret; + + if (!ffa_lend_pool_can_set_direct_map(dev, page, nr_pages)) + return -ENODEV; + + /* provides full ordering */ + if (!atomic_add_unless(&ffa_lend_pool_active, 1, FFA_LEND_POOL_DISABLED)) + return -EBUSY; + + end =3D page + nr_pages; + for (p =3D page; p < end; p++) + flush_dcache_page(p); + + ret =3D __set_direct_map_invalid_noflush(page, nr_pages); + if (ret) { + atomic_dec(&ffa_lend_pool_active); + return ret; + } + + addr =3D (unsigned long)page_address(page); + flush_tlb_kernel_range(addr, addr + (nr_pages << PAGE_SHIFT)); + + return 0; +} +EXPORT_SYMBOL_GPL(ffa_prepare_lend); + +/** + * ffa_lend_reclaimed() - Restore a reclaimed FF-A memory region + * @dev: Device attached to the lend pool + * @page: First page of the memory region + * @nr_pages: Number of pages + * + * Restores a memory range into the kernel's direct mapping. It must be ca= lled + * after a successful FF-A memory reclaim invocation. + */ +void ffa_lend_reclaimed(struct device *dev, struct page *page, u64 nr_page= s) +{ + if (!ffa_lend_pool_can_set_direct_map(dev, page, nr_pages)) + return; + + __set_direct_map_default_noflush(page, nr_pages); + + atomic_dec_return_release(&ffa_lend_pool_active); +} +EXPORT_SYMBOL_GPL(ffa_lend_reclaimed); + +static int ffa_lend_pool_pm_notify(struct notifier_block *nb, unsigned lon= g mode, void *data) +{ + /* Prevent hibernation which would try to access lent memory */ + switch (mode) { + case PM_HIBERNATION_PREPARE: + if (atomic_cmpxchg_acquire(&ffa_lend_pool_active, 0, FFA_LEND_POOL_DISAB= LED)) + return notifier_from_errno(-EBUSY); + break; + case PM_POST_HIBERNATION: + atomic_set(&ffa_lend_pool_active, 0); + } + + return NOTIFY_DONE; +} + +static struct notifier_block ffa_lend_pool_pm_nb =3D { + .notifier_call =3D ffa_lend_pool_pm_notify, +}; + +static const struct reserved_mem_ops ffa_lend_pool_ops; + +static struct reserved_mem *ffa_lend_pool_get_rmem(void) +{ + struct reserved_mem *rmem; + struct device_node *np; + + np =3D of_find_compatible_node(NULL, NULL, "arm,ffa-lend-pool"); + if (!np) + return NULL; + + rmem =3D of_reserved_mem_lookup(np); + of_node_put(np); + + if (WARN_ON_ONCE(rmem && rmem->ops !=3D &ffa_lend_pool_ops)) + return NULL; + + return rmem; +} + +/** + * ffa_lend_pool_attach() - Attach a device to the FF-A lend pool + * @dev: Device to attach + * + * FF-A devices are dynamically discovered and might not have an associated + * device tree node with a "memory-region" phandle. In that case, drivers = must + * use this function to attach to the "arm,ffa-lend-pool" reserved memory + * region. + * + * Return: 0 on success, negative error code otherwise. + */ +int ffa_lend_pool_attach(struct device *dev) +{ + struct reserved_mem *rmem =3D ffa_lend_pool_get_rmem(); + + return rmem ? rmem->ops->device_init(rmem, dev) : -ENODEV; +} +EXPORT_SYMBOL_GPL(ffa_lend_pool_attach); + +/** + * ffa_lend_pool_detach() - Detach a device from the FF-A lend pool + * @dev: Device to detach + * + * Releases the device from the "arm,ffa-lend-pool" reserved memory region. + */ +void ffa_lend_pool_detach(struct device *dev) +{ + struct reserved_mem *rmem =3D ffa_lend_pool_get_rmem(); + + if (rmem) + rmem->ops->device_release(rmem, dev); +} +EXPORT_SYMBOL_GPL(ffa_lend_pool_detach); + +static int __init ffa_lend_pool_setup(unsigned long node, struct reserved_= mem *rmem) +{ + struct cma *cma; + int ret; + + /* Limited by ffa_lend_pool_active */ + if (rmem->size / PAGE_SIZE > INT_MAX) + return -E2BIG; + + if (!IS_ALIGNED(rmem->base | rmem->size, CMA_MIN_ALIGNMENT_BYTES)) { + pr_err("FF-A lend pool: incorrect alignment of CMA region\n"); + return -EINVAL; + } + + ret =3D memblock_mark_ptemap(rmem->base, rmem->size); + if (ret) + return ret; + + ret =3D cma_init_reserved_mem(rmem->base, rmem->size, 0, rmem->name, &cma= ); + if (ret) { + pr_err("FF-A lend pool: unable to setup CMA region (%d)\n", ret); + memblock_clear_ptemap(rmem->base, rmem->size); + return ret; + } + + register_pm_notifier(&ffa_lend_pool_pm_nb); + rmem->priv =3D cma; + + return 0; +} + +static int ffa_lend_pool_device_init(struct reserved_mem *rmem, struct dev= ice *dev) +{ + int ret; + + if (!can_set_direct_map_range(pfn_to_page(PHYS_PFN(rmem->base)), rmem->si= ze / PAGE_SIZE)) { + pr_err("FF-A lend pool: reserved memory cannot be unmapped in direct map= \n"); + return -EINVAL; + } + + dev->cma_area =3D rmem->priv; + + ret =3D xa_err(xa_store(&ffa_lend_pool_devices, (unsigned long)dev, dev, = GFP_KERNEL)); + if (ret) + dev->cma_area =3D NULL; + + return ret; +} + +static void ffa_lend_pool_device_release(struct reserved_mem *rmem, struct= device *dev) +{ + xa_erase(&ffa_lend_pool_devices, (unsigned long)dev); + dev->cma_area =3D NULL; +} + +static const struct reserved_mem_ops ffa_lend_pool_ops =3D { + .node_init =3D ffa_lend_pool_setup, + .device_init =3D ffa_lend_pool_device_init, + .device_release =3D ffa_lend_pool_device_release, +}; +RESERVEDMEM_OF_DECLARE(ffa_lend_pool, "arm,ffa-lend-pool", &ffa_lend_pool_= ops); diff --git a/include/linux/arm_ffa.h b/include/linux/arm_ffa.h index e71d83ee0aef..8608847931cc 100644 --- a/include/linux/arm_ffa.h +++ b/include/linux/arm_ffa.h @@ -519,4 +519,27 @@ struct ffa_ops { const struct ffa_notifier_ops *notifier_ops; }; =20 +struct page; + +#if IS_ENABLED(CONFIG_ARM_FFA_LEND_POOL) +int ffa_lend_pool_attach(struct device *dev); +void ffa_lend_pool_detach(struct device *dev); +int ffa_prepare_lend(struct device *dev, struct page *page, u64 nr_pages); +void ffa_lend_reclaimed(struct device *dev, struct page *page, u64 nr_page= s); +#else +static inline int ffa_lend_pool_attach(struct device *dev) +{ + return -ENODEV; +} +static inline void ffa_lend_pool_detach(struct device *dev) +{ +} +static inline int ffa_prepare_lend(struct device *dev, struct page *page, = u64 nr_pages) +{ + return -ENODEV; +} +static inline void ffa_lend_reclaimed(struct device *dev, struct page *pag= e, u64 nr_pages) +{ +} +#endif #endif /* _LINUX_ARM_FFA_H */ --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 295ED489FCB for ; Mon, 21 Sep 2026 11:01:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988471; cv=none; b=P1Dp9OlUeyrnY4SkUky3c89fPW0DJUFRUFAHzcpYUDZoSbvuqWoH3j/IrnK9vUOABYsC+zhmmvGV/TWxoIIn2gqHWszm3qLjk9FPw2I3e1hAYrRZp5QKAL/qiSmK07rk57CH2wnCtLhNgY2uSKN/z7aksGKKrWEnoedBQNC2sXM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988471; c=relaxed/simple; bh=crSJB8mHimPQYUC2eGv0NrncV7UaIOvRQXYK9SxofUo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=iwxEKQdn9z/GX5DQ32ouA78ASzaLo/BaoY3XTyewSvXuHWDb267D31KGUk+/IHvvKEPwkur2dvr+yCxcGPyxUHpuZldrEJRrA6onpPjNtU8wVPOiIebX2FH19jIh3LXjWlF3j5pXaAZFMazs3Vr43LnDjLd+LSpvOSevVtH/NPQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=aYbKHRpr; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="aYbKHRpr" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49e65f2f1baso34023195e9.3 for ; Mon, 21 Sep 2026 04:01:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988464; x=1790593264; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=cvjbTKhoGU/dDzLNariOWDtPZWx05brpq3W1pqMLn2I=; b=aYbKHRprg+FFM2byy4pWPRT08+haUq8ZYyyx1SvNjH7roOjWhOZd9TFppTSYlSbLrn SRzduKY8RV3ddEwgSYjw7JJt2oVkMHqhQwGwkznazsadxKM7AKKFKOsJsik9wgCtId4M 0AYG5W/+RuSkiosZtzGPeecSYGsrAGZaTiI+UXgZN0kroRcdC3TJio59aC/Ef1d7Ljrj GYCdNiH7eGkI5wScdEFaikgRqIuv7j5zh2NWWeE6MuHr9nR1U1NUXkwKd6csnOkUFUEI iGnUUGuHNSiMQL0DCHtReEimTxNPuGAX+5H5WcRFLk+oJ1NQmcCI1JmyAnBan7VQzehb gzGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988464; x=1790593264; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cvjbTKhoGU/dDzLNariOWDtPZWx05brpq3W1pqMLn2I=; b=OarrKU7bmRDIbPDWq9fSpt2F5afFJuiQPpZDxc4fLkcW191AbXaVDHvIWXNLWbEE4X Nad877Ji97vzd+N8E5CnMJJyncwRk5mj0ZjjppJLQjxsH1iud7u4QGr4qwThIOiJFzRF NRqSX41yvGZAxtvciz/pWqlNX5btYPutRZ7kTVU7LE+sXGuPkgf4FEc/hI0+ZvLNZ1t4 jhJw1tGrVgnbWCOolagIstZ87e0SGy5EV2FTD9wlB4fk1JkeZvoqN6wZN2uib+HzSVci w4kYw9zHeDmYOZdOROXIBKohPXOXmPSh/ZdPeQ+YDIc/yj7HHAYgu/r19ziXKb2fDRLs Kplw== X-Forwarded-Encrypted: i=1; AKwUvBx+fzHajoOyq32K6nbHh9wuYKeVnBYkOyfQ+qdtmV8Y87buLRBHA3VfF2g7LSYE9Jff+GLNzI4mkQhPVUI=@vger.kernel.org X-Gm-Message-State: AFuF++kPs9ThX97DIdeFEZr1U30A1IsDjiRm0Ru+bh8kQVh7DJeb2NWF cFQnGI/CJ2ANU90ZaAwulZelmb6YkeWubSlwT11iE3vG6V1gMsXJj7ysH/LHP+WEjjqX2SsPtEu 5oSzFu9xP2gr3C5Tj/96+jw== X-Received: from wmix8-n2.prod.google.com ([2002:a05:600c:e548:20b0:49d:2730:73de]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:1d25:b0:49f:d753:3de9 with SMTP id 5b1f17b1804b1-49fd7533df5mr5289235e9.33.1789988463507; Mon, 21 Sep 2026 04:01:03 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:48 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-7-vdonnefort@google.com> Subject: [PATCH v2 6/8] optee: Add support for arm,ffa-lend-pool From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Hook OP-TEE dynamically allocated protected memory pools to the "arm,ffa-lend-pool" driver. While the SMC transport platform device resolves the pool through its DT "memory-region" property, the FF-A transport lacks a device tree node and binds via ffa_lend_pool_attach(). Signed-off-by: Vincent Donnefort --- drivers/tee/optee/Makefile | 1 + drivers/tee/optee/core.c | 6 +++ drivers/tee/optee/ffa_abi.c | 13 +++++- drivers/tee/optee/ffa_lend_pool.c | 72 +++++++++++++++++++++++++++++++ drivers/tee/optee/optee_private.h | 4 ++ drivers/tee/optee/protmem.c | 20 +++++---- drivers/tee/optee/smc_abi.c | 21 ++++++--- 7 files changed, 121 insertions(+), 16 deletions(-) create mode 100644 drivers/tee/optee/ffa_lend_pool.c diff --git a/drivers/tee/optee/Makefile b/drivers/tee/optee/Makefile index ad7049c1c107..4986d863b9f7 100644 --- a/drivers/tee/optee/Makefile +++ b/drivers/tee/optee/Makefile @@ -9,6 +9,7 @@ optee-objs +=3D supp.o optee-objs +=3D device.o optee-objs +=3D smc_abi.o optee-objs +=3D ffa_abi.o +optee-objs +=3D ffa_lend_pool.o =20 # for tracing framework to find optee_trace.h CFLAGS_smc_abi.o :=3D -I$(src) diff --git a/drivers/tee/optee/core.c b/drivers/tee/optee/core.c index a52c1f498b99..39f315cea830 100644 --- a/drivers/tee/optee/core.c +++ b/drivers/tee/optee/core.c @@ -201,6 +201,12 @@ void optee_remove_common(struct optee *optee) /* Unregister OP-TEE specific client devices on TEE bus */ optee_unregister_devices(); =20 + /* + * Must follow optee_unregister_devices(). Clients require the lend pool + * linkage to successfully free their memory. + */ + optee_lend_pool_unregister(optee); + optee_notif_uninit(optee); optee_shm_arg_cache_uninit(optee); teedev_close_context(optee->ctx); diff --git a/drivers/tee/optee/ffa_abi.c b/drivers/tee/optee/ffa_abi.c index 633715b98625..e979dbc9a547 100644 --- a/drivers/tee/optee/ffa_abi.c +++ b/drivers/tee/optee/ffa_abi.c @@ -1042,13 +1042,21 @@ static int optee_ffa_protmem_pool_init(struct optee= *optee, u32 sec_caps) int rc =3D 0; =20 if (sec_caps & OPTEE_FFA_SEC_CAP_PROTMEM) { + rc =3D optee_lend_pool_register(optee); + if (rc) + return rc; + pool =3D optee_protmem_alloc_dyn_pool(optee, id); - if (IS_ERR(pool)) + if (IS_ERR(pool)) { + optee_lend_pool_unregister(optee); return PTR_ERR(pool); + } =20 rc =3D tee_device_register_dma_heap(optee->teedev, id, pool); - if (rc) + if (rc) { + optee_lend_pool_unregister(optee); pool->ops->destroy_pool(pool); + } } =20 return rc; @@ -1172,6 +1180,7 @@ static int optee_ffa_probe(struct ffa_device *ffa_dev) =20 err_unregister_devices: optee_unregister_devices(); + optee_lend_pool_unregister(optee); if (optee->ffa.bottom_half_value !=3D U32_MAX) notif_ops->notify_relinquish(ffa_dev, optee->ffa.bottom_half_value); diff --git a/drivers/tee/optee/ffa_lend_pool.c b/drivers/tee/optee/ffa_lend= _pool.c new file mode 100644 index 000000000000..b865c37efd5a --- /dev/null +++ b/drivers/tee/optee/ffa_lend_pool.c @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Support for the arm,ffa-lend-pool, unmaps lent memory from the host sta= ge-1 + * to mitigate for CPU speculative read of Secure memory + * + * Copyright (C) 2026 Google LLC. + * Author: Vincent Donnefort + */ + +#include +#include +#include + +#include "optee_private.h" + +static struct device_node *optee_dev_node(struct optee *optee) +{ + return dev_of_node(optee->teedev->dev.parent); +} + +static struct device *optee_device(struct optee *optee) +{ + return &optee->teedev->dev; +} + +static int optee_lend_pool_err(int err) +{ + /* + * Registration of the arm,ffa-lend-pool reserved-memory is optional as + * another (although less performant) stage-2 mitigation might be in + * place. + */ + if (err =3D=3D -ENODEV) + return 0; + + return err; +} + +int optee_lend_pool_register(struct optee *optee) +{ + struct device_node *np =3D optee_dev_node(optee); + struct device *dev =3D optee_device(optee); + int ret; + + if (np) + ret =3D of_reserved_mem_device_init_by_idx(dev, np, 0); + else + ret =3D ffa_lend_pool_attach(dev); + + return optee_lend_pool_err(ret); +} + +void optee_lend_pool_unregister(struct optee *optee) +{ + struct device_node *np =3D optee_dev_node(optee); + struct device *dev =3D optee_device(optee); + + if (np) + of_reserved_mem_device_release(dev); + else + ffa_lend_pool_detach(dev); +} + +int optee_lend_pool_prepare(struct optee *optee, struct page *page, u64 nr= _pages) +{ + return optee_lend_pool_err(ffa_prepare_lend(optee_device(optee), page, nr= _pages)); +} + +void optee_lend_pool_reclaimed(struct optee *optee, struct page *page, u64= nr_pages) +{ + ffa_lend_reclaimed(optee_device(optee), page, nr_pages); +} diff --git a/drivers/tee/optee/optee_private.h b/drivers/tee/optee/optee_pr= ivate.h index aefe1e6f5689..f26723e81573 100644 --- a/drivers/tee/optee/optee_private.h +++ b/drivers/tee/optee/optee_private.h @@ -325,6 +325,10 @@ void optee_supp_uninit(struct optee_supp *supp); void optee_supp_release(struct optee_supp *supp); struct tee_protmem_pool *optee_protmem_alloc_dyn_pool(struct optee *optee, enum tee_dma_heap_id id); +int optee_lend_pool_register(struct optee *optee); +void optee_lend_pool_unregister(struct optee *optee); +int optee_lend_pool_prepare(struct optee *optee, struct page *page, u64 nr= _pages); +void optee_lend_pool_reclaimed(struct optee *optee, struct page *page, u64= nr_pages); =20 int optee_supp_recv(struct tee_context *ctx, u32 *func, u32 *num_params, struct tee_param *param); diff --git a/drivers/tee/optee/protmem.c b/drivers/tee/optee/protmem.c index be3abf6e8aa6..b8ee372d20c0 100644 --- a/drivers/tee/optee/protmem.c +++ b/drivers/tee/optee/protmem.c @@ -42,19 +42,16 @@ static int init_dyn_protmem(struct optee_protmem_dyn_po= ol *rp) goto err_null_protmem; } =20 - /* - * TODO unmap the memory range since the physical memory will - * become inaccesible after the lend_protmem() call. - * - * If the platform supports a hypervisor at EL2, it will unmap the - * intermediate physical memory for us and stop cache pre-fetch of - * the memory. - */ + rc =3D optee_lend_pool_prepare(rp->optee, phys_to_page(rp->protmem->paddr= ), + rp->page_count); + if (rc) + goto err_put_shm; + rc =3D rp->optee->ops->lend_protmem(rp->optee, rp->protmem, rp->mem_attrs, rp->mem_attr_count, rp->use_case); if (rc) - goto err_put_shm; + goto err_lend_pool_reclaimed; rp->protmem->flags |=3D TEE_SHM_DYNAMIC; =20 rp->gen_pool =3D gen_pool_create(PAGE_SHIFT, -1); @@ -76,6 +73,9 @@ static int init_dyn_protmem(struct optee_protmem_dyn_pool= *rp) rp->gen_pool =3D NULL; err_reclaim: rp->optee->ops->reclaim_protmem(rp->optee, rp->protmem); +err_lend_pool_reclaimed: + optee_lend_pool_reclaimed(rp->optee, phys_to_page(rp->protmem->paddr), + rp->page_count); err_put_shm: tee_shm_put(rp->protmem); err_null_protmem: @@ -112,6 +112,8 @@ static void release_dyn_protmem(struct optee_protmem_dy= n_pool *rp) rp->gen_pool =3D NULL; =20 rp->optee->ops->reclaim_protmem(rp->optee, rp->protmem); + optee_lend_pool_reclaimed(rp->optee, phys_to_page(rp->protmem->paddr), + rp->page_count); rp->protmem->flags &=3D ~TEE_SHM_DYNAMIC; =20 WARN(refcount_read(&rp->protmem->refcount) !=3D 1, "Unexpected refcount"); diff --git a/drivers/tee/optee/smc_abi.c b/drivers/tee/optee/smc_abi.c index b8a2bdac3208..e46eb881cf90 100644 --- a/drivers/tee/optee/smc_abi.c +++ b/drivers/tee/optee/smc_abi.c @@ -1522,7 +1522,6 @@ static void optee_smc_remove(struct platform_device *= pdev) optee_disable_shm_cache(optee); =20 optee_smc_notif_uninit_irq(optee); - optee_remove_common(optee); =20 if (optee->smc.memremaped_shm) @@ -1714,14 +1713,25 @@ static int optee_protmem_pool_init(struct optee *op= tee) =20 if (protm) pool =3D static_protmem_pool_init(optee); - if (dyn_protm && IS_ERR(pool)) + if (dyn_protm && IS_ERR(pool)) { + rc =3D optee_lend_pool_register(optee); + if (rc) + return rc; + pool =3D optee_protmem_alloc_dyn_pool(optee, heap_id); + if (IS_ERR(pool)) { + optee_lend_pool_unregister(optee); + return PTR_ERR(pool); + } + } if (IS_ERR(pool)) return PTR_ERR(pool); =20 rc =3D tee_device_register_dma_heap(optee->teedev, heap_id, pool); - if (rc) + if (rc) { + optee_lend_pool_unregister(optee); pool->ops->destroy_pool(pool); + } =20 return rc; } @@ -1833,14 +1843,14 @@ static int optee_probe(struct platform_device *pdev) (sec_caps & OPTEE_SMC_SEC_CAP_RPMB_PROBE)) optee->in_kernel_rpmb_routing =3D true; =20 - teedev =3D tee_device_alloc(&optee_clnt_desc, NULL, pool, optee); + teedev =3D tee_device_alloc(&optee_clnt_desc, &pdev->dev, pool, optee); if (IS_ERR(teedev)) { rc =3D PTR_ERR(teedev); goto err_free_optee; } optee->teedev =3D teedev; =20 - teedev =3D tee_device_alloc(&optee_supp_desc, NULL, pool, optee); + teedev =3D tee_device_alloc(&optee_supp_desc, &pdev->dev, pool, optee); if (IS_ERR(teedev)) { rc =3D PTR_ERR(teedev); goto err_unreg_teedev; @@ -1932,6 +1942,7 @@ static int optee_probe(struct platform_device *pdev) optee_disable_shm_cache(optee); optee_smc_notif_uninit_irq(optee); optee_unregister_devices(); + optee_lend_pool_unregister(optee); err_notif_uninit: optee_notif_uninit(optee); err_close_ctx: --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7ABB048EC67 for ; Mon, 21 Sep 2026 11:01:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988470; cv=none; b=CXbt6taacztHHA+hvrTKJKTDCGu44Os6A3iO+aDBSlMyEXsKOGj95ARcdrhYl6xykOrLbl3srjNyLptmiHETJl3oqyClaazNiZqe11wOiCxwdvVQrPpZCsGk8fpup9Mzw1a3pMK9NXk+Vhf3T4DQgJxuKwBBEtmfQg2TkjmYDoY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988470; c=relaxed/simple; bh=zFiwAFdoDDqcAb3ymJ/xbfdcP3hdNR8xkvVRX0o4gLc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Gac2r9qKz6yAF55Y+UxoZD6zKdXu6qe5G6sfGS3CkXoSo0Ccdo/CCJ2s/daXiAdMYks+dWekzfcejWV2pRI3O0Loa48Ge3aE1YHzn5eh0uPbnn+3t0cHppILhbrB6aqT6sW1zYUGvd6BZyUieImBF6GMQtMNcqjsNxWpDKvleg8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kXnxIwLC; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kXnxIwLC" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4994d67d0e3so22026565e9.2 for ; Mon, 21 Sep 2026 04:01:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988465; x=1790593265; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=dcGk9G8S000WArAMLwdOiTGHKXUA8vP6GMN4jNzx1Ic=; b=kXnxIwLCzgVYSPCKNPxUtFri+8ceAdodtZJmbMbw5QcKXtyMXWXJ9C8/Zei2vb06/A ETKnZfpRcAFCP+QceuepxPo/vH5louv0Ourw1c0izcBF2KnOBkATKRMb/SG3psP4ELk2 5lj2awl6BebJ+48l4du4FiJoe7VOj/ssTmaC0PL249DFWx4s1lOPdVy1EUlTZNJMjWS8 xQDNAQcyDkteudUKN3MvAI7G0lC/1o7Onj+XAwVxEfDDY5DTsbboEapipmafazVGEITD L6RN4TGRHmnzj5ilgaCajgwxqjCXcpI7YmZDUyXo9onS/6c3wC9IzIILciYK7zxZ/jFo +iEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988465; x=1790593265; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=dcGk9G8S000WArAMLwdOiTGHKXUA8vP6GMN4jNzx1Ic=; b=izeUP1a6E65coPGBxpJ0PRzJgAVQFF76D10Y9w/pH3frSkLDh1CGYQQLFmxpkgwB3t WCa7BvnmpdDIL78z7b4wjE1LkZw7BRH+Em2eYutldUQezSoHsWX2nnMCrIlAMaboDgs3 S3rsVNYE2wmkFiKv5rekJ5KzRWfvnb/TjzZ/L0y5zlDB8RqfyxnBvFFLHcfNisfCxXtd Msb1Rq4i0cU/X5WZtUCgQb5o6ApKxDCDd8tH0iHUJZ8zFzo4G82A4vIGYtwSef4+itTo u6HW2WsI4rfLsrh9IdR8buXOTtITkCiwwvlyfZIQprI+5JfappfztaODfryan8d4b0PC hAaw== X-Forwarded-Encrypted: i=1; AKwUvBwJy2shciFCRMZfN8uX+iDcAbw4Mio0A4nUazNrhNIUOkoWLwvsSiZ7GqyoMiJVh4ImsQscEpYYfLgKbdU=@vger.kernel.org X-Gm-Message-State: AFuF++lr44xVpHDp5M45Y7yZqM/UQn5Xdt0/NemiYN4Mgsf/1xLAMjZA SYlQoiNN0xH83RfOHiFkZotNmsh5Sc2/UrZI66aBkp75pvqw3B8SGej9uZoGuEGpLeG9u9xxwYW XL1ko5RynKnwN9MNXGcdH5Q== X-Received: from wmph41.prod.google.com ([2002:a05:600c:49a9:b0:49e:78cc:d29]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:3b82:b0:49f:ce72:dfe7 with SMTP id 5b1f17b1804b1-49fce72e040mr109082755e9.35.1789988464458; Mon, 21 Sep 2026 04:01:04 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:49 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-8-vdonnefort@google.com> Subject: [PATCH v2 7/8] dt-bindings: reserved-memory: Add Arm FF-A lend pool From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add bindings for the "arm,ffa-lend-pool" reserved-memory CMA pool. Signed-off-by: Vincent Donnefort --- .../reserved-memory/arm,ffa-lend-pool.yaml | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Documentation/devicetree/bindings/reserved-memory/arm,f= fa-lend-pool.yaml diff --git a/Documentation/devicetree/bindings/reserved-memory/arm,ffa-lend= -pool.yaml b/Documentation/devicetree/bindings/reserved-memory/arm,ffa-lend= -pool.yaml new file mode 100644 index 000000000000..c02d36e1e418 --- /dev/null +++ b/Documentation/devicetree/bindings/reserved-memory/arm,ffa-lend-pool.y= aml @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/reserved-memory/arm,ffa-lend-pool.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Arm FF-A Memory Lend Pool + +maintainers: + - Vincent Donnefort + +description: | + When memory is lent to the Secure world via FF-A, CPU speculative access= es + from Non-Secure to the lent pages can still occur as long as it retains a + cacheable mapping to it. + + Ideally, lent memory would be "no-map", but that would mean giving up Mi= Bs of + useful memory. Instead, "arm,ffa-lend-pool" defines a reserved-memory CM= A pool + to manage unmapping pages prior to lending and restoring them when recla= imed. + +allOf: + - $ref: reserved-memory.yaml + +properties: + compatible: + const: arm,ffa-lend-pool + + no-map: false + +required: + - compatible + - reusable + +unevaluatedProperties: false + +examples: + - | + / { + compatible =3D "foo"; + model =3D "foo"; + #address-cells =3D <2>; + #size-cells =3D <2>; + + reserved-memory { + #address-cells =3D <2>; + #size-cells =3D <2>; + ranges; + + ffa_lend: ffa-lend-pool { + compatible =3D "arm,ffa-lend-pool"; + reusable; + size =3D <0x0 0x4000000>; + }; + }; + }; --=20 2.55.0.1082.g2b9226bbc0-goog From nobody Thu Sep 24 20:02:36 2026 Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2EC6B488DA0 for ; Mon, 21 Sep 2026 11:01:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.72 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988473; cv=none; b=t0+jstHEgtKBbV/o0nPiwNiA6tg3W/JyFtAv5QQR5/cO3lTK7VxGJcKqE6tIZN/TJIvcd9C5mmSh7z/7lF8wSoKUf303Uy+RfU+z5MDMxql8u2mwwEBzelQ1eDqvEUwC2ZYlNrXZrEzKv880cfrhRRBzyJ7CtZLvU9iZXKWwq0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789988473; c=relaxed/simple; bh=B/oP32fYVEgL/ZkWtwoP3dz6NpLmlUOmCKj3v/0F8co=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=jsGSuFfKNa5OhMVu5U6T1EvicahhfM1LuvT7GfmJfbLTecLdeOuLWmctpb0cLd5xd/6RnJM4WPD7xJ5OTsgvOAYTP5ACMyKr2c85167dY5Gar9NQ/cjAiRgqAQOM7IhXDECuHORQEN/grtYiuTJ6NK5VrMhQTAsqop7Rq6HoIew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YGINq3L5; arc=none smtp.client-ip=209.85.128.72 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--vdonnefort.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YGINq3L5" Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-49e745d5dabso32361345e9.0 for ; Mon, 21 Sep 2026 04:01:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1789988466; x=1790593266; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oCrcI7igLaQUil9vBYjywYIs9hdqlrNEBSUMKWJIUV4=; b=YGINq3L5jVZPuoRAEO/CfarjCz6dYo71DRq7DKX1K5xB1gNWSHO9VnbVyjyuyoVe9e FwPB+9IomF406zAEppL5sblaABFCyXPKL5usjjGyHeNDbl/OrRx31aFxMGv59dM0wbEB mwAdkMwccdLGdGax3vlJypS8lSRavDdwTIzJkRcxuM2eheKPVD2QTH1uADOEveMPCfJI A9sm5jDO8ywZuU2hmPzjYWa95XXr/YNfNYqxriXHsblf0FLg1LxrLXC2mcYQt3D8Uh4d eraDDQdT12S8EW1eIvA4fK/mfFseAiRgx4gZs4YjG+0FFUt0+eJTi8IInD3EwV/uRLoJ CDfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1789988466; x=1790593266; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=oCrcI7igLaQUil9vBYjywYIs9hdqlrNEBSUMKWJIUV4=; b=jFKOk5CLPIIRXJp7yZaeGjpKuJJ05aDLLRWVJT3SFnJCrLRqobSlMeOV9qqE7NAl7M gUyTQxcCbSSL0ylrdDP6H30T4k2om+FDBzHbCn4u51bV4apg6q71E7L86oF9qkkQYvwn Ith0H4y6rwPZ/263du6Vi7MLHcblK0bUQ21GEf6lFabE3NzUPGN2xW5Y6SgQcyj9q9gi XB1H6MSR7vVVn2IvcMGF5U2gf124WirKz0mpKhEdKfypujWrAp+r5ruXA4w9s5iq3bRz cZYjID9J236SNk1PB5uhqngiUrkilQtAGEQe3SnxPqZ8Sfc6F6+TiIJDGfg8nDaJD9xf UrDg== X-Forwarded-Encrypted: i=1; AKwUvBziS5zSYSEOvmae94Fs4zSjWPDA+FSMcIDJT0ggxi13b+1QbHe35b3ETpPe172nbg52pYCNBPuwxsSaoBk=@vger.kernel.org X-Gm-Message-State: AFuF++lXSBYrt8tJPGIa+TKzfXpOMA2F0ltU9nXrW95nyj6zUs31bLN6 tZmAjFiGEW68kRpYHOUoHGpwDHK7DjvmIQzO78vRe59E9S7AVnLEW6/wVh3kjJHwDxeBBFspV0H 6X/lXiBnhnK8tIScLXtBLzQ== X-Received: from wrbeh15.prod.google.com ([2002:a05:6000:410f:b0:487:2514:733]) (user=vdonnefort job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:290d:b0:487:27f9:829 with SMTP id ffacd0b85a97d-48727f90a8cmr8269596f8f.30.1789988465393; Mon, 21 Sep 2026 04:01:05 -0700 (PDT) Date: Mon, 21 Sep 2026 12:00:50 +0100 In-Reply-To: <20260921110050.3977591-1-vdonnefort@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260921110050.3977591-1-vdonnefort@google.com> X-Mailer: git-send-email 2.55.0.1082.g2b9226bbc0-goog Message-ID: <20260921110050.3977591-9-vdonnefort@google.com> Subject: [PATCH v2 8/8] dt-bindings: firmware: optee: Add memory-region property From: Vincent Donnefort To: catalin.marinas@arm.com, will@kernel.org, rppt@kernel.org, akpm@linux-foundation.org, sudeep.holla@kernel.org, jenswi@kernel.org, robh@kernel.org Cc: mark.rutland@arm.com, sumit.garg@kernel.org, ardb@kernel.org, thierry.reding@kernel.org, david@kernel.org, danielmentz@google.com, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, op-tee@lists.trustedfirmware.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Donnefort Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow reserved-memory via memory-region to support the arm,ffa-lend-pool. Signed-off-by: Vincent Donnefort --- .../devicetree/bindings/arm/firmware/linaro,optee-tz.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz= .yaml b/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.yaml index 26ebcf4565f3..7fddea9cfdbc 100644 --- a/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.yaml +++ b/Documentation/devicetree/bindings/arm/firmware/linaro,optee-tz.yaml @@ -41,6 +41,11 @@ properties: HVC #0, register assignments register assignments are specified in drivers/tee/optee/optee_smc.h =20 + memory-region: + maxItems: 1 + description: | + Phandle to a reserved-memory node for the OP-TEE lend pool. + required: - compatible - method --=20 2.55.0.1082.g2b9226bbc0-goog