mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Shrikanth Hegde <sshegde@linux.ibm.com>
To: Mukesh Kumar Chaurasiya <mkchauras@linux.ibm.com>,
	maddy@linux.ibm.com, mpe@ellerman.id.au, npiggin@gmail.com
Cc: christophe.leroy@csgroup.eu, oleg@redhat.com, kees@kernel.org,
	luto@amacapital.net, wad@chromium.org, mchauras@linux.ibm.com,
	thuth@redhat.com, akpm@linux-foundation.org, macro@orcam.me.uk,
	ldv@strace.io, deller@gmx.de, charlie@rivosinc.com,
	bigeasy@linutronix.de, segher@kernel.crashing.org,
	thomas.weissschuh@linutronix.de, menglong8.dong@gmail.com,
	ankur.a.arora@oracle.com, peterz@infradead.org,
	namcao@linutronix.de, tglx@linutronix.de,
	kan.liang@linux.intel.com, mingo@kernel.org,
	atrajeev@linux.vnet.ibm.com, mark.barnett@arm.com,
	coltonlewis@google.com, rppt@kernel.org,
	linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/8] Generic IRQ entry/exit support for powerpc
Date: Fri, 7 Nov 2025 21:53:13 +0530	[thread overview]
Message-ID: <5a2678a6-66e5-4c15-b95a-ce9f977f79e5@linux.ibm.com> (raw)
In-Reply-To: <20251102115358.1744304-1-mkchauras@linux.ibm.com>



On 11/2/25 5:23 PM, Mukesh Kumar Chaurasiya wrote:
> Adding support for the generic irq entry/exit handling for PowerPC. The
> goal is to bring PowerPC in line with other architectures that already
> use the common irq entry infrastructure, reducing duplicated code and
> making it easier to share future changes in entry/exit paths.
> 
> This is slightly tested of ppc64le and ppc32.
> 
> The performance benchmarks from perf bench basic syscall are below:
> 
> | Metric     | W/O Generic Framework | With Generic Framework | Change |
> | ---------- | --------------------- | ---------------------- | ------ |
> | Total time | 0.939 [sec]           | 0.938 [sec]            | ~0%    |
> | usecs/op   | 0.093900              | 0.093882               | ~0%    |
> | ops/sec    | 1,06,49,615           | 1,06,51,725            | ~0%    |
> 
> Thats very close to performance earlier with arch specific handling.
> 
> Tests done:
>   - Build and boot on ppc64le pseries.
>   - Build and boot on ppc64le powernv8 powernv9 powernv10.
>   - Build and boot on ppc32.
>   - Performance benchmark done with perf syscall basic on pseries.
> 

Hi Mukesh.

The context tracking is not correct.
too many warning when booted with nohz_full=<>

Did some fiddling, but no luck still in avoiding the warnings.
Below helps to boot into atleast (less warning in comparison)

diff --git a/arch/powerpc/include/asm/entry-common.h b/arch/powerpc/include/asm/entry-common.h
index 466cfafc10ad..a66cafc94b5e 100644
--- a/arch/powerpc/include/asm/entry-common.h
+++ b/arch/powerpc/include/asm/entry-common.h
@@ -217,20 +217,11 @@ static inline void arch_interrupt_enter_prepare(struct pt_regs *regs)
  
         if (user_mode(regs)) {
                 kuap_lock();
-               CT_WARN_ON(ct_state() != CT_STATE_USER);
-               user_exit_irqoff();
  
                 account_cpu_user_entry();
                 account_stolen_time();
         } else {
                 kuap_save_and_lock(regs);
-               /*
-                * CT_WARN_ON comes here via program_check_exception,
-                * so avoid recursion.
-                */
-               if (TRAP(regs) != INTERRUPT_PROGRAM)
-                       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, regs_irqs_disabled(regs) &&
                                      search_kernel_restart_table(regs->nip));
diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c
index ce59431f977c..c7cf9a3f1202 100644
--- a/arch/powerpc/kernel/interrupt.c
+++ b/arch/powerpc/kernel/interrupt.c
@@ -118,16 +118,18 @@ notrace unsigned long syscall_exit_prepare(unsigned long r3,
                 regs->exit_flags |= _TIF_RESTOREALL;
         }
  
-again:
+       local_irq_disable();
+
+       user_exit_irqoff();
         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;
-       }
+again:
+       if (!prep_irq_for_enabled_exit(true)) {
+               local_irq_enable();
+               local_irq_disable();
+               goto again;
+       }
+
  
         /* Restore user access locks last */
         kuap_user_restore(regs);
@@ -155,16 +157,15 @@ 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:
+       user_exit_irqoff();
         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;
-       }
+again:
+       if (!prep_irq_for_enabled_exit(true)) {
+               local_irq_enable();
+               local_irq_disable();
+               goto again;
+       }
  
         regs->exit_result |= regs->exit_flags;
  
@@ -178,7 +179,6 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs)
  
         BUG_ON(regs_is_unrecoverable(regs));
         BUG_ON(regs_irqs_disabled(regs));
