From patchwork Mon Nov 11 03:19:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009380 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3082-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 4XmvxQ0Gdqz1y05 for ; Mon, 11 Nov 2024 14:22:33 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4XmvxL70Mcz2xsW; Mon, 11 Nov 2024 14:22:30 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=43.155.80.173 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295350; cv=none; b=aL4Tha2n6AC3QRXIM6cv2EvhDoNJanIbVCcmn6PZTKMwZTMt+kZWbe0NKGXa2yKi/PB0HIYgENBHvt7B5sd9BBS2edPdZAIm06z/557izgwMevJniKhWSGt/CkxuEXKpzvRCW25yi1GaqC82qRww9eksLYFNwaHhIRu4sOlXwJD/voF52B8puPQLgWoSj+vWgBU/5qy+EuhJDKbc4CI7qZS3zX+2I0mtJQZZL6m09uk+INB2OBh5eVJmzxZOmmqsx6xP+IHuQpuSQ7IJse2a7i3VdJAJHq9fzYJugDlqOW80ADzxlUKy1g1EjMxJZugST8g5NlHcXgxOfDJYn2SJMQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295350; c=relaxed/relaxed; bh=eOa/0vmDlpGwE7os20FrPllQfh4CGlav2F8QSVAbR6o=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=MIz/eB/l8LU7wS63e5LwKbnzz3nry64qKPNYuAap8S6cxNMeay5wseBMLQJT+mJico1p/Xblv2yK84naB8HYTZuwsufRJk9tSHJYC8d8JHvsuIYWZvQ89bV9CdBCpGo25/YyYTJV51WSktKD1Hh2JFEcE7WSZqBMK02JCkYRCMiiejFMh6DiJX1nVF5dhiN96nE90mDfj+JUtuoYFXfXh8us9XSGOlP86eicqgZ8VVC1QtVK5g+B2MMgv7tdF0UWN1uh2FkgvhEqUC9CpZM4m5MiVn/2ylz4SV4mOUWH1pCDjPT1aMvBdkWTi18YUquNNR+6UDB8EOwxjf7/TsEz1A== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.155.80.173]) (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 4XmvxK3BSQz2xs4 for ; Mon, 11 Nov 2024 14:22:27 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295266thwmuwl X-QQ-Originating-IP: Q2y7X3cnjFZOhjfAcpkHrhgyw0X7/r3GqnDyvzLJO1M= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:21:03 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 11046684575156124262 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 1/8] powerpc/entry: convert to common and generic entry Date: Mon, 11 Nov 2024 11:19:26 +0800 Message-ID: X-Mailer: git-send-email 2.42.0.windows.2 X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: NOnalZjVTVf0PdX+TiWwR5wGXQfDdiUaDSO3CqQsmaX3kcJPiR2QwaG8 pVWp7gE3muz6RH37o3sE6VMEYGGAozv/mMzvT5Hcy+3uNUpVY2lHfGLVogPySlU4igZzOZr 1g2clOaNceUnaUnk7A42baYn/o7x3GHv6vy0AbXPVyooHef5/AQRaKc/+ul4zh4izmWKwJY e8LQzDXFI3716Tsfo4G4zR+s/iQd13LGMpuqeEdGaC8WE3mLGt5Xg0ujs/4ObSqsPe2U0L6 sV2gzWtcIXa8Br2Uy+OPtfYGLaZKwyE0oiBIv0ljQiPr+qGq/4jzGnT1JajeinUCjescykA /j1nhLRnfpk/I0Hm7R7U2g0gRPJr+m7kq2hhxuo2LTtznbKWX3PgK9aW2HO7WRxMhvMCpwi Xu6HG/Rnku2dDjsi4XHQNP/3Zj9hLrzV6wMhah0/xokhQ4qJ9Vw7lBR2ynr8DZhMiK/GpU8 xmH1/bKUr2N+inwdNrPkBbE04rAESLy0DmZTefKWSX4gSZL/Es1ShS9K6i2PYqtIVULRldN 9/VJWku1j8gk7tyHIjJcjGpamSqS61y9yV/eN/Cqsl4vdniyApqDi12hujcT9cssYI2xYQ6 xedXqKiHcMc5i8rIOqIVR+AC4NqkWYylU8RtujEqnfftWtfC+HjYSGyxvW2rjZn+vg1G88+ BN5LLrr+Z/tlqsOvaLRMXLA7eUGzhcpoq2NlohV9UqlEQFfI68rDWxq8ASi7Oe/yq+O8bQI VWQf2SPkRBXOpksTjUXaAY1/+FSfoVTTQHXdlt9D3UuUmypHfxEQQp9V/9q2RGy0XT90FSs Oj4UH2HWYjZ1Bmudsyu7hCsV3PUuhfzJlQZWrnU5aHs1eOPDcltjHZbl3DlMEQcFprjGHIc JVmvWpEvo+8enCAPqS5h1O9vFaGWUoZtFfZTKQbCbHiiNiVRsJOHD1ZhDFkBhO1h9k54Pkn g9JnAFUhtzqWkEZPbWi2AA6X6 X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org convert powerpc entry code in syscall and fault to use syscall_work and irqentry_state as well as common calls implemented in generic entry infrastructure. Signed-off-by: Luming Yu --- v1->v2: fix ppc syscall entry seccomp_bpf test errors for common entry conversion. --- arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/hw_irq.h | 5 +++++ arch/powerpc/include/asm/processor.h | 6 ++++++ arch/powerpc/include/asm/syscall.h | 5 +++++ arch/powerpc/include/asm/thread_info.h | 1 + arch/powerpc/kernel/syscall.c | 5 ++++- arch/powerpc/mm/fault.c | 3 +++ 7 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 6f105ee4f3cf..261c9116d6fa 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -202,6 +202,7 @@ config PPC select GENERIC_IRQ_SHOW_LEVEL select GENERIC_PCI_IOMAP if PCI select GENERIC_PTDUMP + select GENERIC_ENTRY select GENERIC_SMP_IDLE_THREAD select GENERIC_TIME_VSYSCALL select GENERIC_VDSO_TIME_NS diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index 317659fdeacf..a3d591784c95 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h @@ -216,6 +216,11 @@ static inline bool arch_irqs_disabled(void) return arch_irqs_disabled_flags(arch_local_save_flags()); } +/*common entry*/ +static __always_inline bool regs_irqs_disabled(struct pt_regs *regs) +{ + return arch_irqs_disabled(); +} static inline void set_pmi_irq_pending(void) { /* diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h index b2c51d337e60..1292282f8b0e 100644 --- a/arch/powerpc/include/asm/processor.h +++ b/arch/powerpc/include/asm/processor.h @@ -383,6 +383,12 @@ int validate_sp(unsigned long sp, struct task_struct *p); int validate_sp_size(unsigned long sp, struct task_struct *p, unsigned long nbytes); +/*for common entry*/ +static __always_inline bool on_thread_stack(void) +{ + return validate_sp(current_stack_pointer, current); +} + /* * Prefetch macros. */ diff --git a/arch/powerpc/include/asm/syscall.h b/arch/powerpc/include/asm/syscall.h index 3dd36c5e334a..0e94806c7bfe 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 bf5dde1a4114..9df2bcf28544 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -58,6 +58,7 @@ struct thread_info { unsigned int cpu; #endif unsigned long local_flags; /* private flags for thread */ + unsigned long syscall_work; #ifdef CONFIG_LIVEPATCH_64 unsigned long *livepatch_sp; #endif diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index 77fedb190c93..e0338bd8d383 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -131,7 +132,7 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) * 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); + r0 = syscall_enter_from_user_mode(regs, r0); if (unlikely(r0 >= NR_syscalls)) return regs->gpr[3]; @@ -184,6 +185,8 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) * So the resulting 6 or 7 bits of entropy is seen in SP[9:4] or SP[9:3]. */ choose_random_kstack_offset(mftb()); + /*common entry*/ + syscall_exit_to_user_mode(regs); return ret; } diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 9e49ede2bc1c..6cb923fe4c4d 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -577,7 +578,9 @@ static __always_inline void __do_page_fault(struct pt_regs *regs) DEFINE_INTERRUPT_HANDLER(do_page_fault) { + irqentry_state_t state = irqentry_enter(regs); __do_page_fault(regs); + irqentry_exit(regs, state); } #ifdef CONFIG_PPC_BOOK3S_64 From patchwork Mon Nov 11 03:19:28 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009379 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3083-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 4XmvxP5lNkz1xyD for ; Mon, 11 Nov 2024 14:22:32 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4XmvxM0NB0z2xst; Mon, 11 Nov 2024 14:22:31 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=43.154.197.177 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295350; cv=none; b=WeeUgX4xY0OXzAHAPwaXm+oZslQRAzOFzi08kQsYcwnXSVCfaYXiURIhZ107QgEfWWoQ4SpYfeJ/mOsc/dNYUNSakKuId0dLKNc0BpocVpMtdSpdNxxk0zPnhwrwBaK3UeV64gFrVXk48J79/KCGrJS5i4FYBYA7DNowgqJao28eUneG4jXMsudTRGc5MUOQpFqzR+8Y/iC4XaPeiTU4Vsz8ql5dbWKye9n2RASHmNK5CJRymX9xx09FPt2FqNHnolfBW6upRgmqVudsgQaoltasumoGuvw+27gsvfsyKHVYGFTPeqGJLZUB7VLU5/06duOneUaMrRdP4hOoT3aZJA== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295350; c=relaxed/relaxed; bh=v7F76A/IUwLtJwdwp9Vkes3MupdfT/HaDbFy5r18vrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jtdW5aNZumH1JLvXGjysMyL6mNoTfwoPumjmvcZheuExFDsEF4cnb50lShYoItJoJk0npzG+ssnpnQeY+K/ce9LnTNg/626bBrRzrlm+e3X475G2TFTdSDyPMrMrgtYeW/ZGYvtni79yg9q64fKDax5pdBs+N52hOEgP0PHvAyX1149XrhnQ8hpIJSI8oDDRpFeW9/zvrmHWUoJadSzPvqlT9UTJUwcheDVmXGT46P/utbzx+vPthVfPf8yObUDruBmH5lyFRkXlVtiS0W7Te/1NDRT2AIdMy7Gsn11K5jezQJoBl7bwVmsWdiZ1apOpLmtaMFslG46G/dHHbdxhzQ== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=43.154.197.177; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=43.154.197.177; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.154.197.177]) (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 4XmvxJ4Thhz2xs0 for ; Mon, 11 Nov 2024 14:22:28 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295287t86m7ga X-QQ-Originating-IP: /LUL+HLIGB/NES8ocSMYmMlww42rJYMefiuMTCsbuMs= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:21:07 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 13334988639752082623 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 2/8] powerpc/entry: cleanup syscall entry Date: Mon, 11 Nov 2024 11:19:28 +0800 Message-ID: X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: OSUW9vQLVhiZTclshFBubYPkDXTre72zm5Z76+KDIiBHvx7fGO8F35RM BDfwguD52sfRLyiWUlTS4EQCV0tFcb7mnIJjqVcBBN0DiMZiMbdxquh5uWK3QqGRCkb7q26 3QN1oxGtuvaMzrs5FadLSQH2Gqo604tu2JNQttfSdFXUWPzdgu3unp5SnZp4wX+KSsGux9w 9ngJDgxINebSZZxFzYKoG8nbCp4QeeQeTW+0Qh8bCJLRopxsvJMdCxCpGUQgURa7Tp3zuX1 7TQKstB+WxdZ0X7O1elqe2dbYitfmECcQ5lwsa+trXETHwID/unNHEeyY0yXthqYM//r1d9 Vyvhp60LCHOHPxvpsEv3N0Oj0PyhLEGWZZ8WtYNEAh7T5zoEomgWHR9RO1FI51okbM3kyzp dqwoO40ZYtkph95g7XRM0wgO/mVPiFzmmtibZAk1BD3XKA8q3wsI0CxL4gQ26ZEvSDeGUjP zy5FbKiOpgJRGesfR3pQ2THOHgkLrfITxg/4zXs8l7NbigsbiE1AAe24IJg+zuP5Kn9658t 4gtlppOWlIdczvHVtmn0K0Z9le320/m6phwkA4Ovuz/F8dad+86OLg2+roruyaO9i6huYWP XrM8lst14YBPcH/7RnzFxUxVG2L81OqT1kNcw3K/gbCjN+U7w5lqzc6jBQapImK+w7e8E2y 9cEupsHn3HRSxFxiPw8/8evDwptoZCwibR3lSdUS+tY8j5OzRpssmVgYmbQxt+5Kwxswlt8 po8vIXGpDQC80o/k8Die7QBa1VL2aaR+wtLKkuL8FtQkeerSahyen/ge7Oe+Js2sXkDVGng 1jvmfQ8xoes3IxlU4th3cKQgFHiJXy5FzR0VcAi7Oqoia9oMAVPP69rdsCK5TUPhCnYxsAg EwxJFiiQLNDnfR8qVGop9lAHZ7wVrnLcuGLkmcrqceDBKUFphF9a5JzSoj/OrGzPR3mvD4/ J6CAIM1aml4KcC/L7JvFuTFD622l0+Ce8lOA9/+kDoDE1TQ== X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org cleanup do_syscall_trace_enter/leave and do_seccomp. Signed-off-by: Luming Yu --- arch/powerpc/kernel/interrupt.c | 5 - arch/powerpc/kernel/ptrace/ptrace.c | 141 ---------------------------- 2 files changed, 146 deletions(-) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index c4f6d3c69ba9..8c532cecbc60 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -293,11 +293,6 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, regs->gpr[3] = 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); diff --git a/arch/powerpc/kernel/ptrace/ptrace.c b/arch/powerpc/kernel/ptrace/ptrace.c index 727ed4a14545..6cd180bc36ab 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" /* @@ -195,144 +192,6 @@ long arch_ptrace(struct task_struct *child, long request, return ret; } -#ifdef CONFIG_SECCOMP -static int do_seccomp(struct pt_regs *regs) -{ - if (!test_thread_flag(TIF_SECCOMP)) - return 0; - - /* - * The ABI we present to seccomp tracers is that r3 contains - * the syscall return value and orig_gpr3 contains the first - * syscall parameter. This is different to the ptrace ABI where - * both r3 and orig_gpr3 contain the first syscall parameter. - */ - regs->gpr[3] = -ENOSYS; - - /* - * We use the __ version here because we have already checked - * TIF_SECCOMP. If this fails, there is nothing left to do, we - * have already loaded -ENOSYS into r3, or seccomp has put - * something else in r3 (via SECCOMP_RET_ERRNO/TRACE). - */ - if (__secure_computing(NULL)) - return -1; - - /* - * The syscall was allowed by seccomp, restore the register - * state to what audit expects. - * Note that we use orig_gpr3, which means a seccomp tracer can - * modify the first syscall parameter (in orig_gpr3) and also - * allow the syscall to proceed. - */ - regs->gpr[3] = regs->orig_gpr3; - - return 0; -} -#else -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); /* From patchwork Mon Nov 11 03:19:30 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009381 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3084-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 4Xmvxg0wWJz1xyD for ; Mon, 11 Nov 2024 14:22:47 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4XmvxP0LfXz2yMX; Mon, 11 Nov 2024 14:22:33 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=54.254.200.92 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295353; cv=none; b=kohAHdzAzHs1hylFt83p2oBu0gb8ziBR5xpZ+sLtKlMz7Y2XKhl2kVrNtKnO0Ifmp4s4wDcRNVD1d1JeP6k6NYrCU1AvU+HWEI775A+rUQ8LQqfuMyf6A1DuJrsLm5YULy6k9G7nxTBiM3K/JwkWMzxDXUSCY0GftvlvF0v8joFEsZBRLPp4Z9r0K1UgVdYKgET4ya6jd6O4cBmiYo1JrSF+QBWB9fLIMlbTvXKZy57bG8kE3nlZO1kZTCyIMM1To6laWUSBPIHjfu/Yd9qRtgvHrjD9knFM1/Xq8lYbGpmV2owhzUmkKRbJZqWG03fBoOysILn9pkt9KKikyOLxkQ== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295353; c=relaxed/relaxed; bh=PygPSfrF6/ZPZycNWp0gfxNgipfwun+gFs3PUTgf3Hw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=d0y2UabQFip9Pwb+XyQZXRFAtntRfhNpOkfKs6pV8kyWMgYqOY8nQIOehBstUTX3e56/UZNs13Gz8Kg6t2uDjcu98eovNkotkEKZgrEX2asFV+k+Idq8srUnvOCn8OiLmVIvHBmG/3xuyoTNBzyMAJNbHVjCO9SnNdUFuo+M0w2goiXf0iKxoQwuf1xt71igVJxapu4Go13EhL36NjXWvy8pjtC7hi594fBvXEobWsdJquHTIbBhwYLb1x6p0tKnE/2gbUhIUpQcKw2Ogdh9WPGnp8nGHuZeYwycfuy5AkoNAfebabPgq/75p0lEhHqwaCBkLGeo8opxocvXRG6Ytg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=54.254.200.92; helo=smtpbgsg1.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=54.254.200.92; helo=smtpbgsg1.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) X-Greylist: delayed 75005 seconds by postgrey-1.37 at boromir; Mon, 11 Nov 2024 14:22:31 AEDT Received: from smtpbgsg1.qq.com (smtpbgsg1.qq.com [54.254.200.92]) (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 4XmvxM6YKQz2xs0 for ; Mon, 11 Nov 2024 14:22:31 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295305tmfjooy X-QQ-Originating-IP: CGn9UdnFUXVCmJNZjsCPptGYVxeYEqMVov44SNNVocU= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:21:29 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 12849565497526947182 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 3/8] powerpc/debug: implement HAVE_USER_RETURN_NOTIFIER Date: Mon, 11 Nov 2024 11:19:30 +0800 Message-ID: <027637B09D70E22F+20241111031934.1579-6-luming.yu@shingroup.cn> X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: M28vnsO5i7WeqXDjdTzu5d3NXlP+XBVE252YyNEGs/9wg3WlQPoai9H4 7W2cDkcZXK6vwPpos1jzKgdWBGiUHgJgpGc5pk3U4yzqwtJbsznH0wNEEaDiw3r7UHtCNZ/ Lg2h+DYIhNvQrnR6V+JHPc6nAn/3UsMiipCwIMmBQJMG7ZRHvyHL1ol5LsPphrQ3YnlPlLt RL7DZuKD2CD1tLGrJWQFYAeyOnBMlZ9qOxJh+x8JOl0cIHn0l1zhy0BRrH6VkA+gX1pgIcm 8Jvo9TgWfZJu4G+r+WfTiBre8Hab+4FZEZUAfElsorLKa9+T1SDauGxkbkNaXMeBZMgo7wZ ejj9zaDG6Vy4pWQCu0YL0f2qibVBD5QdOpSCFbRxyFWFO1GWirTO3L1ZOiQuOL69zh2NzaB HJZ3NyiwQtuTbZcvU90svu91OrgJ24nTOdwsKozabRq/0TQ0jxNIUPyFjhVK4PB1+sj9tsp PfUkgkG010FGMTlgYOe+N4yRO6F1wBOJNcYS48byu8+tEuKLBP00OCL7HidcsPgjlmnlMtO 90LlzFfNVio6IDhLWlnYRjjCV408mjkfLvckHyeA3fBM6GDGmNCDf04FqS2CPLhq+JjjB9I WzolEIlgLP7n5OrbWMcZqA2PA+YynleBE76HfDhc9DOc+SOx71DfwPfzX7sc23Fp9wbpWvW mg0QoqnNIplfW4I3yh2ZPISO1uKC5U26GMk1AOlykVXt7EeY0NoAuV8HlZoo16Bt0lxU3Bg Qi+1sYe9I/XEfYnXA1dGzaLmim+Ih51RzVDgtSo5RlABJQZ86pfvCYFUhzuBeOz+/qiuxDO OQyPH8MHm45McQjcIGOau0tD7OHr1jx0HeD6KbtesJ2kDQiZqgMuExLcIwpjIna0770eIXz WvfV3WoVO0faKNKcHPKlaiF38am9c80U48M0SuJvMRRAHKEVzBLbBjFTJKPikGH/lrKu/X9 /824QA4PSW2+3Uw5M2Lx2cvFW3o/RmgdR2QE= X-QQ-XMRINFO: NI4Ajvh11aEj8Xl/2s1/T8w= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org enable the common entry of user return notifier for powerpc as a debug feature. Signed-off-by Luming Yu --- arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/entry-common.h | 16 ++++++++++++++++ arch/powerpc/include/asm/thread_info.h | 2 ++ arch/powerpc/kernel/process.c | 2 ++ 4 files changed, 21 insertions(+) create mode 100644 arch/powerpc/include/asm/entry-common.h diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 261c9116d6fa..9a1e6669fa24 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -277,6 +277,7 @@ config PPC select HAVE_STACKPROTECTOR if PPC64 && $(cc-option,-mstack-protector-guard=tls -mstack-protector-guard-reg=r13) select HAVE_STATIC_CALL if PPC32 select HAVE_SYSCALL_TRACEPOINTS + select HAVE_USER_RETURN_NOTIFIER select HAVE_VIRT_CPU_ACCOUNTING select HAVE_VIRT_CPU_ACCOUNTING_GEN select HOTPLUG_SMT if HOTPLUG_CPU diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h new file mode 100644 index 000000000000..51f1eb767696 --- /dev/null +++ b/arch/powerpc/include/asm/entry-common.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef ARCH_POWERPC_ENTRY_COMMON_H +#define ARCH_POWERPC_ENTRY_COMMON_H + +#include + +static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs, + unsigned long ti_work) +{ + if (ti_work & _TIF_USER_RETURN_NOTIFY) + fire_user_return_notifiers(); +} + +#define arch_exit_to_user_mode_prepare arch_exit_to_user_mode_prepare + +#endif diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 9df2bcf28544..c52ca3aaebb5 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -118,6 +118,7 @@ void arch_setup_new_exec(void); #endif #define TIF_POLLING_NRFLAG 19 /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_32BIT 20 /* 32 bit binary */ +#define TIF_USER_RETURN_NOTIFY 21 /* notify kernel of userspace return */ /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1< #include #include +#include #include #include @@ -1386,6 +1387,7 @@ struct task_struct *__switch_to(struct task_struct *prev, if (current->thread.regs) restore_math(current->thread.regs); #endif /* CONFIG_PPC_BOOK3S_64 */ + propagate_user_return_notify(prev, new); return last; } From patchwork Mon Nov 11 03:19:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009382 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3085-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 4Xmvxs55V6z1xyD for ; Mon, 11 Nov 2024 14:22:57 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Xmvxs3gyCz2xs4; Mon, 11 Nov 2024 14:22:57 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=43.154.197.177 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295377; cv=none; b=eeUHFAokmvIONYz0iss89fXwES0c/cA4lXn0CcIm4IEsxmhNSGgAt2DeTzu6zqX+snGxB4EA2PxgeXxbxLlRPftJDsxmhETdYRJb6S+Ae4xNwNGgIOu2IbIxh7vBnOCqxLIFPV+OAnhD0M+9seavpsnYxWKcUhq1u4qItkUWkt1XfUE5phXk/Ay4X0+/RPlVxzqAVXLC1eamxyHI/BLDT8QW3aUKu71dnVdtROpMENPsSLhIF23tAWaP6IK4PdIY4NEy9FpjcopEMv4GCOPMtlYKOHQ1E+zYBMy1u6jrLto+faJ6JSgS27VTS+xhZ35GT+7WucFAoW53RNnV84X6Sw== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295377; c=relaxed/relaxed; bh=+Zqma3iqIdRjkeMGOL9TOEljkUvhtqoTvXcsm7XW+ks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Vv2SmKcTp4Ccbg1KXjBdFkZw+M8CtMz9b89eFwUftwX5HuT9Dp97OPXHV/xaXJYVU/m1RSgckIb6imZH4C5cN6u2OMZeTyyVkmh+zPDCKwL5Kd51I7Q3hzP3uNR92snP56PV5TpxHDep5rrhrtC8wSdUe4D46sNON4NhZmVw6Z6jbIbzeTsf9t3P2Mk+3wBYMmUV9LddCrOUSIX4f2y+O4cdtEjEKvNTctVN/bCzG30RNTEoiZ3tdJruNsGhVhPwm9ashZGmD0oDAtQmzDUSocIkf+VSq8Fq9fggD4M9lwaxK2TUJzK4CGFddqnFaIRS/MtSvUNI1JOttaW7eZalAg== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=43.154.197.177; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=43.154.197.177; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.154.197.177]) (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 4Xmvxr2tcSz2xs0 for ; Mon, 11 Nov 2024 14:22:56 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295321typ3e2q X-QQ-Originating-IP: ofFtZ1fxMvOEsrfXFBQDQFF1hbpHJHJxVxCs/vPXlOc= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:21:46 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 1828540669171451381 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 4/8] powerpc/debug: hook to user return notifier infrastructure Date: Mon, 11 Nov 2024 11:19:32 +0800 Message-ID: X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: Macl0gWiWu4ePjFBT404aWJMhJ/w32LwXi3H18Zl9fH1DSw5ayl/UCzJ oYDFFCJhfU1iVJ5mermE3b1zSAvlpvksDkvHfTFpcnTBtn0HwlWMxXZKptHPArIaAyX6pc2 JdHU9RqSxMi6bDVPT7DYgN+H9q3mW/cvQ1mrD1krvfVXcw1KtwExuf28Qw9qPoegH75850H GLSYE30mRkGofaeO1gSn3/RT6c4IyOcz8wb1KejFSHz4MB3argHth/Un5Zaq0hZRvXnGk4t wCp738exAmJG1Z+2WtYXVA8kaNHA184w8t8gz8uQCDfTAQD9thRpxBT4DldpRsIvM+ZYZ8Q uGHuRxGHzW82k0eoiIcXqzSfOK9K+jL5/xqvs/78hGdfrusFAaIA+xbsRapmUk/HLvQMBxM 7RT0N5sSRjCXH1GsAY2MI9QkMguFAPt3oK3X5X4BxSbN8c4VsQFCZA3F+m0jcmnTAugkzCC FlBkhfNQ/JnE6ImllitPTfYMaMh7y1hNfACQjFjyiMVdUmLTy+ro4fVdcZlks5MWeXUJpK7 PwvpaOT90WH/0iAgk7LqMC+XghZzX4NCmPIuZYkJtNcELFqq6uuRdGb3n58fdLv2voRB8r9 sk1XvKNP8WHpxl9y56eU7OCXNWsdzdQPXuSo1RNGKj6CyH8fOE87oEZuyzhUn8eOZ1X36Fd Gaoky3W90TiF5Diz1fdhMcNMmT5lYVrofiI/mxXQjo/ZcO5y7vYrt3Vm8bVMw91zPlDwL11 oGE62ejdBSb4GVgc7kU1/Ld59cD3so9iwlUERBj/X3VkJtTNriAcG1kYBZt/TrU7z7wz3F5 NON5oEcyRhdnUT7QlXC9F9ZmLojMvygHHV8VC64mkaB40ksxQDQ9nJNw9RaNyhL5j68mto5 tmlbT4UpMU0avasAyqKdVt3qK0NSOxFPQoAiJlEGIp4xc1VzYBVnuTQXed09M3KU2TCmAXk nqxOLB3Ohtoe0jpqfeZQGXFXIoVSDTFhIIM7fRXm8rjN520JsWKpk0jQF X-QQ-XMRINFO: OD9hHCdaPRBwq3WW+NvGbIU= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org calls back to all registered user return notifier functions. Signed-off-by: Luming Yu --- arch/powerpc/kernel/interrupt.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 8c532cecbc60..609ba48034de 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -19,6 +19,7 @@ #include #include #include +#include #if defined(CONFIG_PPC_ADV_DEBUG_REGS) && defined(CONFIG_PPC32) unsigned long global_dbcr0[NR_CPUS]; @@ -245,6 +246,8 @@ interrupt_exit_user_prepare_main(unsigned long ret, struct pt_regs *regs) /* Restore user access locks last */ kuap_user_restore(regs); + arch_exit_to_user_mode_prepare(regs, ti_flags); + return ret; } From patchwork Mon Nov 11 03:19:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009384 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3087-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 4XmvyG2y3Tz1xyD for ; Mon, 11 Nov 2024 14:23:18 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4XmvyB181cz2yGZ; Mon, 11 Nov 2024 14:23:14 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=43.155.80.173 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295394; cv=none; b=SBDoAcIehSf6YbX+TgPo2PD9DGLYHu4Xf9N+e+aeN230V+OX8KqKoJlMk0MSWUiG++llWKmhVjyRxTrl8uqMTfY/8RZ1EXfBA9CsaVPMJ6o9+wtp4x2ZmvAtAcbg96z88wSNaEyVGt4d8yR0YS05aPPxbBlGG3RkWmpQjFJ+sg7WvvZXVarO0hnoGNWIKINMH4GFP3gSg7b9yalIva9+Bk0/jIL0U7RPEzwxvVe7a3+wTzudVktWeBJH2ksiBvHLW2tTEZfJYA3Uf7fYg+I7fYM8nE0WA+TrD/QZM8cRCy7PtPYAFLace2dfXQ487sD8jmhUE34kEpf/5f5jgXJAMg== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295394; c=relaxed/relaxed; bh=clzNFNx5Kl7dQTK4LQ99TxpjA4n4tOo7htrJxU6vYYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=idLB4Afddxr1U7F6nsSq/IAW2DiSUlBIRtgTY9meZ0qx0S2lIRMzceetausN3OgMES+lm02sRuSLITFRtOFkNcWEnPkoE0+uodacvyx5YI7+fw6DFX+hMi36uYpH+JL1MKWMicUSnHrRqre+5UXYA96da0msCKyA4rVXimwngHHiRAMFIFOn8l7cdsZvizEV97RMfk7loK70XlwHqRU7yvFvWfmYcQLv8H2qM+3nPJB/EdGrppF+D+QtopExTQzkAKNkrG0KWFdtIxtcfXWPIKNaCq1Tf/q/2Eq3BnjpK1Hy+PJN726JrsDGn5pObQD+Uc1k5/NBn7Ne6e1Wm1gJhQ== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.155.80.173]) (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 4Xmvy86vvHz2xjv for ; Mon, 11 Nov 2024 14:23:12 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295337tbelslj X-QQ-Originating-IP: oSKWjFQ2QFU3uf3v/YaUB+xwzwIus0Rs9ZSUn0gWrn4= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:22:02 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 3230749710390263555 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 5/8] powerpc/entry: add irqentry_state and generic entry support Date: Mon, 11 Nov 2024 11:19:34 +0800 Message-ID: X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: NuQRJUP0KJGkzLuTsvrGVe1Ue/IhCowR6uPPvTSIyLMhMIOX6AsZopRn ImkR3wdg/ilqTuxwG/+XmXVQ/n5sbA+vKgPJN8RGiUGEzKVFhdiZxLH9K9AA+PcOi9C+zJc HeOt24s21QsgZ4XqScRCETKlk6uTdzS9TP8JC9vBXj5C29LMxlnlwo8o8hJkaskfZQYqgjo BVuNVnbcQWbX1CMisMlx+VzItD5z8s4jYEcpU85vBgj8lPFOrFQvcnjYOOnr0W8jcU0Iuhd ogSXUVyTJLt/X7t35fbOa0BBB1WWCJbGy3+G0ByJBCn/Ogxawy7jTABd/M0SL8Gki3UVRfi EYUzPp1mDb6VHl1Rf6piqwHeu63ftgZLJH7NWwE6aHuwG3pL3B3MJQnXGxEiGYZxD7Y7ePu 3YdmcAzDNxueh56y7X0yceID06EcId0g/twNOaBwoiBlqk6N0AijB6n/9E4PmFTIv45t94R 70YKAu5mA+kF4RBkVBoxy21A81eGUmmf1Mh3NuYWyxBteNi9mGSWz6KHbbixCDR4VVyPeHa JZamtFLlfPPe9yoZdec3JNsyzulJ3jNMbJMXOWGw5Z7FXv71eykAhGL6EJDc9QhU4Fgce+v 7xWRvIKjcKZRkx0CC19mW4wg0fpkc74mwthxxM0DOeWd7cbPwJY6+3i52x4ucNXF52Rjd7v 7ImpSRQWSUARKjrOhZvBXA7KCJ0JgHBS9NnjrBiTrVMx6IU7O5TqD5f479wFtjUyNsiKmgb SeDtdaLmV+0nsDGeFRfi2f4ERoFXR9Gfs2ATN0ikrd/PNYzu8fqLK+H0o1aAg1hlA1+np4y EFVHRtfeLhDMDOr/OEJdZdnOb1klWT1u4a8v3ZKThuConN2awvdvBU6Y8zd0pPzNz2e3G2Q iZhPXXCZvJg7vRPjJ8UhICoHlIc6pzTvt5WFpDgnrYjJebq9s1mVrjdolmt86cpasZw0gP8 wqHNHHBsd0gb9ELWO1ADr4+mcAWx4FnFGtlGNSDT0wdirOUeBAXWyGI9hwgylrmPjBUc= X-QQ-XMRINFO: Mp0Kj//9VHAxr69bL5MkOOs= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org generic irq entry support via generic irqentry is added for powerpc. There may be duplciate calls and missing callbacks requires further work. Signed-off-by: Luming Yu --- arch/powerpc/include/asm/entry-common.h | 32 ++++++++++++++++ arch/powerpc/kernel/interrupt.c | 51 +++++-------------------- arch/powerpc/kernel/signal.c | 7 ++++ arch/powerpc/kernel/syscall.c | 2 - 4 files changed, 49 insertions(+), 43 deletions(-) diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h index 51f1eb767696..faa829e15b5d 100644 --- a/arch/powerpc/include/asm/entry-common.h +++ b/arch/powerpc/include/asm/entry-common.h @@ -3,6 +3,7 @@ #define ARCH_POWERPC_ENTRY_COMMON_H #include +#include static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs, unsigned long ti_work) @@ -13,4 +14,35 @@ static inline void arch_exit_to_user_mode_prepare(struct pt_regs *regs, #define arch_exit_to_user_mode_prepare arch_exit_to_user_mode_prepare +static inline void arch_exit_to_user_mode_work(struct pt_regs *regs, + unsigned long ti_work) +{ + + 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 { + unsigned long 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); + } + } +} + +#define arch_exit_to_user_mode_work arch_exit_to_user_mode_work + #endif diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 609ba48034de..42af9217136d 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -3,6 +3,7 @@ #include #include #include +#include #include /* for show_regs */ #include @@ -183,47 +184,11 @@ interrupt_exit_user_prepare_main(unsigned long ret, struct pt_regs *regs) again: ti_flags = read_thread_flags(); - while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) { - local_irq_enable(); - if (ti_flags & _TIF_NEED_RESCHED) { - schedule(); - } else { - /* - * SIGPENDING must restore signal handler function - * argument GPRs, and some non-volatiles (e.g., r1). - * Restore all for now. This could be made lighter. - */ - if (ti_flags & _TIF_SIGPENDING) - ret |= _TIF_RESTOREALL; - do_notify_resume(regs, ti_flags); - } - local_irq_disable(); - ti_flags = read_thread_flags(); - } - if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && IS_ENABLED(CONFIG_PPC_FPU)) { - if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) && - unlikely((ti_flags & _TIF_RESTORE_TM))) { - restore_tm_state(regs); - } else { - unsigned long 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); - } - } + if (ti_flags & _TIF_SIGPENDING) + ret |= _TIF_RESTOREALL; + if (unlikely(ti_flags & EXIT_TO_USER_MODE_WORK)) + ti_flags = exit_to_user_mode_loop(regs, ti_flags); check_return_regs_valid(regs); @@ -297,11 +262,15 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, } local_irq_disable(); - ret = interrupt_exit_user_prepare_main(ret, regs); + if (ti_flags & _TIF_RESTOREALL) + ret |= _TIF_RESTOREALL; + if (ti_flags & _TIF_SIGPENDING) + ret |= _TIF_RESTOREALL; #ifdef CONFIG_PPC64 regs->exit_result = ret; #endif + syscall_exit_to_user_mode(regs); return ret; } diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index aa17e62f3754..da21e7fef46a 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -368,3 +369,9 @@ 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); } + +void arch_do_signal_or_restart(struct pt_regs *regs) +{ + BUG_ON(regs != current->thread.regs); + do_signal(current); +} diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index e0338bd8d383..97f158d13944 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -185,8 +185,6 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) * So the resulting 6 or 7 bits of entropy is seen in SP[9:4] or SP[9:3]. */ choose_random_kstack_offset(mftb()); - /*common entry*/ - syscall_exit_to_user_mode(regs); return ret; } From patchwork Mon Nov 11 03:19:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009383 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3086-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 4XmvyB06qCz1xyD for ; Mon, 11 Nov 2024 14:23:14 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Xmvy95cWTz2xl5; Mon, 11 Nov 2024 14:23:13 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=43.155.80.173 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295393; cv=none; b=hyPKHaJq6LIvvuOWwM4ZQBU+fzL8loIeDFge9+TogV2m6Q4vbbTsgupQIgi1JV91tDsLbRRGJs2qGlwYjSbI84TmSfDyA9cxNtixvE0IYLeioXcU0Bkx9GXkFJAArq27CKfeDhp2ShsmUMSEMqnMRNwaNxcsIZGUDqEWYlzFkDYHVXHqPbr1mhQeC80/03Jf5QQT8ILpUvSnWQtGW/kFtQjBJsfJekTiu5zuCtwWMDdOTRpk/8FpW/re7tjx3HxFdR6bUkL6IHOrRBX4CpXFaWCWKClTUBk9F6QGF3FCU7DO+LjnlzCdL2+j8Z/K90sShR7edgaHtdfvo00rnWdzZw== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295393; c=relaxed/relaxed; bh=Z9kTuWUHOlYP8qsAINw2T8sJgadr4JZTy5lbZS52+MI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EPcg0UOiSfSfngQYl1iRZSLX2hqCQQ/x0BmOn4MfoABo3Cdp5Pe/rMg2zwj14y0ThAzD5nXCw+GXMrAmBWZbx1eg2OrxIQd7nK41ImuSOouT/aF+rRGoBHkF/X+FDJmIIX7scBBZ2BQ73TCE4DHjwVxjerU+TcjAZ4YL0joTZJCTAuO7Ru5y3fM2333rkJi/j+xElLzmJRhYMJBJD7PhkFtWlujXovPXo1Yr0do2X57zKjQEeecCjA9Gs+QKMMUnwpf5IhKVCpmCEO4+cAlzIT5jSaoNvWyfpK5yyJWfm1Bm6ybM6zvVtmyH887e8w7uXfR0ryI5Ky6PFRkpvG5k7A== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=43.155.80.173; helo=bg5.exmail.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from bg5.exmail.qq.com (bg5.exmail.qq.com [43.155.80.173]) (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 4Xmvy84gxdz2xjJ for ; Mon, 11 Nov 2024 14:23:12 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295351t6qawef X-QQ-Originating-IP: 3DvTUMiag3n5W03IhhOMXVwyOWZkvAivUkk4gy4lMXg= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:22:18 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 3514402937707262060 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 6/8] powerpc/entry: factout irqentry-state Date: Mon, 11 Nov 2024 11:19:36 +0800 Message-ID: <972B4AF8B9EDF3C0+20241111031934.1579-12-luming.yu@shingroup.cn> X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: NXhskp4g2j/OblqjPJjJGDyCXF/YKwAQdEYX4RUBOiaImmqeuNQH4hk1 iRJbj3lzLgaJ0AoOx35LttiRGxATkvXU+MV1INxzo0K7KvJ4pKlzZoiUKy7JoAmO3juEuZP WtJK4woeoQVw38rbIvGUWy754jy+rF15gg0/E6zfZfF7er5Eeo0rcNxxX90dRvvqJe4RA0F pIvqNaiSx7cV2khI67bCj7HS5mK0ye+1YXdPk17jk7wTj9q2LKkP+H1jgDFMX2UvJNroctW +RRyABdCoMGbYqCsx1/f2zYD1zbhyaCCdo76yBb3lRQXKupa2ZmDGv8hQU01n3KW01LxSjm Sb3fby9UwHUZb6yNRdRuZ5K6t4kcCMXem356Hz8v8Ez9GA02oYyUy1Wz/FTJ5vg+H5U+DSO LWGtMQRAcwxwbLB15Z7okouAl3oxWZiBDOZMU8WMCHbbrxg1C+a4BcussEsSzf4KiqLyYvj h9cXk1NfRtC1xanYDI+adUUYbGen5ETbVxtQD7E52n6780fB2zHJkhRHwfVbbeEb3an40q/ He2YCEbt2oNNdFiUGZYfvYTI4rIzc8ny0zmncfQKz33OJOEznldQrbKsIxhN3z+fVYYJ2o/ N03yozVAfkU04Z/UrfXvNl9n+QxXZ9BnhQm13+iQoLrPIvxXNwqtAKkKSBBduxmFPC94FMn 63zeQUyS1GjHJF5iQYgXL/Ysfidp4135dhWPVaJiP5IfWFq3K5eIxLXfUNx/Juj8flltgHr bVaQd7WY3nfm8FyqF2rhXLRvV9jlR+uZ2YmTYg88DIU+vt+Lvzx3G0aShDN7DNBBsowiGg7 5VaKTSb7056R6qighozoEH0Ih+lec9e6QX4rh//lnWWs8pVvMnIQkoederirKTUnkixGwO+ nuK/tdTb1mVGnVOYqJ+2M9kchy+uJKkioz3SXJ4Ijxae/oFstY4Tav+WvWv1jUm4f9yHuVh Qyn4TFT8Uw5Jgh1k3FoTYVosmfZLNoemrnzRuBfODXzN19O6j/msOM4insotqTrlpIV2zlF 9MlylhPX3rn5mveoCA X-QQ-XMRINFO: M/715EihBoGSf6IYSX1iLFg= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org To have lowlevel paca.h include high level entry-common.h cause include file dependency mess. Split irqentry-state.h to have the irqentry_state.h can be included in low level paca.h Signed-off-by: Luming Yu --- arch/powerpc/include/asm/paca.h | 2 ++ arch/powerpc/kernel/interrupt.c | 2 ++ include/linux/entry-common.h | 24 ------------------------ include/linux/irqentry-state.h | 28 ++++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 include/linux/irqentry-state.h diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h index e667d455ecb4..83ebe8e914b7 100644 --- a/arch/powerpc/include/asm/paca.h +++ b/arch/powerpc/include/asm/paca.h @@ -13,6 +13,7 @@ #ifdef CONFIG_PPC64 #include +#include #include #include #include @@ -282,6 +283,7 @@ struct paca_struct { struct mce_info *mce_info; u8 mce_pending_irq_work; #endif /* CONFIG_PPC_BOOK3S_64 */ + irqentry_state_t irqentry_s; } ____cacheline_aligned; extern void copy_mm_to_paca(struct mm_struct *mm); diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 42af9217136d..8e4cabb0c592 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -311,6 +311,7 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs) BUG_ON(regs_is_unrecoverable(regs)); BUG_ON(arch_irq_disabled_regs(regs)); CT_WARN_ON(ct_state() == CONTEXT_USER); + local_paca->irqentry_s = irqentry_enter(regs); /* * We don't need to restore AMR on the way back to userspace for KUAP. @@ -423,6 +424,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) * AMR value from the check above. */ kuap_kernel_restore(regs, kuap); + irqentry_exit(regs, local_paca->irqentry_s); return ret; } diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index d95ab85f96ba..6521171469f2 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -352,30 +352,6 @@ void irqentry_enter_from_user_mode(struct pt_regs *regs); */ void irqentry_exit_to_user_mode(struct pt_regs *regs); -#ifndef irqentry_state -/** - * struct irqentry_state - Opaque object for exception state storage - * @exit_rcu: Used exclusively in the irqentry_*() calls; signals whether the - * exit path has to invoke ct_irq_exit(). - * @lockdep: Used exclusively in the irqentry_nmi_*() calls; ensures that - * lockdep state is restored correctly on exit from nmi. - * - * This opaque object is filled in by the irqentry_*_enter() functions and - * must be passed back into the corresponding irqentry_*_exit() functions - * when the exception is complete. - * - * Callers of irqentry_*_[enter|exit]() must consider this structure opaque - * and all members private. Descriptions of the members are provided to aid in - * the maintenance of the irqentry_*() functions. - */ -typedef struct irqentry_state { - union { - bool exit_rcu; - bool lockdep; - }; -} irqentry_state_t; -#endif - /** * irqentry_enter - Handle state tracking on ordinary interrupt entries * @regs: Pointer to pt_regs of interrupted context diff --git a/include/linux/irqentry-state.h b/include/linux/irqentry-state.h new file mode 100644 index 000000000000..d4ddeb1c6ab6 --- /dev/null +++ b/include/linux/irqentry-state.h @@ -0,0 +1,28 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __LINUX_IRQENTRYCOMMON_H +#define __LINUX_IRQENTRYCOMMON_H + +#ifndef irqentry_state +/** + * struct irqentry_state - Opaque object for exception state storage + * @exit_rcu: Used exclusively in the irqentry_*() calls; signals whether the + * exit path has to invoke ct_irq_exit(). + * @lockdep: Used exclusively in the irqentry_nmi_*() calls; ensures that + * lockdep state is restored correctly on exit from nmi. + * + * This opaque object is filled in by the irqentry_*_enter() functions and + * must be passed back into the corresponding irqentry_*_exit() functions + * when the exception is complete. + * + * Callers of irqentry_*_[enter|exit]() must consider this structure opaque + * and all members private. Descriptions of the members are provided to aid in + * the maintenance of the irqentry_*() functions. + */ +typedef struct irqentry_state { + union { + bool exit_rcu; + bool lockdep; + }; +} irqentry_state_t; +#endif +#endif From patchwork Mon Nov 11 03:19:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009385 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3088-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 4XmvyX6fZfz1xyD for ; Mon, 11 Nov 2024 14:23:32 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4XmvyX5MPwz2xvR; Mon, 11 Nov 2024 14:23:32 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=54.204.34.130 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295412; cv=none; b=hRxyYZEiZvmXJdfO3lc9A/vM7olJIgI/wy8zy4BAkGmVuzHFJDQ5SxJMSnDKcW/IKQ9UKf4qP5TdGA/ocVO5JyErZ3pf0B6KXQI3fjHaVCxIWsaiK//pwPi0I9ICbOueuCOeQIP25GLfxmHTc9L1Fl1Rc62Lg2V3eqjJpW6CZtgM9f1kVCAV7J5jKCdmbeVf3oKbqJgMBDFGGR9RcJqyNlXJdzcTaNmlabH7P6Q4B6kjmtg8bu3i2oaOp037zEZERx83mPV45VMuZSJ/mdL5o4OkglqsmYcUcg9dlTsrH7Vl9v2vbOA8o4CvtHvdxeeWMFdPZyzd/1JTeTidokIV9g== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295412; c=relaxed/relaxed; bh=eyyEVKnFPIOmLpG59dqdis94/r8vs+rZ71m2iCPLJR0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Pg8Qqz9d62mDwG4xidPNkLAfX0Sy+TZho2GUaNRQL7Ks3Dv3OrAXC18hpztecCPaLU1L46qhaYLw0CjzGwC3cB1irH8l22rst5ieS7Xami9p91ThRczsqHii+I4Wv0VAYLS99eWQRrRRCM/+QjpSDlMqntgHpIERvNcDR/zhbcSncdkY+51LHZ+Pe310I2Kn2+aKok+yk8xIwIaY/7Pl1EsMt7VQg+JKfeHQBzCPi5/dapQbRNj4zVZQ+Ql8xzyPGvxmgkFylt/UI0Rg26MyMVDdfzlawNPA7x9ONe71vY5FHkEG74+vGws/Jts8xTHnl156eDvdVGmQiSAUgrEFHw== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=54.204.34.130; helo=smtpbguseast2.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=54.204.34.130; helo=smtpbguseast2.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) X-Greylist: delayed 72 seconds by postgrey-1.37 at boromir; Mon, 11 Nov 2024 14:23:30 AEDT Received: from smtpbguseast2.qq.com (smtpbguseast2.qq.com [54.204.34.130]) (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 4XmvyV5NDNz2xvF for ; Mon, 11 Nov 2024 14:23:30 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295371t6qpfl3 X-QQ-Originating-IP: hEaHh3itLNXjtnk8YnvUAaD7phrY2EbCwovJpNgObzk= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:22:32 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 7169842749842943046 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 7/8] powerpc/entry: fix 32bit compile issue for common entry Date: Mon, 11 Nov 2024 11:19:38 +0800 Message-ID: <713F5D03CD2B8708+20241111031934.1579-14-luming.yu@shingroup.cn> X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: NWT6b+CD3I3QSY2wyTlQb0OaM02OWqrZCgE4/OKz3sXVaSuuC5kX3PsM Vl46hmNLEKGjGtk+BDwoxOA+YqB0JgFb2VC2aSgr2OtxRGUAFoImlm5ibehmiQaUIPy69ey G+LHUcb/8kirGrsjzJCTd9wo4Ks8Ha98l60ClAhYzFtqM19Poi7fGtWQVsrSIHqKpYWp4Fw p9H1PBVHYp10AtQ2ykxIDZKCBJFO1nv9Cqy63Pqh9Y9+pGcle+ybe757ilJJb2zJkAm/glD jVTsW6CnnBOSfeGsl6JZLeSZ12czXBH8g7oepQOYh5BMQERCuqAwHAAvFTBcUY4AXTsLS75 aRRkEJLPty3I//KQblm/ooAKKPI73Hb6s994NpIDEMcJ1KYVmdsEecE7gDk6aPIcP9sYsmq LcJC8nDsHvuJn9sJNOyljthkbiz5q+0qxyC1+oDAkEKPasUYMXNaueGCOtW4k7MdIWvtEDS D9s21Jb8j2cKfoAZ6eXdbMsijg1+YZ37Sy8pMhPTe6oao+4xQ1H7FNfzNMvpRuwdtK8/pLe 5TxlYcCiLMc8pXTCZ3lhwZ6pbTN2GcSngL4yueelRWoGwr0OlGWs5s3iSsP+hkLCAXGJy4+ goh+7C2+PViYEkF67lQrw2Ar0zBgr1gHX9Fuh5LKhQXpr0WDVp9zGxRuaMfGERHAasIoGZj X62uliWiDJQWv4BJIA5zM/PKrMQfk9H99K0K24f1sohByi9a5IF5Mhiyr3SjSI8f3y/5fcj Yb7QOU484FGg9KV/G0AE2WM0Rl46jyM941K0ELYlPH3WlZK5LvRwyX84zZrAQTd71UvmCef OhALr/t63ULjKcE5gZ9meFJ9SrqNnKKAICW8PuNBZ+saSYEi6v33C+H4nt+A0DMSxZqQ7r8 UivOjJrhsRangoSyz4Iyohmiy2/HqBS58wuuX7nfpTWYsm3GHqMSKg+WRpBxDAfPmFtMS8C b9BBpZY1+ES7RWKVtNCf162k97zxq/vnJM0XCiMPwyFpNUopDvNNpWAQq X-QQ-XMRINFO: MPJ6Tf5t3I/ycC2BItcBVIA= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org fix irqentry in 32bit code path and hw_irq helpers. Signed-off-by: Luming Yu --- arch/powerpc/include/asm/hw_irq.h | 6 ++++++ arch/powerpc/kernel/interrupt.c | 4 ++++ include/linux/entry-common.h | 1 + 3 files changed, 11 insertions(+) diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h index a3d591784c95..99104f95e1d7 100644 --- a/arch/powerpc/include/asm/hw_irq.h +++ b/arch/powerpc/include/asm/hw_irq.h @@ -469,6 +469,12 @@ static inline bool arch_irqs_disabled(void) return arch_irqs_disabled_flags(arch_local_save_flags()); } +/*for common entry*/ +static __always_inline bool regs_irqs_disabled(struct pt_regs *regs) +{ + return arch_irqs_disabled(); +} + #define hard_irq_disable() arch_local_irq_disable() static inline bool arch_irq_disabled_regs(struct pt_regs *regs) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 8e4cabb0c592..31167700f894 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -311,7 +311,9 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs) BUG_ON(regs_is_unrecoverable(regs)); BUG_ON(arch_irq_disabled_regs(regs)); CT_WARN_ON(ct_state() == CONTEXT_USER); +#ifdef CONFIG_PPC64 local_paca->irqentry_s = irqentry_enter(regs); +#endif /* * We don't need to restore AMR on the way back to userspace for KUAP. @@ -424,7 +426,9 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs) * AMR value from the check above. */ kuap_kernel_restore(regs, kuap); +#ifdef CONFIG_PPC64 irqentry_exit(regs, local_paca->irqentry_s); +#endif return ret; } diff --git a/include/linux/entry-common.h b/include/linux/entry-common.h index 6521171469f2..b68eada65a8a 100644 --- a/include/linux/entry-common.h +++ b/include/linux/entry-common.h @@ -8,6 +8,7 @@ #include #include +#include #include /* From patchwork Mon Nov 11 03:19:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luming Yu X-Patchwork-Id: 2009386 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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-3089-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 4Xmvyl4Kndz1xyD for ; Mon, 11 Nov 2024 14:23:43 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [127.0.0.1]) by lists.ozlabs.org (Postfix) with ESMTP id 4Xmvyl2wBQz2yZ5; Mon, 11 Nov 2024 14:23:43 +1100 (AEDT) X-Original-To: linuxppc-dev@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; arc=none smtp.remote-ip=54.254.200.128 ARC-Seal: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295423; cv=none; b=KZzolMoKgCD2R/A7kRH2kVIyQvQFkVwgGs5kHRNbFygfuJF10UgT6JmrZwnCs5F4BzM7EMzs9u7r14MUDXXC02+AZfRRNS1p6c65uPJEU1g4kUgtUFnsWrr52L+NF7cT+vkqLnNvovkklEjmIPyxx8JBxRDv+TtcCha1rCa71k6oy0GtRGid+zRa1y3v/gCb/ztgZyBcgskWD1C4rAEx4sQsO4ZBYzgLfndq187jB8ise4U5Y/KfmCsLf3gZ1pV6Tj2jE8enUcXn9VsostyOCV24vG/yxEVP58LPgxxEZQ7UebBuoDykvKyNKu3+X1LeiEtUpB1wM/mpQP5Xu58u7g== ARC-Message-Signature: i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1731295423; c=relaxed/relaxed; bh=d+wMLfPxNHxJ7phrptyu/3OJ+BH6UzV8ou42vl0csj0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q3LgABnvU8N1f0R5RV5WjJOF3EFV6WOvSEhqcSoyCZKtcWcYDnof7D2OHgjON3LM+NCs29WW7mSLSauj5zNSVHuT4JRK3qzY5vUsQQIZ68arB8fA1dItWiARpoHXtLmvL2aatNXE+1Eo8/C3IvmSPQlO3+j4W1PFZmbI+1m7RjMkECAPWbjcDCxjftX6rZ7PzpVKb/txdqWXiOWs0bgz3dYDlROcEU1xG+OJQcSJgUfwxYUp8tSI9qMi25Uux/wuENcVIEfJS3V63YasgYYL1A6bqpHWpFQuFFoIpYNa/QOeOabiV1p1HU2EiGe8YRLDKu+5mkbBAcY0rYP58+FzPw== ARC-Authentication-Results: i=1; lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn; spf=pass (client-ip=54.254.200.128; helo=smtpbgsg2.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) smtp.mailfrom=shingroup.cn Authentication-Results: lists.ozlabs.org; dmarc=pass (p=none dis=none) header.from=shingroup.cn Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=shingroup.cn (client-ip=54.254.200.128; helo=smtpbgsg2.qq.com; envelope-from=luming.yu@shingroup.cn; receiver=lists.ozlabs.org) Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) (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 4Xmvyk3bZdz2yZ1 for ; Mon, 11 Nov 2024 14:23:42 +1100 (AEDT) X-QQ-mid: bizesmtpsz5t1731295385ts11owj X-QQ-Originating-IP: /GbQ/HB/INrFDZmzy9qkrIEl2FAoqRZXE+uqupwHtag= Received: from HX09040029.powercore.com.cn ( [116.233.136.127]) by bizesmtp.qq.com (ESMTP) with id ; Mon, 11 Nov 2024 11:22:52 +0800 (CST) X-QQ-SSF: 0000000000000000000000000000000 X-QQ-GoodBg: 0 X-BIZMAIL-ID: 8040518500708632268 From: Luming Yu To: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, mpe@ellerman.id.au, npiggin@gmail.com, christophe.leroy@csgroup.eu, luming.yu@gmail.com Cc: Luming Yu Subject: [PATCH v2 8/8] powerpc/entry: fix ppc syscall entry issues for common entry Date: Mon, 11 Nov 2024 11:19:40 +0800 Message-ID: X-Mailer: git-send-email 2.42.0.windows.2 In-Reply-To: <20241111031934.1579-2-luming.yu@shingroup.cn> References: <20241111031934.1579-2-luming.yu@shingroup.cn> X-Mailing-List: linuxppc-dev@lists.ozlabs.org List-Id: List-Help: List-Owner: List-Post: List-Archive: , List-Subscribe: , , List-Unsubscribe: MIME-Version: 1.0 X-QQ-SENDSIZE: 520 Feedback-ID: bizesmtpsz:shingroup.cn:qybglogicsvrgz:qybglogicsvrgz8a-1 X-QQ-XMAILINFO: Mb4RgdP5R+YFL4OWP+Z3hgokEAcqPRcy+45Qc3tKZP7hH8yQB8OrTNzl NX0VKVK5ikOoxEx7IwWfYgJPyf+273ui2Wh8urebXFPzN4IhjpYTxu34MNzcuzo65nXZdKU +VOmtEM977KDmLnyIkq1cnKmu2rKWqbnxcKTzkvcw+VbSiVzN61Ipq1t3TzJUBIfsOjOcFa TjguVfgaMVwAkAkQJcLpa6J5VbqDcnAz5vX9PiKOzPoWclVbcbNBBjqzlZ+zssn2rbem7tE 77saG4z0L8IIlsjN6+oO2YxfUMhxgFQms0RUA0svD3n4yC11K1ihLXhjlyrF3+FBF8w97JV z2kflxt14KxgVO3SsJ1foRgy2me5uS37IUOzdAJl99jVWiIZ06d1yphfUiUVBBm/6WmhADY JysBRNtJi/qBeWS2yUtIhqLg5GmbcX6soe1ZtxnmsyU2N3XaQrMWuusrXsrmwj2ehGGsFpP OmO+ijS8Y/8Y2XIJTbPM3ucIyidyhyRHdPNT0KWaunwjW6H3Q5aORjuK+bBp8DvKOx9wiiO ADvfMcrkZEBUqA/8uSfr87QbLrqk0F+fPbGMb460UZDQn13ZymUGE7VZ91lukbkakHuknVE /UJg8bOBcNBUe/cxiqLJZ/AZOcHOb3JVuzqPPJD3H2l960LJr9IgW2Wtf6l/1tmeI8wsnhd EZtLy4UUBpTz80h0P7vAEafkzH5aW9T307kBqOtvxUdZdDGsdoVJ2JykgD+kwgLxRZh3SkS 2rTc5EWIIBM4yLKkasUOMa2Z8w4LpnAS4spf5SRVPnyHlK5pi0VNjP6yHJ5t4XwSCxOr4dg M+SR6zTUL/kbpQmQ2ladQZJp671FbsOs00h1ihtWrPqzUOeU61vcyvzk24WksFYc5nQ0F2j pZnQo+bSpRV4Us3SbufI7Sl8EwGxdfgvL0m8MQFG750gSGbPTwvAVQV1S5TCN4Y2Wq+kiit dpv1oNJhnymCLkTvhtMoy39KxvtNFaE4RiNClcAkiQApr8L8lOPQ3b3Ma X-QQ-XMRINFO: NI4Ajvh11aEj8Xl/2s1/T8w= X-QQ-RECHKSPAM: 0 X-Spam-Status: No, score=0.0 required=5.0 tests=RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS autolearn=disabled version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on lists.ozlabs.org From: Yu Luming Due to the common layer and internal calls details are hidden from the top level at the call side in ppc arch code, there are some difficulties in preserving all semantics implications of the original code in the patch. e.g when we got -1 returned from syscall_enter_from_user_mode, without touching common code, we have to do our own inference to recover the reasonable route to return, in order to have correct errno and syscall work behaviors,that are tested in seccomp_bpf 98 test cases. Signed-off-by: Luming Yu --- arch/powerpc/kernel/interrupt.c | 4 ++++ arch/powerpc/kernel/syscall.c | 28 +++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index 2a5693b5f336..380697e35d3a 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -232,6 +232,7 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, { unsigned long ti_flags; unsigned long ret = 0; + unsigned long work = READ_ONCE(current_thread_info()->syscall_work); bool is_not_scv = !IS_ENABLED(CONFIG_PPC_BOOK3S_64) || !scv; CT_WARN_ON(ct_state() == CT_STATE_USER); @@ -268,6 +269,9 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3, if (ti_flags & _TIF_SIGPENDING) ret |= _TIF_RESTOREALL; + + if (work) + ret |= _TIF_RESTOREALL; #ifdef CONFIG_PPC64 regs->exit_result = ret; #endif diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c index dabe7f2b4bd4..358340f7fe75 100644 --- a/arch/powerpc/kernel/syscall.c +++ b/arch/powerpc/kernel/syscall.c @@ -18,6 +18,7 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) { long ret; syscall_fn f; + unsigned long work = READ_ONCE(current_thread_info()->syscall_work); kuap_lock(); @@ -119,7 +120,7 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) local_irq_enable(); - if (unlikely(read_thread_flags() & _TIF_SYSCALL_DOTRACE)) { + if (work & SYSCALL_WORK_ENTER) { if (unlikely(trap_is_unsupported_scv(regs))) { /* Unsupported scv vector */ _exception(SIGILL, regs, ILL_ILLOPC, regs->nip); @@ -132,7 +133,32 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0) * and the test against NR_syscalls will fail and the return * value to be used is in regs->gpr[3]. */ + if (test_syscall_work(SECCOMP) && + !test_syscall_work(SYSCALL_EMU)) + regs->gpr[3] = -ENOSYS; r0 = syscall_enter_from_user_mode(regs, r0); + + if (test_syscall_work(SECCOMP)) { + if (r0 != -1) + regs->gpr[3] = regs->orig_gpr3; + else + goto skip; + } + if ((r0 == -1) && (test_syscall_work(SYSCALL_TRACE))) { + goto skip1; + } + if ((r0 == -1) && test_syscall_work(SYSCALL_EMU)) + goto skip; + if (regs->gpr[0] >= NR_syscalls) + goto skip1; + + r0 = regs->gpr[0]; + if (r0 != -1) + goto skip; +skip1: + r0 = -1; + regs->gpr[3] = -ENOSYS; +skip: if (unlikely(r0 >= NR_syscalls)) return regs->gpr[3];