Re: Provide example copy_in_user implementation

Andrew Morton (akpm@digeo.com)
Tue, 24 Jun 2003 03:29:04 -0700


Pavel Machek <pavel@ucw.cz> wrote:
>
> +static inline unsigned long copy_in_user(void *dst, const void *src, unsigned size)
> +{
> + unsigned i, ret;
> + unsigned char c;
> + for (i=0; i<size; i++) {
> + if (copy_from_user(&c, src+i, 1))
> + return size-i;
> + if (copy_to_user(dst+i, &c, 1))
> + return size-i;
> + }
> + return 0;
> +}
> +

I know that this is usually not performance critical, but by gawd that code
is inefficient and bloaty.

It has 18 callsites; it can be put in lib/lib.a:copy_in_user.o. The
access_ok() checks only need to be run once. It can copy a cacheline at a
time.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/