All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yury Norov <ynorov@nvidia.com>
To: "Christophe Leroy (CS GROUP)" <chleroy@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Thomas Gleixner <tglx@kernel.org>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	Alice Ryhl <aliceryhl@google.com>,
	Viktor Malik <vmalik@redhat.com>,
	Randy Dunlap <rdunlap@infradead.org>,
	David Laight <david.laight.linux@gmail.com>,
	linux-kernel@vger.kernel.org, Yury Norov <yury.norov@gmail.com>
Subject: Re: [PATCH 2/2] uaccess: minimize INLINE_COPY_USER-related ifdefery
Date: Fri, 24 Apr 2026 15:50:03 -0400	[thread overview]
Message-ID: <aevJa7Gq4U2DvI5C@yury> (raw)
In-Reply-To: <1b04dc17-baa7-47cd-b10a-01ee5a2c79b3@kernel.org>

On Thu, Mar 26, 2026 at 03:15:09PM +0100, Christophe Leroy (CS GROUP) wrote:
> 
> 
> Le 25/03/2026 à 17:33, Yury Norov a écrit :
> > Now that we've got the same knob selecting inline vs outline copy_to_user()
> > and copy_from_user(), we can simplify the corresponding logic in the
> > uaccess.h.
> 
> I think we should get rid of ifdefery completly, see below. And with comment
> to previous patch,
> 
>     __is_defined(INLINE_COPY_TO_USER)
> 
> becomes
> 
>     !IS_ENABLED(CONFIG_ARCH_WANT_OUTLINE_USER_COPY)

It's out of the scope of the series. Feel free to submit a follow-up.

> diff --git a/include/linux/uaccess.h b/include/linux/uaccess.h
> index 327f967a24b8..02a05dd61a77 100644
> --- a/include/linux/uaccess.h
> +++ b/include/linux/uaccess.h
> @@ -190,10 +190,9 @@ _inline_copy_from_user(void *to, const void __user
> *from, unsigned long n)
>  	memset(to + (n - res), 0, res);
>  	return res;
>  }
> -#ifndef INLINE_COPY_FROM_USER
> +
>  extern __must_check unsigned long
>  _copy_from_user(void *, const void __user *, unsigned long);
> -#endif
> 
>  static inline __must_check unsigned long
>  _inline_copy_to_user(void __user *to, const void *from, unsigned long n)
> @@ -207,21 +206,19 @@ _inline_copy_to_user(void __user *to, const void
> *from, unsigned long n)
>  	}
>  	return n;
>  }
> -#ifndef INLINE_COPY_TO_USER
> +
>  extern __must_check unsigned long
>  _copy_to_user(void __user *, const void *, unsigned long);
> -#endif

This declares a function that may have no implementation. It's wrong.

>  static __always_inline unsigned long __must_check
>  copy_from_user_common(void *to, const void __user *from, unsigned long n,
> bool partial)
>  {
>  	if (!check_copy_size(to, n, false))
>  		return n;
> -#ifdef INLINE_COPY_FROM_USER
> -	return _inline_copy_from_user(to, from, n);
> -#else
> -	return _copy_from_user(to, from, n);
> -#endif
> +	if (__is_defined(INLINE_COPY_FROM_USER))
> +		return _inline_copy_from_user(to, from, n);
> +	else
> +		return _copy_from_user(to, from, n);

To me, this is just another form of ifdefery. I prefer to minimize the
number of IS_DEFINED() blocks, just as #ifdef. But it's maybe just me.

Let's merge INLINE_COPY_USER series, and then see how you follow up
would look?

>  }
> 
>  static __always_inline unsigned long __must_check
> @@ -242,11 +239,10 @@ copy_to_user_common(void __user *to, const void *from,
> unsigned long n, bool par
>  	if (!check_copy_size(from, n, true))
>  		return n;
> 
> -#ifdef INLINE_COPY_TO_USER
> -	return _inline_copy_to_user(to, from, n);
> -#else
> -	return _copy_to_user(to, from, n);
> -#endif
> +	if (__is_defined(INLINE_COPY_TO_USER))
> +		return _inline_copy_to_user(to, from, n);
> +	else
> +		return _copy_to_user(to, from, n);
>  }
> 
>  static __always_inline unsigned long __must_check
> 
> 
> Christophe

  reply	other threads:[~2026-04-24 19:50 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-25 16:33 [PATCH 0/2] uaccess: unify inline vs outline copy_{from,to}_user() selection Yury Norov
2026-03-25 16:33 ` [PATCH 1/2] " Yury Norov
2026-03-26 13:44   ` Christophe Leroy (CS GROUP)
2026-03-26 17:29     ` Yury Norov
2026-03-26 17:49       ` Christophe Leroy (CS GROUP)
2026-03-25 16:33 ` [PATCH 2/2] uaccess: minimize INLINE_COPY_USER-related ifdefery Yury Norov
2026-03-26  8:00   ` Alice Ryhl
2026-03-26 14:15   ` Christophe Leroy (CS GROUP)
2026-04-24 19:50     ` Yury Norov [this message]
2026-04-25 10:37       ` Christophe Leroy (CS GROUP)
2026-03-25 23:31 ` [PATCH 0/2] uaccess: unify inline vs outline copy_{from,to}_user() selection Andrew Morton

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=aevJa7Gq4U2DvI5C@yury \
    --to=ynorov@nvidia.com \
    --cc=akpm@linux-foundation.org \
    --cc=aliceryhl@google.com \
    --cc=chleroy@kernel.org \
    --cc=david.laight.linux@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@infradead.org \
    --cc=tglx@kernel.org \
    --cc=vmalik@redhat.com \
    --cc=yury.norov@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.