{"id":2228802,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2228802/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260427122742.210074-4-mkchauras@gmail.com/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/1.1/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/"},"msgid":"<20260427122742.210074-4-mkchauras@gmail.com>","date":"2026-04-27T12:27:37","name":"[v5,3/8] powerpc: introduce arch_enter_from_user_mode","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"182b745a1ee326862dd3cf30de8555c0e647f3d7","submitter":{"id":92575,"url":"http://patchwork.ozlabs.org/api/1.1/people/92575/?format=json","name":"Mukesh Kumar Chaurasiya","email":"mkchauras@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260427122742.210074-4-mkchauras@gmail.com/mbox/","series":[{"id":501638,"url":"http://patchwork.ozlabs.org/api/1.1/series/501638/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=501638","date":"2026-04-27T12:27:34","name":"Generic IRQ entry/exit support for powerpc","version":5,"mbox":"http://patchwork.ozlabs.org/series/501638/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2228802/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2228802/checks/","tags":{},"headers":{"Return-Path":"\n <linuxppc-dev+bounces-20162-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=pgdIkCMj;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-20162-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=\"2607:f8b0:4864:20::42b\"","lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=pgdIkCMj;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com\n (client-ip=2607:f8b0:4864:20::42b; helo=mail-pf1-x42b.google.com;\n envelope-from=mkchauras@gmail.com; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g42sy0XgNz1yHv\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 27 Apr 2026 22:28:38 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4g42sx6jHSz2yps;\n\tMon, 27 Apr 2026 22:28:37 +1000 (AEST)","from mail-pf1-x42b.google.com (mail-pf1-x42b.google.com\n [IPv6:2607:f8b0:4864:20::42b])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 4g42sx1175z2y2B\n\tfor <linuxppc-dev@lists.ozlabs.org>; Mon, 27 Apr 2026 22:28:37 +1000 (AEST)","by mail-pf1-x42b.google.com with SMTP id\n d2e1a72fcca58-83177129e28so1713828b3a.1\n        for <linuxppc-dev@lists.ozlabs.org>;\n Mon, 27 Apr 2026 05:28:37 -0700 (PDT)","from li-1a3e774c-28e4-11b2-a85c-acc9f2883e29.ibm.com ([129.41.58.4])\n        by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82f8e9f7735sm32733466b3a.21.2026.04.27.05.28.23\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Mon, 27 Apr 2026 05:28:34 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1777292917;\n\tcv=none;\n b=ML6y80jfghT2RDyUVoKCUS9qnMjW6KrCshQBn0tHa/3VtSLsVfKbhv0yWrbwQJIRu3eTpAFn+7YO7MfWz9aGQP4i8P+zzwcA4QHFngWvOXWvzlTg93/VKqwBhfy7qjG3/6jVISuy+z0L3m13KSuJq7ZPzV/pkQuBa7Wya6yZLPHKfR/nDFq+3x4UcJ6JMSB3LRVxSPreVXir5LI1cSue7fb41GqkeevSc1VRiX09sRBS8uSGOdbT1JBZiW66ZVnJ40Ta4GMreA9+V4iwhBlKPgPrAgw9oHs2XtEKpRe6eJ+4fJvwrLqZgDtKf87qdWv4Qg56alFstjefS9Aus32vyg==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1777292917; c=relaxed/relaxed;\n\tbh=raVDKr4Vko7RlTRFhwZDaBEgYPbFcEnfldAQ2J2hXNQ=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=EcR8GUpStSZAwGBEX8N5QZFZPY/+jHzemtbfq5kgdRGcPGvJ2XPX6O75Fs1YLE/FiJYC1563u79E3VvD8DKcZKZp/WESQUocdD7IL+Htpf0uvtX48UZEryrhcPLAevHFIbfNcXcLK4ncdK/owMcUWwt7sitLpdGN5Thvd3lFosr+EAVd9sGRp+lnYMOvyLmfjvVzah9H6wN+kzWYDVDABjCgeWieqC8EN0s1zs14nxzR3GnezrhLlRmNDd2aAAqn0CimyQvgVlj63O9AUVjXrxvA8XTVFN5QUJr4VusqpCxWeCgf9tZI/Rle8fQ4tez1sRkpIEI9JUYjEo5nAeni+A==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com; dkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=pgdIkCMj; dkim-atps=neutral;\n spf=pass (client-ip=2607:f8b0:4864:20::42b; helo=mail-pf1-x42b.google.com;\n envelope-from=mkchauras@gmail.com;\n receiver=lists.ozlabs.org) smtp.mailfrom=gmail.com","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1777292915; x=1777897715;\n darn=lists.ozlabs.org;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=raVDKr4Vko7RlTRFhwZDaBEgYPbFcEnfldAQ2J2hXNQ=;\n        b=pgdIkCMjG9fd9k9LSWzd1WD9u16Gl2ebhP7KNw8kOPsh9TmHyUMVfAkPPhBiyFcmfV\n         bWq4xMHbwKQ6JjYnstqDvWRU73ylZY/BK5NwhEsw7gkU37MVr5EM/2Q/7IJmRK7fS5n8\n         /rh+WPtMOaL/tso5AplCwzQyIz1VK1gBuDzahDvkc4j9EtXFtbu4/MRjOYq8Ulss5+MV\n         VI1FXRZEdbtaU1izEZXKp2JpuCuImgQV8xjUe4U5u+CibrTalRuRDKR+OQLZjI7j/x8y\n         dhZ1UQZuF4EfwgfuyQJ4Q3JiLpkHj7Mk7DTp/EQY7SU4wYDEE9R4Raly4pC2xLwIsh/B\n         U3bQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1777292915; x=1777897715;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=raVDKr4Vko7RlTRFhwZDaBEgYPbFcEnfldAQ2J2hXNQ=;\n        b=cbak825qdI0C6GuNZKIjNgv4bcr2Xc56MS20PEwnM1dP5cv9RmxzlnYpY/xAtp21Cl\n         jiYhotPO07WRe7LKpwOnobQvxV9ZZe+E7wclLoiUJIfPnQsWTXLpwNmdooGzHra4qd+I\n         Xa9XyaUSwYJ6D+UEzQbItM1oe3vFCrrGquM9DQMVpczd1/0FjwbvLZfcRkt7pECX21eB\n         Mv+tFqN+bndxSr68H10jH4Aga7jR3K9DiSfVLi0Rm2MujM9c9lIA4ascPQOlsTQQwuCV\n         PrCzm4AYOkhZUoN+8NVD1ejf78t324oVXaXRbrNb9mRkft7K5A0ipR8bovT9Fy742UDk\n         kZnw==","X-Forwarded-Encrypted":"i=1;\n AFNElJ+xqxW1bqQXrmLe1sXj7qemsFM91tX+DDFZKgLEXl5zRrPhVcXQQLfAYc62TzQXb3qknDt4NIdNBS7gqMI=@lists.ozlabs.org","X-Gm-Message-State":"AOJu0YzM4Q/OyEvC+hI7SsLitiU+BXTSsJBmGp61liccQLHt6zPwt90V\n\t89mZQLZV0ZnjFTftQo70/CO7Q4DlePBTCBaMBVNTf/vPu2+e2NKmR1kA","X-Gm-Gg":"AeBDietXGUvF/hL8D1yM+g1mHnrl7b2N9L7QNG2hovwltYZTw+7GPefpn55r3moqBBe\n\tk8tCdYbsGc+Zsu495Z/5CWcloM7e7Y3OQQUOuGaFPqVqAi0LcUqQ3ZqsoIC4i3TxGquc00uroJ+\n\tCcqnqIDggDegSWu0HUHgQR1DtX2toEOZ4FBbq711zja8E14+8Va+reo9wKqSOMS+NetRvtkBXa2\n\tAR4qwHL6gSzKGoI0RCRPKI3OycjXdi1qa2lYYecY3gpv2O0/Tq9mKNgNAeWvc5RzFLa6NqaLyZ7\n\te+UdX0kyCanrmTEKGd4paU8JFGf/tKFkc3qv9hQxhMa/XbwiTPGKvdlNsitWbDKM9+Mt+SM58IP\n\teXwQmuoVD21S1Ni+oZhxDi3pDECP7WKkfOzSf6xHYtmy3YVComwfiLP+L8FPjtf4ADu8xKoHfI2\n\tio3Po+ov/hqP6szKpkU75wyGyDcihgN5Ujd8Lhk6m29ezs0HMsRrRFiwQoKZbxoTxcAgdnXKBUU\n\tXWC2hLxDdCf2Fy0","X-Received":"by 2002:a05:6a00:4214:b0:81f:3fbd:ccf with SMTP id\n d2e1a72fcca58-82f8c8bcc27mr42452795b3a.23.1777292915109;\n        Mon, 27 Apr 2026 05:28:35 -0700 (PDT)","From":"\"Mukesh Kumar Chaurasiya (IBM)\" <mkchauras@gmail.com>","To":"maddy@linux.ibm.com,\n\tmpe@ellerman.id.au,\n\tnpiggin@gmail.com,\n\tchleroy@kernel.org,\n\tryabinin.a.a@gmail.com,\n\tglider@google.com,\n\tandreyknvl@gmail.com,\n\tdvyukov@google.com,\n\tvincenzo.frascino@arm.com,\n\toleg@redhat.com,\n\tkees@kernel.org,\n\tluto@amacapital.net,\n\twad@chromium.org,\n\tmchauras@linux.ibm.com,\n\tsshegde@linux.ibm.com,\n\tthuth@redhat.com,\n\truanjinjie@huawei.com,\n\takpm@linux-foundation.org,\n\tmacro@orcam.me.uk,\n\tldv@strace.io,\n\tcharlie@rivosinc.com,\n\tdeller@gmx.de,\n\tkevin.brodsky@arm.com,\n\tritesh.list@gmail.com,\n\tyeoreum.yun@arm.com,\n\tagordeev@linux.ibm.com,\n\tsegher@kernel.crashing.org,\n\tmark.rutland@arm.com,\n\tryan.roberts@arm.com,\n\tpmladek@suse.com,\n\tfeng.tang@linux.alibaba.com,\n\tpeterz@infradead.org,\n\tkan.liang@linux.intel.com,\n\tlinuxppc-dev@lists.ozlabs.org,\n\tlinux-kernel@vger.kernel.org,\n\tkasan-dev@googlegroups.com","Cc":"Samir M <samir@linux.ibm.com>,\n\tDavid Gow <davidgow@google.com>,\n\tVenkat Rao Bagalkote <venkat88@linux.ibm.com>","Subject":"[PATCH v5 3/8] powerpc: introduce arch_enter_from_user_mode","Date":"Mon, 27 Apr 2026 17:57:37 +0530","Message-ID":"<20260427122742.210074-4-mkchauras@gmail.com>","X-Mailer":"git-send-email 2.53.0","In-Reply-To":"<20260427122742.210074-1-mkchauras@gmail.com>","References":"<20260427122742.210074-1-mkchauras@gmail.com>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-0.2 required=3.0 tests=DKIM_SIGNED,DKIM_VALID,\n\tDKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,\n\tSPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"},"content":"From: Mukesh Kumar Chaurasiya <mchauras@linux.ibm.com>\n\nImplement the arch_enter_from_user_mode() hook required by the generic\nentry/exit framework. This helper prepares the CPU state when entering\nthe kernel from userspace, ensuring correct handling of KUAP/KUEP,\ntransactional memory, and debug register state.\n\nThis patch contains no functional changes, it is purely preparatory for\nenabling the generic syscall and interrupt entry path on PowerPC.\n\nSigned-off-by: Mukesh Kumar Chaurasiya <mchauras@linux.ibm.com>\nTested-by: Samir M <samir@linux.ibm.com>\nTested-by: David Gow <davidgow@google.com>\nTested-by: Venkat Rao Bagalkote <venkat88@linux.ibm.com>\nReviewed-by: Shrikanth Hegde <sshegde@linux.ibm.com>\n---\n arch/powerpc/include/asm/entry-common.h | 118 ++++++++++++++++++++++++\n 1 file changed, 118 insertions(+)","diff":"diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h\nindex 05ce0583b600..837a7e020e82 100644\n--- a/arch/powerpc/include/asm/entry-common.h\n+++ b/arch/powerpc/include/asm/entry-common.h\n@@ -3,6 +3,124 @@\n #ifndef _ASM_PPC_ENTRY_COMMON_H\n #define _ASM_PPC_ENTRY_COMMON_H\n \n+#include <asm/cputime.h>\n+#include <asm/interrupt.h>\n #include <asm/stacktrace.h>\n+#include <asm/tm.h>\n+\n+static __always_inline void booke_load_dbcr0(void)\n+{\n+#ifdef CONFIG_PPC_ADV_DEBUG_REGS\n+\tunsigned long dbcr0 = current->thread.debug.dbcr0;\n+\n+\tif (likely(!(dbcr0 & DBCR0_IDM)))\n+\t\treturn;\n+\n+\t/*\n+\t * Check to see if the dbcr0 register is set up to debug.\n+\t * Use the internal debug mode bit to do this.\n+\t */\n+\tmtmsr(mfmsr() & ~MSR_DE);\n+\tif (IS_ENABLED(CONFIG_PPC32)) {\n+\t\tisync();\n+\t\tglobal_dbcr0[smp_processor_id()] = mfspr(SPRN_DBCR0);\n+\t}\n+\tmtspr(SPRN_DBCR0, dbcr0);\n+\tmtspr(SPRN_DBSR, -1);\n+#endif\n+}\n+\n+static __always_inline void arch_enter_from_user_mode(struct pt_regs *regs)\n+{\n+\tkuap_lock();\n+\n+\tif (IS_ENABLED(CONFIG_PPC_IRQ_SOFT_MASK_DEBUG))\n+\t\tBUG_ON(irq_soft_mask_return() != IRQS_ALL_DISABLED);\n+\n+\tBUG_ON(regs_is_unrecoverable(regs));\n+\tBUG_ON(!user_mode(regs));\n+\tBUG_ON(regs_irqs_disabled(regs));\n+\n+#ifdef CONFIG_PPC_PKEY\n+\tif (mmu_has_feature(MMU_FTR_PKEY) && trap_is_syscall(regs)) {\n+\t\tunsigned long amr, iamr;\n+\t\tbool flush_needed = false;\n+\t\t/*\n+\t\t * When entering from userspace we mostly have the AMR/IAMR\n+\t\t * different from kernel default values. Hence don't compare.\n+\t\t */\n+\t\tamr = mfspr(SPRN_AMR);\n+\t\tiamr = mfspr(SPRN_IAMR);\n+\t\tregs->amr  = amr;\n+\t\tregs->iamr = iamr;\n+\t\tif (mmu_has_feature(MMU_FTR_KUAP)) {\n+\t\t\tmtspr(SPRN_AMR, AMR_KUAP_BLOCKED);\n+\t\t\tflush_needed = true;\n+\t\t}\n+\t\tif (mmu_has_feature(MMU_FTR_BOOK3S_KUEP)) {\n+\t\t\tmtspr(SPRN_IAMR, AMR_KUEP_BLOCKED);\n+\t\t\tflush_needed = true;\n+\t\t}\n+\t\tif (flush_needed)\n+\t\t\tisync();\n+\t}\n+#endif\n+\tkuap_assert_locked();\n+\tbooke_restore_dbcr0();\n+\taccount_cpu_user_entry();\n+\taccount_stolen_time();\n+\n+\t/*\n+\t * This is not required for the syscall exit path, but makes the\n+\t * stack frame look nicer. If this was initialised in the first stack\n+\t * frame, or if the unwinder was taught the first stack frame always\n+\t * returns to user with IRQS_ENABLED, this store could be avoided!\n+\t */\n+\tirq_soft_mask_regs_set_state(regs, IRQS_ENABLED);\n+\n+\t/*\n+\t * If system call is called with TM active, set _TIF_RESTOREALL to\n+\t * prevent RFSCV being used to return to userspace, because POWER9\n+\t * TM implementation has problems with this instruction returning to\n+\t * transactional state. Final register values are not relevant because\n+\t * the transaction will be aborted upon return anyway. Or in the case\n+\t * of unsupported_scv SIGILL fault, the return state does not much\n+\t * matter because it's an edge case.\n+\t */\n+\tif (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) &&\n+\t    unlikely(MSR_TM_TRANSACTIONAL(regs->msr)))\n+\t\tset_bits(_TIF_RESTOREALL, &current_thread_info()->flags);\n+\n+\t/*\n+\t * If the system call was made with a transaction active, doom it and\n+\t * return without performing the system call. Unless it was an\n+\t * unsupported scv vector, in which case it's treated like an illegal\n+\t * instruction.\n+\t */\n+#ifdef CONFIG_PPC_TRANSACTIONAL_MEM\n+\tif (unlikely(MSR_TM_TRANSACTIONAL(regs->msr)) &&\n+\t    !trap_is_unsupported_scv(regs)) {\n+\t\t/* Enable TM in the kernel, and disable EE (for scv) */\n+\t\thard_irq_disable();\n+\t\tmtmsr(mfmsr() | MSR_TM);\n+\n+\t\t/* tabort, this dooms the transaction, nothing else */\n+\t\tasm volatile(\".long 0x7c00071d | ((%0) << 16)\"\n+\t\t\t     :: \"r\"(TM_CAUSE_SYSCALL | TM_CAUSE_PERSISTENT));\n+\n+\t\t/*\n+\t\t * Userspace will never see the return value. Execution will\n+\t\t * resume after the tbegin. of the aborted transaction with the\n+\t\t * checkpointed register state. A context switch could occur\n+\t\t * or signal delivered to the process before resuming the\n+\t\t * doomed transaction context, but that should all be handled\n+\t\t * as expected.\n+\t\t */\n+\t\treturn;\n+\t}\n+#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */\n+}\n+\n+#define arch_enter_from_user_mode arch_enter_from_user_mode\n \n #endif /* _ASM_PPC_ENTRY_COMMON_H */\n","prefixes":["v5","3/8"]}