From patchwork Mon Apr 28 15:22:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078427 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=jLQYzrVp; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8103-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmRzj6RXrz1yMg for ; Tue, 29 Apr 2025 01:23:29 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS026ZXgz2xKN; Tue, 29 Apr 2025 01:23:46 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853826; cv=none; b=PIXXCFDppI4LLdE42CiXxi7Lc28prWACXimKjhjfJGQ/ZmeYFjJTznhD8aMJP4y/2ot7kwA1lSHqyws2Mabtyg9aA63KdfMsVXlWZmC3hiTNrbBefJsVMJVvJe5wNkInY7J7TAKP0mpypEQBTehD6fG/9ZBDjExEK0qlFMR3Id3G117uZUtn4hPwcEFBuv1T1yfvr3rT3cspxOmgZypcwMIi+Yn3a72maGsBqIVimO0I0VhFABbqsuIvWl+eIU6Rr3ABGDUohek2MUfeZoOKCiv5a/OayhvcklONat0yM8+jgevgYb5sykjEv7SO28mTrhdWTVWJqCO9DGjUYa0KSQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853826; c=relaxed/relaxed; bh=jqm/ze/Y51bHxOKl8hNPMUYd/NK9gQYXTuHPoPq3Gp0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J1MkX8QbXO6XpQ01jbXVbgkwn6/lp2CTpOn9GhrqJOQ4jSWClbGiatTUWHqnVpcTrdiOgLfirX81qKnN+scv58gsSg2I10Ajq+q63yKLqijVO+FBRqrxnlV9MArMRCQG7rL48sdW8C6iMS+plCPLpKZPYtth6qrjTvTgy9SUem7xidOI/BavKMyg0rZMaKCXimW73/175h3FFO1Gi2BcawqrpMu72hmP/hNODL3OGTqjDAPeabNm0JS62034vTASflrhH3/YwzepVjalLbVfZ7IgfjrDgXp6UQ5FfRgzHuCz1Hk394oVNJG17J+HbyWmnJLQQX9jBDvpBwMtp8Z3EQ== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=jLQYzrVp; dkim-atps=neutral; spf=pass (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=jLQYzrVp; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS021NBgz307q for ; Tue, 29 Apr 2025 01:23:45 +1000 (AEST) Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SA410a027624; Mon, 28 Apr 2025 15:23:29 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=jqm/ze/Y51bHxOKl8 hNPMUYd/NK9gQYXTuHPoPq3Gp0=; b=jLQYzrVpVwZxEzSw3FoSFClq8YT8adACE xilCXar2crM3Q2q8jddaTrhOjgGXml45RFYrrAf6eYxHDT3j1hmgP7JhptNaJ/gr GQoFY9wBpuuMia0YDJO+9k8tTujddmOzQ4kTYjE5eh/fdxXr3db8zOPS+Ai/mFFd kfiHbE0uD3WSoD3ng1vbURlZUtGHtAU1ZV+x2jjonkI046q1UAP6E+xpPj74wQiW UJgEaPoZer0q1KQAlbyYx+MEVGI0+jXVjYt5qzckBrFAmmd81JgAI8ribQmqbfNY WrtSjwOLDxDyEFBJpw0grRPfNdSBrL2y9oNtNym9uiGCk4HCMuRug== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46a7kk1h15-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:29 +0000 (GMT) Received: from m0360083.ppops.net (m0360083.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SFJ0a9024669; Mon, 28 Apr 2025 15:23:29 GMT Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46a7kk1h12-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:28 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SESeEi031677; Mon, 28 Apr 2025 15:23:27 GMT Received: from smtprelay03.fra02v.mail.ibm.com ([9.218.2.224]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4699tty6c2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:27 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay03.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFNOvN59441528 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:23:24 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 40BF120040; Mon, 28 Apr 2025 15:23:24 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1DDDE20043; Mon, 28 Apr 2025 15:23:18 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:17 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 1/6] powerpc: rename arch_irq_disabled_regs Date: Mon, 28 Apr 2025 20:52:22 +0530 Message-ID: <20250428152225.66044-4-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=OYSYDgTY c=1 sm=1 tr=0 ts=680f9d71 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=8txWmKPpaVdEF_iBmVcA:9 X-Proofpoint-GUID: fFNvrLAMIA9clWYErvlELafj9baN9_zQ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyMCBTYWx0ZWRfX/LnGwDW7MwQM 2+pjMSwkH58FHmyXhbaw34lkJgH3KxTPmNB+sa/2gUG6wMQGEnCe8tpwIhNii63kC3uLV10C8GT ApfTbJIAiVXTyWO22TjmcYYM9/pW9/gbYg6nMOkFdb++Rzfv6ah4lAIpn1cpymE9H2bol/8jVoC nnjwhvbY3k66XhtQUPWlO1enouNVpDO0LqLpZUESWnA5Pyb21BvMeShZ1cMVKIUC4QjvRRijD1J fn9QsHcAvscmoGssVzndwDTgI8jIoD0d+92kojiDp9uWt1cB3N/0ZUBWm1nD2ld9vQizl7wzgBT LJENAZgTgjc4wGHqIR/ZSgrg7jeSzh2UnFsvRH4HJ3zuwfYAQnRPbiUH2BFfSxnSBJbEpHxGnfl 3q/4I2nEkJsBT71tmvnLppfBxfFmORIBcYX2mtuzgGzRGxYBzaH2ltBsrctbuJm0YaN+Yl0u X-Proofpoint-ORIG-GUID: xp_5H1xEGIPYkJb2xlacreUJttKpUIDg X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 suspectscore=0 mlxlogscore=859 phishscore=0 mlxscore=0 impostorscore=0 adultscore=0 priorityscore=1501 spamscore=0 malwarescore=0 clxscore=1015 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280120 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,SPF_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 Renaming arch_irq_disabled_regs to regs_irqs_disabled to be used commonly in generic entry exit framework and ppc arch code. Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/include/asm/hw_irq.h | 4 ++-- arch/powerpc/include/asm/interrupt.h | 12 ++++++------ arch/powerpc/kernel/interrupt.c | 4 ++-- arch/powerpc/kernel/syscall.c | 2 +- arch/powerpc/kernel/traps.c | 2 +- arch/powerpc/kernel/watchdog.c | 2 +- arch/powerpc/perf/core-book3s.c | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index 569ac1165b069..2b9cf0380e0e9 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h @@ -393,7 +393,7 @@ static inline void do_hard_irq_enable(void) __hard_irq_enable(); } -static inline bool arch_irq_disabled_regs(struct pt_regs *regs) +static inline bool regs_irqs_disabled(struct pt_regs *regs) { return (regs->softe & IRQS_DISABLED); } @@ -466,7 +466,7 @@ static inline bool arch_irqs_disabled(void) #define hard_irq_disable() arch_local_irq_disable() -static inline bool arch_irq_disabled_regs(struct pt_regs *regs) +static inline bool regs_irqs_disabled(struct pt_regs *regs) { return !(regs->msr & MSR_EE); } diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h index 23638d4e73ac0..56bc8113b8cde 100644 --- a/arch/powerpc/include/asm/interrupt.h +++ b/arch/powerpc/include/asm/interrupt.h @@ -172,7 +172,7 @@ static inline void interrupt_enter_prepare(struct pt_regs *regs) /* Enable MSR[RI] early, to support kernel SLB and hash faults */ #endif - if (!arch_irq_disabled_regs(regs)) + if (!regs_irqs_disabled(regs)) trace_hardirqs_off(); if (user_mode(regs)) { @@ -192,10 +192,10 @@ static inline void interrupt_enter_prepare(struct pt_regs *regs) CT_WARN_ON(ct_state() != CT_STATE_KERNEL && ct_state() != CT_STATE_IDLE); INT_SOFT_MASK_BUG_ON(regs, is_implicit_soft_masked(regs)); - INT_SOFT_MASK_BUG_ON(regs, arch_irq_disabled_regs(regs) && + INT_SOFT_MASK_BUG_ON(regs, regs_irqs_disabled(regs) && search_kernel_restart_table(regs->nip)); } - INT_SOFT_MASK_BUG_ON(regs, !arch_irq_disabled_regs(regs) && + INT_SOFT_MASK_BUG_ON(regs, !regs_irqs_disabled(regs) && !(regs->msr & MSR_EE)); booke_restore_dbcr0(); @@ -298,7 +298,7 @@ static inline void interrupt_nmi_enter_prepare(struct pt_regs *regs, struct inte * Adjust regs->softe to be soft-masked if it had not been * reconcied (e.g., interrupt entry with MSR[EE]=0 but softe * not yet set disabled), or if it was in an implicit soft - * masked state. This makes arch_irq_disabled_regs(regs) + * masked state. This makes regs_irqs_disabled(regs) * behave as expected. */ regs->softe = IRQS_ALL_DISABLED; @@ -372,7 +372,7 @@ static inline void interrupt_nmi_exit_prepare(struct pt_regs *regs, struct inter #ifdef CONFIG_PPC64 #ifdef CONFIG_PPC_BOOK3S - if (arch_irq_disabled_regs(regs)) { + if (regs_irqs_disabled(regs)) { unsigned long rst = search_kernel_restart_table(regs->nip); if (rst) regs_set_return_ip(regs, rst); @@ -661,7 +661,7 @@ void replay_soft_interrupts(void); static inline void interrupt_cond_local_irq_enable(struct pt_regs *regs) { - if (!arch_irq_disabled_regs(regs)) + if (!regs_irqs_disabled(regs)) local_irq_enable(); } diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 8f4acc55407b0..f656192f075fb 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -343,7 +343,7 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs) unsigned long ret; BUG_ON(regs_is_unrecoverable(regs)); - BUG_ON(arch_irq_disabled_regs(regs)); + BUG_ON(regs_irqs_disabled(regs)); CT_WARN_ON(ct_state() == CT_STATE_USER); /* @@ -392,7 +392,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) local_irq_disable(); - if (!arch_irq_disabled_regs(regs)) { + if (!regs_irqs_disabled(regs)) { /* Returning to a kernel context with local irqs enabled. */ WARN_ON_ONCE(!(regs->msr & MSR_EE)); again: diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index be159ad4b77bd..9f03a6263fb41 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -32,7 +32,7 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) BUG_ON(regs_is_unrecoverable(regs)); BUG_ON(!user_mode(regs)); - BUG_ON(arch_irq_disabled_regs(regs)); + BUG_ON(regs_irqs_disabled(regs)); #ifdef CONFIG_PPC_PKEY if (mmu_has_feature(MMU_FTR_PKEY)) { diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index cb8e9357383e9..629f2a2d4780e 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -1956,7 +1956,7 @@ DEFINE_INTERRUPT_HANDLER_RAW(performance_monitor_exception) * prevent hash faults on user addresses when reading callchains (and * looks better from an irq tracing perspective). */ - if (IS_ENABLED(CONFIG_PPC64) && unlikely(arch_irq_disabled_regs(regs))) + if (IS_ENABLED(CONFIG_PPC64) && unlikely(regs_irqs_disabled(regs))) performance_monitor_exception_nmi(regs); else performance_monitor_exception_async(regs); diff --git a/arch/powerpc/kernel/watchdog.c b/arch/powerpc/kernel/watchdog.c index 2429cb1c7baa7..6111cbbde069d 100644 --- a/arch/powerpc/kernel/watchdog.c +++ b/arch/powerpc/kernel/watchdog.c @@ -373,7 +373,7 @@ DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt) u64 tb; /* should only arrive from kernel, with irqs disabled */ - WARN_ON_ONCE(!arch_irq_disabled_regs(regs)); + WARN_ON_ONCE(!regs_irqs_disabled(regs)); if (!cpumask_test_cpu(cpu, &wd_cpus_enabled)) return 0; diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c index b906d28f74fd4..35f5f33f5777e 100644 --- a/arch/powerpc/perf/core-book3s.c +++ b/arch/powerpc/perf/core-book3s.c @@ -2483,7 +2483,7 @@ static void __perf_event_interrupt(struct pt_regs *regs) * will trigger a PMI after waking up from idle. Since counter values are _not_ * saved/restored in idle path, can lead to below "Can't find PMC" message. */ - if (unlikely(!found) && !arch_irq_disabled_regs(regs)) + if (unlikely(!found) && !regs_irqs_disabled(regs)) printk_ratelimited(KERN_WARNING "Can't find PMC that caused IRQ\n"); /* From patchwork Mon Apr 28 15:22:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078428 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=Fv4RO+s6; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8104-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmRzt44qkz1yMg for ; Tue, 29 Apr 2025 01:23:38 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS0B6mPNz307q; Tue, 29 Apr 2025 01:23:54 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853834; cv=none; b=SjIyXHzSWazE8fJ8PKbwNsUA/i3JtQKE5JCRDxDHvJmY5X9jWBDescqp2zKNy4E2d5Zd3mN1ofzDM+RZrZyi53MGIuOKf4+3HgTWG3521lAP1UR0hqKeQ9wTrnFQFmxnjoO7Ur6oDGhcvAmkMp195ClOqAGBLk6jDndMtPS0crUtkstISvyeZRzrScVDFwp4tlJH5hKmO2MDAGskQqrgAxpOU/dU70iZOv8kAONa0VgRyDpq/KdR30aFaMPT04EQ3hnUN4aF3iwqzYqqDOhrafAlix6Q61BSybq5lla8exPM4shstsP7e7b42QEp+01Tf9Zpayt8RLgwz2Wc0bP1/w== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853834; c=relaxed/relaxed; bh=hOcX4nhokUj/XD7KKxzPC558HBJyVxV/1KUKt3QLAPA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=J+5PTGFfuHNIN3XSNYWT/VdH3iECbLJrEjKdkDrHVSmO2VnRoIwrK0LwfLeetU6bzUya2YW8diIgcTaybR7I7e1Nm+R5TbyoVb2SCPjr8AFKevAqwbu0+dH9DWBkvbxJzcpPfG/fVfvbjO6l//e0GGIP+H8UZVMol+oyH7YfTYxcel0TLXcFnm69y/gEYpZDL593+9UmrpHpswvZUoO1O/+x/tTPhcgaJ8WeHwdaEAvq5wnEm4BM7xW+uC2z2pvaWKvRDzpkGeU5MaZOVWNn2VhKs3W6fz5LtkIEkFUi+95njrOer68OTeVm7kX2nJzvAnUJspkUu+tfDkyanldpgg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=Fv4RO+s6; dkim-atps=neutral; spf=pass (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=Fv4RO+s6; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS0B1jMZz307K for ; Tue, 29 Apr 2025 01:23:54 +1000 (AEST) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SAIGer011888; Mon, 28 Apr 2025 15:23:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=hOcX4nhokUj/XD7KK xzPC558HBJyVxV/1KUKt3QLAPA=; b=Fv4RO+s6JWUF/wbZz18XwYZBlIp86B7rV Xxkz0hVBC4BrZKBw6ctPIYxrj8Ykv2wxvoAIfhgjx11QcW+7p8fSP6Ukd4dQAbKA av71ULy+ZevnBC+FxxH+suou5prE+xQINh2g4HdmY345omQNUxVJbqcz7VfsXG0F dCuHKIjbyJbCjONtbYnxN5uZ85yKFTwpWZin4JjN7gtUnme8xO/Zqdn73W8SzNKH 2xZUiA+/L+dafC5hS28dKfNLFV8GUjM8rXnuG9Okhp/ClkJbFxebyFh/wC6n+GH5 bppZ7lpM8nNDDMsbX1WeZD493bz5M7ZgB2Q2H/F4LD5RJJ3xJ3OEA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469v5km2a2-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:39 +0000 (GMT) Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SFNcZE009968; Mon, 28 Apr 2025 15:23:38 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469v5km2a0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:38 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SFGcaE000700; Mon, 28 Apr 2025 15:23:37 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 469atp71na-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:37 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFNXAp40698320 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:23:33 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 576A320043; Mon, 28 Apr 2025 15:23:33 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 51B0520040; Mon, 28 Apr 2025 15:23:27 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:27 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 2/6] powerpc: Prepare to build with genreic entry/exit framework Date: Mon, 28 Apr 2025 20:52:23 +0530 Message-ID: <20250428152225.66044-5-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: jdiVkyYOrWhumrnl6A6egDEBZc2SqGUr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyNCBTYWx0ZWRfX5L/iFVCtT24C WM5xsxO71ulqfyyuLPGCJ3o64992KI/gM8Ldzw87BQjTirj78uiIxHCaXILnQkxolyTdJ0RF8DC bibkkb7/1fyrx0OOd0xXDUYGxB0MdEmMQLOMP4yP6g6P/Hd/jjiUn3z/MEFThdwVB2j1YY3oQ8q OlhRfb3388m+WMb1Cp2rVplmwvi0u7/O5y+pE87s41z759fUVceetRRTB/Nqb+gxU6m9qnmXZFb Nl0Emx8zx6SIvr2SbTyiZjYhkzEioJ8lABPh+EWYaEIqBxEDE+g3+XshEjRc2H89fIxGxTg3p1n CG8P6D0hgRik0nWbS88EDhzboQwVmJseUusAhl1NRk9AHy80h7CMKmXZKEbseHkl2rrdqmdoRn9 izWmuRF6PN5q4aWfsU3B6OlPxGNFliuLwHIW46NjRZ9R5MfePAMEtATk58PlzZ++bfeQAPbQ X-Proofpoint-GUID: 6eKnF0yz9C1iX_p2ei_SOvCrNKHiZ-S2 X-Authority-Analysis: v=2.4 cv=DvxW+H/+ c=1 sm=1 tr=0 ts=680f9d7b cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=d-Ijs9cN_SKXjrDOqSQA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 mlxlogscore=748 phishscore=0 impostorscore=0 suspectscore=0 adultscore=0 clxscore=1015 priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280124 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,SPF_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 Enabling build with generic entry/exit framework for powerpc architecture requires few necessary steps. This patch just takes care of the preparation. Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/include/asm/entry-common.h | 11 +++++++++++ arch/powerpc/include/asm/stacktrace.h | 8 ++++++++ arch/powerpc/include/asm/syscall.h | 5 +++++ arch/powerpc/include/asm/thread_info.h | 1 + 4 files changed, 25 insertions(+) create mode 100644 arch/powerpc/include/asm/entry-common.h diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h new file mode 100644 index 0000000000000..e9e4220a1d225 --- /dev/null +++ b/arch/powerpc/include/asm/entry-common.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#ifndef _ASM_PPC_ENTRY_COMMON_H +#define _ASM_PPC_ENTRY_COMMON_H + +#ifdef CONFIG_GENERIC_ENTRY + +#include + +#endif /* CONFIG_GENERIC_ENTRY */ +#endif /* _ASM_PPC_ENTRY_COMMON_H */ diff --git a/arch/powerpc/include/asm/stacktrace.h b/arch/powerpc/include/asm/stacktrace.h index 6149b53b3bc8e..3f0a242468813 100644 --- a/arch/powerpc/include/asm/stacktrace.h +++ b/arch/powerpc/include/asm/stacktrace.h @@ -8,6 +8,14 @@ #ifndef _ASM_POWERPC_STACKTRACE_H #define _ASM_POWERPC_STACKTRACE_H +#include + void show_user_instructions(struct pt_regs *regs); +static inline bool on_thread_stack(void) +{ + return !(((unsigned long)(current->stack) ^ current_stack_pointer) + & ~(THREAD_SIZE -1)); +} + #endif /* _ASM_POWERPC_STACKTRACE_H */ diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h index 3dd36c5e334a9..0e94806c7bfe6 100644 --- a/arch/powerpc/include/asm/syscall.h +++ b/arch/powerpc/include/asm/syscall.h @@ -119,4 +119,9 @@ static inline int syscall_get_arch(struct task_struct *task) else return AUDIT_ARCH_PPC64; } + +static inline bool arch_syscall_is_vdso_sigreturn(struct pt_regs *regs) +{ + return false; +} #endif /* _ASM_SYSCALL_H */ diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 2785c7462ebf7..d0e87c9bae0b0 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -54,6 +54,7 @@ struct thread_info { int preempt_count; /* 0 => preemptable, <0 => BUG */ + unsigned long syscall_work; /* SYSCALL_WORK_ flags */ #ifdef CONFIG_SMP unsigned int cpu; #endif From patchwork Mon Apr 28 15:22:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078429 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=ekgcGIYI; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8105-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmS021pNQz1yMg for ; Tue, 29 Apr 2025 01:23:46 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS0M26Xxz307K; Tue, 29 Apr 2025 01:24:03 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853843; cv=none; b=RyBsJpZ03NbGJHHMAFsp4hk93zCOvg4sA35C268SZWuiLauq0wozVvlC6ePkcNn5B6ZdYOcX9qrqGR0PSeyCFEuH+cRjcCpnsjPYfG0hmaqRsHccM7h0KiCnCTpp0w2+wnsw7qnv7Dciev8YHabY7lAzCOiPOxkiO29mRJNCt8qMDh1cW0Er/Vwr3nT1fGjvAl4Eps1tNczgUCCl+8pZS3hoLY8PSUQO/EbdxcHCeThqaaet2JBxAjQX2x/UPBtkaj5/Ak8CQ2TloiDrrR4gJ9foSpheCDkZFdfRKXxASsmA/t8dcYz0gb+ZVshWetz9CU+gQuauGl8DdBBYwLyRAw== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853843; c=relaxed/relaxed; bh=G3vviyzZoJPlzkVRqzDxfPO64NMkELJCgK8bGue+90k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CPxYVWYe8S+dI/EwEtTSejOvPUu8CxZ37qSXw/zd+psrFovD+sQnl0Q4gHa3zXfoZDNxbKUnryYZ+z2/s20CCjmckwj8VftkJ5w8DkTpz2ubJqXv6dZeIoF1IGoWXHRyzrlnUUe4wBQ2VyHFaeSwQxK3l+wEREzLd39t/bxd07yyS4ZRpOcTCspyriQe+dk28pDOeoZqx8sk8Bon9e6c20unWdoZvMrxdkxr12TWdxyM7BqvSzvkVpsltYhm2uCQWRMQmF3NImwm/yipi5mHuzc3I4nOcUt5FLe+K9pq8g4355FeigMzOTCWj7C7S2GgHrd9nxMFO6j+pCHDmkJJ/g== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=ekgcGIYI; dkim-atps=neutral; spf=pass (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=ekgcGIYI; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS0L3p38z3064 for ; Tue, 29 Apr 2025 01:24:02 +1000 (AEST) Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SAee2o022814; Mon, 28 Apr 2025 15:23:47 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=G3vviyzZoJPlzkVRq zDxfPO64NMkELJCgK8bGue+90k=; b=ekgcGIYI7NGDFq1XMhUjgDfyiS6A1udlG iJXtCbWoVf9wV1oSw6gyYexYXvlaxdZjtxG6cO10/eIJjYXJuWku+fMPGf5Qtygz 1meDMpQFbn8r2eBYSziAvOjt3V2GgH8R8jAI9EmFpZmlk6K8G9PUR1st0lUPmpiN HiMcv/WZ+RthYfT0Vdg3TG/lUrUeosPJDbHqBiYTel0RsNHM0gcOGZii7xtD7D4M itY9Q0KROF4XOevsaPqVW0DyjZglUp/Qqi3l1WNCOnJkOpukRlGxm1NYm1a7Jpg/ 2SpY+/0JXnry2nsMDxc09Y5V4kkfinWN/agZNNJc33gRJbZIMBjsw== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46a84s1c0c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:46 +0000 (GMT) Received: from m0356516.ppops.net (m0356516.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SFNkiM026978; Mon, 28 Apr 2025 15:23:46 GMT Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46a84s1c08-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:46 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SEq30G000749; Mon, 28 Apr 2025 15:23:45 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 469atp71nt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:45 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFNfVP20840810 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:23:41 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5BA9C20043; Mon, 28 Apr 2025 15:23:41 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E4F3220040; Mon, 28 Apr 2025 15:23:34 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:34 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 3/6] powerpc: introduce arch_enter_from_user_mode Date: Mon, 28 Apr 2025 20:52:24 +0530 Message-ID: <20250428152225.66044-6-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=Mchsu4/f c=1 sm=1 tr=0 ts=680f9d82 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=lMC0XsYRYVtSgHH_D0QA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyNCBTYWx0ZWRfX8+2IiZ0zq6DQ Adcr4v7lMD8eOe7UzcN2V6K7MOscYBhimUvU/2XK50G2c5WR9i/wMY1sh1LfnwSy8va4s6Elp3o Ymud/t63ubi65G1Xkanrnhu5lrHpA0XvbaZ6adPJlVpuL7K1kIUIQF8av38KqHbPT/hlaFeYVwQ RgYdKPJfwyWGnufKul9sECNj3EHUGf2Yn5eQ6YlVo7oeUcLAlHj+KjHqQ1CvnLu7QYQDl4qLJtd 9ZOD/9A4g9HElBH7TDGgOwXH7qIj8hWWzZjEyinn36fX4TQbP3PnP6cJJrg4YW6ik0j/WXLzmsu aB2HH+uVsMiKKhVmId9GGmweuFJePuI5GTVsoytS8c3aCcUFDGoKT6ogwhvkeH4yRFf2QZiPvUs IRkQ5DyMaZOU4ZUFAdOMI+Nm5avkimSx71YObl9YwzdoZ01CWHnGc+YCniaADSprkalAHQ/n X-Proofpoint-ORIG-GUID: UUzKhatvjhDxIVTSZmfZxohN2ZMQU932 X-Proofpoint-GUID: VSCoDYLsWnIlMOiO7Vrm5EZvhsQOmqWX X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 impostorscore=0 bulkscore=0 malwarescore=0 spamscore=0 priorityscore=1501 adultscore=0 mlxscore=0 suspectscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280124 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_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 Introduce arch_enter_from_user_mode required by syscall entry. Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/include/asm/entry-common.h | 96 +++++++++++++++++++++++++ arch/powerpc/include/asm/interrupt.h | 23 ++++++ arch/powerpc/kernel/interrupt.c | 22 ------ 3 files changed, 119 insertions(+), 22 deletions(-) diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h index e9e4220a1d225..804f6d019ec95 100644 --- a/arch/powerpc/include/asm/entry-common.h +++ b/arch/powerpc/include/asm/entry-common.h @@ -5,7 +5,103 @@ #ifdef CONFIG_GENERIC_ENTRY +#include +#include #include +#include + +static __always_inline void arch_enter_from_user_mode(struct pt_regs *regs) +{ + if (IS_ENABLED(CONFIG_PPC_IRQ_SOFT_MASK_DEBUG)) + BUG_ON(irq_soft_mask_return() != IRQS_ALL_DISABLED); + + BUG_ON(regs_is_unrecoverable(regs)); + BUG_ON(!user_mode(regs)); + BUG_ON(regs_irqs_disabled(regs)); + +#ifdef CONFIG_PPC_PKEY + if (mmu_has_feature(MMU_FTR_PKEY)) { + unsigned long amr, iamr; + bool flush_needed = false; + /* + * When entering from userspace we mostly have the AMR/IAMR + * different from kernel default values. Hence don't compare. + */ + amr = mfspr(SPRN_AMR); + iamr = mfspr(SPRN_IAMR); + regs->amr = amr; + regs->iamr = iamr; + if (mmu_has_feature(MMU_FTR_KUAP)) { + mtspr(SPRN_AMR, AMR_KUAP_BLOCKED); + flush_needed = true; + } + if (mmu_has_feature(MMU_FTR_BOOK3S_KUEP)) { + mtspr(SPRN_IAMR, AMR_KUEP_BLOCKED); + flush_needed = true; + } + if (flush_needed) + isync(); + } else +#endif + kuap_assert_locked(); + + booke_restore_dbcr0(); + + account_cpu_user_entry(); + + account_stolen_time(); + + /* + * This is not required for the syscall exit path, but makes the + * stack frame look nicer. If this was initialised in the first stack + * frame, or if the unwinder was taught the first stack frame always + * returns to user with IRQS_ENABLED, this store could be avoided! + */ + irq_soft_mask_regs_set_state(regs, IRQS_ENABLED); + + /* + * If system call is called with TM active, set _TIF_RESTOREALL to + * prevent RFSCV being used to return to userspace, because POWER9 + * TM implementation has problems with this instruction returning to + * transactional state. Final register values are not relevant because + * the transaction will be aborted upon return anyway. Or in the case + * of unsupported_scv SIGILL fault, the return state does not much + * matter because it's an edge case. + */ + if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) && + unlikely(MSR_TM_TRANSACTIONAL(regs->msr))) + set_bits(_TIF_RESTOREALL, ¤t_thread_info()->flags); + + /* + * If the system call was made with a transaction active, doom it and + * return without performing the system call. Unless it was an + * unsupported scv vector, in which case it's treated like an illegal + * instruction. + */ +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM + if (unlikely(MSR_TM_TRANSACTIONAL(regs->msr)) && + !trap_is_unsupported_scv(regs)) { + /* Enable TM in the kernel, and disable EE (for scv) */ + hard_irq_disable(); + mtmsr(mfmsr() | MSR_TM); + + /* tabort, this dooms the transaction, nothing else */ + asm volatile(".long 0x7c00071d | ((%0) << 16)" + :: "r"(TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)); + + /* + * Userspace will never see the return value. Execution will + * resume after the tbegin. of the aborted transaction with the + * checkpointed register state. A context switch could occur + * or signal delivered to the process before resuming the + * doomed transaction context, but that should all be handled + * as expected. + */ + return; + } +#endif // CONFIG_PPC_TRANSACTIONAL_MEM +} +#define arch_enter_from_user_mode arch_enter_from_user_mode #endif /* CONFIG_GENERIC_ENTRY */ #endif /* _ASM_PPC_ENTRY_COMMON_H */ diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h index 56bc8113b8cde..6edf064a0fea2 100644 --- a/arch/powerpc/include/asm/interrupt.h +++ b/arch/powerpc/include/asm/interrupt.h @@ -138,6 +138,29 @@ static inline void nap_adjust_return(struct pt_regs *regs) #endif } +static inline void booke_load_dbcr0(void) +{ +#ifdef CONFIG_PPC_ADV_DEBUG_REGS + unsigned long dbcr0 = current->thread.debug.dbcr0; + + if (likely(!(dbcr0 & DBCR0_IDM))) + return; + + /* + * Check to see if the dbcr0 register is set up to debug. + * Use the internal debug mode bit to do this. + */ + mtmsr(mfmsr() & ~MSR_DE); + if (IS_ENABLED(CONFIG_PPC32)) { + isync(); + global_dbcr0[smp_processor_id()] = mfspr(SPRN_DBCR0); + } + mtspr(SPRN_DBCR0, dbcr0); + mtspr(SPRN_DBSR, -1); +#endif +} + + static inline void booke_restore_dbcr0(void) { #ifdef CONFIG_PPC_ADV_DEBUG_REGS diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index f656192f075fb..44afc65e0e0e0 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -74,28 +74,6 @@ static notrace __always_inline bool prep_irq_for_enabled_exit(bool restartable) return true; } -static notrace void booke_load_dbcr0(void) -{ -#ifdef CONFIG_PPC_ADV_DEBUG_REGS - unsigned long dbcr0 = current->thread.debug.dbcr0; - - if (likely(!(dbcr0 & DBCR0_IDM))) - return; - - /* - * Check to see if the dbcr0 register is set up to debug. - * Use the internal debug mode bit to do this. - */ - mtmsr(mfmsr() & ~MSR_DE); - if (IS_ENABLED(CONFIG_PPC32)) { - isync(); - global_dbcr0[smp_processor_id()] = mfspr(SPRN_DBCR0); - } - mtspr(SPRN_DBCR0, dbcr0); - mtspr(SPRN_DBSR, -1); -#endif -} - static notrace void check_return_regs_valid(struct pt_regs *regs) { #ifdef CONFIG_PPC_BOOK3S_64 From patchwork Mon Apr 28 15:22:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078430 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=PFZphABG; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8106-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmS0B2XHwz1yMg for ; Tue, 29 Apr 2025 01:23:54 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS0W2LBNz30Nl; Tue, 29 Apr 2025 01:24:11 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853851; cv=none; b=eaMYt2m+SPRiOvA7JGa6cx8C1r+EmvHSkjWJW9sXhvGBWa3j6zU2BUqFqX8e6JsqcEhZ9QeKWbAKouhc/A+haqS6sOSPGjJo+xHDQo4lT7w5u32eyc0fE6jkXhux9heofeK71YYBhb1PWi4pG6mhcbe6G9Tom5d8/CV8EYEmYuM9hwMEboAtP1tBVQLsSzhl+hbNcyIa3rLT4w0xk+IZth3wD8TFpxjX7SXp4Q1d7X8gGzr91VRwp0ORzquTnIgnuT3L80YSLRcBmuQBaZKBYo8OVdvIMrRf4zYH0K26Y/sOypHsB/iNiNo8ubn8fhhXUalR4yW8YehIeLztz85pMA== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853851; c=relaxed/relaxed; bh=fwHaxczBR7yQD6/R7nlEMeprDyL/dgd7UkBYm4zCmSs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ClBZUvwl80pOpVuhz7njD+sgMNaq2jwUP413my48AvY/6x4pDWYGVSNk7hYxkioQwIDYTGpUdVDNNsVbk0Ke5ZJwVI7R++llGLrhjiynxKZHLhsKcpQg8B4m0jIsn28xeqbgYa/UPTyTbJVvYBikRkhDMQU/VwZ9rJQN23Eod7yRjsDtGdivg1o4oAFdEivxAPk1KPXI3RBOZEKDKL9fFoH5k4FZ/U3PxW7/4lUXZCEEdOHyAHPsaXHjCf+xOe21TKkMdBdKwLvbLzU4P7z1TdXU/Tz2jYTpdgZ5918Zeny/ttrIBHWuAoLU06FThUVPkI4PQmlPogSxYKilB9aY1g== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=PFZphABG; dkim-atps=neutral; spf=pass (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=PFZphABG; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS0V3dwBz3064 for ; Tue, 29 Apr 2025 01:24:10 +1000 (AEST) Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SCuQ5X001912; Mon, 28 Apr 2025 15:23:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=fwHaxczBR7yQD6/R7 nlEMeprDyL/dgd7UkBYm4zCmSs=; b=PFZphABGPhOdbuAfSId0VtvZaDZ9Rmx5+ BjXhCbowZjcQGURoOvlqstm5+sQCHVCPYWjOV7OtoZ6qpkob3C2C8uZc42Zuu9BF mn5cFHzQ17pu1D2qKYYbY82USvFhRFex+7H4TZ9eJaRhNVSisywb7aBe8iZMkXAI xrHLkGtq2GE9Qrk8ZDfaQ7wMjNcrQ0uMZaPeS5h5rF+ebcwqAl5jQW24z9NeZeij psrlHfQSQySixhPlAilYUDRwoze0zCaclf0rbQaGgKRCkUWdwlwdgOijmMe8pbgD 4La1whAcLVPIP5cDOJOQepkuqSaOKmBgyhREv9dfq6Lyhi5uximLQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469xj0unem-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:54 +0000 (GMT) Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SFE18H015303; Mon, 28 Apr 2025 15:23:53 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469xj0uneg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:53 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SCnbPu008518; Mon, 28 Apr 2025 15:23:52 GMT Received: from smtprelay06.fra02v.mail.ibm.com ([9.218.2.230]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 469ch2xq93-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:23:52 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay06.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFNmG020971838 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:23:48 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BA50A20040; Mon, 28 Apr 2025 15:23:48 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D822620043; Mon, 28 Apr 2025 15:23:42 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:42 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 4/6] powerpc: Add flag in paca for register restore state Date: Mon, 28 Apr 2025 20:52:25 +0530 Message-ID: <20250428152225.66044-7-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: O5prXhxbgXtqtZqsDc8dN7eMM6GyMqI7 X-Authority-Analysis: v=2.4 cv=GJYIEvNK c=1 sm=1 tr=0 ts=680f9d8a cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=Kj5IoVDe1b0y73Rl6aEA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyNCBTYWx0ZWRfX3z+ZrzZTIW9M 0SDDaMiu35cTYgSpqCmtsVuG3W5eho6YoeLFf9sPMzNfDuHUH0zAHzR5DEgqhdPUldsoB2qKl2J IWp3evivlyzAbWlyEx8rk4shVVtocD6yVuwNkV0PLjc3Q5U6D3q4t7R7wSLxfAaWsk5Bw+tjXd7 5damFaTR4KNq8F6OPKSjstBv0valRMsRFCAJ3Ilma7kmKlRBeU/EL73fTXkCyn50FyaH7y1UcKq yXAFCv30/Cp6cSZ31HmL8sA/kHJmvtFac53ZE+idA9OR7eU6adwwpAT0cyavPjcmaaDmnzSxV2/ D+UxMtfxNeJZTrgeGM2x3nbBDT+io3UnuhkH3p2IQNgkHLfp6Wz45ok+fHF0uLIvjPD2w7T2iJJ GI7nuv7u0e0IYdYbEiRv/ZJeVL3lTs/JwIA6srnqJ9jD+DV2/dvkmrMApElne7SQWquOwfzM X-Proofpoint-ORIG-GUID: Nu1XezD8osXlo9WblDfB_6U8i7CFyL2a X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 mlxscore=0 phishscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 adultscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 mlxlogscore=898 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280124 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_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 In case of signal being processed we want to restore the GPRS. To save the state of whether we need to restore the registers or not a flag is introduced so that we can save the state for that cpu in case we want to save the register state. Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/include/asm/paca.h | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h index 1d58da9467396..215cafd64d8f5 100644 --- a/arch/powerpc/include/asm/paca.h +++ b/arch/powerpc/include/asm/paca.h @@ -174,6 +174,7 @@ struct paca_struct { u8 irq_soft_mask; /* mask for irq soft masking */ u8 irq_happened; /* irq happened while soft-disabled */ u8 irq_work_pending; /* IRQ_WORK interrupt while soft-disable */ + u8 generic_fw_flags; /* Flags for generic framework */ #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE u8 pmcregs_in_use; /* pseries puts this in lppaca */ #endif From patchwork Mon Apr 28 15:22:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078431 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=GppPbP7m; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8107-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmS0L6pRKz1yMg for ; Tue, 29 Apr 2025 01:24:02 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS0g6spjz30MZ; Tue, 29 Apr 2025 01:24:19 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.156.1 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853859; cv=none; b=E/u08zjM/zvcyZnB7WLZYI8Bya6FgWxE/uDrDhReEM96Ug6CkbibbA28Eniq/VB8JO1GVr/W0CTfF5kd+bHrZvTDvgmXvBsp+45v3qnhFrItLdqGtyzNfJelWOIiKq+Jlp04Ck+efsfUPmOYwocPfO9nwxvZSAyQoXZfPuqPZYLT8IGZVEEoL9K7BYqxKa25+6yanltKs+Z7Uti/jHAODm1H/pbg7bhg8KbjmRTNpVBrZzc/sUn4kMPJnqzkI817Ve2fG0ygWADblkoC80kXxafo1HZFD6zXAJHCqoBtehqnFvQkmV9NV4Zstukj+AynJDNgoYdGoLIoASjfAkPE/Q== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853859; c=relaxed/relaxed; bh=rxz4PIIKNL79mlTmcsnS8rvNKbTYb5T5PL+4JOqG8UE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cplMmkjLeXZJMVkA4sSiaQWAQh9Lq9ZahW+HBX/aX22NbWKRsPpfwEfUA2lLDK+ihmiU0Q4ARTueuYoO/PAbxto1XsVO6+viwFrBLDs0O2GIGkRIjdy0CHtjOSDcX4A4h+6ScD8FhkbAJsRCLzVKpiXYnEOHlLnKvU2TyJxd1n7aoRfpc/BmssXr58zCsnqhrkAXmOYnriSt4kUZ340VxIEfWcFd9ifjRDIOvhZYgpsGHd2hEQZq8ewiVH1SqfSsYXg0FUEbYMemPf+k3qUgPMuvxxeDRMNp+KvreqGp9igLG0a7H7kHlrrCOdN2xNhzi8AZR4vKBPoyw8kTYGEmjw== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=GppPbP7m; dkim-atps=neutral; spf=pass (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=GppPbP7m; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS0g1gT4z3064 for ; Tue, 29 Apr 2025 01:24:19 +1000 (AEST) Received: from pps.filterd (m0353729.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SAenSd011884; Mon, 28 Apr 2025 15:24:02 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=rxz4PIIKNL79mlTmc snS8rvNKbTYb5T5PL+4JOqG8UE=; b=GppPbP7mLsyqYpFwEjZQd43HEUwARklT9 UcWweegYCRawo0jO7VMcwdwooo6kAfhuTgKtUPh+FpnZDxJXxXZKJympkAuP4LAE RwaI/aPobV8fPRzOeL7cOcOutt8DlYoF5YpSdsjPs+Ok3fHH8Oc+QCYB96j8Kgh/ seBNH9yggUiANyBq7l2BNyMd0/i+48KXxKD149IPr49rNIOvfbSt015jt8lwb5IR ZYBkEL76kYXsUq9EsXmQLRMsrnHT9YFc797rGqJto29gfMZ127MveRJPmXev7i3e fYH6DH/Dpzof0DtN9nqt/4BizWw4s7vKh0ZLVoUaSkWmE+CnlPzCA== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469v5km2be-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:01 +0000 (GMT) Received: from m0353729.ppops.net (m0353729.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SFLV4n003969; Mon, 28 Apr 2025 15:24:01 GMT Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469v5km2ba-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:01 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SCFEjJ024634; Mon, 28 Apr 2025 15:24:00 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 469c1kxsup-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:00 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFNunM50004238 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:23:56 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 60FA820043; Mon, 28 Apr 2025 15:23:56 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B57C720040; Mon, 28 Apr 2025 15:23:50 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:50 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 5/6] powerpc: Introduce syscall exit arch functions Date: Mon, 28 Apr 2025 20:52:26 +0530 Message-ID: <20250428152225.66044-8-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: wCDTmAvoEMfSPF6shKYQZ5OQ6brX7n3T X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyNCBTYWx0ZWRfXz6sIio0O9DgU PH5M8VL013H1mD1SZqs9No3xs6bFRBMnt2w7sd6P6T9rK4Lj3QUb1WnLsKuDDOWqngiVGJOcGS4 BMEalvKYKUETKtoD+g9Xa9oG9chgEzTLK9pPHHF99ZQzrf+LsSTAwFm86aVQwcqWrH40EaLtgmp dZbdFWwCOzydjnXk3hMd9LwdPFsE07ENamC2TNdkmf8OAYadgbcVdXPwvmibPj9PMJvaG2IjFZ2 nNCn3IBS/0qvkKc312wSozYjD90e8p0YMzEwhJUKh6BcemokIPGjKMAxgr10U8NNTuvSOT5ERnP BpdkL8Ds0kxPq2SoF+4XBBSiiSbNNtHBAVhrqrF8SmHMXehaWkzaRzh4LEtoNerwi07QZV9ik3j pCK7c7Jii8c/GuPCBtQlnpz023BUygU2qFDwDrmEdaTJnQYalkRpTJd6RBEAtTWPW+SCqqG4 X-Proofpoint-GUID: i_dNbm4CnI6Zr80TVTeMx88xPyHsLP01 X-Authority-Analysis: v=2.4 cv=DvxW+H/+ c=1 sm=1 tr=0 ts=680f9d91 cx=c_pps a=AfN7/Ok6k8XGzOShvHwTGQ==:117 a=AfN7/Ok6k8XGzOShvHwTGQ==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=azVfos6laG1Ide8r4ucA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 spamscore=0 mlxlogscore=999 phishscore=0 impostorscore=0 suspectscore=0 adultscore=0 clxscore=1015 priorityscore=1501 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280124 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,SPF_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 Introducing following functions for syscall exit - arch_exit_to_user_mode_work - arch_exit_to_user_mode_work_prepare Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/include/asm/entry-common.h | 51 +++++++++++++++ arch/powerpc/include/asm/interrupt.h | 82 +++++++++++++++++++++++++ arch/powerpc/kernel/interrupt.c | 81 ------------------------ arch/powerpc/kernel/signal.c | 14 +++++ 4 files changed, 147 insertions(+), 81 deletions(-) diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h index 804f6d019ec95..04db70afdd820 100644 --- a/arch/powerpc/include/asm/entry-common.h +++ b/arch/powerpc/include/asm/entry-common.h @@ -8,8 +8,14 @@ #include #include #include +#include #include +/* + * flags for paca->generic_fw_flags + */ +#define GFW_RESTORE_ALL 0x01 + static __always_inline void arch_enter_from_user_mode(struct pt_regs *regs) { if (IS_ENABLED(CONFIG_PPC_IRQ_SOFT_MASK_DEBUG)) @@ -101,7 +107,52 @@ static __always_inline void arch_enter_from_user_mode(struct pt_regs *regs) } #endif // CONFIG_PPC_TRANSACTIONAL_MEM } + #define arch_enter_from_user_mode arch_enter_from_user_mode +static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs, + unsigned long ti_work) +{ + unsigned long mathflags; + + if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && IS_ENABLED(CONFIG_PPC_FPU)) { + if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) && + unlikely((ti_work & _TIF_RESTORE_TM))) { + restore_tm_state(regs); + } else { + mathflags = MSR_FP; + + if (cpu_has_feature(CPU_FTR_VSX)) + mathflags |= MSR_VEC | MSR_VSX; + else if (cpu_has_feature(CPU_FTR_ALTIVEC)) + mathflags |= MSR_VEC; + + /* + * If userspace MSR has all available FP bits set, + * then they are live and no need to restore. If not, + * it means the regs were given up and restore_math + * may decide to restore them (to avoid taking an FP + * fault). + */ + if ((regs->msr & mathflags) != mathflags) + restore_math(regs); + } + } + + check_return_regs_valid(regs); +#ifdef CONFIG_PPC_TRANSACTIONAL_MEM + local_paca->tm_scratch = regs->msr; +#endif +} +#define arch_exit_to_user_mode_prepare arch_exit_to_user_mode_prepare + +static __always_inline void arch_exit_to_user_mode(void) +{ + booke_load_dbcr0(); + + account_cpu_user_exit(); +} +#define arch_exit_to_user_mode arch_exit_to_user_mode + #endif /* CONFIG_GENERIC_ENTRY */ #endif /* _ASM_PPC_ENTRY_COMMON_H */ diff --git a/arch/powerpc/include/asm/interrupt.h b/arch/powerpc/include/asm/interrupt.h index 6edf064a0fea2..c6ab286a723f2 100644 --- a/arch/powerpc/include/asm/interrupt.h +++ b/arch/powerpc/include/asm/interrupt.h @@ -68,6 +68,8 @@ #include #include +#include /* for show_regs */ + #include #include #include @@ -173,6 +175,86 @@ static inline void booke_restore_dbcr0(void) #endif } +static inline void check_return_regs_valid(struct pt_regs *regs) +{ +#ifdef CONFIG_PPC_BOOK3S_64 + unsigned long trap, srr0, srr1; + static bool warned; + u8 *validp; + char *h; + + if (trap_is_scv(regs)) + return; + + trap = TRAP(regs); + // EE in HV mode sets HSRRs like 0xea0 + if (cpu_has_feature(CPU_FTR_HVMODE) && trap == INTERRUPT_EXTERNAL) + trap = 0xea0; + + switch (trap) { + case 0x980: + case INTERRUPT_H_DATA_STORAGE: + case 0xe20: + case 0xe40: + case INTERRUPT_HMI: + case 0xe80: + case 0xea0: + case INTERRUPT_H_FAC_UNAVAIL: + case 0x1200: + case 0x1500: + case 0x1600: + case 0x1800: + validp = &local_paca->hsrr_valid; + if (!READ_ONCE(*validp)) + return; + + srr0 = mfspr(SPRN_HSRR0); + srr1 = mfspr(SPRN_HSRR1); + h = "H"; + + break; + default: + validp = &local_paca->srr_valid; + if (!READ_ONCE(*validp)) + return; + + srr0 = mfspr(SPRN_SRR0); + srr1 = mfspr(SPRN_SRR1); + h = ""; + break; + } + + if (srr0 == regs->nip && srr1 == regs->msr) + return; + + /* + * A NMI / soft-NMI interrupt may have come in after we found + * srr_valid and before the SRRs are loaded. The interrupt then + * comes in and clobbers SRRs and clears srr_valid. Then we load + * the SRRs here and test them above and find they don't match. + * + * Test validity again after that, to catch such false positives. + * + * This test in general will have some window for false negatives + * and may not catch and fix all such cases if an NMI comes in + * later and clobbers SRRs without clearing srr_valid, but hopefully + * such things will get caught most of the time, statistically + * enough to be able to get a warning out. + */ + if (!READ_ONCE(*validp)) + return; + + if (!data_race(warned)) { + data_race(warned = true); + printk("%sSRR0 was: %lx should be: %lx\n", h, srr0, regs->nip); + printk("%sSRR1 was: %lx should be: %lx\n", h, srr1, regs->msr); + show_regs(regs); + } + + WRITE_ONCE(*validp, 0); /* fixup */ +#endif +} + static inline void interrupt_enter_prepare(struct pt_regs *regs) { #ifdef CONFIG_PPC64 diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 44afc65e0e0e0..7f31f3fb9c1d8 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -4,7 +4,6 @@ #include #include #include -#include /* for show_regs */ #include #include @@ -74,86 +73,6 @@ static notrace __always_inline bool prep_irq_for_enabled_exit(bool restartable) return true; } -static notrace void check_return_regs_valid(struct pt_regs *regs) -{ -#ifdef CONFIG_PPC_BOOK3S_64 - unsigned long trap, srr0, srr1; - static bool warned; - u8 *validp; - char *h; - - if (trap_is_scv(regs)) - return; - - trap = TRAP(regs); - // EE in HV mode sets HSRRs like 0xea0 - if (cpu_has_feature(CPU_FTR_HVMODE) && trap == INTERRUPT_EXTERNAL) - trap = 0xea0; - - switch (trap) { - case 0x980: - case INTERRUPT_H_DATA_STORAGE: - case 0xe20: - case 0xe40: - case INTERRUPT_HMI: - case 0xe80: - case 0xea0: - case INTERRUPT_H_FAC_UNAVAIL: - case 0x1200: - case 0x1500: - case 0x1600: - case 0x1800: - validp = &local_paca->hsrr_valid; - if (!READ_ONCE(*validp)) - return; - - srr0 = mfspr(SPRN_HSRR0); - srr1 = mfspr(SPRN_HSRR1); - h = "H"; - - break; - default: - validp = &local_paca->srr_valid; - if (!READ_ONCE(*validp)) - return; - - srr0 = mfspr(SPRN_SRR0); - srr1 = mfspr(SPRN_SRR1); - h = ""; - break; - } - - if (srr0 == regs->nip && srr1 == regs->msr) - return; - - /* - * A NMI / soft-NMI interrupt may have come in after we found - * srr_valid and before the SRRs are loaded. The interrupt then - * comes in and clobbers SRRs and clears srr_valid. Then we load - * the SRRs here and test them above and find they don't match. - * - * Test validity again after that, to catch such false positives. - * - * This test in general will have some window for false negatives - * and may not catch and fix all such cases if an NMI comes in - * later and clobbers SRRs without clearing srr_valid, but hopefully - * such things will get caught most of the time, statistically - * enough to be able to get a warning out. - */ - if (!READ_ONCE(*validp)) - return; - - if (!data_race(warned)) { - data_race(warned = true); - printk("%sSRR0 was: %lx should be: %lx\n", h, srr0, regs->nip); - printk("%sSRR1 was: %lx should be: %lx\n", h, srr1, regs->msr); - show_regs(regs); - } - - WRITE_ONCE(*validp, 0); /* fixup */ -#endif -} - static notrace unsigned long interrupt_exit_user_prepare_main(unsigned long ret, struct pt_regs *regs) { diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index aa17e62f37547..719930cf4ae1f 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c @@ -22,6 +22,11 @@ #include "signal.h" +/* This will be removed */ +#ifdef CONFIG_GENERIC_ENTRY +#include +#endif /* CONFIG_GENERIC_ENTRY */ + #ifdef CONFIG_VSX unsigned long copy_fpr_to_user(void __user *to, struct task_struct *task) @@ -368,3 +373,12 @@ void signal_fault(struct task_struct *tsk, struct pt_regs *regs, printk_ratelimited(regs->msr & MSR_64BIT ? fm64 : fm32, tsk->comm, task_pid_nr(tsk), where, ptr, regs->nip, regs->link); } + +#ifdef CONFIG_GENERIC_ENTRY +void arch_do_signal_or_restart(struct pt_regs *regs) +{ + BUG_ON(regs != current->thread.regs); + local_paca->generic_fw_flags |= GFW_RESTORE_ALL; + do_signal(current); +} +#endif /* CONFIG_GENERIC_ENTRY */ From patchwork Mon Apr 28 15:22:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mukesh Kumar Chaurasiya X-Patchwork-Id: 2078432 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=WPLDFXH8; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=linuxppc-dev+bounces-8108-incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=patchwork.ozlabs.org) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4ZmS0T5yDWz1yMg for ; Tue, 29 Apr 2025 01:24:09 +1000 (AEST) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4ZmS0p5ynvz3069; Tue, 29 Apr 2025 01:24:26 +1000 (AEST) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=148.163.158.5 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853866; cv=none; b=Pf9Ws0ihCoc16PT6CsPfBkJ+R8txHXLzk1cNuxq70I3rcRAxw2IuHE1zwihSsK+tjEx9NrfWGH3cN6kC3bKKLYV8Ube1EsAIAEuIkDp8nAwqNHdGAA6r605dWeNUzrfms0eRS6HUC5mwhlb8QofaMT3Jk8btyDdKHswYE4ij6UXgYJJi/mJnEHEXaiRzkU80GI84uDyHxRUx9a/ZCqeQMb6EvIPlK5rICbP9MPkYTJ/D7p/UibhqjyU5ng1vYwMNwnHLu8tF6BYemXRflSS9IL5SsT2pGrwyZawWs0Ncze5jbbJMAoB8SyKLGUyheBXFt9aX7spOI3OET8lugpFKeQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1745853866; c=relaxed/relaxed; bh=8/Api+2OMtx/nZuwE2kMegJspInkD+IYzCWzd4g5KLY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kRPtAmBWlQDK6hT/UQ0gvDw5y8M9Bbvc913x+7TO67BfIKxpZaR5yYdgLNYK1nhUE9qjvDzwF2W+uFkn/4ITAOY1cGPfiNDdZjtgLIBy90gQO4yCkqyNskXBtQ6lCqM+zaJ8hKvBTqc2b4n9xYmlMYwSsQKj5MiOq7csr4mJroDJMNMsRrr462YndgfNcF+0FaENJuImoWEnRkr6//NVEaQ5zEL/vzdHIzQpxnxBXyGurYvPESzElLor3mwMxc/zPvOo4f/IwVB1kRGd57VP6Q6Fq3rN4KBTM+tjaufbW8w5QPNK8S80vYoZNs0jffSTUXX+d4QPlijbi/eV/1Le+A== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=WPLDFXH8; dkim-atps=neutral; spf=pass (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) smtp.mailfrom=linux.ibm.com Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=linux.ibm.com Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=ibm.com header.i=@ibm.com header.a=rsa-sha256 header.s=pp1 header.b=WPLDFXH8; dkim-atps=neutral Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=linux.ibm.com (client-ip=148.163.158.5; helo=mx0b-001b2d01.pphosted.com; envelope-from=mchauras@linux.ibm.com; receiver=lists.ozlabs.org) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4ZmS0n6wZ5z3064 for ; Tue, 29 Apr 2025 01:24:25 +1000 (AEST) Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 53SBkKJI000816; Mon, 28 Apr 2025 15:24:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=8/Api+2OMtx/nZuwE 2kMegJspInkD+IYzCWzd4g5KLY=; b=WPLDFXH8HJMrZtblOMIrKFy/my3dy5DMv IHVW7uEDELetvHnA7PZRaGzIWm6CDDkbE09c3jw1iAsZ2xF/8T6HZWmOqQKe7T+m Y1ue+PI9rFj+E/SqSiEzqwgZ/uoqkCl35orwXyRZ1gzPfUePW44DVYJB7ekNa5Ik DfKK9tn57mcUDYZ+DzLmNuan4F3/YgjPoZZlhRp0aU6EM7jm8zryqeKRFBcCR5wl snE7M0bgJFCVhHiYPzfIrW+S4zq0cR/iPBwP79yhxkeVEf2RTcArAUijsW/EIODx OFYeoctZcbVbwtYpRZq3JMj+kvn51wKJvgq8fL++ZX+YvXXSWOI0Q== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469xj0ungc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:09 +0000 (GMT) Received: from m0353725.ppops.net (m0353725.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 53SEvcBd003149; Mon, 28 Apr 2025 15:24:08 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 469xj0ung7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:08 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 53SCdL1p008494; Mon, 28 Apr 2025 15:24:07 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 469ch2xqag-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 28 Apr 2025 15:24:07 +0000 Received: from smtpav05.fra02v.mail.ibm.com (smtpav05.fra02v.mail.ibm.com [10.20.54.104]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 53SFO3W242009028 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 28 Apr 2025 15:24:04 GMT Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id CD8C720043; Mon, 28 Apr 2025 15:24:03 +0000 (GMT) Received: from smtpav05.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 6161B2004B; Mon, 28 Apr 2025 15:23:58 +0000 (GMT) Received: from li-e1dea04c-3555-11b2-a85c-f57333552245.ibm.com.com (unknown [9.39.30.54]) by smtpav05.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 28 Apr 2025 15:23:58 +0000 (GMT) From: Mukesh Kumar Chaurasiya To: linux-kernel@vger.kernel.org Cc: maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, naveen@kernel.org, neeraj.upadhyay@kernel.org, vschneid@redhat.com, tglx@linutronix.de, frederic@kernel.org, ankur.a.arora@oracle.com, sshegde@linux.ibm.com, bigeasy@linutronix.de, kees@kernel.org, oleg@redhat.com, peterz@infradead.org, tzimmermann@suse.de, namcao@linutronix.de, kan.liang@linux.intel.com, mcgrof@kernel.org, rppt@kernel.org, atrajeev@linux.vnet.ibm.com, anjalik@linux.ibm.com, coltonlewis@google.com, linuxppc-dev@lists.ozlabs.org, Mukesh Kumar Chaurasiya Subject: [RFC V1 6/6] powerpc: Enable Generic Entry/Exit for syscalls. Date: Mon, 28 Apr 2025 20:52:27 +0530 Message-ID: <20250428152225.66044-9-mchauras@linux.ibm.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250428152225.66044-2-mchauras@linux.ibm.com> References: <20250428152225.66044-2-mchauras@linux.ibm.com> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: Precedence: list MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: tJl2N2_QK2gJWf8_gVUV2RA_lrKIpjEm X-Authority-Analysis: v=2.4 cv=GJYIEvNK c=1 sm=1 tr=0 ts=680f9d99 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=XR8D0OoHHMoA:10 a=VnNF1IyMAAAA:8 a=LzA8jWKYm74TcKafoC0A:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNDI4MDEyNCBTYWx0ZWRfX76g41aFOb3pP 0P1V79qtw61mSwblayq/irzmG2nPGoG3b6FxQNkdSAryQcqCkopPSWMjom4gfmewPkHPyuWc9Zr rx27Ozi5BO3SGoQsMMzjHlwDrasM9uK0uPfBB9gC1Ek2xDUaebc0qtWa9W/nAcdovCYFODOtPFx mONPxZ+CV8Ds8BonUaTMWEU/66JXP7FNS2j9+qdmHIQrP3gQJ1Mbtzh6QdWSRaIdWGmlL2Ytna1 LZcleSjZ+z64agzzseNxvCjv+GWDzV8h08xQnbhENqExuAZTPvpSVB/YNdvBbgoreKBbxcAb5oK Bif+xs+ilYalo0LnZU5SlaE5fmP3/6rW1YOHY3tW9AUg9MlrJeUplKJrpdS+OTR7oXCcpxPEDU4 UH0hHhS9vMOCRuOw+D2Y/GWkldVKV/EHcD96Ytto+/Xtb5F1LEjI3zTyRZVcbPcXCmmNC8sM X-Proofpoint-ORIG-GUID: 48zTPVvQJsQ7p7GiyUwX8BIe8tCUItR_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-04-28_05,2025-04-24_02,2025-02-21_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 spamscore=0 mlxscore=0 phishscore=0 impostorscore=0 suspectscore=0 priorityscore=1501 adultscore=0 clxscore=1015 bulkscore=0 lowpriorityscore=0 mlxlogscore=927 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2504070000 definitions=main-2504280124 X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_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 Enable the syscall entry and exit path from generic framework. Signed-off-by: Mukesh Kumar Chaurasiya --- arch/powerpc/Kconfig | 1 + arch/powerpc/kernel/interrupt.c | 46 +++++++---- arch/powerpc/kernel/ptrace/ptrace.c | 103 ------------------------ arch/powerpc/kernel/signal.c | 8 +- arch/powerpc/kernel/syscall.c | 117 +--------------------------- 5 files changed, 38 insertions(+), 237 deletions(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 6722625a406a0..45b70ccf7c89e 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -202,6 +202,7 @@ config PPC select GENERIC_CPU_AUTOPROBE select GENERIC_CPU_VULNERABILITIES if PPC_BARRIER_NOSPEC select GENERIC_EARLY_IOREMAP + select GENERIC_ENTRY select GENERIC_GETTIMEOFDAY select GENERIC_IDLE_POLL_SETUP select GENERIC_IOREMAP diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 7f31f3fb9c1d8..8731064631de0 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include +#include #include #include #include @@ -163,15 +164,10 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, unsigned long ret = 0; bool is_not_scv = !IS_ENABLED(CONFIG_PPC_BOOK3S_64) || !scv; - CT_WARN_ON(ct_state() == CT_STATE_USER); - kuap_assert_locked(); regs->result = r3; - /* Check whether the syscall is issued inside a restartable sequence */ - rseq_syscall(regs); - ti_flags = read_thread_flags(); if (unlikely(r3 >= (unsigned long)-MAX_ERRNO) && is_not_scv) { @@ -192,13 +188,27 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, } if (unlikely(ti_flags & _TIF_SYSCALL_DOTRACE)) { - do_syscall_trace_leave(regs); ret |= _TIF_RESTOREALL; } - local_irq_disable(); - ret = interrupt_exit_user_prepare_main(ret, regs); +again: + syscall_exit_to_user_mode(regs); + + user_enter_irqoff(); + if (!prep_irq_for_enabled_exit(true)) { + user_exit_irqoff(); + local_irq_enable(); + local_irq_disable(); + goto again; + } + + /* Restore user access locks last */ + kuap_user_restore(regs); + if (unlikely((local_paca->generic_fw_flags & GFW_RESTORE_ALL) == GFW_RESTORE_ALL)) { + ret |= _TIF_RESTOREALL; + local_paca->generic_fw_flags &= ~GFW_RESTORE_ALL; + } #ifdef CONFIG_PPC64 regs->exit_result = ret; #endif @@ -209,6 +219,7 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, #ifdef CONFIG_PPC64 notrace unsigned long syscall_exit_restart(unsigned long r3, struct pt_regs *regs) { + unsigned long ret = 0; /* * This is called when detecting a soft-pending interrupt as well as * an alternate-return interrupt. So we can't just have the alternate @@ -222,14 +233,23 @@ notrace unsigned long syscall_exit_restart(unsigned long r3, struct pt_regs *reg #ifdef CONFIG_PPC_BOOK3S_64 set_kuap(AMR_KUAP_BLOCKED); #endif +again: + syscall_exit_to_user_mode(regs); - trace_hardirqs_off(); - user_exit_irqoff(); - account_cpu_user_entry(); + user_enter_irqoff(); + if (!prep_irq_for_enabled_exit(true)) { + user_exit_irqoff(); + local_irq_enable(); + local_irq_disable(); + goto again; + } - BUG_ON(!user_mode(regs)); + if (unlikely((local_paca->generic_fw_flags & GFW_RESTORE_ALL) == GFW_RESTORE_ALL)) { + ret = _TIF_RESTOREALL; + local_paca->generic_fw_flags &= ~GFW_RESTORE_ALL; + } - regs->exit_result = interrupt_exit_user_prepare_main(regs->exit_result, regs); + regs->exit_result |= ret; return regs->exit_result; } diff --git a/arch/powerpc/kernel/ptrace/ptrace.c b/arch/powerpc/kernel/ptrace/ptrace.c index c6997df632873..2a2b0b94a3eaa 100644 --- a/arch/powerpc/kernel/ptrace/ptrace.c +++ b/arch/powerpc/kernel/ptrace/ptrace.c @@ -21,9 +21,6 @@ #include #include -#define CREATE_TRACE_POINTS -#include - #include "ptrace-decl.h" /* @@ -233,106 +230,6 @@ static int do_seccomp(struct pt_regs *regs) static inline int do_seccomp(struct pt_regs *regs) { return 0; } #endif /* CONFIG_SECCOMP */ -/** - * do_syscall_trace_enter() - Do syscall tracing on kernel entry. - * @regs: the pt_regs of the task to trace (current) - * - * Performs various types of tracing on syscall entry. This includes seccomp, - * ptrace, syscall tracepoints and audit. - * - * The pt_regs are potentially visible to userspace via ptrace, so their - * contents is ABI. - * - * One or more of the tracers may modify the contents of pt_regs, in particular - * to modify arguments or even the syscall number itself. - * - * It's also possible that a tracer can choose to reject the system call. In - * that case this function will return an illegal syscall number, and will put - * an appropriate return value in regs->r3. - * - * Return: the (possibly changed) syscall number. - */ -long do_syscall_trace_enter(struct pt_regs *regs) -{ - u32 flags; - - flags = read_thread_flags() & (_TIF_SYSCALL_EMU | _TIF_SYSCALL_TRACE); - - if (flags) { - int rc = ptrace_report_syscall_entry(regs); - - if (unlikely(flags & _TIF_SYSCALL_EMU)) { - /* - * A nonzero return code from - * ptrace_report_syscall_entry() tells us to prevent - * the syscall execution, but we are not going to - * execute it anyway. - * - * Returning -1 will skip the syscall execution. We want - * to avoid clobbering any registers, so we don't goto - * the skip label below. - */ - return -1; - } - - if (rc) { - /* - * The tracer decided to abort the syscall. Note that - * the tracer may also just change regs->gpr[0] to an - * invalid syscall number, that is handled below on the - * exit path. - */ - goto skip; - } - } - - /* Run seccomp after ptrace; allow it to set gpr[3]. */ - if (do_seccomp(regs)) - return -1; - - /* Avoid trace and audit when syscall is invalid. */ - if (regs->gpr[0] >= NR_syscalls) - goto skip; - - if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) - trace_sys_enter(regs, regs->gpr[0]); - - if (!is_32bit_task()) - audit_syscall_entry(regs->gpr[0], regs->gpr[3], regs->gpr[4], - regs->gpr[5], regs->gpr[6]); - else - audit_syscall_entry(regs->gpr[0], - regs->gpr[3] & 0xffffffff, - regs->gpr[4] & 0xffffffff, - regs->gpr[5] & 0xffffffff, - regs->gpr[6] & 0xffffffff); - - /* Return the possibly modified but valid syscall number */ - return regs->gpr[0]; - -skip: - /* - * If we are aborting explicitly, or if the syscall number is - * now invalid, set the return value to -ENOSYS. - */ - regs->gpr[3] = -ENOSYS; - return -1; -} - -void do_syscall_trace_leave(struct pt_regs *regs) -{ - int step; - - audit_syscall_exit(regs); - - if (unlikely(test_thread_flag(TIF_SYSCALL_TRACEPOINT))) - trace_sys_exit(regs, regs->result); - - step = test_thread_flag(TIF_SINGLESTEP); - if (step || test_thread_flag(TIF_SYSCALL_TRACE)) - ptrace_report_syscall_exit(regs, step); -} - void __init pt_regs_check(void); /* diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index 719930cf4ae1f..8e1a1b26b5eae 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c @@ -6,6 +6,7 @@ * Extracted from signal_32.c and signal_64.c */ +#include #include #include #include @@ -22,11 +23,6 @@ #include "signal.h" -/* This will be removed */ -#ifdef CONFIG_GENERIC_ENTRY -#include -#endif /* CONFIG_GENERIC_ENTRY */ - #ifdef CONFIG_VSX unsigned long copy_fpr_to_user(void __user *to, struct task_struct *task) @@ -374,11 +370,9 @@ void signal_fault(struct task_struct *tsk, struct pt_regs *regs, task_pid_nr(tsk), where, ptr, regs->nip, regs->link); } -#ifdef CONFIG_GENERIC_ENTRY void arch_do_signal_or_restart(struct pt_regs *regs) { BUG_ON(regs != current->thread.regs); local_paca->generic_fw_flags |= GFW_RESTORE_ALL; do_signal(current); } -#endif /* CONFIG_GENERIC_ENTRY */ diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index 9f03a6263fb41..66fd6ca4462b0 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -21,121 +22,9 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) kuap_lock(); add_random_kstack_offset(); + r0 = syscall_enter_from_user_mode(regs, r0); - if (IS_ENABLED(CONFIG_PPC_IRQ_SOFT_MASK_DEBUG)) - BUG_ON(irq_soft_mask_return() != IRQS_ALL_DISABLED); - - trace_hardirqs_off(); /* finish reconciling */ - - CT_WARN_ON(ct_state() == CT_STATE_KERNEL); - user_exit_irqoff(); - - BUG_ON(regs_is_unrecoverable(regs)); - BUG_ON(!user_mode(regs)); - BUG_ON(regs_irqs_disabled(regs)); - -#ifdef CONFIG_PPC_PKEY - if (mmu_has_feature(MMU_FTR_PKEY)) { - unsigned long amr, iamr; - bool flush_needed = false; - /* - * When entering from userspace we mostly have the AMR/IAMR - * different from kernel default values. Hence don't compare. - */ - amr = mfspr(SPRN_AMR); - iamr = mfspr(SPRN_IAMR); - regs->amr = amr; - regs->iamr = iamr; - if (mmu_has_feature(MMU_FTR_KUAP)) { - mtspr(SPRN_AMR, AMR_KUAP_BLOCKED); - flush_needed = true; - } - if (mmu_has_feature(MMU_FTR_BOOK3S_KUEP)) { - mtspr(SPRN_IAMR, AMR_KUEP_BLOCKED); - flush_needed = true; - } - if (flush_needed) - isync(); - } else -#endif - kuap_assert_locked(); - - booke_restore_dbcr0(); - - account_cpu_user_entry(); - - account_stolen_time(); - - /* - * This is not required for the syscall exit path, but makes the - * stack frame look nicer. If this was initialised in the first stack - * frame, or if the unwinder was taught the first stack frame always - * returns to user with IRQS_ENABLED, this store could be avoided! - */ - irq_soft_mask_regs_set_state(regs, IRQS_ENABLED); - - /* - * If system call is called with TM active, set _TIF_RESTOREALL to - * prevent RFSCV being used to return to userspace, because POWER9 - * TM implementation has problems with this instruction returning to - * transactional state. Final register values are not relevant because - * the transaction will be aborted upon return anyway. Or in the case - * of unsupported_scv SIGILL fault, the return state does not much - * matter because it's an edge case. - */ - if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) && - unlikely(MSR_TM_TRANSACTIONAL(regs->msr))) - set_bits(_TIF_RESTOREALL, ¤t_thread_info()->flags); - - /* - * If the system call was made with a transaction active, doom it and - * return without performing the system call. Unless it was an - * unsupported scv vector, in which case it's treated like an illegal - * instruction. - */ -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM - if (unlikely(MSR_TM_TRANSACTIONAL(regs->msr)) && - !trap_is_unsupported_scv(regs)) { - /* Enable TM in the kernel, and disable EE (for scv) */ - hard_irq_disable(); - mtmsr(mfmsr() | MSR_TM); - - /* tabort, this dooms the transaction, nothing else */ - asm volatile(".long 0x7c00071d | ((%0) << 16)" - :: "r"(TM_CAUSE_SYSCALL|TM_CAUSE_PERSISTENT)); - - /* - * Userspace will never see the return value. Execution will - * resume after the tbegin. of the aborted transaction with the - * checkpointed register state. A context switch could occur - * or signal delivered to the process before resuming the - * doomed transaction context, but that should all be handled - * as expected. - */ - return -ENOSYS; - } -#endif // CONFIG_PPC_TRANSACTIONAL_MEM - - local_irq_enable(); - - if (unlikely(read_thread_flags() & _TIF_SYSCALL_DOTRACE)) { - if (unlikely(trap_is_unsupported_scv(regs))) { - /* Unsupported scv vector */ - _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); - return regs->gpr[3]; - } - /* - * We use the return value of do_syscall_trace_enter() as the - * syscall number. If the syscall was rejected for any reason - * do_syscall_trace_enter() returns an invalid syscall number - * and the test against NR_syscalls will fail and the return - * value to be used is in regs->gpr[3]. - */ - r0 = do_syscall_trace_enter(regs); - if (unlikely(r0 >= NR_syscalls)) - return regs->gpr[3]; - - } else if (unlikely(r0 >= NR_syscalls)) { + if (unlikely(r0 >= NR_syscalls)) { if (unlikely(trap_is_unsupported_scv(regs))) { /* Unsupported scv vector */ _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);