On Fri, Apr 25, 2014 at 09:39:57PM +0530, Kumar Gaurav wrote: > I have found some codes in the driver which use put_user() in loop. > Can we avoid the overhead of checking the same memory area( where > put_user() writes) again n again using __put_user() in side loop and > checking permission using access_ok before entering the loop? > if (put_user(type, dst) || > put_user(chs_bytes, dst + 1)) > return -EFAULT; > dst += 2; ^^^^^^^^^ Note that increment. It's *not* "the same memory area" next time around. Sure, you can check the whole range once before the loop and switch the stuff inside to __put_user()/__copy_to_user(), but it's not guaranteed to buy you any speedup. BTW, you might be a bit confused about the work done by access_ok() - e.g. on an architectures with separate kernel and userland MMU contexts it might very well be a no-op (always return true). It's *not* checking if user has permissions of some sort. -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html