Re: [PATCH v2 2/2] powerpc: Large user copy aware of full:rt:lazy preemption

From: Sebastian Andrzej Siewior
Date: Wed Nov 20 2024 - 03:00:53 EST


On 2024-11-17 00:53:06 [+0530], Shrikanth Hegde wrote:
> Large user copy_to/from (more than 16 bytes) uses vmx instructions to
> speed things up. Once the copy is done, it makes sense to try schedule
> as soon as possible for preemptible kernels. So do this for
> preempt=full/lazy and rt kernel.
>
> Not checking for lazy bit here, since it could lead to unnecessary
> context switches.
>
> Suggested-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> Signed-off-by: Shrikanth Hegde <sshegde@xxxxxxxxxxxxx>
> ---
> arch/powerpc/lib/vmx-helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/powerpc/lib/vmx-helper.c b/arch/powerpc/lib/vmx-helper.c
> index d491da8d1838..58ed6bd613a6 100644
> --- a/arch/powerpc/lib/vmx-helper.c
> +++ b/arch/powerpc/lib/vmx-helper.c
> @@ -45,7 +45,7 @@ int exit_vmx_usercopy(void)
> * set and we are preemptible. The hack here is to schedule a
> * decrementer to fire here and reschedule for us if necessary.
> */
> - if (IS_ENABLED(CONFIG_PREEMPT) && need_resched())
> + if (IS_ENABLED(CONFIG_PREEMPTION) && need_resched())
> set_dec(1);

Now looking at this again there is a comment why preempt_enable() is
bad. An interrupt between preempt_enable_no_resched() and set_dec() is
fine because irq-exit would preempt properly? Regular preemption works
again once copy_to_user() is done? So if you copy 1GiB, you are blocked
for that 1GiB?

> return 0;
> }

Sebastian