-       CT_WARN_ON(ct_state() == CT_STATE_USER);
  
         /*
          * We don't need to restore AMR on the way back to userspace for KUAP.
@@ -188,17 +188,17 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs)
  
         local_irq_disable();
         regs->exit_flags = 0;
-again:
+
+       user_exit_irqoff();
         irqentry_exit_to_user_mode(regs);
         check_return_regs_valid(regs);
  
-       user_enter_irqoff();
-       if (!prep_irq_for_enabled_exit(true)) {
-               user_exit_irqoff();
-               local_irq_enable();
-               local_irq_disable();
-               goto again;
-       }
+again:
+       if (!prep_irq_for_enabled_exit(true)) {
+               local_irq_enable();
+               local_irq_disable();
+               goto again;
+       }
  
         /* Restore user access locks last */
         kuap_user_restore(regs);
@@ -222,20 +222,6 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)
  
         if (regs_is_unrecoverable(regs))
                 unrecoverable_exception(regs);
-       /*
-        * CT_WARN_ON comes here via program_check_exception, so avoid
-        * recursion.
-        *
-        * Skip the assertion on PMIs on 64e to work around a problem caused
-        * by NMI PMIs incorrectly taking this interrupt return path, it's
-        * possible for this to hit after interrupt exit to user switches
-        * context to user. See also the comment in the performance monitor
-        * handler in exceptions-64e.S
-        */
-       if (!IS_ENABLED(CONFIG_PPC_BOOK3E_64) &&
-           TRAP(regs) != INTERRUPT_PROGRAM &&
-           TRAP(regs) != INTERRUPT_PERFMON)
-               CT_WARN_ON(ct_state() == CT_STATE_USER);
  
         kuap = kuap_get_and_assert_locked();
  
@@ -316,7 +302,6 @@ notrace unsigned long interrupt_exit_user_restart(struct pt_regs *regs)
  #endif
  
         trace_hardirqs_off();
-       user_exit_irqoff();
         account_cpu_user_entry();
  
         BUG_ON(!user_mode(regs));
diff --git a/arch/powerpc/kernel/syscall.c b/arch/powerpc/kernel/syscall.c
index df1c9a8d62bc..e041b187b1b7 100644
--- a/arch/powerpc/kernel/syscall.c
+++ b/arch/powerpc/kernel/syscall.c
@@ -20,6 +20,9 @@ notrace long system_call_exception(struct pt_regs *regs, unsigned long r0)
         syscall_fn f;
  
         add_random_kstack_offset();
+
+       local_irq_disable();
+       user_enter_irqoff();
         r0 = syscall_enter_from_user_mode(regs, r0);
  
         if (unlikely(r0 >= NR_syscalls)) {

  parent reply	other threads:[~2025-11-07 16:24 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-02 11:53 Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 1/8] powerpc: rename arch_irq_disabled_regs Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 2/8] powerpc: Prepare to build with generic entry/exit framework Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 3/8] powerpc: introduce arch_enter_from_user_mode Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 4/8] powerpc: Introduce syscall exit arch functions Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 5/8] powerpc: add exit_flags field in pt_regs Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 6/8] powerpc: Prepare for IRQ entry exit Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 7/8] powerpc: Enable IRQ generic entry/exit path Mukesh Kumar Chaurasiya
2025-11-02 11:53 ` [PATCH 8/8] powerpc: Enable Generic Entry/Exit for syscalls Mukesh Kumar Chaurasiya
2025-11-07 16:23 ` Shrikanth Hegde [this message]
2025-11-19 17:57   ` [PATCH 0/8] Generic IRQ entry/exit support for powerpc Thomas Gleixner
2025-11-21  5:48     ` Mukesh Kumar Chaurasiya
2025-11-11  4:39 ` Samir M
2025-11-11  5:09   ` Samir M

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5a2678a6-66e5-4c15-b95a-ce9f977f79e5@linux.ibm.com \
    --to=sshegde@linux.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=ankur.a.arora@oracle.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=bigeasy@linutronix.de \
    --cc=charlie@rivosinc.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=coltonlewis@google.com \
    --cc=deller@gmx.de \
    --cc=kan.liang@linux.intel.com \
    --cc=kees@kernel.org \
    --cc=ldv@strace.io \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=luto@amacapital.net \
    --cc=macro@orcam.me.uk \
    --cc=maddy@linux.ibm.com \
    --cc=mark.barnett@arm.com \
    --cc=mchauras@linux.ibm.com \
    --cc=menglong8.dong@gmail.com \
    --cc=mingo@kernel.org \
    --cc=mkchauras@linux.ibm.com \
    --cc=mpe@ellerman.id.au \
    --cc=namcao@linutronix.de \
    --cc=npiggin@gmail.com \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rppt@kernel.org \
    --cc=segher@kernel.crashing.org \
    --cc=tglx@linutronix.de \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=thuth@redhat.com \
    --cc=wad@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®