Messages in this thread | | | Date | Tue, 24 Jun 2003 12:33:08 +0200 | From | Pavel Machek <> | Subject | Re: Provide example copy_in_user implementation |
| |
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/
| |