[SLEEPS]
put_user()
and get_user()
are used to get and put single values (such as an int, char, or
long) from and to userspace. A pointer into userspace should
never be simply dereferenced: data should be copied using these
routines. Both return -EFAULT
or 0.
copy_to_user()
and
copy_from_user()
are more general: they copy
an arbitrary amount of data to and from userspace.
Unlike put_user()
and
get_user()
, they return the amount of
uncopied data (ie. 0 still means
success).
[Yes, this moronic interface makes me cringe. The flamewar comes up every year or so. --RR.]
The functions may sleep implicitly. This should never be called outside user context (it makes no sense), with interrupts disabled, or a spinlock held.