From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: Arnd Bergmann <arnd@kernel.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>,
"James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>,
Al Viro <viro@zeniv.linux.org.uk>,
Anton Ivanov <anton.ivanov@cambridgegreys.com>,
Brian Cain <bcain@codeaurora.org>,
Chris Zankel <chris@zankel.net>,
Christian Borntraeger <borntraeger@de.ibm.com>,
Christoph Hellwig <hch@lst.de>, Guo Ren <guoren@kernel.org>,
Heiko Carstens <hca@linux.ibm.com>, Helge Deller <deller@gmx.de>,
Jeff Dike <jdike@addtoit.com>,
Linus Walleij <linus.walleij@linaro.org>,
Max Filippov <jcmvbkbc@gmail.com>,
Michal Simek <monstr@monstr.eu>,
Richard Weinberger <richard@nod.at>,
Thomas Bogendoerfer <tsbogend@alpha.franken.de>,
Vasily Gorbik <gor@linux.ibm.com>,
Yoshinori Sato <ysato@users.sourceforge.jp>,
"linux-csky@vger.kernel.org" <linux-csky@vger.kernel.org>,
"linux-hexagon@vger.kernel.org" <linux-hexagon@vger.kernel.org>,
"linux-ia64@vger.kernel.org" <linux-ia64@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-mips@vger.kernel.org" <linux-mips@vger.kernel.org>,
"linux-parisc@vger.kernel.org" <linux-parisc@vger.kernel.org>,
"linux-s390@vger.kernel.org" <linux-s390@vger.kernel.org>,
"linux-snps-arc@lists.infradead.org"
<linux-snps-arc@lists.infradead.org>,
"linux-um@lists.infradead.org" <linux-um@lists.infradead.org>,
"linux-xtensa@linux-xtensa.org" <linux-xtensa@linux-xtensa.org>,
"uclinux-h8-devel@lists.sourceforge.jp"
<uclinux-h8-devel@lists.sourceforge.jp>
Subject: Re: [PATCH v3 4/9] arc: use generic strncpy/strnlen from_user
Date: Thu, 22 Jul 2021 15:34:31 +0000 [thread overview]
Message-ID: <fe655b87-8fbc-101e-7b53-9f2a2887f7df@synopsys.com> (raw)
In-Reply-To: <20210722124814.778059-5-arnd@kernel.org>
On 7/22/21 5:48 AM, Arnd Bergmann wrote:
> From: Arnd Bergmann <arnd@arndb.de>
>
> Remove the arc implemenation of strncpy/strnlen and instead use the
> generic versions. The arc version is fairly slow because it always does
> byte accesses even for aligned data, and its checks for user_addr_max()
> differ from the generic code.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
LGTM. Thx for doing this Arnd !
Acked-by: Vineet Gupta <vgupta@synopsys.com>
-Vineet
> ---
> arch/arc/Kconfig | 2 +
> arch/arc/include/asm/uaccess.h | 83 ++--------------------------------
> arch/arc/mm/extable.c | 12 -----
> 3 files changed, 7 insertions(+), 90 deletions(-)
>
> diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
> index d8f51eb8963b..64e5f9366401 100644
> --- a/arch/arc/Kconfig
> +++ b/arch/arc/Kconfig
> @@ -27,6 +27,8 @@ config ARC
> select GENERIC_PENDING_IRQ if SMP
> select GENERIC_SCHED_CLOCK
> select GENERIC_SMP_IDLE_THREAD
> + select GENERIC_STRNCPY_FROM_USER
> + select GENERIC_STRNLEN_USER
> select HAVE_ARCH_KGDB
> select HAVE_ARCH_TRACEHOOK
> select HAVE_ARCH_TRANSPARENT_HUGEPAGE if ARC_MMU_V4
> diff --git a/arch/arc/include/asm/uaccess.h b/arch/arc/include/asm/uaccess.h
> index 3476348f361e..754a23f26736 100644
> --- a/arch/arc/include/asm/uaccess.h
> +++ b/arch/arc/include/asm/uaccess.h
> @@ -655,96 +655,23 @@ static inline unsigned long __arc_clear_user(void __user *to, unsigned long n)
> return res;
> }
>
> -static inline long
> -__arc_strncpy_from_user(char *dst, const char __user *src, long count)
> -{
> - long res = 0;
> - char val;
> -
> - if (!access_ok(src, 1))
> - return -EFAULT;
> -
> - if (count == 0)
> - return 0;
> -
> - __asm__ __volatile__(
> - " mov lp_count, %5 \n"
> - " lp 3f \n"
> - "1: ldb.ab %3, [%2, 1] \n"
> - " breq.d %3, 0, 3f \n"
> - " stb.ab %3, [%1, 1] \n"
> - " add %0, %0, 1 # Num of NON NULL bytes copied \n"
> - "3: \n"
> - " .section .fixup, \"ax\" \n"
> - " .align 4 \n"
> - "4: mov %0, %4 # sets @res as -EFAULT \n"
> - " j 3b \n"
> - " .previous \n"
> - " .section __ex_table, \"a\" \n"
> - " .align 4 \n"
> - " .word 1b, 4b \n"
> - " .previous \n"
> - : "+r"(res), "+r"(dst), "+r"(src), "=r"(val)
> - : "g"(-EFAULT), "r"(count)
> - : "lp_count", "memory");
> -
> - return res;
> -}
> -
> -static inline long __arc_strnlen_user(const char __user *s, long n)
> -{
> - long res, tmp1, cnt;
> - char val;
> -
> - if (!access_ok(s, 1))
> - return 0;
> -
> - __asm__ __volatile__(
> - " mov %2, %1 \n"
> - "1: ldb.ab %3, [%0, 1] \n"
> - " breq.d %3, 0, 2f \n"
> - " sub.f %2, %2, 1 \n"
> - " bnz 1b \n"
> - " sub %2, %2, 1 \n"
> - "2: sub %0, %1, %2 \n"
> - "3: ;nop \n"
> - " .section .fixup, \"ax\" \n"
> - " .align 4 \n"
> - "4: mov %0, 0 \n"
> - " j 3b \n"
> - " .previous \n"
> - " .section __ex_table, \"a\" \n"
> - " .align 4 \n"
> - " .word 1b, 4b \n"
> - " .previous \n"
> - : "=r"(res), "=r"(tmp1), "=r"(cnt), "=r"(val)
> - : "0"(s), "1"(n)
> - : "memory");
> -
> - return res;
> -}
> -
> #ifndef CONFIG_CC_OPTIMIZE_FOR_SIZE
>
> #define INLINE_COPY_TO_USER
> #define INLINE_COPY_FROM_USER
>
> #define __clear_user(d, n) __arc_clear_user(d, n)
> -#define strncpy_from_user(d, s, n) __arc_strncpy_from_user(d, s, n)
> -#define strnlen_user(s, n) __arc_strnlen_user(s, n)
> #else
> extern unsigned long arc_clear_user_noinline(void __user *to,
> unsigned long n);
> -extern long arc_strncpy_from_user_noinline (char *dst, const char __user *src,
> - long count);
> -extern long arc_strnlen_user_noinline(const char __user *src, long n);
> -
> #define __clear_user(d, n) arc_clear_user_noinline(d, n)
> -#define strncpy_from_user(d, s, n) arc_strncpy_from_user_noinline(d, s, n)
> -#define strnlen_user(s, n) arc_strnlen_user_noinline(s, n)
> -
> #endif
>
> +extern long strncpy_from_user(char *dst, const char __user *src, long count);
> +#define strncpy_from_user(d, s, n) strncpy_from_user(d, s, n)
> +extern long strnlen_user(const char __user *src, long n);
> +#define strnlen_user(s, n) strnlen_user(s, n)
> +
> #include <asm/segment.h>
> #include <asm-generic/uaccess.h>
>
> diff --git a/arch/arc/mm/extable.c b/arch/arc/mm/extable.c
> index b06b09ddf924..4e14c4244ea2 100644
> --- a/arch/arc/mm/extable.c
> +++ b/arch/arc/mm/extable.c
> @@ -32,16 +32,4 @@ unsigned long arc_clear_user_noinline(void __user *to,
> }
> EXPORT_SYMBOL(arc_clear_user_noinline);
>
> -long arc_strncpy_from_user_noinline(char *dst, const char __user *src,
> - long count)
> -{
> - return __arc_strncpy_from_user(dst, src, count);
> -}
> -EXPORT_SYMBOL(arc_strncpy_from_user_noinline);
> -
> -long arc_strnlen_user_noinline(const char __user *src, long n)
> -{
> - return __arc_strnlen_user(src, n);
> -}
> -EXPORT_SYMBOL(arc_strnlen_user_noinline);
> #endif
next prev parent reply other threads:[~2021-07-22 15:34 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-22 12:48 [PATCH v3 0/6] asm-generic: strncpy_from_user/strnlen_user cleanup Arnd Bergmann
2021-07-22 12:48 ` [PATCH v3 1/9] asm-generic/uaccess.h: remove __strncpy_from_user/__strnlen_user Arnd Bergmann
2021-07-22 12:59 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 2/9] h8300: remove stale strncpy_from_user Arnd Bergmann
2021-07-22 12:59 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 3/9] hexagon: use generic strncpy/strnlen from_user Arnd Bergmann
2021-07-22 13:00 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 4/9] arc: " Arnd Bergmann
2021-07-22 13:00 ` Christoph Hellwig
2021-07-22 15:34 ` Vineet Gupta [this message]
2021-07-22 12:48 ` [PATCH v3 5/9] csky: " Arnd Bergmann
2021-07-22 13:01 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 6/9] microblaze: " Arnd Bergmann
2021-07-22 13:01 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 7/9] asm-generic: uaccess: remove inline strncpy_from_user/strnlen_user Arnd Bergmann
2021-07-22 13:02 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 8/9] asm-generic: remove extra strn{cpy_from,len}_user declarations Arnd Bergmann
2021-07-22 13:02 ` Christoph Hellwig
2021-07-22 12:48 ` [PATCH v3 9/9] asm-generic: reverse GENERIC_{STRNCPY_FROM,STRNLEN}_USER symbols Arnd Bergmann
2021-07-22 13:03 ` Christoph Hellwig
2021-07-22 13:57 ` [PATCH v3 9/9] asm-generic: reverse GENERIC_{STRNCPY_FROM, STRNLEN}_USER symbols Johannes Berg
2021-07-22 14:01 ` Arnd Bergmann
2021-07-22 20:07 ` Heiko Carstens
2021-07-23 12:44 ` Arnd Bergmann
2021-07-24 9:44 ` [PATCH v3 9/9] asm-generic: reverse GENERIC_{STRNCPY_FROM,STRNLEN}_USER symbols Geert Uytterhoeven
2021-07-26 8:55 ` Helge Deller
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=fe655b87-8fbc-101e-7b53-9f2a2887f7df@synopsys.com \
--to=vineet.gupta1@synopsys.com \
--cc=James.Bottomley@HansenPartnership.com \
--cc=anton.ivanov@cambridgegreys.com \
--cc=arnd@arndb.de \
--cc=arnd@kernel.org \
--cc=bcain@codeaurora.org \
--cc=borntraeger@de.ibm.com \
--cc=chris@zankel.net \
--cc=deller@gmx.de \
--cc=gor@linux.ibm.com \
--cc=guoren@kernel.org \
--cc=hca@linux.ibm.com \
--cc=hch@lst.de \
--cc=jcmvbkbc@gmail.com \
--cc=jdike@addtoit.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-hexagon@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-snps-arc@lists.infradead.org \
--cc=linux-um@lists.infradead.org \
--cc=linux-xtensa@linux-xtensa.org \
--cc=monstr@monstr.eu \
--cc=richard@nod.at \
--cc=tsbogend@alpha.franken.de \
--cc=uclinux-h8-devel@lists.sourceforge.jp \
--cc=viro@zeniv.linux.org.uk \
--cc=ysato@users.sourceforge.jp \
/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;
as well as URLs for NNTP newsgroup(s).