Re: Provide example copy_in_user implementation

Pavel Machek (pavel@suse.cz)
Tue, 24 Jun 2003 12:33:08 +0200


Hi!

> > +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.

It was meant to demonstrate calling convention of copy_in_user();
architectures probably want to modify their copy_from_user to be able
to copy into user, too; usually that can be done at 0 overhead.
Pavel

-- 
When do you have a heart between your knees?
[Johanka's followup: and *two* hearts?]
-
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/