Re: Provide example copy_in_user implementation

From: Pavel Machek (pavel@suse.cz)
Date: Tue Jun 24 2003 - 05:33:08 EST


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/



This archive was generated by hypermail 2b29 : Mon Jun 30 2003 - 22:00:16 EST